深度學習之 RPN(RegionProposal Network)- 區域候選網絡

anchor boxes基本概念與作用:

feature map 上的一個點可以映射回輸入圖片上的一個點,以特征圖上這個點為中心,預先人為設定 k 個 boxes,這些 boxes 就稱為在這個點上生成的 k 個 anchor boxes(所有anchor boxes的中心點坐標是一樣的)。一個 m?nm*nm?n 的特征圖就有 m?n?km*n*km?n?k 個 anchor boxes。請添加圖片描述
anchor boxes 的作用是將 boxes 傳給 RPN, 讓 RPN 判斷其中哪些 anchor boxes 可能存在目標,并進一步回歸坐標,得到 proposals 輸給后面的網絡。模型回歸的目標是真實 boxes 與 anchor boxes 之間坐標的偏置。將偏置和 anchor boxes 的坐標帶入預先設定的公式中,就得到了最終預測的boxes坐標。

RPN

RPN的本質是 “ 基于滑窗的無類別obejct檢測器 ”。

對于提取候選框最常用的 SelectiveSearch 方法,提取一副圖像大概需要2s的時間,改進的 EdgeBoxes 算法將效率提高到了0.2s,但是這還不夠。候選框提取不一定要在原圖上做,特征圖上同樣可以,低分辨率特征圖意味著更少的計算量,基于這個假設,MSRA的任少卿等人提出RPN(RegionProposal Network, 區域候選網絡),完美解決了這個問題,它的主要功能是生成區域候選(Region Proposal)(可以看做是許多潛在的邊界框,也叫 anchor,它是包含4個坐標的矩形框),如上所示。

RPN簡單來說就是:假設輸入一張圖片,經過前面骨干網絡的一系列的卷積或者池化之后之后,得到一個尺寸 m?nm*nm?n 的特征圖(暫且不說通道),對應將原圖劃分為 m?nm*nm?n 個區域,原圖的每個區域的中心由這個特征圖上的一個像素點坐標表示。通過anchor機制,可以在每個像素點對應原圖的區域生成k個可能存在目標的候選框(稱為anchor box),如上圖所示(k=9)。RPN就是用來判斷每個像素點對應的k個區域是不是包含目標,如果包含(那么先根據輸出的坐標偏置修正box位置)則輸給后面的RCNN做進一步判斷。(意思就是要從mn9個候選框中做篩選,提取proposals)

RPN 的結構如下圖所示,backbone 輸出的特征圖經過一個 3?33 * 33?3 卷積之后分別進入了不同的分支,對應不同的 1?11 * 11?1 卷積。第一個卷積為定位層,輸出 anchor 的4個坐標偏移。第二個卷積為分類層,輸出anchor的前后景概率。
在這里插入圖片描述
看完了rpn的大致結構,下面來看rpn的詳細過程。主要看一下,rpn是如何生成以及處理anchor的。下圖表示了rpn網絡的詳細結構。
在這里插入圖片描述
第一步,生成基礎 anchor(base_anchor),基礎 anchor 的數目 = 長寬比的數目 * anchor 的縮放比例數目, 即 anchorsnum=len(ratios)?len(scales)anchors_num = len(ratios) * len(scales)anchorsn?um=len(ratios)?len(scales)。這里,設置了3種長寬比(1:1, 1:2,2:1)和3種縮放尺度(8, 16, 32),因此 anchor_num = 9. 下圖表示了其中一個位置對應的9個尺寸的 anchor。
在這里插入圖片描述
第二步,根據 base_anchor,對特征圖上的每一個像素,都會以它為中心生成9種不同尺寸的邊界框,所以總共生成 60×40×9=2160060 \times 40 \times 9 = 2160060×40×9=21600 個anchor。需要注意的是,所有生成的 anchor 都是相對于原圖的。

