研究没那么神秘:一次实验翻车教会我找创新点

我从来没有拷打过任何人,除了今天拷打自己。面试准备期跟重做没区别……

后天就要面试了。检查项目的时候,我注意到这个实验设计不合理。

我做的对比实验,测出来延迟是这样的:

模型 准确率 参数量 延迟 FPS
MobileNetV3-Large85.96%4.21M108.59ms9.2
ResNet5084.81%23.52M95.81ms10.4
EfficientNet-B086.62%4.01M47.60ms21.0
ShuffleNetV285.47%1.26M48.61ms20.6

嗯?我当时模型选择的主要依据是什么来着?(之前做实验的自己习惯差得可以啊,你是一点不沉淀)

往下一看竟然是“轻量化”。我瞬间无语凝噎了,
怎么没有对比同参数量的模型就直接来对比这些主流选手了?
怎么选的是MobileNetV3-Large(你咋不选Small?)
还有啥经典基线ResNet50都来了,你看看你这23.52M的参数量……
于是我紧急补课,顺着最终部署的ShuffleNetV2,先了解了同系列的区别,再去找一样轻量化的模型……

一味追求 FLOPs 的降低,但是内存访问成本变高、网络碎片化等问题没解决,实际运行时间反而会变长。

看到这里我脑中灵光一闪,突然悟了。

我认为,如果想改进一个关于耗时的算法,我们可以尝试的观察方向是:

  1. 了解整个流程,每一个模块是如何工作的,它的原理是什么;
  2. 了解每个步骤之后,把它还原到操作系统、硬件上是如何执行的,每一步的耗时都找出来;
  3. 这个时候我们可以注意到哪个环节出现问题,并返回到算法层面,思考解决方法。

更笼统地说,找创新点其实就是去找问题和局限。

所以可解释性很重要。有了可解释性,我们就能更好地理解并尝试如何修改模型。这个思路在准确率上也可以沿用。

找出难解释的算法,增强其可解释性,也是一个不错的方向(我个人觉得)。这里我们引入数学学科。

果然操作系统也应该好好学(毕竟是计算机的基础)。

看到这里大家会不会觉得,其实研究也没那么神秘呢?这篇随笔我是以 2018 年 ECCV 的 ShuffleNetV2 为例,得到的启发。

只需要观察文章的一句话,就可以倒推作者是如何发现问题、以怎样的思维设计、最终如何解决的。看到数据后,又可以观察改进效果能支撑这个结论到哪一步。

3年学习效率不如面试前一天,
我前几年果然是使用了大脑消失术吧。
希望最后不要变成《重新检查项目结果找到了100个设计不合理的地方》。