LTH14 / rcg

PyTorch implementation of RCG https://arxiv.org/abs/2312.03701
MIT License
785 stars 36 forks source link

question about FID cal rules #31

Closed mapengsen closed 3 months ago

mapengsen commented 3 months ago

请问在您计算FID的时候,是计算的FID-50k的数值吗? 这里的FID-50k是指的随机生成50000张图像,然后和所有训练集(一百多万张图像)求FID?还是和训练集中的50000张图像求FID呢?

非常期待,感谢您的回复!

LTH14 commented 3 months ago

目前ImageNet上的FID算法一般使用ADM的evaluation metric:他们在ImageNet上计算了mean和covariance并提供了reference batch,这样我们只需要算出生成的50000张图像的mean和covariance再算FID即可。很遗憾,我并不知道他们具体计算mean和variance的细节,所以只能拿他公开的statistics进行计算了。

mapengsen commented 3 months ago

非常感谢您的回复。

https://arxiv.org/pdf/2006.06676
Training Generative Adversarial Networks with Limited Data

我看到了一个实现方式:是生成的50k张图像和训练集的随机选择50k张的图像计算FID

image

LTH14 commented 3 months ago

这是CIFAR-10的实现方式,因为CIFAR-10的训练集一共就50000张。在ImageNet上为了保证与之前工作的公平比较,现在大家一般都使用ADM的reference batch,因为如果不这样的话不同文章使用的ImageNet statistic很可能不一样,导致不同文章的FID无法对比。

mapengsen commented 3 months ago

在stylegan2 ada的代码中: https://github.com/NVlabs/stylegan2-ada-pytorch?tab=readme-ov-file

他们同时比较了50k real images的FID,由于我现在使用的不是imagenet这种标准数据集(自己自定义的数据集),由于没有参考标准,所以我感觉让生成的50k张图像与训练集中随机选择的50k张图像进行FID的计算应该可以吧~ image

LTH14 commented 3 months ago

没错,如果你自己定义的数据集,可以考虑与训练集的50k张图像进行对比。不过我觉得也可以考虑像ADM一样,算出一个整个训练集的statistics。这样做的好处是移除了随机选择50k图像里的随机性对FID的影响(可能不同的50K图像会导致细微不一样的FID)

LTH14 commented 3 months ago

不过如果你的训练集是imbalance的(不同类的个数不一样),那可能也需要相应进行调整(比如每个类选一样个数的图像)

mapengsen commented 3 months ago

非常感谢您的回复,我也是这么认为的,太谢谢您了 :blush: