可学习感知图像块相似度(Learned Perceptual Image Patch Similarity, LPIPS)
** 项目主页:**https://richzhang.github.io/PerceptualSimilarity/
论文地址:https://arxiv.org/abs/1801.03924
开源代码:https://github.com/richzhang/PerceptualSimilarity
可学习感知图像块相似度(Learned Perceptual Image Patch Similarity, LPIPS)也称为“感知损失”(perceptual loss),用于度量两张图像之间的差别。
来源于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
LPIPS图像相似性度量标准:The Unreasonable Effectiveness of Deep Features as a Perceptual Metric_Alocus_的博客-CSDN博客_lpips
有真实参照的图像质量的客观评估指标:SSIM、PSNR和LPIPS - 知乎
版权归原作者 Pengsen Ma 所有, 如有侵权,请联系我们删除。