牢記:特征圖上的每個點生成一個Anchors,Anchors 可以理解成9個不同的框(框的屬性是長寬了,再進一步是四個點的坐標)。這個框的數據(框的左上角坐標(x0,y0),右下角坐標(x1,y1))這四個值都是對應于原圖的。下面這個就是原圖,紅色點就是特征圖上的點對應于原圖的位置。每一個位置使用 9 個錨點,每個位置會生成 2×9 個目標分數和 4×9 個坐標分數。顯然,通過一個中心定義9個不同的框,就是為實現多尺度這個想法。當然這樣做獲得檢測框很不準確,后面會做2次 bounding box regression 修正檢測框位置。
在這里插入圖片描述
第三步,anchor的篩選。首先將定位層輸出的坐標偏移應用到所有生成的 anchor,然后將所有 anchor 按照 前景概率/得分 從高到低進行排序。只取前 pre_nms_num 個 anchor(訓練階段),最后 anchor 通過 nms 篩選得到 post_nms_num(訓練階段)個anchor,也稱作 roi。

下面是卷積的具體過程

在這里插入圖片描述

a.conv fetaure map 到 intermediate layer 的卷積過程

RPN網絡前面是一個提特征的網絡,比如VGG,Res等,傳給RPN網絡的是一個特征圖,其實也就是一個 tensor,比如用ZF網絡(論文里面用的)

輸入特征圖:13?13?25613*13*25613?13?256

拿到模型的特征,RPN網絡首先加了一個 3?3?256?2563*3*256*2563?3?256?256 步長為 1 的卷積層(可能是為了擴大感受野)

這樣就會得到 11?11?25611*11*25611?11?256 的輸出,前面 11?1111*1111?11 是圖形矩陣,其中每一個點在原圖中都是一個很大的區域,256表示這個區域的特征。

在這個區域內可能有目標,為了能更能逼近目標,我們需要3種尺度,和3種形狀,就是圖中的那9種物體框。假設原圖中有一個物體,那我們通過在原圖上平移框,就總能找到一個顏色框能正好把物體框在里面(真是厲害這想法),而且尺度啊形狀最接近。

那么如何平移的呢?在原圖上你一個像素一個像素平移沒意義啊,難道要重復提取特征?所以平移必須在特征圖上平移,因為特征圖最后總能映射回原圖。11?1111*1111?11 的特征圖區域,在原圖中就表示 11?1111*1111?11 個大黑框,每個大黑框里面又有9個小顏色框,這樣就會產生 11?11?911*11*911?11?9 個不同位置,不同尺度,不同形狀的物體框,基本足夠框出所有物體了。

b.intermediate layer 的256維向量后面對應兩條分支

在這里插入圖片描述

  • cls layer 分支是目標和背景的二分類(classification),因為k等于9,所以通過 1×1×256×181×1×256×181×1×256×18 的卷積核得到 2×9=182×9 = 182×9=18 個分數,分別是目標和背景的評分。
  • reg layer分支。如果候選框是目標區域,就去判斷該目標區域的候選框位置在哪,這個時候另一條分支就過 1×1×256×361×1×256×361×1×256×36 的卷積得到 4×94×94×9 個值,每個框包含4個值(x,y,w,h),就是9個候選區域對應的框應該偏移的具體位置Δxcenter,Δycenter,Δwidth,ΔheightΔxcenter,Δycenter,Δwidth,ΔheightΔxcenter,Δycenter,Δwidth,Δheight。如果候選框不是目標區域,就直接將該候選框去除掉,不再進行后續位置信息的判斷操作。這里預測的值都是通過模型不斷訓練得到的。

c. proposals layer

proposals layer 3個輸入:一個是分類器結果 foreground softmax scores,一個是 anchor 回歸 regression:[dx(A),dy(A),dw(A),dh(A)][d_{x}(A),d_{y}(A),d_{w}(A),d_{h}(A)][dx?(A),dy?(A),dw?(A),dh?(A)] ,還有一個是 im-info,包含圖像縮放的信息。proposal layer 步驟:

  1. 生成 anchors(anchors 的坐標是相對于原圖的坐標),然后利用 [dx(A),dy(A),dw(A),dh(A)][d_{x}(A),d_{y}(A),d_{w}(A),d_{h}(A)][dx?(A),dy?(A),dw?(A),dh?(A)] 對所有的 anchors 做 bbox regression 回歸(這里的 anchors 生成和訓練時完全一致)
  2. 按照輸入的 foreground softmax scores 由大到小排序 anchors,提取前pre_nms_topN(e.g. 6000) 個anchors,即提取修正位置后的 foreground anchors。
  3. 判斷fg anchors是否大范圍超過邊界,剔除嚴重超出邊界fg anchors,剔除非常小(width<threshold or height<threshold)的 foreground anchors
  4. 進行 nms,按照 nms 后的 foreground softmax scores 由大到小排序fg anchors,提取前 post_nms_topN(e.g. 300) 結果作為 proposal 輸出。

