链接:https://www.zhihu.com/question/265953178

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

在本人的研究动作识别过程中,曾多次复现该领域顶级期刊的论文,有些提供了部分代码,有些则没有,提供了代码的,发现有很多过程和论文中描述的相差甚远,有一些论文和代码一致了,但是结果也和论文的不一致,请问这在您的研究生涯中是否也曾遇到过?您是如何看待的?怎样采取有效的措施,提前做出判断,不浪费更多时间在这些论文上面?

作者:韦仕才

https://www.zhihu.com/question/265953178/answer/1621561490

作为一个在复现论文中踩坑无数,好不容易走出来的人,简单说一下我的看法。

例子1:我是活体检测落地的,老师当时跟我说,旷视能做出来,你应该也可以做个差不多的吧(微笑)。然后我就开始的漫长的算法复现道路。后来很久以后发现了两件事。一是腾讯的一篇论文,做了两个测试,一个是用了公司内部的数据,一个是没用公司内部数据的结果,用了公司内部数据的高了10个点。另一个是前不久小视科技开源的活体检测项目,我去看了一下,,效果确实好,一细看怎么做的,好家伙,千万级的训练集......。

例子2:当初我大四四月份的时候来到教研室,做活体检测的项目,看了近几年的会议和arxiv,找到了一篇效果最好的文章,甚至还公开了代码和预训练模型,心想,这不是稳了吗。当时我想的是:讲道理,结合pytorch,或者tensorflow,感觉论文复现不应该难才对啊???。花了两个星期学习tensorflow把它跑通,我去换换其他数据集看看(活体检测不同于其他领域,目前追求的就是跨数据集测试的准确率),结果效果稀烂。

我当时在想,不对啊,它跨数据集的测试效果不差,为什么在这上面就是不行?后来数据集申请了下来,在它论文说的那个数据集上面试了一下跨数据集的测试,确实和文章描述差不多。我就更好奇了,那么好像这个论文就是对的啊,可是为什么其他数据集效果就差这么多(应该没人比我这个情况更奇葩了,不做落地基本不会遇到这个问题)。后来机缘巧合之下打印了很多日志之后我发现,它的正类和负类偏向不一样,预测主要偏向负类。

但是这样效果应该会很差,为什么还这么好,然后我继续细挖,然后重点来了!!!!!!!我发现它的数据加载里面,正负类的加载就是不对等的,负类是正类的两倍多(正常是对等的),所以偏向负类,但是效果还是很好。我?????。那天我发现论文造假的另一个至高境界,直接修改数据分布。并不是说这篇文章作者就是故意的,但是谁知道呢,而且后来我师兄也遇到了类似的情况,在dataloader里面对数据进行了修改...他是做图网络分类的,同一个数据集之前的测试准确率只有80出头,后来几篇文章就飙到了接近90,师兄怎么斗复现不出来,后来开源了代码一看,好家伙之前训练测试是二八分,新文章直接变成了三七分,就在dataloader里改的,但是作者文章完全没有提及。我刚刚又看了一下这篇文章被一个二区期刊收录了。

例子3:教研室有个同学做剪枝,复现CIFAR10的的baseline。CIFAR10这个数据集都说烂了,我浮现一下还不是手到擒来?然后一个月过去了,还是复现不出来那个效果,后来发现原来大家都在用trick。不加余弦衰减,不加mixup,不训练200个epoch,基本就达不到目前大家说的那个SOTA效果,但是这些不会有人和你说的,它们只会说我在resnet50上训练到了多少多少的准确率。

例子4:教研室的师弟,结合GCN做few-shot learning。之前的测试准确率都是百分之五六十,去年ECCV突然出现了一篇准确率直接刷到80%多的文章还开源了代码,师弟惊为天人,感叹难道这个领域就这样做没了?然后拿作者的代码来加上自己之前的想法改了改又涨了几个点,在90%多,实现了大家默认要求的sota,觉得可以写文章了,文章写到一半,发现不对,代码好像有问题,github上有人提问,这个是不是好像好像过拟合了学习到了标签的顺序,然后师弟一看还真是,我把batch内多个任务之间测试样本顺序打乱,效果就又回到了普通的百分之五六十的水平,然后写完一半的文章就这样被废掉了。

从这些故事中,我发现了以下的结论:

绝大部分刚入门的人,都会迷信SOTA,我要复现就要复现那篇最好的,管它难不难,能不能复现,是不是真的有效。但是做过一年深度学习的人就知道,SOTA?一百篇文章一百个SOTA。

有源码就一定可靠?我被源码坑过不止这一次,刚刚例子是,另一个回答里说到的LBCNN也是一样的,给的源码和文章里面的结构就是两回事。

顶刊顶会大公司就一定可靠?顶会的可复现性问题存在也不是一两天了,那么顶刊也可见一番,每年三大顶会能复现出来的有一半就不错了,之前还有说90%都不能复现的...。

