1. 程式人生 > >計算機視覺進展二十年 (1995~2015) 轉載~有興趣的朋友可以看看哦

計算機視覺進展二十年 (1995~2015) 轉載~有興趣的朋友可以看看哦

計算機視覺的兩大主要板塊是:幾何和識別,這裡我們主要來講述計算機視覺在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) 流行之前,學者們手工設計 (manually craft) 了很多point, image patch, spatial-temporal volumetric cube 和 3D mesh的描述子,這些描述子一般都具有抗噪聲,對旋轉、光照、比例、對比度 等等 不敏感的特性。除SIFT之外,其它著名的運算元有:

(1) shape context, 它由 Cornell Tech的 Serge Belongie 教授於2002年提出, 他使用了計算機視覺中常用的binning來描述點周圍的shape context, 在角度方向, 使用了均衡的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 parts model (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時,需要把座標軸對齊到dorminant direction) – 當兩個來自不同全域性座標系點雲的點都用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年前,也就是deep learning用於目標識別之前, 這個時期還沒有大規模的影像資料庫( ImageNET 2009年採集完成),第一個用於目標識別的資料庫是 目前斯坦福的 Fei-Fei Li 教授在caltech 讀博期間採集的Caltech101,它有101類目標, 每個種類的目標有40~800張影像。雖然相比目前的imageNET, 它小得不能再小了,可是它對計算機視覺目標識別有著不可磨滅的貢獻,caltech101開啟了目標識別的先河, 這期間誕生了很多有趣的 descriptors 和 object recognition algorithms, 其中主流的目標識別演算法是 (1)bag-of-visual-words (BoW); (2) template matching。 BoW受到文字領域topic modeling的啟發,主要思想是在影像上隨機的採取一些patches, 這些patches叫做visual words, 影像就能看作由這些visual words 組成的 (正如一篇文章 (document) 由很多 words 組成)。 下面我們來說說代表性的目標識別的文章:

(1) LDA: latent Dirichlet allocation, 它本來由普林斯頓的David Blei 教授在2003年提出,用於文字的unsupervised topic modeling, 在2005年, 仍在讀博的Fei-Fei Li 用LDA做視覺中的場景分類, 這是一篇典型的bag-of-visual-words 演算法用於目標分類的文章;

(2) SPM (spatial pyramid matching), 它是目前UIUC 的教授Lazebnik提出的, 用非常簡單的spatial grid把image分成幾塊,然後每塊分別統計BoW histogram, 最後把這些histogram拼接在一起,這樣形成的影像描述子就有了空間結構資訊,再不像以前的BoW描述子一樣缺乏空間資訊了,非常簡潔, 但也非常有效;

(3) 基於BoW的一些改進的 image encoding 方法:2006~2009年,學者們用 sparse coding, Fisher vector 等技巧來改善傳統的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:deformable parts model,由Felzenszwalb 教授在2010年提出, 它是一種完全不同餘以前方法的目標識別演算法,它的核心思想是模板匹配,定義了root template 和幾個 part templates,然後用latent SVM 描繪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層)來比,也算一種淺層結構了 (shallow network)。Deep learning的流行,有4個人功不可沒: Geoffrey Hinton, Yann LeCun, Yoshua Bengio 和 Andrew Ng。

這裡我們重點介紹 deep convolutional neural network (CNN), 它早在1990年就由Yann LeCun用於手寫字的識別,可是一直到2012年,CNN一直沒被重視,兩個原因:(1)SVM 的優美的理論,遙遙領先分類能力,使得其它分類器 (包括CNN) 黯然失色;(2)計算機硬體的計算效能的有限, 加上沒有大量的labeled資料,使得CNN一直沒能得到很好的結果。 2012年, Krizhevsky (Geoffrey Hinton在加拿大多倫多大學的學生)在NIPS上present了CNN用於目標識別的結果, 它直接把最好的目標識別演算法誤差減半,這引起了軒然大波和熱烈的討論,到了今天,CNN 已經被整個計算機視覺界所接受,成為目標識別的通用方法。

CNN 的結構是: n* (convolution layer + pooling layer) + several fully connected layers, CNN的這種deep structure受啟發於人的視覺神經元識別目標的層次解構:LGN-V1-V2-V4-IT,簡單的方向資訊源往往會使得低層的神經元firing, 而更抽象的形狀刺激源往往能激發高層V4區域的神經元。CNN 的 deep structure利用了下面的屬性: 很多自然訊號都是層次結構的,高層的複雜特徵又低層的簡單特徵組成。CNN 中的 convolutional layer 是 distributed representation 的一種表徵, 而 pooling layer 使得 deep structure 對影像微小的平移(shift)和 形變 (distortion) 不敏感。CNN使用error back propagation來訓練引數,具體用一階的隨機梯度下降法 (stochastic gradient descent)來訓練。後面我們將會從技術的細節來具體解析CNN。