计算机视觉的两大主要板块是:几何和识别,这里我们主要来讲述计算机视觉在1995~2015年间的进展。
1. 影像特征点检测算子(detector)和描述算子(descriptor) SIFT的诞生(1999 ~ 2004)
Scale invariant feature transform(SIFT)是在1999年由UBC的教授David Lowe首次提出,并在2004年进一步完善并发表的影像特征点检测(detector)和描述算子(descriptor)。SIFT的诞生是计算机视觉里程碑式的进步,它使得homography estimation,structure from motion,epipolar geometry以及机器人(robotics)中的SLAM有了飞跃式的改进,正是因为SIFT好于在它之前的任何描述子,使得匹配更加准确。SIFT不只是在geometry上有应用,它后来广泛应用于目标识别 (Object Recognition)(见后文)。
2. 特征工程:描述子(descriptor)的广泛诞生(1995 ~ 2010)
在深度学习(feature learning)流行之前,学者们手工设计(manuallycraft)了很多point,image patch,spatial-temporalvolumetric cube和3D mesh的描述子,这些描述子一般都具有抗噪声,对旋转、光照、比例、对比度等等不敏感的特性。除SIFT之外,其它著名的算子有:
(1) shape context:它由CornellTech的Serge Belongie教授于2002年提出,他使用了计算机视觉中常用的binning来描述点周围的shapecontext,在角度方向,使用了均衡的binning,而在半径方向,使用了log-polar binning,这样直观上就是越近的点对shape影响更大。Shape context是很成功的形状描述子,对于2D的形状识别,在当时MNIST手写字识别上达到了最好的效果。
(2) HOG:它的全称是Histogramof Oriented Gradients,在2005年由Dalal & Triggs提出来,应用到行人检测上。HOG不同于SIFT的地方是:HOG用于描述整块patch,并不像SIFT一样有keypoint的概念;HOG没有rotation-invariant的特性。HOG后来广泛的用于其他目标的识别,最成功的拓展是基于HOG的deformableparts model(DPM,由Felzenszwalb教授在2010年提出),它是deep learning之前最好的objectdetection & recognition算法。
(3) spin image:它是一种3Dmesh的描述子,由Andrew Johnson博士在1997年提出,并在1999年完善的。它用来做surfacematching,如今激光扫描仪(lasterscanner)越来越普遍,价格也越来越便宜,于是点云数据也是越来越常见,spin image就能直接用于点云的匹配。因为spinimage描述子是基于局部的坐标系——其XY平面是那点的切平面,Z是点的法向(normal),XY坐标轴的方向不需要确定(不像计算SIFT descriptor时,需要把坐标轴对齐到dorminantdirection)——当两个来自不同全局坐标系点云的点都用shape context描述后, 就能直接欧式距离比较它们的相似度了。
(4) 除了这些非常成功的描述子,其它的还有STIP(Space-Time Interest Points, 2005),HOF(Histogram of oriented optical flow, 2009),MBH(motion boundary histogram, 2013)。
3. 目标识别,object recognition(2005~ 2010)
在2010年前,也就是deeplearning用于目标识别之前,这个时期还没有大规模的影像数据库(ImageNET 2009年采集完成),第一个用于目标识别的数据库是目前斯坦福的Fei-Fei Li教授在caltech读博期间采集的Caltech101,它有101类目标,每个种类的目标有40~800张影像。虽然相比目前的imageNET,它小得不能再小了,可是它对计算机视觉目标识别有着不可磨灭的贡献,caltech101开启了目标识别的先河,这期间诞生了很多有趣的descriptors和objectrecognition algorithms,其中主流的目标识别算法是(1)bag-of-visual-words(BoW);(2)template matching。BoW受到文本领域topicmodeling的启发,主要思想是在影像上随机的采取一些patches,这些patches叫做visual words,影像就能看作由这些visualwords组成的(正如一篇文章(document)由很多words组成)。下面我们来说说代表性的目标识别的文章:
(1) LDA:latentDirichlet allocation,它本来由普林斯顿的DavidBlei教授在2003年提出,用于文本的unsupervisedtopic modeling,在2005年,仍在读博的Fei-Fei Li用LDA做视觉中的场景分类,这是一篇典型的bag-of-visual-words算法用于目标分类的文章;
(2) SPM:spatialpyramid matching,它是目前UIUC的教授Lazebnik提出的,用非常简单的spatialgrid把image分成几块,然后每块分别统计BoWhistogram,最后把这些histogram拼接在一起,这样形成的影像描述子就有了空间结构信息,再不像以前的BoW描述子一样缺乏空间信息了,非常简洁,但也非常有效;
(3) 基于BoW的一些改进的image encoding方法:2006~2009年,学者们用sparsecoding,Fishervector等技巧来改善传统的BoW影像描述子(image encoding),这样的描述子更加的discriminative,取得了一些进步,不过他们仍然属于BoW体系中的方法;
(4) Pyramid matching kernel:它由UT Austin的Grauman教授提出,虽然第一步也是提取visual words (SIFT),不过它不同于BoW的是:PMK定义了一种相似度kernel,通过两张影像上提取的SIFT描述子来直接描述两张影像的相似度,最后用SVM分类。显然PMK中每张单独的影像并没有自己的描述子(encoded vector descriptor)。
(5) DPM:deformableparts model,由Felzenszwalb教授在2010年提出,它是一种完全不同与以前方法的目标识别算法,它的核心思想是模板匹配,定义了root template和几个parttemplates,然后用latentSVM描绘root和parts之间的几何关系,最后通过latent descriminative training得到latent svm参数,便可用于分类。DPM是deep learning之前最好的目标识别算法,之后有一些DPM 的加速算法,用于快速目标检测。
4. 自动特征这学习:deep learning在视觉中的流行(2010 ~ 2015)
Deep learning的再次流行,打破了目标识别算法的格局,使得无论是BoW还是DPM都成为过去式,deep learning成为目标识别领域的领跑者。首先BoW根本不具有物体的结构信息,再之,DPM可以看成是2层的一种structure(root+part),但与deep learning 的层数(通常10~20层)来比,也算一种浅层结构了(shallownetwork)。Deeplearning的流行,有4个人功不可没:Geoffrey Hinton,Yann LeCun,Yoshua Bengio和AndrewNg。
这里我们重点介绍deep convolutional neural network(CNN),它早在1990年就由YannLeCun用于手写字的识别,可是一直到2012年,CNN一直没被重视,两个原因:(1)SVM优美的理论,遥遥领先的分类能力,使得其它分类器(包括CNN)黯然失色;(2)计算机硬件的计算性能有限,加上没有大量的labeled数据,使得CNN一直没能得到很好的结果。2012年,Krizhevsky(GeoffreyHinton在加拿大多伦多大学的学生)在NIPS上present了CNN用于目标识别的结果,它直接把最好的目标识别算法误差减半,这引起了轩然大波和热烈的讨论,到了今天,CNN 已经被整个计算机视觉界所接受,成为目标识别的通用方法。
CNN的结构是:n*(convolutionlayer + pooling layer) + several fully connected layers,CNN的这种deepstructure受启发于人的视觉神经元识别目标的层次解构:LGN-V1-V2-V4-IT,简单的方向信息源往往会使得低层的神经元firing,而更抽象的形状刺激源往往能激发高层V4区域的神经元。CNN的deep structure利用了下面的属性:很多自然信号都是层次结构的,高层的复杂特征由低层的简单特征组成。CNN中的convolutionallayer是distributed representation的一种表征,而pooling layer使得deepstructure对影像微小的平移(shift)和形变(distortion)不敏感。CNN使用error back propagation来训练参数,具体用一阶的随机梯度下降法(stochastic gradient descent)来训练。后面我们将会从技术的细节来具体解析CNN。