PyTorch 的 FID 分数
这是 Fréchet Inception Distance 官方实现的 PyTorch 移植版本。 请参阅 https://github.com/bioinf-jku/TTUR 查看使用 Tensorflow 的原始实现。
FID 是衡量两个图像数据集之间相似度的指标。 研究表明,它与人类对视觉质量的判断具有良好的相关性,并且最常用于评估生成对抗网络(Generative Adversarial Networks)样本的质量。 FID 是通过计算拟合到 Inception 网络特征表示的两个高斯分布之间的 Fréchet distance 来计算的。
关于 FID 分数的进一步见解和独立评估,可以在 Are GANs Created Equal? A Large-Scale Study 中找到。
权重和模型与 the official Tensorflow implementation 完全相同,并经过测试,可得出非常相似的结果(例如,在 LSUN 上使用 ProGAN 生成的图像,绝对误差为 .08,相对误差为 0.0009)。然而,由于图像插值实现和库后端的差异,FID 结果仍与原始实现略有不同。因此,如果您在论文中报告 FID 分数,并希望它们与其他论文中报告的 FID 分数完全可比,您应考虑使用 the official Tensorflow implementation。
安装
从 pip 安装:
pip install pytorch-fid
Requirements:
- python3
- pytorch
- torchvision
- pillow
- numpy
- scipy
用法
要计算两个数据集之间的 FID 分数,其中每个数据集的图像包含在单独的文件夹中:
python -m pytorch_fid path/to/dataset1 path/to/dataset2
要在 GPU 上运行评估,请使用标志 --device cuda:N,其中 N 是要使用的 GPU 的索引。
使用不同的层作为特征图
与官方实现不同,您可以选择使用 Inception 网络的不同特征层,而不是默认的 pool3 层。
由于较低层的特征仍然具有空间范围,因此在估计均值和协方差之前,特征首先通过全局平均池化转换为向量。
如果您想要比较的数据集少于通常所需的 2048 张图像,这可能很有用。 请注意,这会改变 FID 分数的量级,您不能将其与在另一个维度上计算得出的分数进行比较。 所得分数也可能不再与视觉质量相关。
您可以使用标志 --dims N 来选择要使用的特征维度,其中 N 是特征的维度。
选项如下:
- 64: 第一个最大池化特征
- 192: 第二个最大池化特征
- 768: 辅助分类器之前的特征
- 2048: 最终平均池化特征(这是默认值)
从数据集生成兼容的 .npz 归档
一个常见的用例是将多个模型与原始数据集进行比较。
为了避免在原始数据集上多次训练,还可以从数据集生成兼容的 .npz 归档。这是通过使用之前提到的任意组合的参数,并添加 --save-stats 标志来实现的。例如:
python -m pytorch_fid --save-stats path/to/dataset path/to/outputfile
然后,输出文件可用于替代原始数据集的路径,以进行进一步的比较。
引用
如果您在研究中使用此仓库,请考虑使用以下 Bibtex 条目进行引用:
@misc{Seitzer2020FID,
author={Maximilian Seitzer},
title={{pytorch-fid: FID Score for PyTorch}},
month={August},
year={2020},
note={Version 0.3.0},
howpublished={\url{https://github.com/mseitzer/pytorch-fid}},
}
许可证
本实现采用 Apache License 2.0 许可。
FID 由 Martin Heusel、Hubert Ramsauer、Thomas Unterthiner、Bernhard Nessler 和 Sepp Hochreiter 在 "GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium" 中提出,参见 https://arxiv.org/abs/1706.08500
原始实现由 JKU Linz 生物信息学研究所提供,采用 Apache License 2.0 许可。 参见 https://github.com/bioinf-jku/TTUR.