欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pytorch?ssim計算詳細代碼例子

 更新時間:2023年12月18日 08:26:41   作者:櫻木之  
這篇文章主要給大家介紹了關(guān)于pytorch?ssim計算的相關(guān)資料,結(jié)構(gòu)相似性(SSIM)是一種測量兩幅圖像的相似度的方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

在PyTorch中,可以使用 torchvision 庫中的 SSIM 函數(shù)來計算結(jié)構(gòu)相似性指數(shù) (SSIM)。

SSIM 函數(shù)的簽名如下:

torchvision.metrics.SSIM(data_range: Union[int, float] = 1, win_size: int = 11, win_sigma: float = 1.5, k1: float = 0.01, k2: float = 0.03, nonnegative_ssim: bool = False, eps: float = 1e-8, reduction: str = 'mean')

其中,參數(shù)的含義如下:

  • data_range:輸入數(shù)據(jù)的范圍,通常為1.0或255.0。
  • win_size:滑動窗口的大小。
  • win_sigma:滑動窗口的高斯核標準差。
  • k1、k2:SSIM計算公式中的常數(shù)。
  • nonnegative_ssim:是否將SSIM限制在非負數(shù)范圍內(nèi)。
  • eps:數(shù)值穩(wěn)定性的參數(shù)。
  • reduction:用于計算損失的降維方法,可以取值為 mean、sum 或 none。

下面是一個使用 SSIM 函數(shù)計算兩張圖片的 SSIM 值的例子:

import torch
import torchvision.transforms.functional as F
import torchvision.metrics as metrics

# 讀取兩張圖片
img1 = F.to_tensor(F.resize(F.pil_loader('img1.jpg'), (256, 256))).unsqueeze(0)
img2 = F.to_tensor(F.resize(F.pil_loader('img2.jpg'), (256, 256))).unsqueeze(0)

# 計算 SSIM
ssim = metrics.SSIM(data_range=1.0, win_size=11, win_sigma=1.5, k1=0.01, k2=0.03, eps=1e-8, reduction='mean')
print(ssim(img1, img2))

其中,img1.jpg 和 img2.jpg 是兩張待比較的圖片。首先使用 pil_loader 函數(shù)讀取圖片,然后使用 resize 函數(shù)將圖片大小調(diào)整為256x256,最后使用 to_tensor 函數(shù)將 PIL.Image 對象轉(zhuǎn)換為 PyTorch 張量。

在計算 SSIM 值時,我們需要先創(chuàng)建一個 SSIM 對象,然后將兩張圖片作為參數(shù)傳入即可。計算結(jié)果將會是一個標量張量

使用skimage計算

from skimage.measure import compare_ssim as ssim


def ssim_metric(target: object, prediction: object, win_size: int=21):
    """
    introduce:
        calculate ssim.
        
    args:
        :param ndarray target: target, like ndarray[256, 256].
        :param ndarray prediction: prediction, like ndarray[256, 256].
        :param int win_size: default.
    
    return:
        :param float cur_ssim: return ssim, between [-1, 1], like 0.72.
    """
    cur_ssim = ssim(
        target,
        prediction,
        win_size=win_size,
        data_range=target.max() - target.min(),
    )

    return cur_ssim

SSIM取值范圍

SSIM(結(jié)構(gòu)相似性指標)是一種用于測量圖像質(zhì)量的方法,其取值范圍為-1到1之間,其中1表示兩幅圖像完全相同,-1表示兩幅圖像完全不同。通常情況下,SSIM值越高,表示兩幅圖像越相似,質(zhì)量也越好。常見的SSIM取值范圍如下:

1:完美匹配
0.9 - 1:非常好
0.7 - 0.9:良好
0.5 - 0.7:一般
0.3 - 0.5:差
0 - 0.3:非常差

需要注意的是,SSIM是一種相對度量,而不是絕對度量。這意味著SSIM值的實際意義取決于它與其他圖像的比較結(jié)果。因此,在評估圖像質(zhì)量時,應該使用多個SSIM值進行比較,以便得出更準確的結(jié)論。

