Faster R-CNN的参数设计细节
之前有篇關于原理的文章(Faster R-CNN文章詳細解讀),該文章講述了網絡的設計原理,但是具體實現還有很多細節,比如RPN層在推斷的時候選了多少候選框,怎么將得到的候選框分配給FPN層的各個層進行特征的提取,Faster R-CNN的正負樣本選擇方式等等細節,下面來給出一些記錄。
下面是根據detectron2中帶FPN結構的Faster R-CNN來解釋的,FPN規定的層中都會跟一個RPN,具體結構如下圖所示。
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”)中去,分配的公式如下:
floor(4+log2(area224))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個框作為最終的輸出
總結
以上是生活随笔為你收集整理的Faster R-CNN的参数设计细节的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab数组元素的比较大小排序,MA
- 下一篇: 全面认识海思SDK及嵌入式层开发-第1/