代码:图像生成任务的平均ssim,psnr,lpips的计算

2024-06-01 05:44

本文主要是介绍代码:图像生成任务的平均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的计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020135

相关文章

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型