關(guān)于取到負數(shù):SSIM(結(jié)構(gòu)相似性指標)可以取到負數(shù)。SSIM的取值范圍是-1到1之間,其中1表示兩幅圖像完全相同,0表示兩幅圖像沒有相似性,而-1表示兩幅圖像完全不同。在實際應用中,SSIM值通常是在0到1之間,表示圖像的相似度越高,SSIM值越接近1。但是,在一些情況下,SSIM值可能會低于0,這通常發(fā)生在比較的兩幅圖像之一具有負值像素時。在這種情況下,SSIM將返回一個負數(shù)。因此,當使用SSIM作為圖像質(zhì)量度量時,需要注意檢查SSIM值是否為負,并對其進行解釋。

附:PyTorch中的SSIM損失函數(shù)的參數(shù)

F.ssim_loss函數(shù)有一些可選參數(shù),可以用于調(diào)整計算SSIM損失的方式。下面是一些常用參數(shù)的說明:

  • data_range:指定圖像像素值的范圍,默認為1.0。如果圖像像素值在0到1之間,可以保持默認值。
  • size_average:指定是否對每個像素的SSIM進行平均,默認為True。如果設(shè)置為False,將返回每個像素的SSIM值。

例如,如果想計算每個像素的SSIM值,并且圖像像素值范圍在0到255之間,可以使用以下代碼:

import torch
import torch.nn.functional as F

# 隨機生成兩個圖像,假設(shè)圖像大小為256x256
x = torch.rand((1, 3, 256, 256))
y = torch.rand((1, 3, 256, 256))

# 計算每個像素的SSIM損失,圖像像素值范圍為0到255
loss = 1 - F.ssim_loss(x, y, data_range=255, size_average=False)

print(loss)

總結(jié)

到此這篇關(guān)于pytorch ssim計算的文章就介紹到這了,更多相關(guān)pytorch ssim計算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django項目如何獲得SSL證書與配置HTTPS

    Django項目如何獲得SSL證書與配置HTTPS

    本文總結(jié)了如何獲得SSL證書并給Django項目配置HTTPS,建議先收藏再閱讀,將來有一天你很可能會用到它。
    2021-04-04
  • TensorFlow實現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡(luò)

    TensorFlow實現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡(luò)

    這篇文章主要介紹了TensorFlow實現(xiàn)RNN循環(huán)神經(jīng)網(wǎng)絡(luò),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • django的csrf實現(xiàn)過程詳解

    django的csrf實現(xiàn)過程詳解

    這篇文章主要介紹了django的csrf實現(xiàn)過程相加,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Tensorflow模型實現(xiàn)預測或識別單張圖片

    Tensorflow模型實現(xiàn)預測或識別單張圖片

    這篇文章主要為大家詳細介紹了Tensorflow模型實現(xiàn)預測或識別單張圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python3 中作為一等對象的函數(shù)解析

    Python3 中作為一等對象的函數(shù)解析

    這篇文章主要介紹了Python3 中作為一等對象的函數(shù),本文通過實例代碼講解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • FFrpc python客戶端lib使用解析

    FFrpc python客戶端lib使用解析

    這篇文章主要介紹了FFrpc python客戶端lib使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 詳解Python多線程下的list

    詳解Python多線程下的list

    這篇文章主要介紹了Python多線程下的list的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • Python利用ansible分發(fā)處理任務

    Python利用ansible分發(fā)處理任務

    這篇文章主要介紹了Python利用ansible分發(fā)處理任務的相關(guān)資料,需要的朋友可以參考下
    2015-08-08
  • Python實現(xiàn)合并兩個列表的方法分析

    Python實現(xiàn)合并兩個列表的方法分析

    這篇文章主要介紹了Python實現(xiàn)合并兩個列表的方法,結(jié)合實例形式對比分析了常見的Python列表合并操作技巧,需要的朋友可以參考下
    2018-05-05
  • pytorch中tensor轉(zhuǎn)換為float的實現(xiàn)示例

    pytorch中tensor轉(zhuǎn)換為float的實現(xiàn)示例

    本文主要介紹了pytorch中tensor轉(zhuǎn)換為float,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03

最新評論