1. 程式人生 > >faster-rcnn中,對RPN的理解

faster-rcnn中,對RPN的理解


原文中rcnn部分的截圖

圖片來自網上,黑色是滑動視窗的區域,就是上圖的紅色區域的sliding window其他顏色 9種視窗 就是anchor機制生成的9種區域

這裡要把sliding window和卷積層的滑動區別開,sliding winsow的stride步長是1!(想到經典的harr+adaboost人臉檢測)

sliding window只是選取所有可能區域,並沒有額外的什麼作用!

以下是我對faster-rcnn中的RPN的理解:
經過前面的網路 生成了一個 多通道的特徵圖,接下來就是通過在這些特徵圖上應用 滑動視窗 加 anchor 機制 進行目標區域判定和分類了,

目標檢測,就是包括 目標框定 和 目標判定。

所以 這裡的 滑動視窗 + anchor的機制 的功能就 類似於 fast rcnn 的selective search 生成proposals 的作用
rpn網路用來生成proposals

用原文的話講“we slide a small network over the conv feature map output by the last shared conv layer”

1.RPN是一個 卷積層(256維) + relu + 左右兩個層的(clc layer 和 reg layer)的小網路
  應用在滑動視窗區域上的 , 所有的滑動視窗共享這個 RPN
  這個卷積層 對比 普通的卷積層
  1,它是一個將 n x n x channels的輸入 通過256個 n x n 大小的卷積核 生成 1 * 1 * 256的feature map,即最後是256維的特徵
  2,它的輸入就是滑動視窗nxn對應的特徵圖區域,經過它卷積後 特徵圖變成1 x 1了
  3,由於此時輸出的是 1 * 1 *256,所有cls layer 和reg layer是用 1 x 1的卷積核進行進一步的特徵提取,
這裡1 x 1卷積核卷積時,對各個通道都有不同的引數,因為輸入又是1 x 1的圖片,所以相當於全連線的功能,相當於把 1 * 1 * 256展平成 256,然後進行全連線
2.關於 anchor機制
  anchor機制 就是 在n x n的滑動視窗上,進一步生成k種不同大小的可能區域
  滑動視窗 加 anchor機制 基本把目標可能出現的區域都涵蓋了
  所以 滑動視窗 加 anchor 就替代了 滑動視窗加金字塔 的功能


3.RPN損失計算
  RPN提取出的256d特徵是被這k種區域共享的,輸給clc layer和reg layer後,只要一次前向,就同時預測k個區域的前景、背景概率(1個區域2個scores,所以是2k個scores),以及bounding box(1個區域4個coordinates,所以是4k個coordinates),具體的說:

clc layer輸出預測區域的2個引數,即預測為前景的概率pa和pb,損失用softmax loss(cross entropy loss)(本來還以為是sigmoid,這樣的話只預測pa就可以了?)。需要的監督資訊是Y=0,1,表示這個區域是否ground truth

reg layer輸出預測區域的4個引數:x,y,w,h,用smooth L1 loss。需要的監督資訊是anchor的區域座標{xa,ya,wa,ha} 和 ground truth的區域座標{x*,y*,w*,h*}

計算損失時,我們需要確定k個區域中的各個區域是不是有效的,是前景還是背景。有效的區域才計算損失。上面的監督資訊:Y,{xa,ya,wa,ha}(k個),{x*,y*,w*,h*}(1個)是根據文章中的樣本產生規則得到的:

對於這k個區域
1 分配正標籤給滿足以下規則的區域
1.1 與某個ground truth(GT)的IoU最大的區域
1.2 與任意GT的IoU大於0.7的區域
(使用規則2基本可以找到足夠正樣本,但對於所有區域與GT的IoU都不大於0.7,可以用規則1)
(一個GT可能分配正標籤給多個anchor,具體怎麼分配?)
2 分配負標籤給與所有GT的IoU都小於0.3的區域。

非正非負的區域不算損失,對訓練沒有作用
RPN只對有標籤的區域計算loss。

最後
參與訓練RPN的區域都有參與最後rcnn的訓練,只是只有RPN預測為前景的區域 在rcnn才有計算迴歸損失

在使用faster rcnn的時候,rpn預測為前景的區域才是proposal,然後按照softmax score從大到小排序選出前2000個區域,在用NMS進一步篩選出300個區域,然後輸給後面的rcnn進行預測(注意此時rcnn的預測類別不包括背景,已經RPN輸出的已經預設是前景了)

--------------------- 
作者:美利堅節度使 
來源:CSDN 
原文:https://blog.csdn.net/ying86615791/article/details/72788414?utm_source=copy 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關推薦

faster-rcnnRPN理解

原文中rcnn部分的截圖 圖片來自網上,黑色是滑動視窗的區域,就是上圖的紅色區域的sliding window其他顏色 9種視窗 就是anchor機制生成的9種區域 這裡要把sliding window和卷積層的滑動區別開,sliding winsow的stride步長

faster rcnn 核心部分RPN網路的整理與理解

學習fasterrcnn檢測已經有一段時間了,最近才把核心的RPN部分進行的理解和整理,理解的偏差還請各位大神指正, RPN(RegionProposal Network)區域生成網路 1.  在五層conv,poolling,relu之後,取出conv5的輸出,送給RPN網

faster rcnn rpn層的理解

height 圖片 http 預測 解決辦法 tar mat proposal 而是 1.介紹 圖為faster rcnn的rpn層,接自conv5-3 圖為faster rcnn 論文中關於RPN層的結構示意圖 2 關於anchor: 一般是在最末層

[caffe筆記005]:通過程式碼理解faster-RCNNRPN

