物體檢測

物體檢測是計算機視覺中的經典問題之一,其任務是用框去標出圖像中物體的位置,並給出物體的類別。從傳統的人工設計特徵加淺層分類器的框架,到基於深度學習的端到端的檢測框架,物體檢測一步步變得愈加成熟。

概述

在傳統視覺領域,物體檢測是一個非常熱門的研究方向。受70年代落後的技術條件和有限套用場景的影響,物體檢測直到上個世紀90年代才開始逐漸走入正軌。物體檢測對於人眼來說並不困難,通過對圖片中不同顏色、紋理、邊緣模組的感知很容易定位出目標物體,但計算機面對的是RGB像素矩陣,很難從圖像中直接得到狗和貓這樣的抽象概念並定位其位置,再加上物體姿態、光照和複雜背景混雜在一起,使得物體檢測更加困難。

檢測算法裡面通常包含三個部分,第一個是檢測視窗的選擇, 第二個是特徵的設計,第三個是分類器的設計。隨著2001年Viola Jones提出基於Adaboost 的人臉檢測方法以來,物體檢測算法經歷了傳統的人工設計特徵加淺層分類器的框架,到基於大數據和深度神經網路的End-To-End的物體檢測框架,物體檢測一步步變得愈加成熟。

傳統檢測算法

在2001年,一篇基於Haar+Adaboost的檢測方法在學術界和工業界引起了非常大的轟動,它第一次把檢測做到實時,並且在當時的技術限制下,檢測性能也做的非常亮眼。縱觀2012年之前的物體檢測算法,可以歸結為三個方面的持續最佳化:檢測視窗的選擇、特徵的設計和分類器的設計。

檢測視窗的選擇

拿人臉檢測舉例,當給出一張圖片時,我們需要框出人臉的位置以及人臉的大小,那么最簡單的方法就是暴力搜尋候選框,把圖像中所有可能出現框的位置從左往右、從上往下遍歷一次。並且通過縮放一組圖片尺寸,得到圖像金字塔來進行多尺度搜尋。

但是這種方法往往計算量很大並且效率不高,在實際套用中並不可取。人臉具有很強的先驗知識,比如人臉膚色YCbCr空間呈現很緊湊的高斯分布,通過膚色檢測可以去除很大一部分候選區域,僅留下極小部分的區域作為人臉檢測搜尋範圍。由於膚色的提取非常快,只是利用一些顏色分布的信息,把每個像素判斷一下,整體速度提升很多。但膚色提取只是用到簡單的顏色先驗,如果遇到和膚色很像的,比如黃色的桌子,很有可能被誤判成人臉的候選檢測區域。

進一步提高精度衍生出如Selective Search 或EdgeBox 等區域提取的方法,基於顏色聚類、邊緣聚類的方法來快速把不是所需物體的區域給去除,相對於膚色提取精度更高,極大地減少了後續特徵提取和分類計算的時間消耗。

特徵的設計

在傳統的檢測中,Haar由於提取速度快,能夠表達物體多種邊緣變化信息,並且可以利用積分圖快速計算,得到廣泛的套用;LBP更多的表達物體的紋理信息,對均勻變化的光照有很好的地適應性;HOG通過對物體邊緣使用直方圖統計來進行編碼,特徵表達能力更強,在物體檢測、跟蹤、識別都有廣泛的套用。傳統特徵設計往往需要研究人員經驗驅動,更新周期往往較長,通過對不同的特徵進行組合調優,從不同維度描述物體可以進一步提升檢測精度,如ACF檢測,組合了20種不同的特徵表達。

分類器的設計

傳統的分類器包含Adaboost、SVM、Decision Tree等。

(1)Adaboost

一個弱分類器往往判斷精度不高,通過Adaboost自適應地挑選分類精度高的弱分類器並將它們加權起來,從而提升檢測性能。比如說,人臉檢測中一個候選視窗需要判斷是否為人臉,其中一些弱分類器為顏色直方圖分量(如紅黃藍三種顏色),如果黃色分量大於100,那我就認為這塊可能是人臉的候選區域,這就是個非常簡單的弱分類器。可是,單個這么弱的分類器判斷是很不準的,那么我們就需要引入另外一些分量做輔助。比如再引入紅色分量大於150,將幾個條件疊加起來,就組成了一個比較強的分類器。

這裡弱分類器的設計往往就是確定顏色判斷的閾值,為什麼會選擇100呢?其實這是我們需要學習得到的閾值,學習得到,當閾值設定為100時,分類的精度是最高的。另外,為什麼要選擇紅黃藍三種顏色?同樣,因為它們分類的精度更高。通過不斷進行特徵挑選並學習弱分類器,最終組合提升為Adaboost強分類器。