總結起來就是:生成anchors -> softmax分類器提取fg anchors -> bbox reg回歸fg anchors -> Proposal Layer生成proposals。

anchors的標定規則

  1. 如果 Anchor 對應的 refrence box 與 ground truth 的 IoU 值最大,標記為正樣本;
  2. 如果 Anchor 對應的 refrence box 與 ground truth 的 IoU>0.7,標定為正樣本。事實上,采用第2個規則基本上可以找到足夠的正樣本,但是對于一些極端情況,例如所有的 Anchor 對應的 reference box 與 groud truth 的 IoU 不大于0.7,可以采用第一種規則生成.
  3. 負樣本標定規則:如果 Anchor 對應的 reference box 與 ground truth 的 IoU<0.3,標記為負樣本。
  4. 剩下的既不是正樣本也不是負樣本,不用于最終訓練。
  5. 訓練 RPN 的Loss是有 classification loss(即softmax loss)和 regression loss(即L1 loss)按一定比重組成的。
  6. 丟棄跨越邊界的 anchor;

Loss

計算 softmax loss 需要的是 anchors 對應的 ground truth 標定結果和預測結果,計算regression loss 需要三組信息:

  1. 預測框,即 RPN 網絡預測出的 proposal 的中心位置坐標x,y和寬高w,h;
  2. 錨點 reference box:之前的9個錨點對應9個reference boxes,每一個reference boxes都有一個中心點位置坐標 xa,yax_a,y_axa?,ya? 和寬高 wa,haw_a,h_awa?,ha?
  3. ground truth:標定的框也對應一個中心點位置坐標x,y和寬高w,h.因此計算regression loss和總Loss方式如下:
    在這里插入圖片描述
    在這里插入圖片描述

note

  • 只有在train時,cls+reg 才能得到強監督信息(來源于ground truth)。即ground truth會告訴 cls+reg 結構,哪些才是真的前景,從而引導cls+reg結構學得正確區分前后景的能力;在 reference 階段,就要靠 cls+reg 自力更生了。
  • 在train階段,會輸出約2000個proposal,但只會抽取其中256個proposal來訓練RPN的cls+reg結構;到了reference階段,則直接輸出最高score的300個proposal。此時由于沒有了監督信息,所有RPN并不知道這些 proposal 是否為前景,整個過程只是慣性地推送一波無tag的proposal給后面的Fast R-CNN。
  • RPN的運用使得region proposal的額外開銷就只有一個兩層網絡。
  • two stage型的檢測算法在 RPN 之后還會進行再一次的分類任務和邊框回歸任務,以進一步提升檢測精度。
  • 在 RPN 末端,通過對兩個分支的結果進行匯總,來實現對 anchor 的初步篩除(先剔除越界的 anchor,再根據 cls 結果通過NMS算法去重)和 初步偏移(根據 bbox reg結果),此時輸出的都改頭換面叫 proposal 了。
  • RPN之后,proposal 成為 RoI (感興趣區域) ,被輸入 RoIPooling 或 RoIAlign 中進行 size上的歸一化。當然,這些都是 RPN網絡 之后的操作了,嚴格來說并不屬于 RPN 的范圍了。
  • 但是如果只在最后一層 feature map 上映射回原圖像,且初始產生的 anchor 被限定了尺寸下限,那么低于最小 anchor 尺寸的小目標雖然被 anchor 圈入,在后面的過程中依然容易被漏檢。
  • 但是FPN的出現,大大降低了小目標的漏檢率,使得RPN如虎添翼。