https://blog.csdn.net/happyflyy/article/details/54917514 [caffe筆記005]:通過程式碼理解faster-RCNN中的RPN 注意:整個RPN完全是筆者自己的理解,可能會有一些理解錯誤的地方。 1. RPN簡介 RPN是reg

faster-rcnn新增Mask的RoiAlign層使迴歸框更精確( roi_align_layer.cu:240] Check failed: error == cudaSuccess *)

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/e01528/article/details/80265118 具體的操作為什麼這樣做,可參照: 1.Caffe學習之自定義建立新的Layer層   2.如何在caffe中自定

faster rcnn使用soft nmsfaster rcnn的改進(一)

1. 背景介紹 我的專案是利用faster rcnn檢測kiiti資料集,用原始nms,iters = 10000的情況下,得到的mAP = 0.586, 在改用soft nms後,其他引數均不變的情況下,得到的mAP = 0.622。算是挺大的改進了,所以分

faster-rcnn新增Mask的RoiAlign層使迴歸框更精確

具體的操作為什麼這樣做,可參照: ROI pooling層 說起ROI Alignment,就要說道faster-rcnn的ROI pooling, ROIpooling層結構是為了將原影象的rois對映到固定大小的feature map上。而此方法有一些缺

faster rcnn 損失函式(一)——softmaxsoftmax loss和cross entropy的講解

先理清下從全連線層到損失層之間的計算。來看下面這張圖,(非常好的圖)。 T類  N表示前一層特徵層flatten後的數字   fltten後的特徵      無限大小的T類                     從0-1的T類向量                   

——————————JavaScriptString字符串的一些操作——————————

repl 字母 第一個字符 mic arr size 位置 str2 str1 —————————————&mdash

C# ArcgisEngine開發一個圖層進行過濾只顯示符合條件的要素

layer style where sky 要求 我們 ase get filter 轉自原文 C# ArcgisEngine開發中,對一個圖層進行過濾,只顯示符合條件的要素 有時候,我們要對圖層上的地物進行有選擇性的顯示,以此來滿足實際的功能要求。 按下面介紹的

python/numpy/tensorflow矩陣行列操作下標是怎麽回事兒?

flow round mean 數據 ria lis .html 錯誤 表示 Python中的list/tuple,numpy中的ndarrray與tensorflow中的tensor。 用python中list/tuple理解,僅僅是從內存角度理解一個序列數據

【C++】判斷元素是否在vectorvector去重兩個vector求交集、並集

bool iostream space col 求交集 uniq AI void print #include <iostream> #include <vector> #include <algorithm> //sort函數、交並補

在flask框架wtforms的SelectMultipleField的一個報錯處理

pre inf req ESS multi bmi 其中 ews IT 先粘貼代碼: form.py文件: users = SelectMultipleField( label="請選擇用戶", validators=[ DataRequired(

在實際的開發工作中,對字串的處理是最常見的程式設計任務。本題目即是要求程式使用者輸入的串進行處理。具體規則如下: (1)把每個單詞的首字母變為大寫。 (2)把數字與字母之間用下劃線字元(_)分開使得更

在實際的開發工作中,對字串的處理是最常見的程式設計任務。本題目即是要求程式對使用者輸入的串進行處理。具體規則如下: (1)把每個單詞的首字母變為大寫。 (2)把數字與字母之間用下劃線字元(_)分開,使得更清晰; (3)把單詞中間有多個空格的調整為1個空格。   &

(原)faster rcnn的tensorflow程式碼的理解

轉載請註明出處:   參考網址: 論文:https://arxiv.org/abs/1506.01497 tf的第三方faster rcnn:https://github.com/endernewton/tf-faster-rcnn IOU:https://www.cnblogs.com/

faster rcnn資料標註pascal voc格式

<?xml version="1.0" encoding="utf-8"?> <annotation> <folder>VOC2007</folder> <filename>test100.mp4_3

資料庫讀取原始資料插入新表處理原始資料的原則總結

在讀取原始資料的時候會有可能屬性名的名字與要建立的表的名字不符,這個時候就要為讀取到的資料重新命名屬性名。 如果資料中存在中文,還要宣告資料庫的編碼。 在原始表中可能會有重複資料,需要事先將重複資料進行刪除,然後再做其他處理。 在設定主鍵的時候會發現有些資料的主鍵相同,但是其他屬性值不同,需要對已經插入

請問下Faster rcnn 最後訓練出自己的模型,得到的AP=0.00 mAP=0.000? 檢測精度為什麼是0呢?[已經解決,, TillTheWorldEnd 的回答可以解決哈]

大家好,本人最近在學習faster rcnn ,小白一枚,參考了很多教程。 環境: ubuntu+cuda+python 執行結果: Saving cached annotations to /home/think/asuna/py-faster-rcnn/data/VOC

faster rcnn損失函式(二)—— Smoooh L1 Loss的講解

1. 使用Smoooh L1 Loss的原因 對於邊框的預測是一個迴歸問題。通常可以選擇平方損失函式(L2損失)f(x)=x^2。但這個損失對於比較大的誤差的懲罰很高。 我們可以採用稍微緩和一點絕對損失函式(L1損失)f(x)=|x|,它是隨著誤差線性增長,而不是平方增長

caffe學習(四):py-faster-rcnn配置執行測試程式(Ubuntu)

上一篇部落格中講了在Ubuntu下安裝caffe的經驗總結(各種問題,簡直懷疑人生了)。部落格連結:點我開啟 faster-rcnn有兩個版本,分別是Python的和MATLAB的。這裡介紹python版本的faster-rcnn的配置。 網上有很多相關的教程,起初我在配置