Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在tid2013上fine-tune时数据的设置 #45

Open
InspirationMy opened this issue Apr 23, 2020 · 6 comments
Open

在tid2013上fine-tune时数据的设置 #45

InspirationMy opened this issue Apr 23, 2020 · 6 comments

Comments

@InspirationMy
Copy link

你好
./data/generate_ft_txt_tid2013.py
程序中的
Num_tr = 19
Num_te = 5

这里我有些疑问,tid2013里面有25类图像
按照程序中的设置,他其实只是随机选取了其中的24类
请问,是在这里需要修改一下,还是我程序理解错了?

@xialeiliu
Copy link
Owner

其中一张图我记得是人造图,所以没用

@InspirationMy
Copy link
Author

不好意思再打扰一下,我有些地方没弄明白,希望能请教一下
因为是菜鸟,有些问题可能比较白痴,望见谅

1.在由Places生成的排序数据集中
/data/rank_tid2013/tid2013_generator.m中,是产生17种类型的失真,每种类型有 4个等级。
/src/data_layer/rank_layer_tid2013.py中,相应的参数则是表示有18种类型的失真,每种类型有5个等级。针对这点我有下面两个问题
1)rank_layer_tid2013.py中相应的参数是否需要改动?
2)我也看了下仓库中的/data/tid2013_train.txt文件,发现确实是18种类型的失真以及5个等级,但在每种失真图像的信息前都有原图像的信息。而在
/src/data_layer/rank_layer_tid2013.py的_get_next_minibatch_inds(self)中
Num = len(self.scores)/dis/level
我猜想这里的Num应该是想表示训练集中有多少个不同种类的照片(原图与相应的失真图像算在一个种类),但是由于之前所说的txt文件中重复出现了18次原图信息,所以我觉得这里的Num值并没有实际意义。这点我很困惑,不知道为什么这样设置Num

2.由于之前没有接触过caffe和c++,所以网络中的两个python层我在看代码的时候感觉很困难,特别是像top[0].data[...] = np.sum(self.loss)/bottom[0].num这种,其中的data[...]我不知道是什么意思。现在问题就是不知道该怎么学,如果作者能提供一些相关的学习资料我将十分感激。目前正在看caffe的相关书籍,可是里面有大量的c++源码,我看起来很吃力。(也在看c++ primer)

3.关于Siamse网络
这些问题大部分是由于我没太看懂/src/data_layer/rank_layer_tid2013.py和/src/MyLossLayer/netloss_tid2013.py。
1)首先是Siamse的输出,我也看过之前的一些issue,知道输出应该就是类似于图像的MOS值。那么如果是这样的话,在排序数据集中原图的分数为0,失真等级越高,分数越高,这和tid2013给出的得分情况是刚好相反的。为什么在排序数据集中训练出的网络在还没有fine tune的时候能在tid2013上表现这么好?是因为我深度学习的知识比较欠缺吗?如果是,那么我现在该看哪一方面的参考资料?
2)论文中3.3提到的,在最后计算损失函数之前加了一层网络来产生pairs,这个网络就是前面的netloss_tid2013.py中定义的网络吗?

(方便的话,后续能否与您通过gmail或微信联络)

@InspirationMy InspirationMy reopened this May 1, 2020
@xialeiliu
Copy link
Owner

  1. Num = len(self.scores)/dis/level
    其中Num就是我想知道总共有多少张图片,因为我的txt是提前制备好的,这样的话我就可以取不同的失真等级。
  2. tid2013给出的得分情况是刚好相反的
    对的,所以训练的时候最好也用相反的顺序就可以。
  3. pairs是通过netloss_tid2013.py产生的。
    问题太多,我挑重点的回复,也不知到回复全了没。
  4. 我是四年前开始用的caffe,网上有很多资料,不过做研究的话目前pytorch用的比较多。

@InspirationMy
Copy link
Author

收到,十分感谢你的回复!

1.关于训练的时候采用相反的顺序这一点我还不是很理解,能告诉我下具体是怎么实现的吗?是将论文中的l[ij]的值给颠倒一下吗,例如l[ij]=1表示y[i]<y[j]而不再是y[i]>y[j]。

2.我在CSIQ数据集上测试了一下,CSIQ给的值标准是DMOS,和排序数据集的标准类似,都是越小越好。
我发现如果用Rank_live的模型,最后计算出来的LCC和SROCC都十分接近1,而如果用Ran_tid2013的模型,最后计算出来的值非常接近-1。这是不是就是因为,这些不同的数据集的标准不一样。因为你在训练Rank_tid2013的时候已经采用了相反的顺序进行训练,所以得到的网络适用于那些以MOS值为标准的数据集。而在训练Rank_live的时候,用的是正常的顺序进行训练,所以得到的网络适用于那些以DMOS值为标准的数据集。

不好意思啊,占用了你的时间

@xialeiliu
Copy link
Owner

  1. 可以这么做。也可以直接把你生产的txt顺序换一下,这样的话就可以得到相反的结果。
  2. 对的。

@InspirationMy
Copy link
Author

你好,我在训练fine-tune网络时又遇到了新的问题(是跟软件兼容相关的,你能帮我看下吗)
a
尝试了2方法都没有解决
(1)我以为时protobuf的版本问题,可是在pip list之后发现安装的protobuf的版本是3.10.1也不是3.6.0。之后我还是把他卸载了又重装3.5.1版本的,可是报错信息还是图片中的,一点都没变
(2)因为之前用环境是anaconda下的,这次我又从官网重新下载了protobuf-all-3.5.1.tar.gz,并进行编译,之后修改PATH使其先用这个新安装的protoc,如图
1
还是没有解决问题,报错信息还是一样
我想知道
(1)这个错误的原因(是protobuf的版本导致的吗?)
(2)解决方法

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants