計算機視覺的兩大主要板塊是:幾何和識別,這裡我們主要來講述計算機視覺在1995—2015年間的進展。
1.影像特徵點檢測算子(detector)和描述算子(descriptor) SIFT的誕生(1999, 2004)
Scale invariantfeature transform (SIFT) 是在1999年由 UBC 的教授 David Lowe首次提出,並在2004年進一步完善並發表的影像特徵點檢測 (detector) 和描述算子(descriptor)。SIFT的誕生是計算機視覺裡程碑式的進步,它使得 homography estimation, structure frommotion, epipolar geometry 以及 機器人 (robotics) 中的SLAM 有了飛躍式的改進,正是因為SIFT好於在它之前的任何描述子,使得匹配更加準確。SIFT不只是在geometry上有應用, 它後來廣泛應用於目標識別 (Object Recognition)(見後文)。
2. 特徵工程:描述子(descriptor) 的廣泛誕生(1995—2010)
在深度學習 (featurelearning) 流行之前,學者們手工設計 (manually craft) 了很多point, image patch, spatial-temporalvolumetric cube 和 3D mesh的描述子,這些描述子一般都具有抗噪聲,對旋轉、光照、比例、對比度 等等不敏感的特性。除SIFT之外,其它著名的算子有:
(1) shape context, 它由Cornell Tech的 Serge Belongie 教授於2002年提出, 他使用了計算機視覺中常用的binning來描述點周圍的shapecontext, 在角度方向, 使用了均衡的binning, 而在半徑方向, 使用了log-polar binning, 這樣直觀上就是越近的點對shape影響更大。Shape context 是很成功的形狀描述子, 對於2D 的形狀識別, 在當時MNIST手寫字識別上達到了最好的效果。
(2) HOG: 它的全稱是Histogram of Oriented Gradients, 在2005年由 Dalal & Triggs提出來,應用到行人檢測上。HOG不同於SIFT的地方是:HOG用於描述整塊patch, 並不像SIFT一樣有keypoint的概念;HOG沒有rotation-invariant 的特性。HOG 後來廣泛的用於其他目標的識別,最成功的拓展是基於HOG的deformable partsmodel(DPM, 由Felzenszwalb 教授在2010年提出), 它是deep learning 之前最好的object detection& recognition 算法。
(3) spin image:它是一種3D mesh的描述子, 由 Andrew Johnson 博士在1997年提出, 並在1999年完善的。它用來做surface matching,如今雷射掃描儀 (laster scanner) 越來越普遍,價格也越來越便宜,於是點雲數據也是越來越常見, spin image就能直接用於點雲的匹配。因為spin image 描述子是基於局部的坐標系–其XY平面是那點的切平面,Z是點的法向(normal),XY坐標軸的方向不需要確定(不像計算SIFT descriptor時,需要把坐標軸對齊到dorminantdirection)–當兩個來自不同全局坐標系點雲的點都用shape context 描述後, 就能直接歐式距離比較它們的相似度了。
(4)除了這些非常成功的描述子,其它的還有 STIP (Space-Time Interest Points, 2005), HOF (Histogram oforiented optical flow, 2009), MBH (motion boundary histogram, 2013)。
3. 目標識別, objectrecognition(2005—2010)
在2010年前,也就是deeplearning用於目標識別之前, 這個時期還沒有大規模的影像資料庫(ImageNET2009年採集完成),第一個用於目標識別的資料庫是目前斯坦福的Fei-FeiLi教授在caltech讀博期間採集的Caltech101,它有101類目標,每個種類的目標有40~800張影像。雖然相比目前的imageNET,它小得不能再小了,可是它對計算機視覺目標識別有著不可磨滅的貢獻,caltech101開啟了目標識別的先河,這期間誕生了很多有趣的descriptors和objectrecognition algorithms, 其中主流的目標識別算法是(1)bag-of-visual-words (BoW); (2) templatematching。 BoW受到文本領域topic modeling的啟發,主要思想是在影像上隨機的採取一些patches, 這些patches叫做visualwords, 影像就能看作由這些visual words 組成的(正如一篇文章 (document) 由很多 words 組成)。下面我們來說說代表性的目標識別的文章:
(1) LDA: latentDirichlet allocation, 它本來由普林斯頓的David Blei教授在2003年提出,用於文本的unsupervised topicmodeling, 在2005年, 仍在讀博的Fei-Fei Li用LDA做視覺中的場景分類, 這是一篇典型的bag-of-visual-words算法用於目標分類的文章;
(2) SPM (spatialpyramid matching), 它是目前UIUC的教授Lazebnik提出的, 用非常簡單的spatialgrid把image分成幾塊,然後每塊分別統計BoW histogram,最後把這些histogram拼接在一起,這樣形成的影像描述子就有了空間結構信息,再不像以前的BoW描述子一樣缺乏空間信息了,非常簡潔, 但也非常有效;
(3) 基於BoW的一些改進的 imageencoding 方法:2006~2009年,學者們用 sparse coding, Fisher vector 等技巧來改善傳統的BoW影像描述子(image encoding),這樣的描述子更加的discriminative, 取得了一些進步,不過他們仍然屬於BoW體系中的方法;
(4) Pyramid matchingkernel: 它由UT Austin的Grauman 教授提出,雖然第一步也是提取visual words (SIFT), 不過它不同於BoW的是:PMK定義了一種相似度kernel,通過兩張影像上提取的SIFT描述子來直接描述兩張影像的相似度,最後用SVM分類。顯然PMK中每張單獨的影像並沒有自己的描述子 (encoded vectordescriptor)。
(5) DPM:deformableparts model,由Felzenszwalb 教授在2010年提出, 它是一種完全不同餘以前方法的目標識別算法,它的核心思想是模板匹配,定義了roottemplate 和幾個part templates,然後用latent SVM 描繪root和parts之間的幾何關係,最後通過 latentdescriminative training 得到latent svm 參數,便可用於分類。DPM是deeplearning之前最好的目標識別算法,之後有一些DPM 的加速算法,用於快速目標檢測。
4. 自動特徵這學習: deeplearning 在視覺中的流行 (2010—2015)
Deeplearning的再次流行,打破了目標識別算法的格局,使得無論是BoW還是DPM都成為過去式,deeplearning成為目標識別領域的領跑者。首先BoW根本不具有物體的結構信息,再之,DPM可以看成是2層的一種structure (root+part),但與deep learning 的層數(通常10~20層)來比,也算一種淺層結構了(shallow network)。Deeplearning的流行,有4個人功不可沒:Geoffrey Hinton, Yann LeCun, Yoshua Bengio 和 Andrew Ng。
這裡我們重點介紹 deepconvolutional neural network (CNN), 它早在1990年就由YannLeCun用於手寫字的識別,可是一直到2012年,CNN一直沒被重視,兩個原因:(1)SVM 的優美的理論,遙遙領先分類能力,使得其它分類器 (包括CNN)黯然失色;(2)計算機硬體的計算性能的有限, 加上沒有大量的labeled數據,使得CNN一直沒能得到很好的結果。 2012年, Krizhevsky(Geoffrey Hinton在加拿大多倫多大學的學生)在NIPS上present了CNN用於目標識別的結果,它直接把最好的目標識別算法誤差減半,這引起了軒然大波和熱烈的討論,到了今天,CNN已經被整個計算機視覺界所接受,成為目標識別的通用方法。
CNN 的結構是: n * (convolutionlayer + pooling layer) + several fully connected layers, CNN的這種deepstructure受啟發於人的視覺神經元識別目標的層次解構:LGN-V1-V2-V4-IT,簡單的方向信息源往往會使得低層的神經元firing,而更抽象的形狀刺激源往往能激發高層V4區域的神經元。CNN的deepstructure利用了下面的屬性:很多自然信號都是層次結構的,高層的複雜特徵又低層的簡單特徵組成。CNN中的convolutionallayer是distributed representation的一種表徵,而pooling layer使得deepstructure對影像微小的平移(shift)和形變(distortion) 不敏感。CNN使用error backpropagation來訓練參數,具體用一階的隨機梯度下降法 (stochastic gradient descent)來訓練。