FasterRCNN網絡是一種二階段的目標檢測方法,目標檢測方法旨在給定的圖片中找出目標物體的坐標位置和所屬類別。我們在這里來梳理一下訓練的大致流程謹供參考,我參考的算法實現為:https://github.com/chenyuntc/simple-faster-rcnn-pytorch
1.特征提取
在特征提取前,需要對初始圖片和標簽數據進行預處理,假設經過數據預處理后,我們得到的輸入數據為:600x800x3 的原圖矩陣、nx4 的坐標標簽gt_bbox、n 個分類標簽gt_label,其中 n 代表每張圖片中目標物體的數量。我們將 600x800x3 的圖片矩陣輸入到特征提取網絡中,然后得到 37x50x512 的特征圖,網絡詳細結構如下所示:

2.RPN網絡
RPN網絡首先將上一步得到的 37x50x512特征圖經過卷積網絡分別得到 16650x2(經過了維度變換,16650=37x50x9)的是否包含目標物體的分數預測、16650x4的坐標調整值預測,具體網絡結構如下圖所示:

然后便可以計算RPN網絡的損失:
1.FasterRCNN網絡對特征圖上每個點選取了9個基礎anchor,並將 37x50的特征圖中心坐標映射回原圖尺寸(600x800),結合得到基於原圖尺寸的 16650x4的anchor;
2.由AnchorTargetCreator首先去掉超出圖片范圍的anchor,然后計算anchor與gt_bbox的IOU值,根據設定好的正負樣本閾值篩選用於訓練的128個正樣本和128個負樣本,由此得到 256x2的樣本分類標簽,坐標調整值標簽只取正樣本且由anchor與gt_bbox作變換得到 128x4的張量;
3.根據得到的標簽和上面卷積網絡得到的預測值便可分別計算分類損失和坐標損失
接着由ProposalCreator產生用於ROI網絡的proposals:
1.將上面步驟1產生的基礎anchor和卷積網絡得到的 16650x4的坐標調整值預測作變換得到實際預測的 16650x4的roi坐標值;
2.去掉超出圖片范圍的roi,再去掉寬高小於閾值的roi,然后根據卷積網絡得到的分數預測提取前topN個roi;
3.對剩余的roi進行nms篩選以去掉高度重疊的roi,由此得到用於ROI網絡的roi(假設其維度為 2000x4)
3.ROI網絡
在ROI網絡之前還需要從RPN網絡產生的2000個roi中進一步篩選用於訓練的正負樣本,這一步由ProposalTargetCreator完成:
1.計算roi與gt_bbox的IOU值,根據設定好的正負樣本閾值篩選用於訓練的共128個正負樣本,由此得到 128個樣本分類標簽,坐標調整值標簽同樣只取正樣本且由roi與gt_bbox作變換得到
接着,ROI網絡首先取 37x50x512特征圖上對應的每個roi區域進行ROIPooling操作得到 7x7x512的特征圖,然后由如下全連接網絡得到最終的分類預測和第二次坐標調整值預測:

最后便可由得到的預測值和標簽值計算ROI網絡的損失,其中坐標調整值為每個類別都預測了,訓練時取真實標簽類別所對應的預測值。
結語
本文對FasterRCNN網絡的訓練流程進行了大致的歸納,其他細節之處可以參考其他文章,且紕漏之處也在所難免,懇請指正。