從模型訓練的角度來看,通過使用共享特征交替訓練的方式,達到接近實時的性能,交替訓練方式描述為: 1)根據現有網絡初始化權值w,訓練RPN; 2)用RPN提取訓練集上的候選區域,用候選區域訓練FastRCNN,更新權值w; 3)重復1、2,直到收斂。

參考:

  • https://blog.csdn.net/ying86615791/article/details/72788414
  • https://www.cnblogs.com/chaofn/p/9310912.html
  • ttps://blog.csdn.net/sinat_33486980/article/details/81099093#commentBox

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453761.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

h264的碼率控制 JVT-G012

開始看h264的碼率控制&#xff0c;很多地方都提到 G012&#xff0c;拿來做為參考比較&#xff0c;看來很有必要研究清楚。 偶這人&#xff0c;E文文檔不翻譯的話&#xff0c;看過就忘了&#xff0c;于是草草翻譯了下&#xff0c;因為不打算做B幀&#xff0c;也不準備在同一幀中…

Android RecyclerView嵌套EditView實時更新Item數據

一、場景&#xff08;例如&#xff1a;購物車&#xff09; 1、當我們需要以列表樣式管理某些數據時&#xff0c;可能需要列表項的某個字段可編輯 2、編輯Item上的某個字段后可能還要更新相關字段的值 二、可能遇到的問題 1、列表滑動導致輸入框中的數據錯位&#xff08;或者焦點…

workbench拓撲優化教程_優化技術在水泵水力設計的應用(上篇)

文章來源&#xff1a;安世亞太官方訂閱號&#xff08;搜索&#xff1a;Peraglobal&#xff09;CFD技術在泵的內流數值模擬、研究泵內部流動規律和結構方面已廣泛應用&#xff0c;取得了很多成果。但是初步設計的產品如果通過CFD仿真得到的性能曲線不能滿足使用要求&#xff0c;…

深度學習之 TensorRT

1 簡介 TensorRT是一個高性能的深度學習推理&#xff08;Inference&#xff09;優化器&#xff0c;可以為深度學習應用提供低延遲、高吞吐率的部署推理。TensorRT可用于對超大規模數據中心、嵌入式平臺或自動駕駛平臺進行推理加速。TensorRT現已能支持TensorFlow、Caffe、Mxne…

H.264筆記

H.264標準寫得比較繁復&#xff0c;所以考慮在瀏覽完Whitepaper之后就開始研讀X264代碼。X264代碼風格還是比較清晰簡潔的。根據對標準得理解&#xff0c;Picture Order Count在Slice解碼的一開始就被提及&#xff1a;I0 B1 B2 P3 B4 B5 P6I0 P3 B1 B2 P6 B4 B5于是I0的POC是0&…

進制轉換中dbho是什么意思_什么是網段?二進制十進制如何互相轉換?看完這篇,你就全明白了...

之前的文章講了ip&#xff0c;子網掩碼&#xff0c;網關的關系&#xff0c;今天著重講一下網段。我們用傻瓜交換機通訊時&#xff0c;一個網段的設備才能互相通訊&#xff0c;怎么能判斷兩個ip是同一個網段呢&#xff1f;今天就簡單的說一下。(這篇文章用語音聽可以起到催眠作用…

【網絡流24題】星際轉移問題(最大流)

【網絡流24題】星際轉移問題&#xff08;最大流&#xff09; 題面 Cogs 題解 因為天數是未知的&#xff0c;所以我們要想辦法處理天數 可以選擇二分或者依次累加天數 因為數據范圍較小&#xff0c;使用二分可能反而復雜度會增高 所以使用不斷累加天數 那么&#xff0c;把所有的…

使用 gunicorn 部署flask項目

1、WSGI協議 Web框架致力于如何生成HTML代碼&#xff0c;而Web服務器用于處理和響應HTTP請求。Web框架和Web服務器之間的通信&#xff0c;需要一套雙方都遵守的接口協議。WSGI協議就是用來統一這兩者的接口的。 2、WSGI容器 常用的WSGI容器有Gunicorn和uWSGI&#xff0c;但G…

軟件需求與問題解決

