fid-helper-pytorch

Github 仓库地址:https://github.com/One-sixth/fid-helper-pytorch
Gitee 仓库地址:https://gitee.com/ONE_SIX_MIX/fid-helper-pytorch

这是一个FID助手工具。
提供了一个简单方便的接口来计算FID。

仓库使用pytorch jit script来打包模型,包含了一个默认模型。
:default_1 的模型和权重来自 styleganv3 fid tool。

文件夹 make_default_model 包含了默认模型的编译脚本。

我本想实现一个简单的fid工具,但顺便发现了clean-fid和它很棒的效果。
所以顺便追加了clean-fid的计算方式。

他们均有相同的权重,但可能是因为jit包装,计算顺序,随机数相关的的问题,它们的输出均有细微的差异。

支持clean-fid的计算方式同时,我把尽可能多的采样方法涵盖进去,尽管这并没有什么用。(笑)

对了,如果你希望使用最新的pytorch抗锯齿的方法 torch_bilinear_aa 和 torch_bicubic_aa。
你需要更新到 pytorch-1.11 以及更新版本。

一些杂事

原本包含了 3个默认模型。
:default_1 的模型和权重来自 styleganv3 fid tool。
:default_2 的模型和权重来自 pytorch_fid。
:default_3 的模型和权重来自 clean-fid。
但我发现它们是完全一样的,最后我只保留了第一个模型。
第二个和第三个模型你可以在 make_default_model 里面找到它们的构建脚本。

安装

从pip中安装

pip install fid-helper-pytorch

从源码中安装

git clone https://github.com/One-sixth/fid-helper-pytorch
cd fid-helper-pytorch
python setup.py install

构建轮子

git clone https://github.com/One-sixth/fid-helper-pytorch
cd fid-helper-pytorch
python setup.py bdist_wheel
# The wheel that you can found in dist folder.

如何使用

直接比对两个文件夹,默认FID计算方式与pytorch-fid一致。
其中,dir1 和 dir2 都可以是 图片文件夹,图片zip压缩包或统计文件。

# 比较两个文件夹
fid-helper compare dir1 dir2# 比较两个zip压缩包
fid-helper compare dir1.zip dir2.zip# 比较两个统计文件
fid-helper compare dir1_stat.pkl dir2_stat.pkl# 你也可以自由交换它们# 比较文件夹和zip压缩包
fid-helper compare dir1 dir2.zip# 毕竟统计文件和文件夹
fid-helper compare dir1_stat.pkl dir2.zip

给目标图片文件夹,图片压缩包生成统计文件,便于后续快速评估

# 导出文件夹1的统计文件
fid-helper extract dir1 dir1_stat.pkl# 导出压缩包的统计文件
fid-helper extract dir1.zip dir1_stat.pkl# 导出统计文件的统计文件 :)
fid-helper extract dir1_stat.pkl dir1_stat_2.pkl

与其他库进行比较


如果你希望获得与 clean-fid legacy_tensorflow 模式一致的分数
如果你希望获得与 NVlabs/stylegan3’s FID tool 一致的分数

fid-helper-pytorch compare folder1 folder2

or

fid-helper-pytorch --model=:default_1 --resample=nv_bilinear_float --field tf compare folder1 folder2

如果你希望获得与 pytorch-fid 一致的分数。
如果你希望获得与 clean-fid legacy_pytorch 模式一致的分数。
or

fid-helper-pytorch --model=:default_1 --resample=torch_bilinear_float --field pt compare folder1 folder2

如果你希望获得与 clean-fid clean 模式一致的分数
clean-fid

fid-helper-pytorch --model=:default_1 --resample=pil_bicubic_float --field tf compare folder1 folder2

or

fid-helper-pytorch --model=:default_1 --resample=torch_bicubic_float --field tf compare folder1 folder2

FID 测试

全部测试数据均生成自 stylegan3。
_gen_sample_from_stylegan3/_gen_sample.py 为测试数据生成源码。
_gen_sample_from_stylegan3/_batch_compare_fid.py 为完整的FID测试。

这是我生成的测试数据。你可以从该测试数据中复现我的结果。
每个压缩包均有 10000 张png图像。

https://anonfiles.com/dfDej8Oaxe/sample_1_zip
https://anonfiles.com/V3N5j6O1x3/sample_2_zip

分数比较

更详细的数据你可以在这里找到 compare.txt

--
# pytorch-fid
3.772843757504859# clean-fid mode=legacy_pytorch
3.772843691229639# fid-helper-pytorch model=:default_1 input_range=pytorch resample=torch_bilinear_float
3.7728430784583953---
# clean-fid mode=clean
3.7965344580221654# fid-helper-pytorch model=:default_1 input_range=tf resample=pil_bicubic_float
3.79653415593325# fid-helper-pytorch model=:default_1 input_range=tf resample=torch_bicubic_aa_float
3.7965341239671466---
# clean-fid mode=legacy_tensorflow
3.773897315245904# stylegan3 fid tool
none. please see clean-fid legacy_tensorflow# fid-helper-pytorch model=:default_1 input_range=tf resample=nv_bilinear_float
3.7738974250271213---

