LPIPS 图像相似性度量标准、感知损失(Perceptual loss)

可学习感知图像块相似度(Learned Perceptual Image Patch Similarity, LPIPS)

 项目主页:https://richzhang.github.io/PerceptualSimilarity/

论文地址:https://arxiv.org/abs/1801.03924

开源代码:https://github.com/richzhang/PerceptualSimilarity


一、图像相似性度量标准LPIPS

计算方法:

LPIPS 是一种衡量图像相似度的方法,它通过深度学习模型来评估两个图像之间的感知差异。LPIPS 认为,即使两个图像在像素级别上非常接近,人类观察者也可能将它们视为不同。因此,LPIPS 使用预训练的深度网络(如 VGG、AlexNet)来提取图像特征,然后计算这些特征之间的距离,以评估图像之间的感知相似度

来源于CVPR2018的一篇论文《The Unreasonable Effectiveness of Deep Features as a Perceptual Metric》,该度量标准学习生成图像到Ground Truth的反向映射强制生成器学习从假图像中重构真实图像的反向映射,并优先处理它们之间的感知相似度。LPIPS 比传统方法(比如L2/PSNR, SSIM, FSIM)更符合人类的感知情况LPIPS的值越低表示两张图像越相似,反之,则差异越大。

将左右的两个图像块和中间的图像块进行比较:

         如图表示,每一组有三张图片,由传统的评价标准如L2、SSIM、PSNR等评价结果和人体认为的大不相同,这是传统方法的弊端。如果图片平滑,那么传统的评价方式则大概率会失效。而目前GAN尤其是VAE等生成模型生成结果都过于平滑。 而最后三行的评价为深度学习的方式,可以看到,通过神经网络(非监督、自监督、监督模型)提取特征的方式,并对特征差异进行计算能够有效进行评价,而且能够和人体评价相似。【LPIPS 比传统方法(比如L2/PSNR, SSIM, FSIM)更符合人类的感知情况。】

代码

★ 完整的PSNR + SSIM + LPIPS 代码看:图像质量评价指标: PSNR 和 SSIM 和 LPIPS_马鹏森的博客-CSDN博客_psnr范围

需要先安装lpips:

pip install lpips

command:python lpips_2dirs.py -dir0 ./input_images -dir1 ./output_images

import argparse
import os
import lpips

parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--dir0', type=str, default='./input_images')
parser.add_argument('--dir1', type=str, default='./output_images')
parser.add_argument('-v','--version', type=str, default='0.1')
opt = parser.parse_args()

## Initializing the model
loss_fn = lpips.LPIPS(net='alex', version=opt.version)

# the total list of images
files = os.listdir(opt.dir0)
i = 0
total_lpips_distance = 0
average_lpips_distance = 0
for file in files:

	try:
		# Load images
		img0 = lpips.im2tensor(lpips.load_image(os.path.join(opt.dir0,file)))
		img1 = lpips.im2tensor(lpips.load_image(os.path.join(opt.dir1,file)))

		if (os.path.exists(os.path.join(opt.dir0, file)), os.path.exists(os.path.join(opt.dir1, file))):
			i = i + 1

		# Compute distance
		current_lpips_distance = loss_fn.forward(img0, img1)
		total_lpips_distance = total_lpips_distance + current_lpips_distance

		print('%s: %.3f'%(file, current_lpips_distance))

	except Exception as e:
		print(e)

average_lpips_distance = float(total_lpips_distance) / i

print("The processed iamges is ", i , "and the average_lpips_distance is: %.3f" %average_lpips_distance)

文件夹目录为:

 注意:其中“input_images”和“output_images”中的文件名要一一对应,它们的名字要相同,也就是“input_images”中的1.png和“output_images”中的1.png进行求LPIPS

二、感知损失(Perceptual loss)

计算方法:

感知损失通常用于图像重建或生成任务中,如风格迁移、超分辨率等,其目的是使生成的图像在感知上更接近目标图像。感知损失通过使用深度网络(如 VGG)的中间层激活来比较原始图像和生成图像。不同于直接比较像素值,感知损失关注于图像的高级特征(如纹理、形状等),这更接近于人类的视觉感知。

两者之间的关系

相同点:

  1. 目标相似性:两者都旨在通过深度学习模型捕捉图像的感知质量,更接近人类的视觉系统。
  2. 实现方式:它们都使用了深度卷积网络(如 VGG)来提取图像的特征表示。这些网络经过训练能够捕捉到图像的关键视觉特征,从而用于计算图像间的差异或相似性。

不同点:

  1. 应用场景的差异:尽管两者在理论上都关注于感知质量,但LPIPS更多用于评估图像相似度,如图像质量评估任务,而感知损失通常作为一种损失函数来使用,广泛应用于图像生成和重建任务,帮助生成的图像在感知上更加自然和真实。

LPIPS图像相似性度量标准:The Unreasonable Effectiveness of Deep Features as a Perceptual Metric_Alocus_的博客-CSDN博客_lpips

有真实参照的图像质量的客观评估指标:SSIM、PSNR和LPIPS - 知乎

  • 39
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马鹏森

太谢谢了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值