NeRF常用评价指标:PSNR、SSIM、LPIPS详解

在b站看了up主:意の茗 的讲解视频,也查阅了LPIPS文献原文,做了如下笔记总结。
视频链接

PSNR 峰值信噪比

Peak signal to noise ratio

  • 衡量了一张噪声图像和一张干净图像的差异
    峰值信噪比涉及到均方误差MSE:
    M S E = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 MSE = \frac{1}{mn}\sum_{i=0} ^{m-1}\sum_{j = 0}^{n-1}[I(i,j)-K(i,j)]^2 MSE=mn1i=0m1j=0n1[I(i,j)K(i,j)]2
    其中I指干净图像,K指噪声图像,i,j指像素坐标,图像尺寸大小为m*n
    然后,有
    P S N R = 10 ⋅ log ⁡ 10 ( M A X I 2 M S E ) PSNR = 10 \cdot \log_{10}{(\frac{MAX^2_I}{MSE})} PSNR=10log10(MSEMAXI2)
    其中,MAX是动态范围的最大值,即某点(i,j)像素范围的最大值,如果图象是8位的,则这个值为 2 8 − 1 = 255 2^8-1=255 281=255
    两张图象的差异越小,MSE越小, PSNR就越大,图像质量越好

SSIM 结构相似性

Structural Similarity Index Measure

  • 衡量了两张图片之间的相似程度/衡量图片的失真程度
    比如下面这一组图片,当MSE相同时,不同的SSIM图片展现的效果是不一样的。
    在这里插入图片描述
SSIM
亮度
对比度
结构

后续再补充

LPIPS 学习感知图像块相似度

Learned Perceptual Image Patch Similarity

2018CVPR:The Unreasonable Effectiveness of Deep Features as a Perceptual Metric
项目主页
题目中所说的“Unreasonable Effectiveness”指在监督、自监督、无监督模型上得到的深度特征在模拟低层次感知相似性上都比以往广泛使用的方法(例如L2、SSIM等)的表现要好,而且适用于不同的网络结构(SqueezeNet、AlexNet、VGG)。

文章开头便附图表明了:广泛使用的L2/PSNR、SSIM、FSIM指标在判断图片的感知相似度时给出了与人类感知相违背的结论,而相比之下,基于学习的感知相似度度量要更符合人类的感知。
在这里插入图片描述
本文提出了一个新的人类感知相似性判断数据集,系统地评估不同结构和任务的深层特征并将其与传统的指标进行比较,最终发现深度特征要比以往的特征表现出色,而且这一结果在多种不同的结构和监督级别上都适用。

首先第一行用的Human人的直观感受,第二行是一些基于几何的相似度方法, 他们和人的感受相反。
这些几何评价指标对平滑的图像会失效,18年GAN很火,但是生成的图像过于平滑,所以需要解决平滑的图像的相似度评价的问题。后面作者发现用深度网络来比较图片,无论是无监督,自监督和有监督条件都能得到和人直觉相符合的结果都可以得到和人的直觉相同的结果。所以作者认为在深度特征层面进行比较更符合人类的感知。这篇文章提出的方法就是LPIPS.
在这里插入图片描述

计算流程,把需要对比的x和x0输入到网络F里面,这个F可以是简单的VGG网络或者是Alexnet,把每一层经过激活函数之后的输出都拿出来,normalize归一化,再经过w层给—个权重,求两个网络各层特征向量之间的L2误差,最后对所有层的误差取平均,得到相似度d0,图像相似度越低,深度特征之间的差异越大,d0 即LPIPS的输出结果就越大,所以LPIPS越小越好

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
LPIPS(Learned Perceptual Image Patch Similarity)是一种用于衡量图像质量感知相似度的指标。它通过深度学习模型学习不同图像之间的感知差异,判断它们在视觉上的相似度。 在Python中,我们可以使用LPIPS指标来比较两个图像的相似度。首先,我们需要安装PyTorch和LPIPS库。然后,我们可以使用以下代码进行比较: ```python import lpips # 加载LPIPS模型 model = lpips.LPIPS(net='alex') # 加载两张图像 image1 = lpips.im2tensor(lpips.load_image('image1.jpg')) image2 = lpips.im2tensor(lpips.load_image('image2.jpg')) # 将图像传入模型进行相似度计算 distance = model.forward(image1, image2) # 打印结果 print("两张图像的相似度为:", distance.item()) ``` 在上述代码中,首先我们使用`lpips.LPIPS`函数加载LPIPS模型。然后,我们使用`lpips.load_image`函数加载两张图像,并使用`lpips.im2tensor`函数将图像转化为张量。最后,我们将两张图像的张量传入LPIPS模型的`forward`函数中,得到相似度的评分。通过`distance.item()`可以获得相似度的具体数值。 需要注意的是,在使用LPIPS之前,我们需要将图像转化为合适的尺寸。在实际使用过程中,我们可以根据需要调整图像的尺寸、裁剪或填充以适应模型的输入要求。 总之,通过使用LPIPS指标,我们可以在Python中计算图像的相似度,从而对图像质量感知进行量化评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值