有效的也许不是方法,而是trick---同学复现的那篇论文。有效的也许不是方法,而是数据分布---我遇到的那篇文章的数据分布。有效的也许不是方法,而是数据---活体千万数据集。有效的确实是方法,但是这个方法有问题----师弟的小样本学习的例子。

这还是活体需要做跨数据集的交叉验证这种难的验证指标了,要是单纯刷一个数据集的指标的,能作弊的地方就更多了。

怎么办?

后来我想了很久,说,草,不追SOTA了,去选那些我理解了,而且直觉上我觉得可行的方法。就算是最后真的不行,我也能知道是哪里不行,也是我思维的完善。然后我开始去复现motion-based methods,检测眨眼和张嘴这些动作,确实可行,但是老师要做静默活体,然后又去试了rPPG,发现也可以,但是时间开销太大了,分析发现受采样定律的限制,10s左右的视频才能做出一个比较好的估计结果。然后去试了一下质量估计,也是有用,但是高质量的攻击也确实不能检测出来。于是慢慢又去做模型的分析,寻找其他的特征,我的目标慢慢从最近的18 19年,转向了12,13年那会,做理论分析的文章。虽然效果不好,但是有理有据,而且很多那时候的传统模型,结合现在的深度学习往往能爆发出强大的力量,于是就有了我现在的工作。

不要盲目的去追求SOTA,那些高大上的结构,网络,因为很多时候并不是那些结构有用,而是trick有用,或者是其他的地方有问题。更重要的是看文章的核心思想,你觉得这个思想是不是合理,你接不接受,如果你自己也觉得他这个思想很不错,那么就可以尝试去复现,就算是最后失败了,你也会不会很难受,你知道什地方有问题,而这会是你后面科研的创新来源之一。

现在深度学习的问题就是这个不到五岁的一个东西,直接盖过了一个领域过去10年甚至20年进化来的传统的模型和研究。但是它真的消失了吗?不,它不过换了一个方式去应用。我最开始做做活体发现近几年什么多模态,多光谱,深度图,时频分析,这些高大上的名词,觉得强的一批,他们是怎么想出来的,后来追溯到10多年前的文章之后才发现,原来这些东西在过去都研究过了,频率,反照率,3D结构,这些在过去都有分析,只不过过去的特征提取算法和数据没有现在这么多,所以没有很好的解决问题,现在被深度学习重新唤起了生机而已。正本清源,知道一个领域过去的研究你才能知道现在在什么地方,特别是各个领域都被深度学习冲击的今天。

作者:wwww
https://www.zhihu.com/question/265953178/answer/1622872889

深度学习很常见的一个现象是A提出了一个methodA,resultA = methodA + trickA。接着B提出了一个methodB,resultB = methodB + trickB。B在他们的文章中会宣称resultB ~> resultA,从而得出methodB ~> methodA的结论。但其实很有可能只是trickB ~> trickA,或者说trickB对methodB的提升比trickA对methodA的提升大。如果“公平”的比较的话,很有可能会出现下面的几种情况:

methodA ~> methodB (都不加trick);

methodA + trickA ~> methodB + trickA(这不一定说明methodA ~> methodB,可能只是trickA更适用于methodA);

methodA + trickB ~> methodB + trickB (这种情况可能是B最不想见到的)。

为了显示出methodB的solid,B一般不会在文章中提及他们使用的全部trick。

作者:Ming
https://www.zhihu.com/question/265953178/answer/302365031

做为入坑强化学习的人,是时候祭出神文: deep reinforcement learning that matters了:https://arxiv.org/abs/1709.06560。复现不出来才是正常的,里面有一幅图,表现出同一作者不同时期实现的同一算法效果差别巨大(而且后写的是效果差那个哦)。其他方向的类似文章也有很多,知乎有一篇文章总结了各种深度学习劝退文。

曾和一个机械专业的人讨论,对方也是要用强化学习应用到机器人控制,并且自己用tebsorflow的c++版本把各种算法实现了一遍(听完这些我膝盖已碎)。和他讨论到我无法复现的问题,他给我的建议是把random seed定死,一步一步的跑自己复现的版本和作者公布的版本,一定要让每一步输出都一样。可惜自己太懒了,最后做到效果差不多就算了。

作者:韩忠义
https://www.zhihu.com/question/265953178/answer/302468588

先认可这个问题。据一个在BAT实习的同学说,他的主要任务是实现CVPR里面自己感兴趣的工作,结果是大部分工作是重复不出来。尤其在医学图像处理领域,大家都以数据保密为由,不公开代码,而其中的水分可想而知。不过CV里面一些group的论文是很良心的,在GitHub上面公开的代码完全可以复习原论文的结果,比如RCNN系列。

