要回答这个问题,我们先要对这个问题的关键词进行分析:如果去掉“计算机视觉”这个限定词,这问题就变成了“如何做好研究?”那么,要回答这个问题,我们就要知道“什么是好的研究?”而要定义什么是好的研究,必须回到根本,先要知道“什么是研究?”
先确定狭义的研究的定义为:利用科学的方法来调查解释一个现象或者获取新的知识。
科学研究从本质上是由三个基本的要素构成:
1) 目的:产生新的知识或者是设计出新的应用;
2)手段:科学的方法。缺少这两个要素任何之一都不构成科学研究;
3) 成果:新的知识。所谓新的知识,必须是前人不知道的东西。
我们很多同学和年轻的研究员认为研究就是写论文、研究成果就是论文,这其实是在观念上走进了一个误区。论文是系统阐述新的知识、新的应用,以及阐述获取这个新知识或者新应用用到了什么样的科学方法的一个载体。论文,作为阐述研究成果的主要手段,必须经过同行的评议通过才能正式发表和被认可。
什么是好的研究?
不同领域的研究员对这个问题可能会有不同的看法。
从计算机科学的角度来讲,尤其是计算机视觉的研究,无论是理论的还是实践的,我们的研究成果最终是要解决现实世界的问题的。在这个方面,我印象比较深刻的还是我在西安交通大学读研究生的时候,沈向洋博士2001年在西安交大做报告提到的一个观点:最好的研究员发现新问题;好的研究员创造新方法解好问题;一般的研究员跟随别人的方法解问题——大家在多次这里看到“新”这个关键词,创新是研究的本质。
有了这些铺垫,我们首先定义什么是最好的研究。通常认为一个领域中对于某一个问题最好的研究工作有三种:
第一篇论文 (The First Paper),
最好的一篇论文 (The Best Paper),
以及最后一篇论文(The Last Paper)。
这第一篇论文的含义是说这篇论文率先提出了一个好的问题和方向。
最好的一篇论文是什么?那一定是开创性地提出了一种解法,启发了最终解决这个问题的途径。
至于最后一篇论文,那一定是彻底把这个问题解决了,从此以后这个问题不再需要继续做进一步的研究。
从计算机视觉领域举一个具体的例子来讲,Harris Corner Detector属于最早的一批在图像中检测角点的论文,可以归为第一篇之列。David Lowe博士的SIFT特征检测和局部描述子,可以归为在这个方向上最好的论文之列。那么这个方向的最后一篇呢? 我认为可能还没有出现。具体到我自己的研究工作,在局部描述子这个方向上,我跟我的同事Matthew Brown和Simon Winder在2007年到2009年之间所做的一系列用机器学习的方法来建立描述子的工作,也实际上为提高局部描述子的性能提供了一个新的思路和方法。
对于我们很多研究员和学生来讲,一辈子可能都做不到这三种最好的研究工作之一。那是不是就等于说你不能做好的研究工作或者根本不用考虑做研究了呢?肯定不是这样。科学研究是一个共同体。这些最好的研究工作也是在前面很多很多非常扎实(solid)的研究工作的基础上发展出来的。因此,对于年青的研究员和学生而言,应该胸怀大志,去追求做最好的研究工作,但从实际执行上来讲,还是要把一项一项具体的工作先做扎实了。
怎么做到把研究工作做扎实了?
首先,你必须对你要解的问题有一个全面深刻的了解,
包括为什么要解这个问题、
解这个问题有什么意义呢、
以前有没有试图解决同样或者类似问题的先例,
如果有,你就要全面了解前人都提出了什么样的解法、他们的解法都有什么样的优势和缺陷……
最后,你的解法解决了前面这些解法不能解决的问题呢,或者是你的解法处理了什么样的他们不能处理的缺陷了?
这些问题的答案如果都有了,那么,在写论文的过程中要注意的就是,
1)你的假设是什么?
2)你怎么验证了你的假设?这个验证既可以是理论上的证明,也可以是实验的验证。
我们很多学生和年青的研究员,写论文的时候没有找到内在的逻辑关系,很多观点都是似是而非。或者说重一点,在论文撰写方面的训练严重不足。你的研究如果到了写论文的阶段,那就必须要有明确的观点提出来。这个观点必须明确无误,只有这样你才能被称为形成了新的知识。你的每一个观点都必须在理论上或者是实验中得到验证。另外,论文的撰写是为了让人看懂,不是让人看不懂,所以我们在撰写过程中必须尽量保证不去假设读者已经拥有了某些方面的知识。做好了这些,基本上你就有很大的可能性能够做出扎实(solid)的研究工作。
如何做好计算机视觉的研究工作?
首先谈谈我观察到的一些现象。很多年轻的学生,现在讨论问题的时候都用这样的谈话:我发现用FC6层的特征,比用FC7层的特征,在某个图像数据集上比现在最好的算法提高了1.5%的识别精度,老师我们可以写论文了(如果大家不能理解这句话,FC6和FC7是表示AlexNet的两个中间输出层)。我想请问,你在这个过程中发现了什么样的普适的新的知识吗,又或者,在不是普适的情况下,你在什么限定条件下一定能够看到这样的识别精度提高了?
不错,提高识别精度是一个很好的目标,但要注意,计算机视觉的研究是要解决识别的问题,不是解某一个图像数据集。这些图像数据集提供了很好的验证你的假设和方法的手段,但如果你没有遵循科学的方法和和手段去设计你的算法和实验,你也不可能得到一个科学的结论,从而也不能产生新的知识,更不用谈对这个领域做出贡献。朱松纯老师在他的评论中提到,很多学生认为,计算机视觉现在就是调深度神经网络的参数,也就是说的这个问题。
所以,具体到对于刚开始从事计算机视觉研究的学生来讲,要做好这方面的研究,我觉得第一步还是要系统学习一下计算机视觉的课程,全面了解一下计算机视觉这个领域的来龙去脉、这个领域都有哪些基本的问题、哪些问题已经解得比较成熟而哪些问题还在初级阶段……这里,推荐所有的学生学习两本经典教材《Computer Vision: A Modern Approach》和《Computer Vision: Algorithms and Applications》,可以先读完第一本再读第二本。
只有对这个领域有了一个初步的全面了解,你才能够找到自己感兴趣的那个问题。在众多的问题当中,你是希望做三维重建,还是做图像识别、物体跟踪,又或是做计算摄影呢?做研究其实不是一个完全享乐的的过程,你必须要有足够的兴趣来保证你能持续地走下去,这在你感觉自己当前研究的思路走不下去的时候尤其具有重要意义。当你确定你感兴趣的问题,你应该首先全面调研一下这个问题的来龙去脉。这就意味着你不能只读过去五年的论文。你可以从过去一年的论文开始,慢慢追溯回到过去很久的相关的论文。有些时候,你会惊讶地发现前人想问题的深度。研究的英文单词是Research,拆开是Re-Search,用中文直译就是重新搜索和发现,而不是直接发现,其实就是说你要首先对这个问题做追本溯源。朱松纯老师提到的我们很多学生现在不读五年以前的论文,说的也是这个道理。
当你做好了这些,你必须钻进计算视觉的一个小的领域。人的精力是有限的,这就意味着你不可能把很多事情同时做好,所以在你选好方向之后,就要把你的精力集中在你感兴趣的一个问题上, 努力成为这个方面的专家。研究是一项长跑,很多时候,你在一个方向上比别人坚持久一点, 你就有机会超越他而成为某个方面的专家。
最后,我也来谈谈深度学习对计算机视觉的影响。在这里,我对马里兰大学Rama Chellapa教授在Tom Huang教授80岁生日论坛上表达的观点非常认可,他认为,深度学习网络就像一个Pasta Machine:你把该放的东西放进去,它能给你产生好吃的Pasta。同时它也是一个Equalizer:无论你在计算机视觉领域有40年的经验还是0年的经验,只要你会用Caffee,你在一些问题,比方说图像识别上,都能产生差不多的结果。他开玩笑说这有点伤自尊 (It hurts my ego!),但我们还是应该把它作为一个好的工具拥抱它。我想,他的言外之意,是我们的研究应该做得更深,要去理解这个工具为什么能够工作得比较好,从而产生新的知识去指导将来的研究和应用。
我认为,对于年轻的学生来讲,从深度学习的方法开始学习没有什么问题,但必须要进一步去了解一下其他的数学和算法工具,像统计贝叶斯的方法、优化的方法、信号处理的方法等等等的。计算机视觉的问题,其本质是不适定的反问题,解这一类问题需要多种方法的结合。这里面有深度学习解得比较好的问题,像图像识别,也有深度学习解不了的问题,像三维重建和识别。
任何研究领域包括计算机视觉的研究,对处在研究初期的学生而言, 更重要的是掌握足够的数学工具,培养一种正式思维(Formal Thinking)的能力,这样,遇到实际的问题就能以一种理论上正确的思路去解决这个问题。
作为结束语,我想对在从事或者有志于从事计算机视觉研究的学生说,计算机视觉的研究处在一个非常好的时期,有很多我们原来解不了的问题现在能够解得比较好了,像人脸识别,尽管我们其实还没有从真正意义上达到人类视觉系统对人脸识别的鲁棒程度。但我们离真正让计算机能够像人看和感知这个世界还有很远的距离。在我们达到这个目标之前,深度学习的方法可能是这个过程中一个重要的垫脚石,同时我们还要将更多的新的方法和工具带入这个领域来进一步推动这个领域的发展。