Faster R-CNN = Fast R-CNN + RPN
RPN是一個全卷積網絡,可以同時預測每個位置的目標邊框和目標得分。RPN通過端到端的訓練產生高質量的候選區域,由Fast R-CNN使用進行目標檢測。
本文通過共享卷積特徵將RPN和Fast R-CNN合併爲一個網絡——使用 Attention 機制。
RPN(區域候選網絡)
該網絡與檢測網絡共享全圖像卷積特徵,因此實現了幾乎無花費的區域候選。這是因爲基於區域的檢測器使用的卷積特徵映射也可以用於生成候選區域,在這些卷積特徵上面,本文添加了兩個額外的卷積層來組建RPN:
- 一個是將每一個卷積映射位置編碼成一個短的(比如256維)特徵向量
- 另一個是在每一個卷積映射位置,輸出兩個結果:
- 輸出一個目標分數
- 是輸出在那個位置k個不同規模和縱橫比的候選區域的迴歸邊界(經典值是k=9)
RPN用任意大小的圖片作爲輸入,輸出是一組矩形目標候選,並且每一個都有一個目標得分。爲了生成候選區域,本文在最後一個共享卷積層輸出的卷積特徵映射上滑動一個小的網絡。這個網絡全連接到輸入卷積特徵映射的一個的空間窗口。
每一個滑動窗口被映射到較低維的向量,這個向量被傳入兩個兄弟全連接層——一個迴歸層和一個分類層。因爲mini-network是以滑動窗口的方式運行,所以全連接層在所有的空間位置是共享的。這個結構使用(本文中中n=3)的卷積層接着兩個的卷積層(一個是迴歸,一個是分類)實現。ReLUs應用於卷積層的輸出。
anchor平移不變性
在每個滑動窗口位置,本文同時預測k個候選區域,所以迴歸層有 4k 個輸出來描述 k 個box的座標,分類層輸出 2k 個分值來估計每個候選框中 是目標/不是目標 的可能性。這 k 個候選相對於 k 個參考框被參數化,稱爲anchor。每一個anchor定位於滑動窗口的中心,並與尺寸和縱橫比相關。本文使用3個尺寸和3個縱橫比,在每個滑動位置產生 9 個anchor。對於一個大小的卷積特徵向量,會產生個anchor。關鍵是anchor和相對於anchor計算proposal的函數具有平移不變性。
候選區域學習的損失函數
爲了訓練RPN,本文給每一個anchor分配了一個二進制類標籤(是目標/不是目標)。其中有兩種anchor可以賦值爲正標籤:
- 與ground-truth box重疊的IoU最大的anchor
- 與任意ground-truth box重疊的IoU高於0.7的anchor
一個ground-truth box 可以爲多個anchor分配正標籤,並將與所有ground-truth box重疊的IoU低於0.3的非正anchor賦值爲負標籤。既不是正標籤也不是負標籤的anchor對訓練沒有貢獻。
//接下來的損失函數比較容易懂
本文中用於迴歸的特徵在特徵圖上具有相同的空間大小($n\times n $),爲了解釋不同的anchor大小,學習了 k 個bounding-box 迴歸器,每一個迴歸器負責一個尺寸或者一個縱橫比,並且 k 個迴歸器不共享權重。因此,即使特徵的大小/尺寸是固定的,仍然可以預測不同大小的box。
優化
RPN通過反向傳播和SGD進行端到端的訓練。從圖像中隨機採樣256個anchor來計算一個mini-batch的損失函數,其中正樣本和負樣本的比例爲1:1,如果圖像中正樣本的數量小於128,那麼用負樣本補充。
候選區域和目標檢測共享卷積特徵
本文使用一個4步訓練算法,通過交替優化來學習共享特徵。
-
如上所述訓練RPN
該網絡使用經過ImageNet預訓練的模型進行初始化,並且針對候選區域任務進行端到端的微調。
-
用第一步RPN生成的候選區域,由Fast R-CNN訓練一個單獨檢測網絡
這個檢測網絡也用經過ImageNet預訓練的模型進行初始化。
此時這兩個網絡沒有共享卷積層。
-
使用檢測網絡初始化RPN訓練,但是固定住共享卷積層,只微調RPN特有的層
此時兩個網絡只共享卷積層
-
固定住共享卷積層,只微調Fast R-CNN的全連接層
此時兩個網絡共享同樣的卷積層,形成統一網絡