天天看點

Faster R-CNN的參數設計細節

之前有篇關于原理的文章(Faster R-CNN文章詳細解讀),該文章講述了網絡的設計原理,但是具體實作還有很多細節,比如RPN層在推斷的時候選了多少候選框,怎麼将得到的候選框配置設定給FPN層的各個層進行特征的提取,Faster R-CNN的正負樣本選擇方式等等細節,下面來給出一些記錄。

下面是根據detectron2中帶FPN結構的Faster R-CNN來解釋的,FPN規定的層中都會跟一個RPN,具體結構如下圖所示。

Faster R-CNN的參數設計細節

1. RPN層的ground truth中正負樣本怎麼定義的?

生成的所有的anchor框與标注框計算iou,如果iou小于0.3則将anchor定義為負樣本,如果大于0.7則定義為正樣本,在[0.3, 0.7]之間的不參與rpn層的loss計算

2. RPN層的ground truth中正負樣本的占比怎麼配置設定?

預先設定RPN層參與訓練的anchor框為256個,其中正樣本最多為256 * 0.5 = 128個,256減去正樣本個數為參與訓練的負樣本個數

3. R-CNN部分的ground truth是什麼?

不同于RPN需要自己根據标注框生成ground truth,R-CNN部分的ground truth就是标注框

4. RPN采用的是哪幾層作為提取候選區域的feature輸出層?

RPN提取的特征是[“p2”, “p3”, “p4”, “p5”, “p6”],對應的stride(也就是輸出的feature相對于原始輸入的縮小尺度)為(4, 8, 16, 32, 64),這裡"p2", “p3”, “p4”, "p5"都是根據backbone輸出的feature獲得的,隻有"p6"是直接通過"p5"下采樣得到的。

5. RPN階段,每層輸出多少個候選框,最終總共輸出多少個候選框?

這個問題分為訓練階段和推斷階段

訓練階段,每層feature(“p2”, “p3”, “p4”, “p5”, “p6”),先從RPN層輸出中最多2000個框,這些框是根據置信度從大到小排序選出,然後将所有層的候選合并(合并後有2000*6=12000個候選)經過NMS操作選出最多1000個候選框作為最終的輸出

測試階段邏輯同訓練階段,隻是從每層的RPN輸出中選出最多1000個框,合并後有1000 * 6 = 6000個候選,然後經過NMS操作選出最多1000個候選框

6. RPN選出的候選後,提取FPN中的那些feature用于之後的R-CNN訓練和推斷中?

訓練時,RPN提出了1000個候選框,這些框的大小都是不一樣的,需要根據候選框的大小配置設定給FPN中的五層featuremap(“p2”, “p3”, “p4”, “p5”)中去,配置設定的公式如下:

f l o o r ( 4 + l o g 2 ( a r e a 224 ) ) floor(4 + log_2(\sqrt{\frac{\sqrt{area}}{224}})) floor(4+log2​(224area

​​

​))

上式中area為候選框的面積,floor為向下取整操作。上式求出的值小于等于2則配置設定個p2,等于3配置設定給p3,等于4配置設定各p4,大于等于5則配置設定給p5。舉個例子,當area=224*224時,就将該候選框配置設定到p4層中,去使用ROIPooling操作擷取roi特征。

這裡要注意是配置設定給五層,而不是使用用于提出候選框的六層feature

7. 訓練時,經過RPN後選出了最多1000個框用于R-CNN的訓練,怎麼平衡正負樣本數?

将候選框與R-CNN的ground truth(也就是标注框)計算iou,大于0.5的作為正樣本,其餘的為負樣本。預設R-CNN部分參與選了的樣本總數為512個,為了平衡正負樣本,先從上述的正樣本中選出最多512 * 0.25 = 128個,剩下的為負樣本的個數,即盡量控制參與訓練的正負樣本數為1:3。

8. 推斷時,經過RPN後選出了最多1000個框用于R-CNN的推斷,最終怎麼輸出?

将候選框提取相應的feature後,輸入R-CNN的輸出結構中,得到輸出的1000個框,将這些框經過NMS操作後,選擇置信度最高的100個框作為最終的輸出

繼續閱讀