再说导致这个问题的原因。根本原因恐怕是科研的方向跑偏了,大家为了发论文而做科研,然后就有了好的就业,funding。如果爱因斯坦,图灵他们是为了毕业论文要求、为了发论文才去搞研究,恐怕就没有什么相对论,图灵测试了。

最后说如何看待和措施。平常心看待,做科研的水军越来越多,大家为了毕业、什么青千等各种计划。保证自己不这样做就好了,自己问心无愧,多看提供源码的文章吧。尤其在DL领域,我实在是绞尽脑汁也想不出来还能编出来什么花样来,创新越来越难了。

作者:知乎用户
https://www.zhihu.com/question/265953178/answer/1622665112

分享两个经历吧。

1.曾经被要求复现一篇用GAN做字体生成的论文,论文发在CVPR上,是国内某大厂的。论文里面有一个显著错误和模糊错误,模糊错误是论文里面描述的卷积核的尺寸有问题。显著错误是因为论文里面无论是绘图还是公式,都有一个错误,那就是按照他们描述那样构造loss进行优化,某个重要部件是完全没有被计算梯度的。

然后我汇报了上去,大佬去邮件问了后,得到的答复是对于卷积尺寸的问题,是他们忘了写padding,而对于那个没有计算梯度的方法,对方则大方承认了这是个错误并感谢我们指出。对于那个卷积核尺寸的问题我可以算,我就佩服没有计算梯度这个问题(我觉得算是比较严重的错误)可以这么大大方方的挂在CVPR上。

2.第二个经历是复现一个transformer的模型,其中涉及到weight share,但那个weight share是把weight 给share了,然后不同任务独占一个bias……如果没有后面那个跟task有关的bias……是根本不work的(我觉得),或者说差很多。

而这些细节是没有写在论文上的,是我发现不对劲后一行行对比他的开源代码发现的。


作者:匿名用户
https://www.zhihu.com/question/265953178/answer/302111688

楼下有同学提到了TSN,恰好我这两天也在复现TSN和SSN。这两篇论文的代码都开源,但是我光是配置环境让它跑起来就用了好几天,调参还不知道要多少天。

所以之前有学长告知,写论文是有周期的,不是说上午有个想法,下午做个实验,晚上就能发论文的。首先尤其是视频这块,主流的双流网络,你提取光流就得十几个小时甚至好几天吧,然后效果可能很差,那么是idea本身的问题呢还是参数问题啊,从此开始了长达数月的调参。。。不过跑程序的时候可以继续做别的是,看看论文,水水知乎。

至于楼主提到的复现结果和论文不一致:很正常。。。所以作者一般会提供训练好的模型,免得你说人家算法有问题。

作者:Lechatelia
https://www.zhihu.com/question/265953178/answer/1622757270

利益相关:2019从事video recognition与video detection方向大半年有余,无任何paper产出,2020年前此方向大部分深度学习相关paper都读了其基本理解,现已经脱坑

动作识别与检测这个方向啊,讲到底无非就是在图片识别与检测问题上加了一个时间或者说是运动的维度,如何建模动作信息成为一个关键,可是,并不是所有人都有那么多卡,就算有了卡,发现预训练数据集都下载不下来(没错,就是本渣渣我了),于是在别人提好的特征上面加几层,当作一维特征去处理,利用图片领域的一些新文章或者新trick迁移到video任务上面来跑到比baseline高就行了

baseline不能复现的问题,你应该是想从backbone网络那部分也就是特征提取器那里也自己实现吧,我也是的确遇到了类似问题,开始是数据下载都好难,有些YouTube链接已经失效了,千辛万苦下载到数据集,又开始千辛万苦提取光流,可最后用别人的代码与相同数据集,结果就是差很多,回过头找原因,发现别人batch size用的是128,我是用的32,大概或许可能就是这个原因吧(谁要我是个渣学校没卡呢!?),这个原因我还真没办法得到验证

但是有很多工作都是基于已经提好的video特征(比如用tsn,i3d提取好的),在特征上面添加一些简单的层,完成的下游任务,比如用于detection的bsn bmn,我都很好复现了,而且效果很好,甚至我再添加一些trick之后比原文还好很多,但是呢,我回过去把结果可视化,也不咋地,归根到底,是之前的baseline太弱了

video这个东西,还是很难的,首先数据本来就不够,而且在时间上的label就存在一定歧义,包括之后火起来弱监督video detection,我感觉也是想解决这个歧义,可是关于数据和显卡资源,这个东西,好像不是我等能够解决的吧

作者:匿名用户

https://www.zhihu.com/question/265953178/answer/302025291

实话的话,
1.复现不出来也要引用人家报告的结果。
2.尽量选大组的工作。
3.可写邮件问作者。
4.如果是吸引人的工作,大家都会关注以及尝试复现的,持续追踪吧。

搞科研的话,不要太在意效果去看工作本身的价值。在工业界的话,还是关注时间沉淀,去粗取精之后的工作吧。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