雷锋网注:作者赵京雷,阅面科技CEO,上海交通大学人工智能博士,前阿里巴巴北京算法研究中心负责人,专注人工智能算法研究超过15年。本文系雷锋网独家文章。
2016年是人工智能发展的第60周年,人工智能已经走了很长一段路,随着AlphaGo的辉煌战绩的出现,又再次引爆了人工智能在各个领域的发展。回顾计算机视觉发展之路,才能让我们踩着历史的积淀,顺应发展的大潮,去探索未来。
|
一、计算机视觉的认知依据
人类对世界的认知非常简单,我们可以一眼看出一个水果是苹果还是橘子。但是对于机器来说,我们怎么写个程序让机器来分辨苹果和橘子呢。
(人类的识别)
如果让大家思考,我们会给出各种答案,比如是不是可以让机器通过水果的颜色来区分,或者通过形状和纹理来区分等等。
(基于颜色、形状、纹理的识别)
在深度学习出现之前,这种基于寻找合适的特征去让机器辨识物品的状态,基本上代表了计算机视觉的全部。
以颜色特征为例,它是一种在现在依然被广泛应用的特征,我们称之为颜色直方图特征。它是一种最简单、最直观,对实际图片的颜色进行数字化表达的方式。机器识别图片只能用二维的向量来表示。我们都知道颜色的值可以用RGB三原色来表示,颜色直方图的横轴代表颜色的RGB数值,表示一个物品所有颜色的可能性,纵轴则代表了整个图像具有某个颜色值的像素数量,其实,通过这样一种非常直观的方法,机器就可以对看到的图片进行颜色表征。在过去的二三十年里,关于颜色特征的表示有很多探索和研究,比如:各种各样颜色直方图的变种,使得计算机能够通过二维数字串的形式,更好地表示图像的颜色特征,使得其能够区分看到的不同物品。
左:(颜色直方图striker 1995) 右:(颜色距 striker 1995)
以纹理特征为例,桔子会有坑坑洼洼的纹理,而苹果的纹理则非常光滑。这种局部的纹理刻画,如何通过数字串的形式抽象表示出来,和颜色特征一样,这是过去很多年计算机视觉一直在探求和优化的问题。下图是计算机视觉中在各个领域使用较多的纹理特征表示方法示例。
(纹理直方图)
(SDM)
形状特征也是一样,以下两图可以直观的示例计算机视觉通过形状特征来进行识别。
(Hog:Dalal,2005)
通过这些例子可以看出,计算机视觉在过去很多年,处理问题的方法很简单,
就是找到一种合适的特征抽象方法,对一个待识别或者待分类问题进行特征表达,然后进行计算的过程。
如果要做人脸识别,需要寻找到底是颜色特征还是纹理特征或者形状特征更适于表达,怎么样能把目标问题区分开来。对人脸来说,颜色的作用不会很大,因为人脸的颜色长得都差不多。但是人脸的褶皱、纹理,两眼之间的距离等可能代表了不同人之间的区别,可能纹理和结构特征相比更加有效。而如果我们要检测识别人体,可能纹理特征就不是那么重要,因为人会穿各种各样的衣服,但形状特征就会很重要。所以,过去的计算机视觉是
针对不同的问题,选择不同的特征表征方法。
|
二、计算机视觉的发展过程
从2006年开始,在将近10年的时间里,计算机视觉的方法发生了一个比较本质的变化,就是深度学习的出现,在某种程度上改变了我们前面对计算机视觉的定义。我们先了解一下计算机视觉发展的历程,看看是基于什么契机和积累,让计算机视觉发生了这样的变化。
计算机视觉的发展史可以追溯到1966年,著名的人工智能学家马文·明斯基给他的本科学生布置了一道非常有趣的暑假作业,就是让学生在电脑前面连一个摄像头,然后写一个程序,让计算机告诉我们摄像头看到了什么。大师就是大师,这道题实在是太有挑战了,在某种意义上它代表了全部计算机视觉要做的事情,因此我们认为这是一个起点。
上世纪70年代,研究者开始去试图解决让计算机告知他到底看到了什么东西这个问题。研究者认为要让计算机认知到底看到了什么,可能首先要了解人是怎样去理解这个世界的。因为那时有一种普遍的认知,认为人之所以理解这个世界,是因为人是有两只眼睛,他看到的世界是立体的,他能够从这个立体的形状里面理解这个世界。在这种认知情况下,研究者希望先把三维结构从图像里面恢复出来,在此基础上再去做理解和判断。
(David Marr,1970s)
上世纪80年代,是人工智能发展的一个非常重要的阶段。人工智能界的逻辑学和知识库推理大行其道,研究者开始做很多专家推理系统,计算机视觉的方法论也开始在这个阶段产生一些改变。人们发现要让计算机理解图像,不一定先要恢复物体的三维结构。例如:让计算机识别一个苹果,假设计算机事先知道苹果的形状或其他特征,并且建立了这样一个先验知识库,那么计算机就可以将这样的先验知识和看到物体表征进行匹配。如果能够匹配,计算机就算识别或者理解了看到的物体。
所以,80年代出现了很多方法,包括几何以及代数的方法,将我们已知的物品转化成一些先验表征,然后和计算机看到的物品图像进行匹配。
(David Lowe, 1987)
上世纪90年代,人工智能界又出现了一次比较大的变革,也就是统计方法的出现和流行。在这个阶段,经历了一些比较大的发展点,比如现在还广泛使用的局部特征。前面介绍的形状、颜色、纹理这些表征,其实会受到视角的影响,一个人从不同的角度去看物品,它的形状、颜色、纹理可能都不太一样。随着90年代统计方法的流行,研究者找到了一种统计手段,能够刻画物品最本质的一些局部特征,比如:要识别一辆卡车,通过形状、颜色、纹理,可能并不稳定,如果通过局部特征,即使视角变化了,也会准确对其进行辨识。局部特征的发展,其实也导致了后来很多应用的出现。比如:图像搜索技术真正的实用,也是由于局部特征的出现。研究者可以对物品建立一个局部特征索引,通过局部特征可以找到相似的物品。其实,通过这样一些局部点,可以让匹配更加精准。
(David Lowe, 1999)
到2000年左右,机器学习方法开始盛行。以前需要通过一些规则、知识或者统计模型去识别图像所代表的物品是什么,但是机器学习的方法和以前完全不一样。机器学习能够从海量数据里面去自动归纳物品的特征,然后去识别它。在这样一个时间点,计算机视觉界有几个非常有代表性的工作,比如:人脸识别。
要识别一个人脸,第一步需要从图片里面把待识别的人脸区域给提取出来,这叫人脸检测。像在拍照的时候,会看到相机上有个小方框在闪,那其实是人脸识别必要的第一步工作,也就是人脸框的检测。在以前,这是非常困难的工作,但是在2000年左右,出现了一种非常好的算法,它能够基于机器学习,非常快速的去检测人脸,称之为Viola&Jones人脸检测器,这奠定了当代计算机视觉的一个基础。
(Viola&Jones, 2001)
机器学习的盛行其实是伴随着一个必要条件出现的,就是在2000年左右,整个互联网的出现和爆发,产生了海量的数据,大规模数据集也相伴而生,这为通过机器学习的方法来做计算机视觉提供了很好的土壤。在这期间,出现了大量学术官方的,针对不同领域评测的数据集。人脸检测最具有代表性是一个叫FDDB的数据集。这个数据集包含了超过5000多张人脸数据,每一张人脸,都人为的用框给框出来,机器就可以从这些框好的数据里面,通过一些机器学习的手段去学习从任何一张图片中找到人脸区域。
(FDDB,5171 faces, 2845 images)
另外,我们耳熟能详的一个数据集是人脸识别数据集LFW。提到人脸识别,可能我们听过“计算机做人脸识别比人更准”。其实这句话是有一定问题,在很多实际场景里,计算机做人脸识别连人的70%可能都达不到。那么在什么情况下,它比人准呢。有一种情况就是在LFW上。LFW数据集里面有1万多张人脸和5000多个人的数据,每个人都有在不同情况下拍摄的真实场景的多张人脸。基于这样的一个数据集,研究者可以在上面评估人脸识别的精度。人脸识别领域发展非常快,尤其是最近几年深度学习的兴起后,这个数据集变得非常火爆。人在LFW上面的识别正确率大概是97.75%,而机器已经在LFW上可以做到99.75%甚至更要高。