基於深度學習的目標檢測演算法:Faster R-CNN
問題引入:
R-CNN、SPP net、Fast R-CNN等目標檢測演算法,它們proposals都是事先通過selecetive search方法得到。然而,這一過程將耗費大量的時間,從而影響目標檢測系統的實時性。Faster R-CNN針對這一問題,提出了Region Proposal Network(RPN),利用RPN模型來得到proposals,此外,為了節省時間,該模型與目標檢測模型Fast R-CNN模型共享卷積層,這樣實現了端到端的目標檢測。
Region Proposal Network(RPN):
RPN模型以任意大小的影象作為輸入,輸出一系列候選目標框,以及每個候選目標框是目標的可能性。
對於ZF模型,假設給定600*1000的輸入影象,最後一個共享的卷積層輸出的特徵圖,可以看作是尺度為51*39的256通道的影象。對於該影象上的每一個位置,考慮9個可能的候選視窗,即:三種面積{128*128, 256*256, 515*512},三種比列{1:1, 1:2, 2:1},這些候選視窗稱為anchors。圖1中有51*39個anchor中心,以及9種anchor示例。
圖1
在這個特徵圖上,採用3*3的卷積核進行卷積,在每個3*3的區域卷積後得到256維的特徵向量(在這個卷積過程中,引數個數為3*3*256*256),每一個特徵向量輸入到兩個全連線層中,其中,cls layer輸出2*k個score, 用於判斷目標和非目標的估計概率;reg layer輸出4*k個coordinates,(x, y w, h)用於確定目標的位置;k表示在每個卷積位置上anchor的數目。該過程如圖2所示:
圖2
在訓練 LRN時,採用如下的方式建立訓練樣本:若anchor與某個真實區域的重疊度最大,或者與某個真實區域的重疊度大於0.7,則將該anchor標定為正樣本;如果anchor與所有的真實區域的重疊度都小於0.3,則將該anchor標定為負樣本;並且,採用類似於Fast R-CNN中的multi-task loss,即:
其中,(x, y, w, h)表示預測出的目標框,(xa, ya, wa, ha)表示對應的anchor box,(x*, y*, w* , h*)表示對應的ground truth
此外,在訓練的過程中,由於影象中的negative anchors比較多,為了防止損失函式偏好於負樣本,從影象中隨機選取256個anchors,且positive anchors與negative anchors的比例為1:1,如果positive anchors的個數小於128時,利用negative anchors來填補。對於跨越影象邊界的anchors需要小心處理,在訓練時,忽略所有跨越影象邊界的anchors,這樣它們就不會對損失函式有影響;在測試時,將其進行裁剪到影象邊緣處。
RPN and Fast R-CNN
RPN與Fast R-CNN 共享卷積層,如果單獨訓練兩個模型的話,他們將以不同的方式修改卷積層。因此,該論文提出了一下三種方式訓練模型:
交替訓練:先訓練RPN,再用proposals訓練Fast R-CNN,然後用微調後的Fast R-CNN初始化RPN,迭代上述過程。
近似聯合訓練:直接在圖3結構上訓練,在backward計算梯度時,把提取的ROI區域看成固定值,對於共享的卷積層,需要同時考慮RPN的損失和Fast R-CNN的損失,
聯合訓練:直接在圖3結構上訓練,在backward計算梯度時,要考慮ROI區域變化的影響。
在論文中採用了4-Step Alternating Training 方法,也就是,第一步:訓練RPN,使用在ImageNet上預訓練的模型進行初始化;第二步:採用RPN產生的proposals來訓練Fast R-CNN,也使用在ImageNet上預訓練的模型進行初始化;第三步:使用Fast
R-CNN來初始化RPN,在訓練RPN時,共享的卷積層保持不變,只調節RPN特有的層;第四步:訓練Fast R-CNN,但是共享的卷積層保持不變,只調節Fast R-CNN中特有的層。
圖3 ZF