lidq92 / WaDIQaM

[unofficial] Pytorch implementation of WaDIQaM in TIP2018, Bosse S. et al. (Deep neural networks for no-reference and full-reference image quality assessment)
127 stars 37 forks source link

您好,感谢您提供的代码~~~这儿我有个小问题 #1

Closed OOOred closed 5 years ago

OOOred commented 5 years ago

在您的test_cross_dataset.py这个测试脚本中最后有个循环
for i in range(len(im_names)): im = Image.open(os.path.join(args.dist_dir, im_names[i])).convert('RGB') ref = Image.open(os.path.join(args.ref_dir, ref_names[i])).convert('RGB') 这个循环是不是只能测试25张有参考的iqa?上述语句中的i是同时在变的,也就是说应该没法儿测试比如第1张参考图像对应第4张失真图像的iqa分数?想跟您确认一下这个点,感谢

lidq92 commented 5 years ago

@OOOred 请你先打开im_names和ref_names看一下,就不会问我这个问题了. 这个测试是整个数据集所有图片都测试了的.

如果是你表达有问题,本来想问WaDIQaM-NR的测试代码的话,简单修改一下就可以的(修改模型为无参考模型,然后不需要读取参考图像就可以了). 这是我很久之前写的了,当时无参考的模型结果没跑到和论文汇报的那么高,所以我在readme注明了只验证了有参考的模型.

OOOred commented 5 years ago

@lidq92 感谢您的回复 可能是我的表述不够准确,因为这个测试中参考图像有25张,失真图像有3000张,所以把他们放在一个循环里如何进行计算呢?比如按照现在的代码输出的第一个分数没有问题(是第一张失真的一个失真类型的一个失真等级对应第一张参考),但是第二个分数就变成了第二张失真对应第二张参考的计算值,这个时候参考图像已经换了内容(由I01.BMP更换为下一张失真图I02.BMP),但是失真图像还是第一张图像的另一个失真等级(由I01_01_1.bmp变成I01_01_2.bmp),两者不是对应的关系,所以输出的分数也和mos值相差很远。这个是我的问题所在,也许是循环本身设计的缺陷,也许是由于我对你的代码理解出了问题,但也希望能得到您的回复,感谢百忙之中对我的解答!再次感谢!

lidq92 commented 5 years ago

@OOOred 谢谢指出, 我后面有人想要测试代码我自己补写的一个传上来的, 忘记加上ref_ids了. 我做一下修改

可以参考我在训练数据集制作的时候的方式 line72-73 in IQADataset.py 我当时存储的ref_names是唯一的, 通过ref_ids映射到和im_names一一对应.

ref_names = [Info[Info['ref_names'][0, :][i]].value.tobytes()[::2].decode() for i in (Info['ref_ids'][0, :]-1).astype(int)]

其实如果不做修改的话,这个跨数据测试的代码运行到i=25就会报错了, 确实是我这里写的ref_names出了点问题.

这是好久之前的代码了,写得不太好,如果有空的话我后期再更新一下吧

OOOred commented 5 years ago

@lidq92 感谢您的思路和贡献!