How to get start in Computer Vision

0 Check how much you know

cv_interview_route_map

1 advice from MRAS

“如何做好计算机视觉的研究?”

什么是研究?

一个被普遍接受的对研究的广义定义为:研究是为了产生新的知识或者是为已有的知识设计新的应用的系统性的工作。因为我们今天的讨论其实更多集中在科学研究上,先确定狭义的研究的定义为:利用科学的方法来调查解释一个现象或者获取新的知识。

综合这两个定义,可以看到科学研究从本质上是由三个基本的要素构成:

我们很多同学和年轻的研究员认为研究就是写论文、研究成果就是论文,这其实是在观念上走进了一个误区。论文是系统阐述新的知识、新的应用,以及阐述获取这个新知识或者新应用用到了什么样的科学方法的一个载体。论文,作为阐述研究成果的主要手段,必须经过同行的评议通过才能正式发表和被认可。

在人工智能进入第三个热潮之际,我们看到各种各样关于AI的各种媒体报道层出不穷,一方面,这对大众普及了AI各方面的知识,是积极的。但从另一个方面讲,很多观点没有经过仔细的推敲,也没有同行的评议,一些谬误或者是夸大的观点可能因为广泛传播而被大众接受,结果产生负面的社会影响。这就提醒我们相关领域的研究人员,在对大众媒体去做一些评论的时候,必须仔细斟酌,尽量不传播没有得到检验的观点。这就谈到第二个问题:

什么是好的研究?

不同领域的研究员对这个问题可能会有不同的看法。

从计算机科学的角度来讲,尤其是计算机视觉的研究,无论是理论的还是实践的,我们的研究成果最终是要解决现实世界的问题的。在这个方面,我印象比较深刻的还是我在西安交通大学读研究生的时候,沈向洋博士2001年在西安交大做报告提到的一个观点:最好的研究员发现新问题;好的研究员创造新方法解好问题;一般的研究员跟随别人的方法解问题——大家在多次这里看到“新”这个关键词,创新是研究的本质。

有了这些铺垫,我们首先定义什么是最好的研究。通常认为一个领域中对于某一个问题最好的研究工作有三种:第一篇论文 (The First Paper),最好的一篇论文 (The Best Paper),以及最后一篇论文(The Last Paper)。这第一篇论文的含义是说这篇论文率先提出了一个好的问题和方向。最好的一篇论文是什么?那一定是开创性地提出了一种解法,启发了最终解决这个问题的途径。至于最后一篇论文,那一定是彻底把这个问题解决了,从此以后这个问题不再需要继续做进一步的研究。

从计算机视觉领域举一个具体的例子来讲,Harris Corner Detector属于最早的一批在图像中检测角点的论文,可以归为第一篇之列。David Lowe博士的SIFT特征检测和局部描述子,可以归为在这个方向上最好的论文之列。那么这个方向的最后一篇呢? 我认为可能还没有出现。具体到我自己的研究工作,在局部描述子这个方向上,我跟我的同事Matthew Brown和Simon Winder在2007年到2009年之间所做的一系列用机器学习的方法来建立描述子的工作,也实际上为提高局部描述子的性能提供了一个新的思路和方法。

对于我们很多研究员和学生来讲,一辈子可能都做不到这三种最好的研究工作之一。那是不是就等于说你不能做好的研究工作或者根本不用考虑做研究了呢?肯定不是这样。科学研究是一个共同体。这些最好的研究工作也是在前面很多很多非常扎实(solid)的研究工作的基础上发展出来的。因此,对于年青的研究员和学生而言,应该胸怀大志,去追求做最好的研究工作,但从实际执行上来讲,还是要把一项一项具体的工作先做扎实了。