&#xff08;一&#xff09; 小滿當上項目經理后不久&#xff0c;參與了一個大項目。當時市場簽下來的時候&#xff0c;公司里面是歡天喜地的。項目做了一年多。到了交付的時候&#xff0c;用戶卻很不滿意&#xff0c;當初說好的東西&#xff0c;好多都變了卦。用戶是上帝&…

flex 換主軸后子元素占滿_Chrome72 嵌套 flex 布局修改,你的網站可能會發生布局錯亂...

起源2019 年 1 月 29 日&#xff0c;Chrome72 正式版(72.0.3626.81)發布&#xff0c;本次發布帶來了一個改變&#xff0c;且沒有在更新日志中提及&#xff0c;該改變導致某些網站發生了布局錯亂。該改變主要針對的是嵌套的flex布局&#xff0c;下面我們一起看下是怎么回事。問題…

使用 Django + Wusgi + Nginx 部署 Django

如何在生產上部署Django? Django的部署可以有很多方式&#xff0c;采用 nginxuwsgi 的方式是其中比較常見的一種方式。 uwsgi介紹 uWSGI是一個Web服務器&#xff0c;它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。 WSGI / …

網絡學習網址

網絡之路博客 http://ccieh3c.com/ 轉載于:https://www.cnblogs.com/changha0/p/8179801.html

路由到另外一個頁面_Nextjs使用解讀一(項目搭建與路由系統)

文章說明&#xff1a;1. 之前想搭建個人博客&#xff0c;由于學習的是react技術棧&#xff0c;所以就到處搜羅資料學了nextjs&#xff0c;配合koa就把博客搭起來了。該系列文章基于我的學習筆記&#xff0c;重新整理了一遍&#xff0c;如果有錯誤之處&#xff0c;還請指正。2. …

微信獲取token -1000

最終翻看微信開發api找到需要去配置IP白名單。只需要配置訪問來源IP即可。 轉載于:https://www.cnblogs.com/yangjinqiang/p/8184663.html

產品技術和管理

為啥純粹為消費者傳遞體驗的活動可以價格不菲&#xff0c;幾為暴利&#xff1f;——談客戶體驗作為客戶價值提升之源 不論產品還是服務&#xff0c;如果能夠為消費者傳遞有益的體驗&#xff0c;其價值就可以在一般的產品服務之上得以體現&#xff1b;附加了體驗的產品&#xff…

Linux 修改系統編碼

linux服務器的字符集設置可能影響到網站頁面出現 “&#xff1f;&#xff1f;&#xff1f;” 等問號亂碼&#xff0c;還有可能導致文件中的漢字部分出現亂碼。有兩個原因 服務器沒有安裝 zh_CN.UTF-8 字符集&#xff0c;導致不支持中文&#xff01;服務器雖然裝了 zh_CN.UTF-8…

jquery ztree 設置勾選_047 JAVA-jQuery

jQuery操作元素屬性的值表單:<body><input type"button" name"" id"but1" value"測試獲得屬性值" /><hr />賬號&#xff1a;<input type"text" name"sxtzh" id"zhanghao" value&q…

Opencv undefined reference to `cv::imread() Ubuntu編譯

Ubuntu下編譯一個C文件&#xff0c;C源程序中使用了opencv&#xff0c;opencv的安裝沒有問題&#xff0c;但是在編譯的過程中出現如下錯誤&#xff1a; undefined reference to cv::imread(std::string const&, int)undefined reference to cv::noArray()undefined referen…

深度學習目標檢測之 YOLO v1

這是繼 RCNN&#xff0c;fast-RCNN 和 faster-RCNN 之后&#xff0c;rbg&#xff08;RossGirshick&#xff09;針對DL目標檢測速度問題提出的另外一種框架。YOLO V1 增強版本GPU中能跑45fps&#xff0c;簡化版本155fps。 論文名&#xff1a; 《You Only Look Once&#xff1a;…

編程珠璣番外篇

1.Plan 9 的八卦 在 Windows 下喜歡用 FTP 的同學抱怨 Linux 下面沒有如 LeapFTP 那樣的方便的工具. 在蘋果下面用慣了 Cyberduck 的同學可能也會抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻煩的事情. 其實一點都不麻煩, 因為在 LINUX 系統上壓根就不需要用 FTP. 為什么呢? 因…