应用内FID计算

Example_1 Compute fid by yourself.


import numpy as np
from fid_helper_pytorch import FidHelper, INPUT_RANGE_TFfidhelper = FidHelper(':default_1', INPUT_RANGE_TF, resample_mode='nv_bilinear_float', device='cuda:0')# Compute real image stat by yourself.
fidhelper.begin_ref_stat()
for _ in range(16):batch_image = np.random.randint(0, 255, size=[6, 3, 256, 256], dtype=np.uint8)fidhelper.update_ref_stat(batch_image, data_range=(0, 255))fidhelper.finish_ref_stat()# Compute fake image stat by yourself.
fidhelper.begin_eval_stat()
for _ in range(16):gen_images = np.random.uniform(-1., 1., size=[18, 3, 256, 256])fidhelper.update_eval_stat(gen_images, data_range=[-1, 1])
fidhelper.finish_eval_stat()# Compute fid.
fid_score = fidhelper.compute_fid_score()
print('FID:', fid_score)

Example_2 Compute stat and fid from folder and cycle.

import torch
from fid_helper_pytorch import FidHelperfidhelper = FidHelper(':default_1')
batch_size = 4
num_workers = 1real_img_dir = 'real_img'# Compute real image stat from image folder.
fidhelper.compute_ref_stat_from_dir(real_img_dir, batch_size=batch_size, num_workers=num_workers)# Compute fake image stat by yourself.
fidhelper.begin_eval_stat()
for _ in range(16):gen_images = torch.rand(size=[18, 3, 256, 256])fidhelper.update_eval_stat(gen_images, data_range=[0, 1])
fidhelper.finish_eval_stat()# Compute fid.
fid_score = fidhelper.compute_fid_score()
print('FID:', fid_score)

Example_3 Compute fid from zip and get last fid.

from fid_helper_pytorch import FidHelperfidhelper = FidHelper(':default_1')
batch_size = 4
num_workers = 1real_img_arc = 'real_img.zip'
fake_img_arc = 'fake_img.zip'# Compute real image stat from image folder.
fid_score = fidhelper.compute_fid_score_from_dir(real_img_arc, fake_img_arc, batch_size=batch_size, num_workers=num_workers, verbose=True)
print('FID:', fid_score)# Compute fid.
fid_score = fidhelper.fid_score
print('last FID:', fid_score)

Example_4 Compute stat and fid from folder.

from fid_helper_pytorch import FidHelperfidhelper = FidHelper(resample_mode='pil_bicubic_float')fake_img_dir = 'fake_img'
real_img_dir = 'real_img'# Compute real image stat from image folder.
fidhelper.compute_ref_stat_from_dir(fake_img_dir, batch_size=16, num_workers=2, verbose=True)# Compute fake image stat from image folder.
fidhelper.compute_eval_stat_from_dir(real_img_dir, batch_size=24, num_workers=3, verbose=True)# Compute fid.
fid_score = fidhelper.compute_fid_score()
print('FID:', fid_score)

Example_5 Compute stat file and save to disk.

from fid_helper_pytorch import FidHelperfidhelper = FidHelper(':default_1')real_img_dir = 'real_img'
fake_img_dir = 'fake_img'# Compute real image stat from image folder.
fidhelper.compute_ref_stat_from_dir(real_img_dir)# Save stat file to disk.
fidhelper.save_ref_stat_dict('out_real_stat.pkl')# Compute fake image stat from image folder.
fidhelper.compute_eval_stat_from_dir(fake_img_dir)# Save stat file to disk.
fidhelper.save_eval_stat_dict('out_fake_stat.pkl')

Example_6 Load stat file and compute fid.

from fid_helper_pytorch import FidHelperfidhelper = FidHelper(':default_1')# Get fake image stat from stat file.
fidhelper.load_ref_stat_dict('fake_stat.pkl')# Get real image stat from stat file.
fidhelper.load_eval_stat_dict('real_stat.pkl')fid_score = fidhelper.compute_fid_score()
print('FID:', fid_score)

Example_7 Change paramters anywhere.

from fid_helper_pytorch import FidHelperfidhelper = FidHelper(':default_1')# Change model anywhere.
fidhelper.load_model('xxx.pt', model_input_range=None)# Change device anywhere.
fidhelper.change_device('cuda:1')# Change model input range anywhere.
fidhelper.change_model_input_range([0, 1])# Change resample_mode anywhere.
fidhelper.change_resample_mode('torch_bilinear_float')# Change resize_hw anywhere.
fidhelper.change_resize_hw([320, 320])

参考引用

非常感谢大佬们的开源仓库,没有他们无私奉献,这个库将不可能存在。
如果你喜欢本仓库,请为下面大佬的仓库star。

https://github.com/mseitzer/pytorch-fid 最流行的pytorch-fid仓库
https://github.com/GaParmar/clean-fid 最新的clean-fid仓库
https://github.com/NVlabs/stylegan3 stylegan3的官方仓库

