天天看點

【CV論文閱讀】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

由RCNN到FAST RCNN一個很重要的進步是實作了多任務的訓練,但是仍然使用Selective Search算法來獲得ROI,而FASTER RCNN就是把獲得ROI的步驟使用一個深度網絡RPN來實作。一個FASTER RCNN可以看作是一個RPN + FAST RCNN的組合,兩者通過共享CONV LAYERS組合在一起。

RPN網絡

一張圖檔先經過CONV LAYERS得到feature map,圖檔的大小是任意的。然後,使用一個小的滑動網絡,它與feature map的一個n*n的小視窗全連接配接。在論文中,n會取值3(但不知道是否指的是n*n個像素的視窗),雖然小視窗不大,但實際上由于feature map經過pooling和convolution,映射回輸入圖像會有一個很大的感受野。通過這個滑動的小網絡提取ROI并映射到一個低緯度的特征向量,用于回歸和分類(兩個1*1的convolution layer)。

【CV論文閱讀】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

對于滑動的n*n的視窗,在每個位置都會預測k個regional proposal,稱為anchor。每個anchor都以視窗為中心,它們有不同的尺度以及寬高比,論文中去k = 9,即3種尺度與3種寬高比。映射得到的低維特征向量,輸入到兩個box回歸層與softmax(二分類,即logistic,用于預測視窗中有或者沒有物體的機率)。例如一個VGGnet,它映射到的低維特征為512維,由于k = 9,而且回歸層和分類層都是1*1的,是以輸出層的參數有512 * (4 + 2) * 9個。如果feature map的大小為W * H,則總共會有W * H * k個anchors。

(n*n應該是一個卷積層,而VGG最後會有512個通道,每個anchor都會映射到低維的特征,而這低維的特征應該與通道數相關。。。。猜測, 額,這裡的映射到低維的特征與anchor的關系确實有點模糊……)

論文中實作的不同尺度以及寬高比的anchor,而不需要多尺度的image或者filter。

RPN的損失函數

學習一個RPN的網絡也是一個多任務的學習過程,是一個通過參數遷移後對網絡進行fine tune的有監督過程,需要标示正類與負類。正例樣本有兩種(1)與一個ground truth的IOU最高的anchor(2)與任意一個ground truth的IOU高于0.7的anchor。于是,類似于FAST RCNN的定義,LOSS函數為:

【CV論文閱讀】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

其中

【CV論文閱讀】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

為1如果anchor的正樣例,否則為0。

【CV論文閱讀】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

表示anchor裡是一個object的機率。而

【CV論文閱讀】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

即是FAST RCNN中smooth函數的定義。 

【CV論文閱讀】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

是一個平衡因子,具體設定可以參考論文,它與Ncls和Nreg有關。

訓練RPN

RPN的訓練使用的是BP算法,權值更新使用随機梯度下降法實作。Mini_batch的抽樣從單一的圖檔中選擇anchor,盡量是的正例和負例的比是1:1。RPN權值的初始使用高斯分布初始化。

RPN與FAST RCNN的共享

【CV論文閱讀】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

由上圖可以看出,RPN與FAST RCNN共享conv layer層以及feature map。論文中訓練這個網絡提供了幾種方法:

(1)交替訓練。首先訓練RPN,得到proposal之後去訓練FAST RCNN。得到的NETWORK又去訓練RPN。疊代交替

(2)把兩者近似的融合訓練。如上圖,中間層輸出proposal去訓練FAST RCNN。後向傳播時,對于共享層像平常一樣更新,把來自RPN的loss和FAST RCNN的loss結合。而對于proposal 的box坐标預測的梯度,直接忽略,因而得到一個近似的解。但實際上,proposal層的網絡權值也是會更新的。

論文中采取一種新的不同于上述的方法:

(1)用imagenet模型初始化,獨立訓練一個RPN網絡。

(2)仍然使用imagenet初始化,利用第一步得到的proposal作為輸入訓練一個FAST RCNN網絡,此時參數完全不共享。

(3)用(2)得到的參數初始化RPN的網絡,把RPN與FAST RCNN共享的卷積層的學習率設為0,僅更新RPN特有的網絡層,重新訓練,此時網絡共享共有的卷積層。

(4)固定共享的層,加入FAST RCNN,fine tune它特有的網絡。

細節:

對于每個anchor的三種scale為128*128,256*256,512*512,,三種寬高比1:1,1:2,2:1。

對于一些RPN的proposal,采用非極大值抑制的辦法選擇過濾一部分,減少備援。

繼續閱讀