本文主要是介绍代码:图像生成任务的平均ssim,psnr,lpips的计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 描述
- 要求
- 核心代码
- ssim
- psnr
- lpips
- 完整代码
描述
图像生成任务的平均ssim,psnr,lpips的计算。pred文件夹有生成的若干图片,gt文件夹真实的若干图片。要求图片名字有相关性。
要求
1.名称对应。名称一样或按照顺序。
2.图片像素MAX值为255。如果是灰度图要调整代码中的255为1.0
3.包版本分别为:
scikit-image 0.18.3
lpips 0.1.4
安装命令:
pip install scikit-image==0.18.3
以及
pip install lpips==0.1.4
核心代码
ssim
ssim_v = ssim(img1_np,img2_np, data_range=255.0, multichannel=True)
psnr
psnr_v = psnr(img1_np,img2_np, data_range=255.0)
lpips
lpips_val = lpips_model.forward(transform(img1_np).cuda(), transform(img2_np).cuda())
完整代码
import os
from tqdm import tqdm
import torch
import numpy as np
import lpips
from torchvision import transforms
lpips_model = lpips.LPIPS(net='alex').cuda()
from skimage.metrics import structural_similarity as ssim
from skimage.metrics import peak_signal_noise_ratio as psnr
test_folder = './test_folder'
out_folder = './out_folder'
ssim_list = []
psnr_list = []
lpip_list = []
img_size = 512
from PIL import Image
transform = transforms.Compose([transforms.ToTensor()])
list1 = sorted(os.listdir(test_folder))
list2 = sorted(os.listdir(out_folder))
for i,j in tqdm(zip(list1,list2),total=len(list1)):img1_path = os.path.join(test_folder,i)img2_path = os.path.join(out_folder,j)# img1 = Image.open(img1_path).convert('L')# img2 = Image.open(img2_path).convert('L')img1 = Image.open(img1_path)img2 = Image.open(img2_path)img1 = img1.resize((img_size,img_size))img2 = img2.resize((img_size,img_size))img1_np = np.array(img1)img2_np = np.array(img2)ssim_v = ssim(img1_np,img2_np, data_range=255.0, multichannel=True)psnr_v = psnr(img1_np,img2_np, data_range=255.0)lpips_val = lpips_model.forward(transform(img1_np).cuda(), transform(img2_np).cuda())ssim_list.append(ssim_v)psnr_list.append(psnr_v)lpip_list.append(lpips_val.item())print('ssim',np.mean(ssim_list))
print('psnr',np.mean(psnr_list))
print('lpips',np.mean(lpip_list))
print('OK')
这篇关于代码:图像生成任务的平均ssim,psnr,lpips的计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!