(2)SVM分類器

SVM通過最大化分類間隔得到分類平面的支持向量,線上性可分的小數據集上有不錯的分類精度,另外通過引入核函式將低維映射到高維,從而線性可分,在檢測場景被廣泛使用。

(3)決策樹

決策樹(Decision Tree)是一種樹形結構,其中每個內部節點表示一個屬性上的測試,每個分支代表一個測試輸出,每個葉子節點代表一種類別。

以二叉樹為例,假如從樹根進來有個二分類,我們需要區分它是人臉或者是非人臉,左邊是非人臉,右邊是人臉。當我進入第一個二叉樹分類器節點判斷,如果是非人臉的話直接輸出結果,如果是人臉候選的話進入下一層再做進一步的分類。通過學習每個節點的分類器來構造決策樹,最終形成一個強分類器。

(4)隨機森林

通過對決策樹進行Ensemble,組合成隨機森林更好的提高分類或者回歸精度。

物體檢測數據集

物體檢測常用的數據集有:PASCAL VOC和COCO。

PASCAL VOC為圖像識別和分類提供了一整套標準化的優秀的數據集,從2005年到2012年每年都會舉行一場圖像識別挑戰賽。

COCO數據集是微軟發布的,除了圖片以外還提供物體檢測、分割(segmentation)和對圖像的語義文本描述信息。

基於深度學習的檢測算法

物體檢測算法的演變分為兩個階段:一個就是基於傳統特徵的解決方法,另外一個就是深度學習算法。在2013年之前主流檢測算法是傳統的特徵最佳化檢測方法。但是,在2013年之後,整個學術界和工業界都逐漸利用深度學習來做檢測。

基於深度學習的早期的物體檢測,大都使用滑動視窗的方式進行視窗提取,這種方式本質是窮舉法 R-CNN 。後來提出Selective Search 等區域視窗提取算法,對於給定的圖像,不需要再使用一個滑動視窗進行圖像掃描,而是採用某種方式“提取”出一些候選視窗,在獲得對待檢測目標可接受的召回率的前提下,候選視窗的數量可以控制在幾千個或者幾百個。

後來,又出現了SPP ,其主要思想是去掉了原始圖像上的crop/warp等操作,換成了在卷積特徵上的空間金字塔池化層。那么為什麼要引入SPP層呢?其實主要原因是CNN的全連線層要求輸入圖片是大小一致的,而實際中的輸入圖片往往大小不一,如果直接縮放到同一尺寸,很可能有的物體會充滿整個圖片,而有的物體可能只能占到圖片的一角。SPP對整圖提取固定維度的特徵,首先把圖片均分成4份,每份提取相同維度的特徵,再把圖片均分為16份,以此類推。可以看出,無論圖片大小如何,提取出來的維度數據都是一致的,這樣就可以統一送至全連線層。

實際上,儘管R-CNN 和SPP在檢測方面有了較大的進步,但是其帶來的重複計算問題讓人頭疼,而 Fast R-CNN 的出現正是為了解決這些問題。 Fast R-CNN使用一個簡化的SPP層 —— RoI(Region of Interesting) Pooling層,其操作與SPP類似,同時它的訓練和測試是不再分多步,不再需要額外的硬碟來存儲中間層的特徵,梯度也能夠通過RoI Pooling層直接傳播。Fast R-CNN還使用SVD分解全連線層的參數矩陣,壓縮為兩個規模小很多的全連線層。

Fast R-CNN使用Selective Search來進行區域提取,速度依然不夠快。Faster R-CNN則直接利用RPN (Region Proposal Networks)網路來計算候選框。RPN以一張任意大小的圖片為輸入,輸出一批矩形區域,每個區域對應一個目標分數和位置信息。從 R-CNN 到 Faster R-CNN ,這是一個化零為整的過程,其之所以能夠成功,一方面得益於CNN強大的非線性建模能力,能夠學習出契合各種不同子任務的特徵,另一方面也是因為人們認識和思考檢測問題的角度在不斷發生改變,打破舊有滑動視窗的框架,將檢測看成一個回歸問題,不同任務之間的耦合。

除了R-CNN、Fast R-CNN 和 Faster R-CNN等兩階段檢測算法外,還有YOLO 、SSD 等一階段檢測算法——將物體檢測看作一個回歸問題。

相關詞條

熱門詞條

聯絡我們