Faster R-CNN
這三篇就夠了
引用
1、
2、
http://hellodfan.com/2017/10/02/%E7%89%A9%E4%BD%93%E6%A3%80%E6%B5%8B%E8%AE%BA%E6%96%87-Faster-R-CNN/
3、
一、簡介:
二、比較:
三、訓練過程:
第一步,我們依上述訓練RPN,該網路用ImageNet預訓練的模型初始化,並端到端微呼叫於區域建議任務;
第二步,我們利用第一步的RPN生成的建議框,由Fast R-CNN訓練一個單獨的檢測網路,這個檢測網路同樣是由ImageNet預訓練的模型初始化的,這時候兩個網路還沒有共享卷積層;
第三步,我們用檢測網路初始化RPN訓練,但我們固定共享的卷積層,並且只微調RPN獨有的層,現在兩個網路共享卷積層了;
第四步,保持共享的卷積層固定,微調Fast R-CNN的fc層。這樣,兩個網路共享相同的卷積層,構成一個統一的網路。
注意:第一次迭代時,用ImageNet得到的模型初始化RPN和Fast-R-CNN中卷積層的引數;從第二次迭代開始,訓練RPN時,用Fast-R-CNN的共享卷積層引數初始化RPN中的共享卷積層引數,然後只Fine-tune不共享的卷積層和其他層的相應引數。訓練Fast-RCNN時,保持其與RPN共享的卷積層引數不變,只Fine-tune不共享的層對應的引數。這樣就可以實現兩個網路卷積層特徵共享訓練。
四、預測過程
五、細節
1、rpn視窗迴歸
RPN網路中bounding-box迴歸的實質其實就是計算出預測視窗。這裡以anchor視窗為基準,計算Ground Truth對其的平移縮放變化引數,以及預測視窗【可能第一次迭代就是anchor】對其的平移縮放引數,因為是以anchor視窗為基準,所以只要使這兩組引數越接近,以此構建目標函式求最小值,那預測視窗就越接近Ground Truth,達到迴歸的目的;
2、理清anchors的數目
文中提到對於1000×600的一張影象,大約有20000(~60×40×9)個anchors,忽略超出邊界的anchors剩下6000個anchors,利用非極大值抑制去掉重疊區域,剩2000個區域建議用於訓練(訓練的時候投給fast r-cnn); 測試時在2000個區域建議中選擇Top-N【文中為300】個區域建議用於Fast R-CNN檢測。
3、終於整清楚rpn的原理了
大概是根據特徵圖上的每一個特徵在原圖上產生9個anchors,這樣所有特徵一起就會產生很多的anchors,然後根據前面卷積的strides對映回原圖(對映的是中心點)根據比例,確定原圖上所有anchors的區域,後面根據最後兩個全連線層的出來的,是否為前景的得分 ,以及座標寬高的偏移引數精修這些anchors的位置,最後篩選掉那些超出邊界的anchors,並根據得分排序,選擇前多少個anchors作為最後的也就是要輸入給fast r-cnn的roi層的候選框。當然給他的是候選框在原圖上的座標,後面可以根據原圖的座標,然後根據fast的卷積特徵得出對映規則,在fast的特徵圖上對映出這些框,繼續往下進行。
Proposal Layer
縮排Proposal Layer負責綜合所有[dx(A),dy(A),dw(A),dh(A)]變換量和foreground anchors,計算出精準的proposal,送入後續RoI Pooling Layer。還是先來看看Proposal Layer的caffe prototxt定義:
- layer {
- name: 'proposal'
- type: 'Python'
- bottom: 'rpn_cls_prob_reshape'
- bottom: 'rpn_bbox_pred'
- bottom: 'im_info'
- top: 'rois'
- python_param {
- module: 'rpn.proposal_layer'
- layer: 'ProposalLayer'
- param_str: "'feat_stride': 16"
- }
- }
Proposal Layer有3個輸入:fg/bg anchors分類器結果rpn_cls_prob_reshape,對應的bbox reg的[dx(A),dy(A),dw(A),dh(A)]變換量rpn_bbox_pred,以及im_info;另外還有引數feat_stride=16,這和圖4是對應的。
縮排首先解釋im_info。對於一副任意大小PxQ影象,傳入Faster RCNN前首先reshape到固定MxN,im_info=[M, N, scale_factor]則儲存了此次縮放的所有資訊。然後經過Conv Layers,經過4次pooling變為WxH=(M/16)x(N/16)大小,其中feature_stride=16則儲存了該資訊。所有這些數值都是為了將proposal對映回原圖而設定的,如圖12,畢竟檢測就是為了在原圖上畫一個框而已~
圖12
縮排Proposal Layer forward(caffe layer的前傳函式)按照以下順序依次處理:
再次生成anchors,並對所有的anchors做bbox reg位置迴歸(注意這裡的anchors生成順序和之前是即完全一致的)
按照輸入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)個anchors。即提取修正位置後的foreground anchors
利用feat_stride和im_info將anchors對映回原圖,判斷fg anchors是否大範圍超過邊界,剔除嚴重超出邊界fg anchors。
進行nms(nonmaximum suppression,非極大值抑制)
再次按照nms後的foreground softmax scores由大到小排序fg anchors,提取前post_nms_topN(e.g. 300)結果作為proposal輸出。
之後輸出proposal=[x1, y1, x2, y2],注意,由於在第三步中將anchors對映回原圖判斷是否超出邊界,所以這裡輸出的proposal是對應MxN輸入影象尺度的,這點在後續網路中有用。另外我認為,嚴格意義上的檢測應該到此就結束了,後續部分應該屬於識別了~
RPN網路結構就介紹到這裡,總結起來就是:
生成anchors -> softmax分類器提取fg anchors -> bbox reg迴歸fg anchors -> Proposal Layer生成proposals
六、疑問
為什麼需要 設定3*3的滑動視窗?就是用來卷積的。
相關文章
- Faster R-CNN演算法解析ASTCNN演算法
- 程式碼實踐——Faster R-CNNASTCNN
- Faster R-CNN: Down the rabbit hole of modern object detectionASTCNNObject
- 目標檢測技術演化:從R-CNN到Faster R-CNNCNNAST
- 一文讀懂目標檢測:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSDCNNASTYOLO
- TorchVision Faster R-CNN 微調,實戰 Kaggle 小麥檢測ASTCNN
- 深度學習目標檢測(object detection)系列(四) Faster R-CNN深度學習ObjectASTCNN
- Pytorch版Faster R-CNN 原始碼分析+方法流程詳解——訓練篇PyTorchASTCNN原始碼
- CNN--卷積神經網路從R-CNN到Faster R-CNN的理解(CIFAR10分類程式碼)CNN卷積神經網路AST
- 目標檢測入門系列手冊四:Faster R-CNN 訓練教程ASTCNN
- 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度學習平臺的實戰ASTCNN深度學習
- 深度學習論文翻譯解析(十三):Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks深度學習ASTCNNObject
- 【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程深度學習ASTCNN
- 【Fast R-CNN】Fast R-CNN (2015) 全文翻譯ASTCNN
- Learn English 10 times faster with these tipsAST
- faster-RCNN臺標檢測ASTCNN
- Faster資料庫研習,一AST資料庫
- 【目標檢測】R-CNNCNN
- godaddy 的 Monitoring performance to make your website fasterGoORMWebAST
- docker(一):Develop faster. Run anywhere.DockerdevAST
- faster rcnn中anchor的生成過程理解ASTCNN
- PostgreSQL DBA(98) - PG 12 Faster float conversion to textSQLAST
- R-CNN系列其二:SPP-NetCNN
- RCNN、SPP-net、Fast-RCNN和Faster-RCNNCNNAST
- PostgreSQL 原始碼解讀(217)- A Faster, Lightweight Trigger Function in CSQL原始碼ASTFunction
- [翻譯]http2-for-a-faster-web——快速瞭解http2HTTPASTWeb
- 二階段目標檢測網路-Faster RCNN 詳解ASTCNN
- More web function requests go online concurrently, and web service deployment is faster and more economical!WebFunctionGoAST
- 用Tensorflow2.0實現Faster-RCNN的程式碼介紹ASTCNN
- 《Cascade R-CNN: Delving into High Quality Object Detection》論文筆記CNNObject筆記
- 【目標檢測】Fast R-CNN演算法實現ASTCNN演算法
- 大話目標檢測經典模型:Mark R-CNN模型CNN
- 深度學習論文翻譯解析(十二):Fast R-CNN深度學習ASTCNN
- 深度學習目標檢測(object detection)系列(一) R-CNN深度學習ObjectCNN
- 不會用Photoshop摳圖?Mask R-CNN助你一鍵“除”人CNN
- Sparse R-CNN: End-to-End Object Detection with Learnable Proposals 論文解讀CNNObject
- 目標檢測 - Sparse R-CNN: End-to-End Object Detection with Learnable ProposalsCNNObject
- CVPR 2018|Cascade R-CNN:向高精度目標檢測器邁進CNN