前言:
半年前有讀過對應的Faster-RCNN的論文,包括看過很多講解,隨着領域知識的不斷加深,對這一經典論文的理解也更加深度,重新讀關注更多細節問題,也獲得了不少新的知識,原始研讀文更關注論文本身的創新點,原研讀文鏈接【Faster-RCNN】,可作爲輔助參考。本博文則更關注完整流程內容細節方面的知識,希望能給大家啓發。
最近在研讀mask-rcnn,故而將faster-rcnn重新進行了細節上的閱讀,並書寫博文
mask-rcnn系列:
閱讀的代碼爲:mask-rcnn benchmark
【github地址】
0.代碼總覽:【地址】
1.骨架網絡【backbone.py及代碼入口】
2.RPN層【粗分割的rpn.py】
3.ROI_HEAD【實現各個分支】
4.其他輔助代碼雜會【其他】
完整流程概覽
這是一個faster-rcnn的簡單流程圖,在看mask-rcnn時重新對該論文進行一個認識。全內容分爲三個部分,(紅框標註)特徵提取部分,RPN(區域提議網路)部分,以及最後的分類和迴歸部分。
特徵提取部分
特徵提取通過基礎的網絡模型,最常用的是Resnet50,Resnet101。
輸入:原始圖片
輸出:通過滑動卷積的形式輸出對應的feature map(特徵圖)
RPN網絡模型:
作用:有兩個分支,分別爲是否爲前景物體的判斷,和候選框的粗迴歸。
通過一個3*3卷積在特徵圖上進行滑動,對應每個cell(中心點),生成對應的k個anchor box(候選框),以進行後面的候選框迴歸以及點操作。
該部分作爲全文創新點,最難搞懂,下面通過一定解釋進行說明
計算量爲哪些框含有物體(2k cls layer),含有物體的框偏移量有多少(4k reg layer)
這裏迴歸出來的不是原始的座標點(第一次爲achor給定的候選框,如右所示),而是原始座標點的偏移量(4k)
候選框生成
將生成的delta框的偏移量與anchor進行組合,生成原始的區域提議框,並進行如下操作:
- 去除背景框
- 去除分數低的框
- NMS去除非極大值框
然後生成對應ROI候選框,在特徵圖上進行尺度的統一化(ROIpooling操作)並進入到下一步RCNN的操作
分類和迴歸分支:
該部分來自RCNN,流程代碼基本一致。
圖源於mask-rcnn的操作,roialign應改爲roipoling操作,其餘基本一致
流程介紹如下:
- 通過rpn生成的roi_box已經爲優質的候選區域框,於對應的feature map進行roipooling操作,
- 將尺度歸一化的roi層進行特徵提取,全連接分類輸出三個變量,將概率和迴歸框的第二次偏移值進行處理
- 首先確定對應框內最高概率的類別,並將它作爲分類結構,進而重新對迴歸框進行第三次修補,
- 後處理階段:通過NMS,排序,刪除候選框
流程細節
這是我看過最完整並且細節展示最詳細的圖,
根據給出的步驟細節,說明如下:
- 特徵提取網絡
- 找出對應的候選框
- 通過後處理,1.刪除全背景的候選框 2.有前景的候選框進行nms操作 3.取出得分較高的候選框,放回到特徵圖中
- 通過映射的方式,將後處理後優質的ROI(候選區域)返回到特徵圖
- 將各個優質候選框進行尺度統一的ROIpooling操作,再進行分類和迴歸