【論文筆記】【目標檢測】Fast RCNN詳解

Fast RCNN是對RCNN論文的改進。

 

RCNN簡介:

(1)image input;
(2)利用selective search 算法在圖像中從上到下提取2000個左右的Region Proposal;
(3)將每個Region Proposal縮放(warp)成227*227的大小並輸入到CNN,將CNN的fc7層的輸出作爲特徵;
(4)將每個Region Proposal提取的CNN特徵輸入到SVM進行分類;
(5)對於SVM分好類的Region Proposal做邊框迴歸,用Bounding box迴歸值校正原來的建議窗口,生成預測窗口座標.
缺陷:
(1) 訓練分爲多個階段,步驟繁瑣:微調網絡+訓練SVM+訓練邊框迴歸器;
(2) 訓練耗時,佔用磁盤空間大;5000張圖像產生幾百G的特徵文件;
(3) 速度慢:使用GPU,VGG16模型處理一張圖像需要47s;
(4) 測試速度慢:每個候選區域需要運行整個前向CNN計算;
(5) SVM和迴歸是事後操作,在SVM和迴歸過程中CNN特徵沒有被學習更新.

相比於RCNN, fast rcnn解決的問題在於:

(1)在最後一個卷積後加入了ROI pooling layer,這使輸入的圖片可以多尺度,且共享了計算。

(2)RCNN在訓練過程時,直接對bounding-box進行迴歸訓練,不能在卷積層進行更新。fast rcnn在卷積上就對位置進行了迴歸。

fast rcnn的貢獻點:

(1)提高了mAP

(2)訓練了單階段的多任務損失

(3)訓練更新了所有網絡層

(4)不再要求存儲特徵

 

網絡結構

總體結構:圖片送入卷積backbone做特徵提取得到feature map。feature map送入ROI pooling用於得到定長的特徵向量(ROI featrue vector),每個特徵向量被送入到兩個兄弟輸出層:一個完成k+1分類(k個類別+1個背景),一個用於完成bbox迴歸。

下面詳細解釋各個模塊:

(1)ROI pooling

ROI pooling的做法來源於spp net,解決的是輸入特徵圖的尺度不一問題。圖爲spp的做法。通過使用4*4、2*2、1*1的網格對特徵圖做池化,可以得到4*4+2*2+1*1的定長向量,這就解決了固定輸入圖片尺度的resize費時、影響圖片尺度、改變圖片長寬比例的問題。

ROI通過設置超參HxW用於表示ROI做池化塊數。本文中使用矩形對特徵圖做RoI池化,用四個值(r, c, h, w)表示矩形,(r, c)表示左上角,(h, w)表示右下角。RoI使用最大池化對每個子窗口進行池化。子窗口的大小爲h/H x w/W。RoI在每個特徵圖通道獨立應用池化。相比於spp,RoI的區別是隻有一個金字塔層。

(2)預訓練網絡的使用

fast rcnn中用了3個預訓練網絡(3個backbone),每個包含了5個最大池化層,5到13個卷積層。其他改變:

a. 最後一個最大池化層由RoI Pooling替換,設置了參數H和W(vgg16中H=W=7)。

b. 最後的全連接層和softmax被替換成2個兄弟層,分別完成K+1類的softmax分類,和bbox的迴歸。

c. 網絡的數據輸入被調整爲,圖片的列表和圖片對應RoI的列表。

(3)檢測模塊微調

spp中有個很大的問題,spp層訓練困難,原因是每個RoI都有很大的感知域,大到覆蓋了整個輸入圖像。

改進方法是使用SGD,首先採樣N個圖片,再在每個圖片採樣R/N個ROIs。比如,N=2,R=128,可以比從128個圖片中採樣1個RoI快64倍。通過實驗觀察發現,沒有不收斂。

(4)多任務損失

fast rcnn包含兩個輸出層。第一個,每個RoI輸出離散的分佈,p=(p0, p1, ..., pk),包括了K+1類,p由全連接層+softmax計算得來。第二個輸出做bbox(x, y ,w, h)的迴歸。

損失函數如下:

 

𝐿(𝑝,𝑢,𝑡𝑢,𝑣)=𝐿𝑐𝑙𝑠(𝑝,𝑢)+𝜆[𝑢⩾1]𝐿𝑙𝑜𝑐(𝑡𝑢,𝑣)

損失函數包含了分類損失和迴歸損失。

分類損失:

𝐿𝑐𝑙𝑠(𝑝,𝑢)=−𝑙𝑜𝑔 𝑝𝑢

迴歸損失:

 

其中,

𝜆是用於平衡兩個任務的超參,這裏設置爲1,因爲groud-truth regression目標被標準化。

(5)小批量採樣

按上面的採樣方法,N=2,R=128,從1張圖片中取64個RoI。取25%的RoI和目標計算IoU,要求IoU>0.5。

(6)RoI的反向傳播

整個fast rcnn在計算前向時,圖片都是獨立的(這也導致了不能batch檢測)。計算反向傳播和普通池化層計算有些區別。

1.jpg

因爲一張圖片會產生很多roi,這寫roi可能有交集,如上圖,那麼在左邊x23位置,如果兩次池化都是最大值,那麼這個位置的梯度就由n次池化做累加。

(7)SGD超參數

全連接層使用softmax進行分類,bbox迴歸使用0均值高斯分佈進行初始化,標準差分別爲0.01和0.001。

(8)SVD分解

把全連接層由uv的計算量改爲t(u+v),相當於中間加一層。

實驗

1. fast rcnn的主要檢測流程:

(1). 輸入一張待檢測圖像;

(2). 提取候選區域:利用Selective Search算法在輸入圖像中提取出候選區域,並把這些候選區域按照空間位置關係映射到最後的卷積特徵層;

(3). 區域歸一化:對於卷積特徵層上的每個候選區域進行RoI Pooling操作,得到固定維度的特徵;

(4). 分類與迴歸:將提取到的特徵輸入全連接層,然後用Softmax進行分類,對候選區域的位置進行迴歸。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章