怎么做到把研究工作做扎实了?首先,你必须对你要解的问题有一个全面深刻的了解,包括为什么要解这个问题、解这个问题有什么意义呢、以前有没有试图解决同样或者类似问题的先例,如果有,你就要全面了解前人都提出了什么样的解法、他们的解法都有什么样的优势和缺陷……最后,你的解法解决了前面这些解法不能解决的问题呢,或者是你的解法处理了什么样的他们不能处理的缺陷了?这些问题的答案如果都有了,那么,在写论文的过程中要注意的就是:你的假设是什么?你怎么验证了你的假设?这个验证既可以是理论上的证明,也可以是实验的验证。我们很多学生和年青的研究员,写论文的时候没有找到内在的逻辑关系,很多观点都是似是而非。或者说重一点,在论文撰写方面的训练严重不足。你的研究如果到了写论文的阶段,那就必须要有明确的观点提出来。这个观点必须明确无误,只有这样你才能被称为形成了新的知识。你的每一个观点都必须在理论上或者是实验中得到验证。另外,论文的撰写是为了让人看懂,不是让人看不懂,所以我们在撰写过程中必须尽量保证不去假设读者已经拥有了某些方面的知识。做好了这些,基本上你就有很大的可能性能够做出扎实(solid)的研究工作。然后回到我们讨论的主题:

如何做好计算机视觉的研究工作?

其实,要回答这个问题,将我上面讲的所有观点加上“计算机视觉领域”这个限定词就行了。我这儿结合计算机视觉研究的一些现状及朱松纯老师的一些观点来进一步谈谈我的观点。

首先谈谈我观察到的一些现象。很多年轻的学生,现在讨论问题的时候都用这样的谈话:我发现用FC6层的特征,比用FC7层的特征,在某个图像数据集上比现在最好的算法提高了1.5%的识别精度,老师我们可以写论文了(如果大家不能理解这句话,FC6和FC7是表示AlexNet的两个中间输出层)。我想请问,你在这个过程中发现了什么样的普适的新的知识吗,又或者,在不是普适的情况下,你在什么限定条件下一定能够看到这样的识别精度提高了?

不错,提高识别精度是一个很好的目标,但要注意,计算机视觉的研究是要解决识别的问题,不是解某一个图像数据集。这些图像数据集提供了很好的验证你的假设和方法的手段,但如果你没有遵循科学的方法和和手段去设计你的算法和实验,你也不可能得到一个科学的结论,从而也不能产生新的知识,更不用谈对这个领域做出贡献。朱松纯老师在他的评论中提到,很多学生认为,计算机视觉现在就是调深度神经网络的参数,也就是说的这个问题。

所以,具体到对于刚开始从事计算机视觉研究的学生来讲,要做好这方面的研究,我觉得第一步还是要系统学习一下计算机视觉的课程,全面了解一下计算机视觉这个领域的来龙去脉、这个领域都有哪些基本的问题、哪些问题已经解得比较成熟而哪些问题还在初级阶段……

这里,推荐所有的学生学习两本经典教材《Computer Vision: A Modern Approach》和《Computer Vision: Algorithms and Applications》,可以先读完第一本再读第二本。

cv-research-zhihu

只有对这个领域有了一个初步的全面了解,你才能够找到自己感兴趣的那个问题。在众多的问题当中,你是希望做三维重建,还是做图像识别、物体跟踪,又或是做计算摄影呢?做研究其实不是一个完全享乐的的过程,你必须要有足够的兴趣来保证你能持续地走下去,这在你感觉自己当前研究的思路走不下去的时候尤其具有重要意义。当你确定你感兴趣的问题,你应该首先全面调研一下这个问题的来龙去脉。这就意味着你不能只读过去五年的论文。你可以从过去一年的论文开始,慢慢追溯回到过去很久的相关的论文。有些时候,你会惊讶地发现前人想问题的深度。研究的英文单词是Research,拆开是Re-Search,用中文直译就是重新搜索和发现,而不是直接发现,其实就是说你要首先对这个问题做追本溯源。朱松纯老师提到的我们很多学生现在不读五年以前的论文,说的也是这个道理。

当你做好了这些,你必须钻进计算视觉的一个小的领域。人的精力是有限的,这就意味着你不可能把很多事情同时做好,所以在你选好方向之后,就要把你的精力集中在你感兴趣的一个问题上, 努力成为这个方面的专家。研究是一项长跑,很多时候,你在一个方向上比别人坚持久一点, 你就有机会超越他而成为某个方面的专家。

