物體檢測是計(jì)算機(jī)視覺中的經(jīng)典問題之一,其任務(wù)是用框去標(biāo)出圖像中物體的位置,并給出物體的類別。從傳統(tǒng)的人工設(shè)計(jì)特征加淺層分類器的框架,到基于深度學(xué)習(xí)的端到端的檢測框架,物體檢測一步步變得愈加成熟。
概述在傳統(tǒng)視覺領(lǐng)域,物體檢測是一個(gè)非常熱門的研究方向。受70年代落后的技術(shù)條件和有限應(yīng)用場景的影響,物體檢測直到上個(gè)世紀(jì)90年代才開始逐漸走入正軌。物體檢測對于人眼來說并不困難,通過對圖片中不同顏色、紋理、邊緣模塊的感知很容易定位出目標(biāo)物體,但計(jì)算機(jī)面對的是RGB像素矩陣,很難從圖像中直接得到狗和貓這樣的抽象概念并定位其位置,再加上物體姿態(tài)、光照和復(fù)雜背景混雜在一起,使得物體檢測更加困難。
檢測算法里面通常包含三個(gè)部分,第一個(gè)是檢測窗口的選擇, 第二個(gè)是特征的設(shè)計(jì),第三個(gè)是分類器的設(shè)計(jì)。隨著2001年Viola Jones提出基于Adaboost1的人臉檢測方法以來,物體檢測算法經(jīng)歷了傳統(tǒng)的人工設(shè)計(jì)特征加淺層分類器的框架,到基于大數(shù)據(jù)和深度神經(jīng)網(wǎng)絡(luò)的End-To-End的物體檢測框架,物體檢測一步步變得愈加成熟。
傳統(tǒng)檢測算法在2001年,一篇基于Haar+Adaboost的檢測方法在學(xué)術(shù)界和工業(yè)界引起了非常大的轟動,它第一次把檢測做到實(shí)時(shí),并且在當(dāng)時(shí)的技術(shù)限制下,檢測性能也做的非常亮眼??v觀2012年之前的物體檢測算法,可以歸結(jié)為三個(gè)方面的持續(xù)優(yōu)化:檢測窗口的選擇、特征的設(shè)計(jì)和分類器的設(shè)計(jì)。
檢測窗口的選擇拿人臉檢測舉例,當(dāng)給出一張圖片時(shí),我們需要框出人臉的位置以及人臉的大小,那么最簡單的方法就是暴力搜索候選框,把圖像中所有可能出現(xiàn)框的位置從左往右、從上往下遍歷一次。并且通過縮放一組圖片尺寸,得到圖像金字塔來進(jìn)行多尺度搜索。
但是這種方法往往計(jì)算量很大并且效率不高,在實(shí)際應(yīng)用中并不可取。人臉具有很強(qiáng)的先驗(yàn)知識,比如人臉膚色YCbCr空間呈現(xiàn)很緊湊的高斯分布,通過膚色檢測可以去除很大一部分候選區(qū)域,僅留下極小部分的區(qū)域作為人臉檢測搜索范圍。由于膚色的提取非???,只是利用一些顏色分布的信息,把每個(gè)像素判斷一下,整體速度提升很多。但膚色提取只是用到簡單的顏色先驗(yàn),如果遇到和膚色很像的,比如黃色的桌子,很有可能被誤判成人臉的候選檢測區(qū)域。
進(jìn)一步提高精度衍生出如Selective Search2或EdgeBox3等區(qū)域提取的方法,基于顏色聚類、邊緣聚類的方法來快速把不是所需物體的區(qū)域給去除,相對于膚色提取精度更高,極大地減少了后續(xù)特征提取和分類計(jì)算的時(shí)間消耗。
特征的設(shè)計(jì)在傳統(tǒng)的檢測中,Haar由于提取速度快,能夠表達(dá)物體多種邊緣變化信息,并且可以利用積分圖快速計(jì)算,得到廣泛的應(yīng)用;LBP更多的表達(dá)物體的紋理信息,對均勻變化的光照有很好的地適應(yīng)性;HOG通過對物體邊緣使用直方圖統(tǒng)計(jì)來進(jìn)行編碼,特征表達(dá)能力更強(qiáng),在物體檢測、跟蹤、識別都有廣泛的應(yīng)用。傳統(tǒng)特征設(shè)計(jì)往往需要研究人員經(jīng)驗(yàn)驅(qū)動,更新周期往往較長,通過對不同的特征進(jìn)行組合調(diào)優(yōu),從不同維度描述物體可以進(jìn)一步提升檢測精度,如ACF檢測,組合了20種不同的特征表達(dá)。
分類器的設(shè)計(jì)傳統(tǒng)的分類器包含Adaboost、SVM、Decision Tree等。
(1)Adaboost
一個(gè)弱分類器往往判斷精度不高,通過Adaboost自適應(yīng)地挑選分類精度高的弱分類器并將它們加權(quán)起來,從而提升檢測性能。比如說,人臉檢測中一個(gè)候選窗口需要判斷是否為人臉,其中一些弱分類器為顏色直方圖分量(如紅黃藍(lán)三種顏色),如果黃色分量大于100,那我就認(rèn)為這塊可能是人臉的候選區(qū)域,這就是個(gè)非常簡單的弱分類器??墒?,單個(gè)這么弱的分類器判斷是很不準(zhǔn)的,那么我們就需要引入另外一些分量做輔助。比如再引入紅色分量大于150,將幾個(gè)條件疊加起來,就組成了一個(gè)比較強(qiáng)的分類器。
這里弱分類器的設(shè)計(jì)往往就是確定顏色判斷的閾值,為什么會選擇100呢?其實(shí)這是我們需要學(xué)習(xí)得到的閾值,學(xué)習(xí)得到,當(dāng)閾值設(shè)定為100時(shí),分類的精度是最高的。另外,為什么要選擇紅黃藍(lán)三種顏色?同樣,因?yàn)樗鼈兎诸惖木雀?。通過不斷進(jìn)行特征挑選并學(xué)習(xí)弱分類器,最終組合提升為Adaboost強(qiáng)分類器。
(2)SVM分類器
SVM通過最大化分類間隔得到分類平面的支持向量,在線性可分的小數(shù)據(jù)集上有不錯(cuò)的分類精度,另外通過引入核函數(shù)將低維映射到高維,從而線性可分,在檢測場景被廣泛使用。
(3)決策樹
決策樹(Decision Tree)是一種樹形結(jié)構(gòu),其中每個(gè)內(nèi)部節(jié)點(diǎn)表示一個(gè)屬性上的測試,每個(gè)分支代表一個(gè)測試輸出,每個(gè)葉子節(jié)點(diǎn)代表一種類別。
以二叉樹為例,假如從樹根進(jìn)來有個(gè)二分類,我們需要區(qū)分它是人臉或者是非人臉,左邊是非人臉,右邊是人臉。當(dāng)我進(jìn)入第一個(gè)二叉樹分類器節(jié)點(diǎn)判斷,如果是非人臉的話直接輸出結(jié)果,如果是人臉候選的話進(jìn)入下一層再做進(jìn)一步的分類。通過學(xué)習(xí)每個(gè)節(jié)點(diǎn)的分類器來構(gòu)造決策樹,最終形成一個(gè)強(qiáng)分類器。
(4)隨機(jī)森林
通過對決策樹進(jìn)行Ensemble,組合成隨機(jī)森林更好的提高分類或者回歸精度。
物體檢測數(shù)據(jù)集物體檢測常用的數(shù)據(jù)集有:PASCAL VOC和COCO。
PASCAL VOC為圖像識別和分類提供了一整套標(biāo)準(zhǔn)化的優(yōu)秀的數(shù)據(jù)集,從2005年到2012年每年都會舉行一場圖像識別挑戰(zhàn)賽。
COCO數(shù)據(jù)集是微軟發(fā)布的,除了圖片以外還提供物體檢測、分割(segmentation)和對圖像的語義文本描述信息。
基于深度學(xué)習(xí)的檢測算法物體檢測算法的演變分為兩個(gè)階段:一個(gè)就是基于傳統(tǒng)特征的解決方法,另外一個(gè)就是深度學(xué)習(xí)算法。在2013年之前主流檢測算法是傳統(tǒng)的特征優(yōu)化檢測方法。但是,在2013年之后,整個(gè)學(xué)術(shù)界和工業(yè)界都逐漸利用深度學(xué)習(xí)來做檢測。
基于深度學(xué)習(xí)的早期的物體檢測,大都使用滑動窗口的方式進(jìn)行窗口提取,這種方式本質(zhì)是窮舉法 R-CNN4。后來提出Selective Search2等區(qū)域窗口提取算法,對于給定的圖像,不需要再使用一個(gè)滑動窗口進(jìn)行圖像掃描,而是采用某種方式“提取”出一些候選窗口,在獲得對待檢測目標(biāo)可接受的召回率的前提下,候選窗口的數(shù)量可以控制在幾千個(gè)或者幾百個(gè)。
后來,又出現(xiàn)了SPP5,其主要思想是去掉了原始圖像上的crop/warp等操作,換成了在卷積特征上的空間金字塔池化層。那么為什么要引入SPP層呢?其實(shí)主要原因是CNN的全連接層要求輸入圖片是大小一致的,而實(shí)際中的輸入圖片往往大小不一,如果直接縮放到同一尺寸,很可能有的物體會充滿整個(gè)圖片,而有的物體可能只能占到圖片的一角。SPP對整圖提取固定維度的特征,首先把圖片均分成4份,每份提取相同維度的特征,再把圖片均分為16份,以此類推。可以看出,無論圖片大小如何,提取出來的維度數(shù)據(jù)都是一致的,這樣就可以統(tǒng)一送至全連接層。
實(shí)際上,盡管R-CNN 和SPP在檢測方面有了較大的進(jìn)步,但是其帶來的重復(fù)計(jì)算問題讓人頭疼,而 Fast R-CNN6 的出現(xiàn)正是為了解決這些問題。 Fast R-CNN使用一個(gè)簡化的SPP層 —— RoI(Region of Interesting) Pooling層,其操作與SPP類似,同時(shí)它的訓(xùn)練和測試是不再分多步,不再需要額外的硬盤來存儲中間層的特征,梯度也能夠通過RoI Pooling層直接傳播。Fast R-CNN還使用SVD分解全連接層的參數(shù)矩陣,壓縮為兩個(gè)規(guī)模小很多的全連接層。
Fast R-CNN使用Selective Search來進(jìn)行區(qū)域提取,速度依然不夠快。Faster R-CNN則直接利用RPN (Region Proposal Networks)網(wǎng)絡(luò)來計(jì)算候選框。RPN以一張任意大小的圖片為輸入,輸出一批矩形區(qū)域,每個(gè)區(qū)域?qū)?yīng)一個(gè)目標(biāo)分?jǐn)?shù)和位置信息。從 R-CNN 到 Faster R-CNN7,這是一個(gè)化零為整的過程,其之所以能夠成功,一方面得益于CNN強(qiáng)大的非線性建模能力,能夠?qū)W習(xí)出契合各種不同子任務(wù)的特征,另一方面也是因?yàn)槿藗冋J(rèn)識和思考檢測問題的角度在不斷發(fā)生改變,打破舊有滑動窗口的框架,將檢測看成一個(gè)回歸問題,不同任務(wù)之間的耦合。
除了R-CNN、Fast R-CNN 和 Faster R-CNN等兩階段檢測算法外,還有YOLO89、SSD10等一階段檢測算法——將物體檢測看作一個(gè)回歸問題。
本詞條內(nèi)容貢獻(xiàn)者為:
王慧維 - 副研究員 - 西南大學(xué)