1. 程式人生 > 實用技巧 >Fast RCNN論文閱讀筆記

Fast RCNN論文閱讀筆記

1.Introduction

1.1 RCNN 和SPPnet

RCNN有幾個顯著的問題:1.訓練的時候是多階段的訓練,分別分三個階段訓練卷積層、SVM、邊框迴歸矩陣。2.訓練很耗時。3.目標定位非常慢。它慢主要是因為它沒有共享計算,而SPPnet通過共享計算比RCNN快了很多,SPPnet對整張圖片做一次卷積提取特徵,對比RCNN對每個區域提案單獨卷積就快了很多。但是SPPnet也有不足的地方,它和RCNN一樣是多階段訓練,並且它的微調無法更新前面的網路。

1.2 fast RCNN的貢獻

四個優點:1.比RCNN和SPPnet更高的檢測精度。2.訓練過程是單階段的,使用多工損失函式。3.訓練的時候可以更新所有的網路層。4.不需要用硬碟來儲存特徵快取。

2.Fast RCNN的架構和訓練

2個輸入,一是一張完整的圖片,二是劃定的區域提案。經過ROI pooling和全連線層之後又有兩個輸出,一是softmax的分類結果(所有類別+背景類),二是邊框迴歸值。

2.1ROI pooling層

使用最大池化將任意大小的感興趣區域對映到一個固定大小H*W,H和W是提前設定好的超引數,每一個ROI使用一個長度為4的元組來描述它的位置,包括左上角座標和長寬。ROI pooling是SPPnet的一個變種。過濾器的視窗大小和步長的計算和SPPnet裡描述的一樣。

2.2預訓練網路的初始化

選用了3種預訓練好的ImageNet,並對它們進行了三個改變來形成fast RCNN。1.將最後一個最大池化層替換成設定好適應全連線層的H和W的ROI池化。2.最後一層全連線層換成兩個並行的結構,一是用於分類的全連線層,二是使目標定位變得準確的邊框迴歸結構。3.可以接受兩個輸入,一是圖片二是該圖片的ROI。

2.3對檢測的微調

Fast RCNN使用反向傳播演算法更新所有隱藏層的權重。SPPnet不能更新金字塔池化層後面的網路的權重的原因:根本原因是訓練的時候樣本來自不同的圖片導致了SPP層的低效率,這是由它的訓練過程導致的(RCNN也是這樣)。這會導致每一個ROI都有一個很大的感受野,通常是跨越整張圖片的,前傳需要處理整個感受野,所以訓練的時候的輸入是巨大的。

RCNN和SPPnet是對R個來自不同圖片的ROI進行隨機梯度下降計算,而Fast RCNN是對來自N張圖片,每張圖片取N/R個ROI進行處理。這樣的處理方法可能導致較低的訓練融合速度,因為來自一張圖片的ROI是有關聯的,但是用N=2和R=128實驗時得出了比較好的結果。

多工損失函式

Fast RCNN有兩個輸出,一個是經過了softmax層的全連線層的輸出,即每個ROI是這K+1種類別的概率p。第二個輸出是對每一個概率的邊框迴歸值

u是GT框的種類,v是GT框的位置。

小批樣本

每個SGD的mini batch來自於隨機的兩張圖片(N=2),每張圖片取64個ROI(N/R),像RCNN一樣取25%個IOU超過0.5的ROI為正樣本,它們的u>=1,再取等量IOU在0.1到0.5之間的ROI表示背景樣本,u=0。

在ROI層之後的反向傳播

超引數SCD

將分類模組和邊框迴歸模組使用中心化高斯分佈使他們的標準差為分別為0.01和0.001,偏移量為0.所有網路層的單層權重學習率為1,偏差學習率為2,全域性學習率為0.001 。

2.4尺度不變性

用兩種方法達到了再目標檢測中的尺度不變性:1.使用brute force 。將圖片預先處理成固定大小。2.使用圖片金字塔。

因為GPU容量的限制多尺度訓練只在小網路上。

3.將fast RCNN用於檢測

4.主要結果

5.設計評估

5.1多工訓練帶來的提升

從該對比試驗可以看出多工訓練是可以帶來mAP的提升的

5.2為了達到尺度不變應該用brute force還是finesse

BF演算法是單尺度的,圖片金字塔演算法是多尺度的。試驗中單尺度限制邊長為600,多尺度選了5個尺度分別是{480,576,688,864,1200}。

結果表明多尺度的訓練並沒有比單尺度的訓練提升很多mAP。通過這個試驗為平衡網路的速度與精度所需要做出的取捨帶來了靈感。

5.3是否需要很多的訓練資料

Zhu Xiangxin 發現當mAP達到一定數值的時候就飽和了,再增多資料它也不怎麼提升,作者做了個和Zhu相似的實驗,發現用fast RCNN,當資料量提升之後帶來的mAP的提升還是很可觀的(66.1%→68.8% 和 65.7%→68.4%)。

5.4SVMs會比softmax表現更好嗎

那當然是softmax好一點啦。

5.5區域提案越多越好嗎

兩種劃分RP的方法,一種是稀疏的劃分一種是緊密的。

並不是越多越好,多到一定程度反而使mAP下降。

有些部分還沒讀懂所以沒寫上去 等之後學明白了再補上去