自从上了研究生才让我对人工智能领域有了些许了解,然而也让我对其下一个热门领域——计算机视觉产生了浓厚的兴趣。然而目前已经快接触有一年的时间了,但还是有许多要提升的地方。现在就自己的学习路径作个总结。
计算机视觉可以分三步走我个人觉得比较适合自己,这是一些浅见。第一个阶段——图像处理(数字图像处理),第二阶段——图像识别(机器学习),第三阶段——图像语义的理解(深度学习)。

这期间自己接触过一些书籍也感觉是比较好的,同时也是我一直都需要看的。

第一阶段:图像处理

环境:win10+VS2012+Opencv2.4.10

环境的搭建可以在网络上搜,现在已经有很多教程了,同时推荐安装Opencv3.2.0及以上的,环境配置及其方便,基本都集成在一个库里面,所以也只需要添加一个就好。前几天Opencv官网又出了新的版本——Opencv3.3.0这刚好迎合了深度学习的热潮,其中将DNN放入主要模块中的确是巩固Opencv市场根基的又一大体现。言归正传,《数字图像处理(第三版)》冈萨雷斯 著,这本书可以说是图像处理中的一股清流,书中对图像处理的原理深入浅出的讲解了;哈哈,看书是不是没能给你直接的感触,此时,《Opencv3编程入门》就闪亮登场啦,在这之前也有一本圣经《learning Opencv》这本书是基于Opencv1版本的,我当时没有看这本。《Opencv3编程入门》此书是博客专家浅墨著作的,这本书可以理解为是《数字图像处理》这本书中的大部分代码的实现,很直观,同时书中对Opencv几个常用的模块都有代码详细说明,本书的代码大部分都是C风格的,些许用到了C++模板库的函数,比如:vector等,要想深入学习以及用好图像处理的话还是有必要把C++学好,其实后期还会接触到Python编程语言(这个有空就看下吧,作为视觉领域或图像处理领域这两门语言算是必会了)。哈哈,把图像处理和Opencv中的例程都实现一遍后(这一阶段就感觉是把PS中实现的功能,自己给通过实实在在的代码给实现了,衰,当然自己还是很菜的,不能跟PS神器进行比拟), 你会更加迫不及待要做些“大事”的,但发现除了将图像增强啊,什么开操作,闭操作,图像物体简单检测,目标简单跟踪,人脸检测下之外,要识别物体就衰了。所以这阶段能把图像处理这本书以及Opencv学好这对后期的学习还是有很大的帮助的,不要着急去学习其他的所谓“切勿浮沙筑高台”嘛。基础还是很重要的。

第二阶段:图像识别

环境:Python2.7+scikit-learn
这一阶段呢,需要学的也是很多的,首先就是从原理上了解。对于机器学习,无疑斯坦福大学的《机器学习》课程,吴恩达这位人工智能大牛主讲,帮助了无数人学习机器学习,从理论上讲解机器学习的数学原理,同时李航博士著的《统计学习方法》也深入浅出的道出了机器学习算法的原理,提出了方法 = 模型 + 策略 + 算法。本书也是按着这样的思路给我们娓娓道来的,在Opencv中也有对应的模块ml,这里面包含了常用的机器学习算法,同时Python版的scikit-learn也是学习机器学习的好库,同时也把Python这门语言提升一下,对于最终要学习的深度学习用Python实现相应功能还是很快捷方便的,毕竟Python的宗旨就是智能简洁;要学会常用算法的使用以及学会其中几个编写(还有好多都是用的库,比如SVM,这个自己写就很费时,利用前人造的轮子我们拿来用就好了),其中SVM(支持向量机)的数学原理必须要明白,从线性可分到线性不可分是如何加入核函数的,以及如何定义loss function函数的,其中的证明过程也是要会的。SVM还有一本书专门写它的,叫《支持向量机导论》里面都是关于它的数学证明(是不是感觉机器学习就是在搞数学,泪崩),虽然过程是痛苦的,但实现像人脸识别啊,车牌识别之类的识别工作通过机器学习进行分类效果还是很不错的,当然了这里面也是有很多关于图像上的知识要学,比如,你要实现人脸的识别,首先你得提取人脸的特征,让机器知道这是一张脸,之后才是识别的工作,这其中就牵扯到特征的提取,在人脸中利用的haar特征,又比如之前很火的HOG+SVM组合进行行人检测的,其中,HOG就是提取特征,SVM进行分类。这在Opencv中也有专门的模块讲解特征检测的。但是近年来随着神经网络的惊人的效果以及精确度,迅速占领了像CVPR、ICCV等这些顶级会议(计算机视觉界比较牛X的学术会议,代表了你在这一领域的学术水平,哈哈,小菜我如果能发一篇,好吧,回归现实),中间几乎所有的paper都用到了神经网络,所有学习它自然也是必然水到渠成的过程啦。

第三部分:图像语义的理解

终于来到这模块了,还很激动,毕竟小菜最近才刚把Caffe配置好,之前一直在看理论的神经网络知识。在小试牛刀之前呢,我们还得学习一些课程:其中要属李菲菲教授教的cs231n深度学习与视觉识别课程了,在这之前你需要了解什么是神经网络,以及它的结构组成,可以参考UFLDL课程,这里面详细的介绍了神经网络的结构。对于神经网络,其实这个在机器学习中就会接触到的,就是感知机,只不过之所以叫网络其实就是它组成的网络,还有重要经典的BP反馈神经网络,并学会它们的推导。这有利于你的理解,当然啦,在你学会了以上的课程,对CNN也有了一些理解了,此时就可以读一些经典的paper来了解常用的神经网络结构了,比如AlexNet,GoogleNet,LeNet,VGGNet等。在了解了常见的网络模型后,就可以配置跑自己的数据集啦。

总结

写的很粗糙,算是对自己学习路线的一个总结,同时对以后要做的事情作一个规划吧,那就是接下来花更多的时间来学习神经网络的知识,同时提升自己Python的编程能力,研二即将到来,要学的还有很多,向这一行业的大牛们虚心学习,望自己能早日入门。

仅以此文记自己研一的生活。