1
本文作者: 大牛講堂 | 2016-11-10 10:01 |
雷鋒網(wǎng)按:本文作者鄔書哲博士,師從中科院計(jì)算所山世光博士。
鄔書哲博士對(duì)山世光博士講到的內(nèi)容在細(xì)節(jié)上做了補(bǔ)充。其補(bǔ)充內(nèi)容主要包含三個(gè)部分:首先是深度學(xué)習(xí)在物體檢測(cè)領(lǐng)域點(diǎn)燃的星星之火,即R-CNN系列的工作,其次是針對(duì)檢測(cè)器的速度問(wèn)題所提出的兩個(gè)代表性方法:YOLO和SSD,最后是傳承了經(jīng)典檢測(cè)方法的Cascade CNN。
R-CNN的出現(xiàn)帶來(lái)檢測(cè)精度的一次巨大提升,在Pascal VOC 2010上,全面超越了之前的方法,mAP提高了20%;在ImageNet的物體檢測(cè)競(jìng)賽上,刷新了之前的冠軍記錄,mAP提高了10%。然而R-CNN的檢測(cè)速度非常慢,在GPU上處理一張圖需要13s,在CPU上處理一張圖需要長(zhǎng)達(dá)53s。
Fast R-CNN是R-CNN的加速版本,其借鑒了SPP-net的做法,在提取每個(gè)窗口的特征之前,直接在全圖上進(jìn)行卷積,避免了大量重復(fù)計(jì)算,同時(shí)采用SVD分解對(duì)分類所用的全連接層進(jìn)行壓縮,將一個(gè)大的全連接層拆解成兩個(gè)小的全連接層。通過(guò)這樣的策略,F(xiàn)ast R-CNN相比R-CNN能夠有213倍的加速比。
總的來(lái)看,F(xiàn)ast R-CNN還是不夠快,因?yàn)槠洳捎昧薙elective Search來(lái)提取候選窗口,這部分處理一張圖在CPU上需要2s,而即使是采用EdgeBox,在GPU上也需要0.3s,這個(gè)時(shí)間和分類的時(shí)間相當(dāng)。于是Faster R-CNN進(jìn)一步引了RPN網(wǎng)絡(luò),并且讓其和分類網(wǎng)絡(luò)共享卷積層,實(shí)現(xiàn)進(jìn)一步的加速。從R-CNN到Faster R-CNN,這是一個(gè)化零為整的過(guò)程,從不同的模塊不同的方法來(lái)做,到最后整合到同一個(gè)網(wǎng)絡(luò)中來(lái)做,精度不斷提高,速度也是在不斷提高的。
Faster R-CNN中有一個(gè)非常關(guān)鍵的設(shè)計(jì),也就是anchor box,相比于之前的滑動(dòng)窗口+圖像金字塔的方式,采用anchor box實(shí)際上是固定輸入圖像不變,而改成去變化窗口,采用不同大小和長(zhǎng)寬比的窗口來(lái)掃描圖像。Faster R-CNN在Pascal VOC 2012、ILSVRC 2015和MS COCO 2015的檢測(cè)任務(wù)上都獲得了最好成績(jī),并且在絕大多數(shù)類別上都獲得了最高的AP。
在Faster R-CNN中,如果采用ResNet這樣的網(wǎng)絡(luò)結(jié)構(gòu),那么每一個(gè)候選窗口都要經(jīng)過(guò)其最后一組卷積層的計(jì)算,這會(huì)帶來(lái)巨大的時(shí)間開(kāi)銷,這部分時(shí)間大概會(huì)占到總的檢測(cè)時(shí)間的三分之一,因此出現(xiàn)了一個(gè)改進(jìn)版:R-FCN,其將RoIPooling后移,最后一組卷積繼續(xù)在整個(gè)特征圖上做,從而進(jìn)一步避免了重復(fù)計(jì)算。R-FCN中有一個(gè)比較巧妙的設(shè)計(jì),叫做位置敏感得分圖,以這張圖為例,在判斷候選框里面是不是一個(gè)人的時(shí)候,其會(huì)分別觀察這個(gè)框的各個(gè)位置,如左上角、右上角等,然后分別作出判斷,之后再投票整合得到最終的分類結(jié)果。可以看到這個(gè)跟DPM稍微有點(diǎn)相似,但是不同的是這里各個(gè)部分的幾何關(guān)系是固定的,而DPM會(huì)推斷各個(gè)部件的位置。
R-FCN相比于Faster R-CNN在達(dá)到類似精度的條件下在速度上能夠有3倍左右的提升,在某些情況下甚至能夠有20倍的提升。
R-CNN系列方法經(jīng)過(guò)一系列的加速,在很多情況下,還是無(wú)法達(dá)到實(shí)時(shí)的25fps這個(gè)要求,影響速度的因素有很多,包括輸入大小、候選窗口的數(shù)量等。并且這一系列方法還有一個(gè)特點(diǎn),就是要看兩次,一看定候選窗口,二看才定檢測(cè)結(jié)果。為了提高檢測(cè)速度,出現(xiàn)了YOLO和SSD這樣的方法,其特點(diǎn)就是只看一次,直接得到檢測(cè)結(jié)果。
另外輸入圖像的尺寸也減小了,從Faster R-CNN的1000x600減小到了YOLO的446x446,網(wǎng)絡(luò)規(guī)模也進(jìn)行了一定的控制。可以看到在YOLO的網(wǎng)絡(luò)最后是兩個(gè)全連接層,直接用全圖的信息來(lái)預(yù)測(cè)檢測(cè)框,這可以看成是對(duì)上下文的信息進(jìn)行了利用,還有就是全連接層的計(jì)算本身比較快。YOLO使得檢測(cè)速度得到了很大提升,快速版本在GPU可以達(dá)到150fps,然而其精度下降得非常厲害,因此實(shí)用性大大降低了。
有兩個(gè)因素是比較影響精度的,一是網(wǎng)格劃分,其使得位置過(guò)于粗糙,二是網(wǎng)絡(luò)深度,太深層的特征使得特征過(guò)于粗糙。SSD一方面控制了網(wǎng)絡(luò)深度,另一方面在回歸窗口的時(shí)候會(huì)同時(shí)采用不同層的特征,在較淺層上回歸小的窗口,在較深層上回歸大的窗口。SSD速度相比沒(méi)有YOLO那么快,但是換來(lái)了精度上的提升。如果和前面提到的Faster R-CNN相對(duì)比,SSD可以看成是一個(gè)RPN網(wǎng)絡(luò)。個(gè)人認(rèn)為,在完全相同的條件下,SSD速度會(huì)更快,但是Faster R-CNN精度會(huì)更好。
最后要講的方法是經(jīng)典上的一個(gè)傳承:Cascade CNN。當(dāng)考慮一些特定類別目標(biāo)的檢測(cè)的時(shí)候,尤其是人臉和人體,對(duì)速度的要求會(huì)更高,而如果只考慮單一類別的物體,傳統(tǒng)的級(jí)聯(lián)結(jié)構(gòu)分類器仍然是非常有效的方法。而RPN加上Fast R-CNN的形式本身看起來(lái)也是一種級(jí)聯(lián)。Cascade CNN是3組一共6個(gè)網(wǎng)絡(luò)進(jìn)行級(jí)聯(lián),交替進(jìn)行分類和邊框校準(zhǔn)。分類網(wǎng)絡(luò)的輸入圖像的分辨率是隨著輸入規(guī)模動(dòng)態(tài)調(diào)整的,在最開(kāi)始輸入規(guī)模比較大的時(shí)候,用比較小的輸入圖像,這樣可以盡量的節(jié)約時(shí)間,然后逐漸從12x12變化到24x24,再到48x48。
Cascade CNN在做窗口校準(zhǔn)的時(shí)候,還不是采取回歸的方式,而是人為的設(shè)置了45種不同的模式,然后采用分類的方式來(lái)對(duì)窗口進(jìn)行校準(zhǔn)。Cascade CNN后續(xù)也有一些跟進(jìn)的工作,例如采用多任務(wù)協(xié)同學(xué)習(xí),這種做法在網(wǎng)絡(luò)比較小的時(shí)候,能夠讓它的精度得到提升。再有比方說(shuō)把多級(jí)分類器協(xié)同訓(xùn)練,這樣可以采用類似于Faster R-CNN那樣端到端的訓(xùn)練方式,這可以使精度再進(jìn)一步往上提。
從之前的工作到現(xiàn)在的工作,有一些基本的策略,包括難例挖掘,多尺度,相關(guān)任務(wù)協(xié)同學(xué)習(xí),上下文建模等,這些策略都被廣泛驗(yàn)證是有效的。當(dāng)出現(xiàn)一個(gè)新的方法之后,大家往往會(huì)把同樣的策略應(yīng)用到這個(gè)新方法上去,做出一系列的工作。
物體檢測(cè)領(lǐng)域現(xiàn)在還有很多其它的工作,比如說(shuō)DenseBox、尺度相關(guān)池化、Inside-Outside Net、Multi-region CNN等等,這些方法很多都體現(xiàn)了以上提到的策略,同時(shí)也使基于深度學(xué)習(xí)的物體檢測(cè)方法走得更遠(yuǎn)。
雷鋒網(wǎng)注:本文由大牛講堂授權(quán)發(fā)布,如需轉(zhuǎn)載請(qǐng)聯(lián)系原作者,并注明作者和出處,不得刪減內(nèi)容。有興趣可以關(guān)注公號(hào)【地平線機(jī)器人技術(shù)】,了解最新消息。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。