[FID评测]BK-SDM读图片逻辑-评估结果FID逻辑

以inherit为例

这是借助bksdm的代码用于我的A-sdm的生成
bksdm中2个关键路径是
src/genetate.py
script/eval_scores.sh

一 以generate.py文件进行生成带
借助ms-coco的csv文件里面的30K个提示词和图片名字,来生成图片,并保存

share/huanggao/zjc/code_i2i_ti2/CombineSD_t2i/03_t2i_inherit_metric_coco/01_inherit_inter_dn0up3/generate.py

def parse_args():
    ### data_list
    parser.add_argument("--data_list", type=str, default="/share/huanggao/zjc/code_BK-SDM/BK-SDM-main/data/mscoco_val2014_30k/metadata.csv")  

文件/share/huanggao/xxx/data/mscoco_val2014_30k/metadata.csv

 

CSV文件格式说明(网络距离)

通常CSV文件的第一行包含表格列标签
后面的每一行表示表中的一行。
逗号分隔行中的每个单元格,这就是名称的来源。

下面是一个CSV文件的示例。
该示例有三列,分别标记为name、id和food。
它有五行,包括标题行。

以下是该文件在电子表格中的外观


由于CSV文件只是一个文本文件,你几乎可以在任何文本编辑器中创建一个CSV文件。
你还可以从几乎任何电子表格程序(如Microsoft Word、OpenOffice Calc或Google Sheets)导出CSV文件。

下面是BK-SDM的CSV文件

csv文件读取

file_list = get_file_list_from_csv(args.data_list)
    params_str = pipeline.get_sdm_params()
    
    t0 = time.perf_counter()
    for batch_start in range(0, len(file_list), args.batch_sz):  # 0-文件总数,1个1个取
        batch_end = batch_start + args.batch_sz
        # (i)-> (i+1) 
        img_names = [file_info[0] for file_info in file_list[batch_start: batch_end]]  # 第一个是文件名
        val_prompts = [file_info[1] for file_info in file_list[batch_start: batch_end]] # 第二个是提示此
                    
        imgs = pipeline.generate(prompt = val_prompts,
                                 n_steps = args.num_inference_steps,
                                 img_sz = args.img_sz)  # 提示词、步数、图大小

        for i, (img, img_name, val_prompt) in enumerate(zip(imgs, img_names, val_prompts)):
            img.save(os.path.join(save_dir_im512, img_name)) # img保存
            img.close()
            print(f"{batch_start + i}/{len(file_list)} | {img_name} {val_prompt}")
        print(f"---{params_str}")

0 从csv文件获取提示词和图片名字: metadata.csv -> file_list -> val_prompts, img_names
1 val_prompts作为提示词生成图img
2 生成结果以img_names来进行保存

get_file_list_from_csv来读取csv文件
get_file_list_from_csv(args.data_list)

from utils.misc import get_file_list_from_csv, change_img_size

utils.misc文件里面

import csv
import os
from PIL import Image

def get_file_list_from_csv(csv_file_path):
    file_list = []
    with open(csv_file_path, newline='') as csvfile:
        csv_reader = csv.reader(csvfile)        
        next(csv_reader, None) # Skip the header row
        for row in csv_reader: # (row[0], row[1]) = (img name, txt prompt) 
            file_list.append(row)
    return file_list

def change_img_size(input_folder, output_folder, resz=256):
    img_list = sorted([file for file in os.listdir(input_folder) if file.endswith('.jpg')])
    for i, filename in enumerate(img_list):
        img = Image.open(os.path.join(input_folder, filename))
        img.resize((resz, resz)).save(os.path.join(output_folder, filename))
        img.close()
        if i % 2000 == 0:
            print(f"{i}/{len(img_list)} | {filename}: resize to {resz}")

二 以eval_scores.sh文件进行结果的评估

BK-SDM-main/scripts/eval_scores.sh

GPU_NUM=1
MODEL_ID=xxx_results

MODEL_ID=xxx_results
是评估结果的地址,这个需要就在sh文件当前路径下

IMG_PATH=./results/$MODEL_ID/im256


echo "=== Inception Score (IS) ==="
IS_TXT=./results/$MODEL_ID/im256_is.txt
fidelity --gpu $GPU_NUM --isc --input1 $IMG_PATH | tee $IS_TXT
echo "============"

echo "=== Fréchet Inception Distance (FID) ==="
FID_TXT=./results/$MODEL_ID/im256_fid.txt
NPZ_NAME_gen=./results/$MODEL_ID/im256_fid.npz
NPZ_NAME_real=./data/mscoco_val2014_41k_full/real_im256.npz
CUDA_VISIBLE_DEVICES=$GPU_NUM python3 -m pytorch_fid --save-stats $IMG_PATH $NPZ_NAME_gen
CUDA_VISIBLE_DEVICES=$GPU_NUM python3 -m pytorch_fid $NPZ_NAME_real $NPZ_NAME_gen | tee $FID_TXT
echo "============"

echo "=== CLIP Score ==="
CLIP_TXT=./results/$MODEL_ID/im256_clip.txt
CUDA_VISIBLE_DEVICES=$GPU_NUM python3 src/eval_clip_score.py --img_dir $IMG_PATH --save_txt $CLIP_TXT
echo "============"

FID是用pytorch_fid库进行评测的
下面详解FID的评测方式:
./data/mscoco_val2014_41k_full/real_im256.npz是真实图片



简介版本说明

 

这个npz文件就是对比的真实结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

计算机视觉-Archer

图像分割没有团队的同学可加群

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

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

打赏作者

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

抵扣说明:

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

余额充值