fid-helper-pytorch 简单易用的 FID 计算工具相关推荐

  1. Maya v1.0.7.0 类似Rolan简洁小巧简单易用的快速启动工具

    Maya 是一款类似Rolan简洁小巧简单易用的快速启动工具,市面上有很多启动工具,如:RunAny ,Lucy快速启动,CLaunch,启动工具 Lily,nTrun,Rolan,音速启动等等多看免 ...

  2. 增长量计算n+1原则_2017国家公务员考试:简单易得分的增长量计算

    2017 国家公务员考试:简单易得分的增长量计算 湖北华图 王单 增长量是公务员考试资料分析模块中常考的一个知识点, 也是一个技巧性非常强的知识 点. 如果没有掌握简便的算法, 那么计算起来的是非常复 ...

  3. Spark Packages寻宝(一):简单易用的数据准备工具Optimus

    作者:李呈祥,花名司麟 ,阿里云智能EMR团队高级技术专家,Apache Hive Committer, Apache Flink Committer,目前主要专注于EMR产品中开源计算引擎的优化工作 ...

  4. Mac简单易用的文本识别工具:TextSniper

    TextSniper是适用于Mac的简单易用的文本识别工具.TextSniper不仅提取屏幕上选定部分内的所有文本,并将其转换为可编辑文本还可以轻松识别图形,数字文档和视频中的文本. 从任何地方提取文 ...

  5. 简单易用的AI桌面工具系列 - 图像生成

    简单易用的AI桌面工具系列 图像生成 文生图:输入提示词,生成图片(仅支持英文) 图生图:根据图片及提示词生成图片 图像无损放大:比如将 512*512 放大到 1024 * 1024 分辨率 512 ...

  6. FineBI:一个简单易用的自助BI工具

    过去,有关企业数据分析的重担都压在IT部门,传统BI分析更多面向的是具有IT背景的人员.但随着业务分析需求的增加,很多公司都希望为业务用户提供自助分析服务,将分析工作落实到业务人员手中.但同时,分析工 ...

  7. 一款简单易用的视频下载工具

    [公众号回复 "1024",免费领取程序员赚钱实操经验] 大家好,我是章鱼猫. 今天推荐的这个项目是「downkyi」,哔哩下载姬,一个简单易用的哔哩哔哩视频下载工具,支持批量下载 ...

  8. 快速上手!7款简单易用的在线绘图工具推荐

    随着科技的迅猛发展,越来越多的工作需要依赖电脑完成,而画图软件已经成为工作中不可或缺的一部分. 从过去简陋的Microsoft Paint到如今功能强大的Adobe Illustrator和即时设计等 ...

  9. 有哪些简单易用的高效办公工具?

    推荐10个非常实用的办公软件和网站. 1.PDF派 PDF派是CleverPDF品牌专为中国地区用户而建立的网站,是一个20合1的好工具,页数少的时候是免费使用! 2.智办事 智办事是第一个提出以&q ...

  10. 一个简单易用的Http访问工具类for Android

    前言 去年(2017)参加服务外包省赛的时候,负责App开发的我遇到了一个小难题--Http请求.虽说已经有成熟的HttpUrlConnection库供使用,但依然感到有些不方便:进行一次简单的请求并 ...

最新文章

  1. Android性能优化之启动优化实战篇,最终入职阿里
  2. EChart中使用地图方式总结(转载)
  3. WPF自定义控件与样式(1)-矢量字体图标(iconfont)
  4. HTML5触摸事件演化tap事件
  5. –is-dba_查询存储–每个DBA的下一代工具
  6. php mysql完整_BBS(php mysql)完整版(七)
  7. “狮”口逃生!长颈鹿勇斗狮群 4小时后脱身
  8. 【python数据分析】亚太地区的商学院(商务与经济统计案例3-3)数据分析
  9. Unix网络编程卷1源代码使用
  10. u8服务器配置维护,u8客户端连接服务器配置
  11. 10道经典java面试题_实习生必问(java基础)
  12. Android 最常用的设计模式八 安卓源码分析—工厂方法模式factory
  13. 什么是服务器防护,什么是硬防?什么是软防?
  14. 四六级英语听力软件测试,三款精品英语听力软件,提高四六级听力有诀窍
  15. 阿根廷-10月摩托车行业实现正增长(+23.4%)
  16. 裸机服务器装系统步骤,组装裸机如何装系统?
  17. Hive之数据类型、查询操作
  18. oracle 字符替换
  19. 双十一在即,阿里的七种武器
  20. Android中的PendingIntent 原理

热门文章

  1. java 手机推荐_Java一样也智能 中低端手机上网助手推荐
  2. ora-00959(表空间不存在) 的另一种可能性
  3. 45、backtrader的一些基本概念---佣金(commission)的设置
  4. 兔兔 的 题解 —— 2020 CSP-J 多校赛 目录
  5. 卡诺图化简 之 和之积形式 与 积之和形式
  6. Visio如何裁剪图片
  7. 以太网介绍及硬件设计
  8. Java 并发编程:轻量级锁和偏向锁详解
  9. win10计算机名访问win7,实现Win10与Win7局域网共享,教你这招
  10. Unity3D中常用的物理学公式