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