计算lpips

import os
import torch
import lpips
from PIL import Image
from torchvision.transforms import ToTensor

# 初始化LPIPS模型
loss_fn = lpips.LPIPS(net='vgg')

def calculate_lpips(img_path1, img_path2):
    # 读取图像
    img1 = Image.open(img_path1)
    img2 = Image.open(img_path2)

    # 将图像转换为张量
    img1_tensor = ToTensor()(img1).unsqueeze(0)
    img2_tensor = ToTensor()(img2).unsqueeze(0)

    # 计算LPIPS
    lpips_value = loss_fn(img1_tensor, img2_tensor)

    return lpips_value.item()

# 文件夹路径
folder_path1 = 'your_folder_path1'
folder_path2 = 'your_folder_path2'

# 获取文件夹中的所有图像路径
image_paths1 = [os.path.join(folder_path1, img) for img in os.listdir(folder_path1) if img.endswith('.jpg')]
image_paths2 = [os.path.join(folder_path2, img) for img in os.listdir(folder_path2) if img.endswith('.jpg')]

# 确保两个文件夹中有相同名称的图像
assert set(os.path.basename(p) for p in image_paths1) == set(os.path.basename(p) for p in image_paths2), "The two folders must contain images with the same names."

# 计算并打印所有同名图像对的LPIPS
lpips_values = []
for img_name in os.listdir(folder_path1):
    if img_name.endswith('.jpg'):
        img_path1 = os.path.join(folder_path1, img_name)
        img_path2 = os.path.join(folder_path2, img_name)
        lpips_value = calculate_lpips(img_path1, img_path2)
        lpips_values.append(lpips_value)
        print(f'LPIPS between {img_path1} and {img_path2}: {lpips_value}')

# 计算并打印LPIPS的平均值
average_lpips = sum(lpips_values) / len(lpips_values)
print(f'Average LPIPS: {average_lpips}')

 

posted @ 2024-03-14 11:43  helloWorldhelloWorld  阅读(36)  评论(0编辑  收藏  举报