亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

pytorch?ssim計(jì)算詳細(xì)代碼例子

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

前言

在PyTorch中,可以使用 torchvision 庫中的 SSIM 函數(shù)來計(jì)算結(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:滑動(dòng)窗口的大小。
  • win_sigma:滑動(dòng)窗口的高斯核標(biāo)準(zhǔn)差。
  • k1、k2:SSIM計(jì)算公式中的常數(shù)。
  • nonnegative_ssim:是否將SSIM限制在非負(fù)數(shù)范圍內(nèi)。
  • eps:數(shù)值穩(wěn)定性的參數(shù)。
  • reduction:用于計(jì)算損失的降維方法,可以取值為 mean、sum 或 none。

下面是一個(gè)使用 SSIM 函數(shù)計(jì)算兩張圖片的 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)

# 計(jì)算 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 對(duì)象轉(zhuǎn)換為 PyTorch 張量。

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

使用skimage計(jì)算

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)相似性指標(biāo))是一種用于測(cè)量圖像質(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是一種相對(duì)度量,而不是絕對(duì)度量。這意味著SSIM值的實(shí)際意義取決于它與其他圖像的比較結(jié)果。因此,在評(píng)估圖像質(zhì)量時(shí),應(yīng)該使用多個(gè)SSIM值進(jìn)行比較,以便得出更準(zhǔn)確的結(jié)論。

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

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

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

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

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

import torch
import torch.nn.functional as F

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

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

print(loss)

總結(jié)

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

相關(guān)文章

  • Django項(xiàng)目如何獲得SSL證書與配置HTTPS

    Django項(xiàng)目如何獲得SSL證書與配置HTTPS

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

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

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

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

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

    Tensorflow模型實(shí)現(xiàn)預(yù)測(cè)或識(shí)別單張圖片

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

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

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

    FFrpc python客戶端lib使用解析

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

    詳解Python多線程下的list

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

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

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

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

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

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

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

最新評(píng)論