最后,我也来谈谈深度学习对计算机视觉的影响。在这里,我对马里兰大学Rama Chellapa教授在Tom Huang教授80岁生日论坛上表达的观点非常认可,他认为,深度学习网络就像一个Pasta Machine:你把该放的东西放进去,它能给你产生好吃的Pasta。同时它也是一个Equalizer:无论你在计算机视觉领域有40年的经验还是0年的经验,只要你会用Caffee,你在一些问题,比方说图像识别上,都能产生差不多的结果。他开玩笑说这有点伤自尊 (It hurts my ego!),但我们还是应该把它作为一个好的工具拥抱它。我想,他的言外之意,是我们的研究应该做得更深,要去理解这个工具为什么能够工作得比较好,从而产生新的知识去指导将来的研究和应用。

我认为,对于年轻的学生来讲,从深度学习的方法开始学习没有什么问题,但必须要进一步去了解一下其他的数学和算法工具,像统计贝叶斯的方法、优化的方法、信号处理的方法等等等的。计算机视觉的问题,其本质是不适定的反问题,解这一类问题需要多种方法的结合。这里面有深度学习解得比较好的问题,像图像识别,也有深度学习解不了的问题,像三维重建和识别。

任何研究领域包括计算机视觉的研究,对处在研究初期的学生而言, 更重要的是掌握足够的数学工具,培养一种正式思维(Formal Thinking)的能力,这样,遇到实际的问题就能以一种理论上正确的思路去解决这个问题。

作为结束语,我想对在从事或者有志于从事计算机视觉研究的学生说,计算机视觉的研究处在一个非常好的时期,有很多我们原来解不了的问题现在能够解得比较好了,像人脸识别,尽管我们其实还没有从真正意义上达到人类视觉系统对人脸识别的鲁棒程度。但我们离真正让计算机能够像人看和感知这个世界还有很远的距离。在我们达到这个目标之前,深度学习的方法可能是这个过程中一个重要的垫脚石,同时我们还要将更多的新的方法和工具带入这个领域来进一步推动这个领域的发展。

2 TOP conference and journals

计算机视觉方面的三大国际会议是ICCV, CVPR和ECCV,统称之为ICE。

ICCV的全称是International Comference on Computer Vision,正如很多和他一样的名字的会议一行,这样最朴实的名字的会议,通常也是这方面最nb的会议。ICCV两年一次,与ECCV正好错开,是公认的三个会议中级别最高的。它的举办地方会在世界各地选,上次是在北京,下次在巴西,2009在日本。iccv上的文章看起来一般都比较好懂,我是比较喜欢的。

CVPR的全称是Internaltional Conference on Computer Vision and Pattern Recogintion。这是一个一年一次的会议,举办地从来没有出过美国,因此想去美国旅游的同学不要错过。正如它的名字一样,这个会上除了视觉的文章,还会有不少模式识别的文章,当然两方面的结合自然也是重点。

ECCV的全称是Europeon Conference on Computer Vision,是一个欧洲的会议,也是两年一次与ICCV刚好错开。虽然名字不是International,但是会议的级别不比前面两个差多少。欧洲人一般比较看中理论,但是从最近一次会议来看,似乎大家也开始注重应用了,oral里面的demo非常之多,演示效果很好,让人赏心悦目、叹为观止。不过欧洲的会有一个不好,就是他们的人通常英语口音很重,有些人甚至不太会说英文,所以开会和交流的时候,稍微有些费劲。

总的来说,以上三个会议是做计算机视觉人必须关注的会议,建议每一期的oral都要精读,poster调自己相关的仔细看看。如果有好的进一步的想法,可以马上发表,因为他们已经是最新的了,对他们的改进通常也是最新的。同时如果你做了类似的工作,却没有引用这些会议的文章,很有可能会被人指出综述部分的问题,因为评审的人一般都是牛人,对这三个会议也会很关注的。

计算机视觉和AI方向的一些顶级会议和期刊:(ICCV, CVPR, ECCV, NIPS, IJCAI, ICML, AAAI)(TPAMI, IJCV, ..)

Computer Vision

  Best Good
