物體檢測一向是比較熱門的研究方向,它經歷了傳統的人工設計特征+淺層分類器的框架,到基于大數據和深度神經網絡的End-To-End的物體檢測框架的發展,然而許多人其實并未系統的了解過物體檢測算法的整個發展內容。正因如此,本次閱面科技邀請了資深研究員童志軍從傳統檢測算法核心、深度神經網絡框架、檢測技術難點等方面來進行干貨分享。
童志軍:閱面科技資深研究員,2012年畢業于東南大學獲碩士學位,先后加入虹軟、阿里巴巴從事圖像算法和機器學習工作,曾參與淘寶“拍立淘圖像搜索”、“3D試衣”等產品研發,目前主要專注于深度學習的視覺檢測分類和移動端深度學習模型壓縮技術。
在傳統視覺領域,物體檢測是一個非常熱門的研究方向。受70年代落后的技術條件和有限應用場景的影響,物體檢測直到上個世紀90年代才開始逐漸走入正軌。物體檢測對于人眼來說并不困難,通過對圖片中不同顏色、紋理、邊緣模塊的感知很容易定位出目標物體,但對于計算機來說,面對的是RGB像素矩陣,很難從圖像中直接得到狗和貓這樣的抽象概念并定位其位置,再加上物體姿態、光照和復雜背景混雜在一起,使得物體檢測更加困難。
檢測算法里面通常包含三個部分,第一個是檢測窗口的選擇, 第二個是特征的設計,第三個是分類器的設計。隨著2001年Viola Jones提出基于Adaboost的人臉檢測方法以來,物體檢測算法經歷了傳統的人工設計特征+淺層分類器的框架,到基于大數據和深度神經網絡的End-To-End的物體檢測框架,物體檢測一步步變得愈加成熟。
傳統檢測算法
在2001年,一篇基于Haar+Adaboost的檢測方法在學術界和工業界引起了非常大的轟動,它第一次把檢測做到實時,并且在當時的技術限制下,檢測性能也做的非常亮眼??v觀2012年之前的物體檢測算法,可以歸結為三個方面的持續優化:
檢測窗口的選擇
拿人臉檢測舉例,當給出一張圖片時,我們需要框出人臉的位置以及人臉的大小,那么最簡單的方法就是暴力搜索候選框,把圖像中所有可能出現框的位置從左往右、從上往下遍歷一次。并且通過縮放一組圖片尺寸,得到圖像金字塔來進行多尺度搜索。
但是這種方法往往計算量很大并且效率不高,在實際應用中并不可取。人臉具有很強的先驗知識,比如人臉膚色YCbCr空間呈現很緊湊的高斯分布,通過膚色檢測可以去除很大一部分候選區域,僅留下極小部分的區域作為人臉檢測搜索范圍。由于膚色的提取非常快,只是利用一些顏色分布的信息,把每個像素判斷一下,整體速度提升很多。但膚色提取只是用到簡單的顏色先驗,如果遇到和膚色很像的,比如黃色的桌子,很有可能被誤判成人臉的候選檢測區域。
進一步提高精度衍生出如Selective Search或EdgeBox等proposal提取的方法,基于顏色聚類、邊緣聚類的方法來快速把不是所需物體的區域給去除,相對于膚色提取精度更高,極大地減少了后續特征提取和分類計算的時間消耗。
特征的設計
在傳統的檢測中,Haar由于提取速度快,能夠表達物體多種邊緣變化信息,并且可以利用積分圖快速計算,得到廣泛的應用;LBP更多的表達物體的紋理信息,對均勻變化的光照有很好的地適應性;HOG通過對物體邊緣使用直方圖統計來進行編碼,特征表達能力更強,在物體檢測、跟蹤、識別都有廣泛的應用。傳統特征設計往往需要研究人員經驗驅動,更新周期往往較長,通過對不同的特征進行組合調優,從不同維度描述物體可以進一步提升檢測精度,如ACF檢測,組合了20種不同的特征表達。
分類器的設計
傳統的分類器包含Adaboost、SVM、Decision Tree等。
Adaboost
一個弱分類器往往判斷精度不高,通過Adaboost自適應地挑選分類精度高的弱分類器并將它們加權起來,從而提升檢測性能。比如說,人臉檢測中一個候選窗口需要判斷是否為人臉,其中一些弱分類器為顏色直方圖分量(如紅黃藍三種顏色),如果黃色分量大于100,那我就認為這塊可能是人臉的候選區域,這就是個非常簡單的弱分類器??墒?,單個這么弱的分類器判斷是很不準的,那么我們就需要引入另外一些分量做輔助。比如再引入紅色分量大于150,將幾個條件疊加起來,就組成了一個比較強的分類器。
這里弱分類器的設計往往就是確定顏色判斷的閾值,為什么會選擇100呢?其實這是我們需要學習得到的閾值,學習得到,當閾值設定為100時,分類的精度是最高的。另外,為什么要選擇紅黃藍三種顏色?同樣,因為它們分類的精度更高。通過不斷進行特征挑選并學習弱分類器,最終組合提升為Adaboost強分類器。
SVM分類器
SVM通過最大化分類間隔得到分類平面的支持向量,在線性可分的小數據集上有不錯的分類精度,另外通過引入核函數將低維映射到高維,從而線性可分,在檢測場景被廣泛使用。
比如線性SVM分類器就是一些支持向量,將物體表示為一些特征向量,實際當中學到的分類器就是一些系數向量,這些系數向量和特征向量做一個加權的話可以得到分類分數,對分數進行閾值判斷,就可以判斷是否是某一類。
Decision Tree
決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的測試,每個分支代表一個測試輸出,每個葉子節點代表一種類別。
用從樹根到樹葉的二叉樹來舉個簡單例子。假如從樹根進來有個二分類,我們需要區分它是人臉或者是非人臉,左邊是非人臉,右邊是人臉。當我進入第一個二叉樹分類器節點判斷,如果是非人臉的話直接輸出結果,如果是人臉候選的話進入下一層再做進一步的分類。通過學習每個節點的分類器來構造決策樹,最終形成一個強分類器。
Random Forest
通過對決策樹進行Ensemble,組合成隨機森林更好的提高分類或者回歸精度。假設剛剛提到的決策樹是一棵樹,那么現在我想學十棵樹,每個樹采用不同的輸入或者分類準則,從不同維度來做分類。以十棵樹的分類結果進行投票,8個樹認為這個框是人臉,2個認為是非人臉,最終輸出為人臉。投票策略可以更好地降低分類誤差,在實際場景中得到廣泛應用。
從傳統方法到深度學習
眾所周知,檢測算法的演變分為兩個階段,一個就是基于傳統特征的解決方法,另外一個就是深度學習算法。在2013年之前傳統方法還算是主流,大家都是基于傳統的feature優化檢測方法。然而,在2013年之后,,整個學術界和工業界都逐漸利用深度學習來做檢測。
實際上,這是由于深度學習在分類上超越了很多傳統的方法,在2012年的ImageNet上,Hinton兩個學生就曾用ConvNet獲得了冠軍。與傳統方法相比,深度學習在分類精度上提高很多。起先,深度學習只是在分類上有非常明顯的提升,之后也帶動了檢測這一塊。從物體分類到物體檢測,利用了深度學習比較強的feature的表達能力,可以進一步提高檢測的精度。
檢測方面有兩個比較典型的公開測試集,PASCAL VOC和COCO。從這兩個測試集上可以看到傳統的檢測方法和深度學習的檢測方法在精度上的差別非常的大。傳統的物體檢測方法因為其特征比較弱,所以每類都需要訓練一個檢測器。每個檢測器都是針對特定的物體訓練,如果有20類的話,就需要跑20次前向預測,相當于單次檢測的20倍,作為一個2C端產品,時間消耗和精度性能使得傳統方法檢測的應用場景不是很多。
目前最新的檢測都是基于深度學習的方法,最開始的RCNN,它算是深度學習應用到檢測里的鼻祖,從起初它平均49.6的精度記錄,到如今已然提升了快40個點。而在傳統的方法中SVM-HOG,它的精度才到了31.5,和深度學習相比低了很多。
值得注意的是,傳統檢測方法隨著數據量增大檢測性能會趨于飽和,也就是說隨著數據量的增大,檢測性能會逐漸提高,但到了一定程度之后數據量的提高帶來的性能增益非常少。而深度學習的方法則不同,當符合實際場景分布的數據越來越多時,其檢測性能會越來越好。
深度學習的物體檢測
深度學習早期的物體檢測,大都使用滑動窗口的方式進行窗口提取,這種方式本質是窮舉法 R-CNN。后來提出Selective Search等Proposal窗口提取算法,對于給定的圖像,不需要再使用一個滑動窗口進行圖像掃描,而是采用某種方式“提取”出一些候選窗口,在獲得對待檢測目標可接受的召回率的前提下,候選窗口的數量可以控制在幾千個或者幾百個。
之后又出現了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到Faster R-CNN都是一些通用的檢測器。深度學習中還有許多特定物體檢測的方法,如Cascade CNN等,隨著技術的發展,深度學習的檢測越來越成熟。
難點
盡管深度學習已經使得檢測性能提升了一大截,但其實依舊存在許多難點。主要難點就是復雜光照情況(過暗、過曝)以及非剛性物體形變(如人體、手勢的各種姿態)、低分辨率和模糊圖片的檢測場景。
眾所周知,目前大多數檢測算法還是靜態圖的檢測,而海量視頻數據已然出現了,未來檢測數據支持的類別肯定越來越多,涵蓋的面越來越廣,檢測技術在這方面也需要繼續發展?;谝曨l時序連續性的物體檢測和像素級的實例檢測將是未來重點突破的方向。
聲明:部分內容來源于網絡,僅供讀者學術交流之目的。文章版權歸原作者所有。如有不妥,請聯系刪除。
責任編輯:psy
原文標題:物體檢測算法全概述:從傳統檢測方法到深度神經網絡框架
文章出處:【微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
-
檢測
+關注
關注
5文章
4480瀏覽量
91443 -
分類器
+關注
關注
0文章
152瀏覽量
13179 -
物體檢測
+關注
關注
0文章
8瀏覽量
9171
原文標題:物體檢測算法全概述:從傳統檢測方法到深度神經網絡框架
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論