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