Conf. ICCV, Inter. Conf. on Computer Vision ICIP, Inter. Conf. on Image Processing
  CVPR, Inter. Conf. on Computer Vision and Pattern Recognition ICPR, Inter. Conf. on Pattern Recognition
  ECCV, Euro. Conf. on Comp. Vision ACCV, Asia Conf. on Comp. Vision
  🇨🇳 🇨🇳
Journal TPAMI, IEEE Trans. on Patt. Analysis and Machine Intelligence CVIU, Computer Vision and Image Understanding
  IJCV, Inter. Jour. on Comp. Vision PR, Pattern Reco.

A.I.

  Best Good
Conf. NIPS: Neural Information Processing Systems AAAI: American Association for Artificial Intelligence
  IJCAI: International Joint Conference on Artificial Intelligence ACM/SigIR: 这个是IR方面的,可能DB/AI的人都有
  ICML: International Conference on Machine Learning  
  🇨🇦 🇨🇦
Journal Machine Learning AI MAGAZINE
  NEURAL COMPUTATION NEURAL NETWORKS
  ARTIFICIAL INTELLIGENCE PATTERN RECOGNITION
  PAMI IMAGE AND VISION COMPUTING
  IEEE TRANSACTIONS ON NEURAL NETWORKS IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING
  IEEE TRANSACTIONS ON FUZZY SYSTEMS APPLIED INTELLIGENCE

Graphics

Others

3 Some Personal Advices

Advice on Daily Routine

看视频体系学习

我猜测题主的问题是如何快速入计算机视觉的门,针对这个问题我更推荐跟着教材和讲座成体系地,由浅入深地系统学习,而不是一开始自己一个人单打独斗地去学习一些孤立的知识点。因为私以为把只是实现串联起来比学习知识点本身更重要,如果对计算机视觉没有一个系统性了解的话是无法有一个稳固基础的。然后等到自己对计算机视觉有一个成体系的了解了之后再去追寻自己感兴趣的方向不迟。

入门教材与讲座

请将下面的网站的slides看完,辅助slides中提到的书的章节,应该可以入门了,1-2个月时间即可,我现在就在看,大四,有相应的数学和图像基础,有机器学习,深度学习基础(除了CS231n外不怎么涉及,CS231n本身就是讲cNNs在视觉方面的应用的,当然有一定基础可以更容易理解)。以下课程都是斯坦福计算机视觉实验室的。

上面回答提供的课程都比较老了,CS231n2017Spring给的推荐课程。其中相关的最新的CV课的传送门:

从经典论文入手

入手一个新的领域,先找那些著名的论文,精度10篇,基本就入门了。

1.道

2. 术

需要哪些数学 编程 工具 等知识?

3.深度学习入手

入门的话,本科的数学知识基本就够了,然后开始看论文吧。基本现在搞计算机视觉(Computer Vision, CV)都是基于深度学习的。第一篇推荐alexnet,算是深度学习搞CV的开山之作,接着基本就是需要先把分类的看一看,现在的CV大多数任务都是基于分类任务的深度网络进行扩展的。

列一些个人感觉必看的论文(只写出名字,链接自己去找吧):

上述论文每一篇都精读,看一篇论文之后跑一下作者提供的source code,大概就对使用深度学习搞计算机视觉了解个大概了。

之后就是根据自己的兴趣,detection、tracking、semantic segmentation、visual Q&A、image captioning等,自己去找相应的论文去看吧。

读书,读文章

计算机视觉是一个很大的范畴的总和,有两种学习方式,一种是阅读基础书,搞懂它的每一部分;另一种是找一个问题,看文献,编程实现,不断往深走。这两种学习方式是互补的,如果你看了好几年书还不能上手解决问题,或者只会解决某些很特殊的问题,对其他问题束手无策都不算成功。因此你需要把看书掌握一般知识和编程实验解决具体问题齐头并进。下面说你要干什么:

下载安装OpenCV2

读综述

多视图几何

模式识别

图形学

读文献

看文章的时候注意上网搜索,作者可能在网上公布了代码,你可以把代码下载下来深入研究而不用自己重新发明轮子。

Table of Contents