Faster RCNN論文與原理解讀
論文結(jié)構(gòu)
摘要核心
候選區(qū)域提取是已有檢測(cè)方法實(shí)時(shí)性低的主要瓶頸
提出了候選區(qū)域網(wǎng)絡(luò),通過共享特征,提取候選區(qū)域,極大提升了計(jì)算效率,可以進(jìn)行端到端訓(xùn)練
FastRCNN和VGG通過迭代優(yōu)化可以實(shí)現(xiàn)特征共享
FasterRCNN是一個(gè)實(shí)用系統(tǒng),在單GPU上達(dá)5fps
在Pascal VOC2012上達(dá)到4% mAP
網(wǎng)絡(luò)細(xì)節(jié)
Faster RCNN主要有4個(gè)重要部分:
共享卷積層:用于提取feature maps被共享用于后續(xù)RPN層和全連接層。
Region Proposal Network(RPN):生成region proposals
RoI Pooling:收集feature maps和proposals,提取proposal feature maps后送入全連接層判定目標(biāo)類別。
Classification:利用proposal feature maps計(jì)算proposal的類別,同時(shí)再次bbox回歸獲得精確位置。
抽象網(wǎng)絡(luò)結(jié)構(gòu)
具體網(wǎng)絡(luò)結(jié)果
共享卷積層
Conv layers(VGG網(wǎng)絡(luò))共有13個(gè)conv層,13個(gè)relu層,4個(gè)pooling層。
在FasterRCNN的Conv layers中對(duì)所有的卷積都做了擴(kuò)邊處理(pad=1,即填充一圈0),導(dǎo)致原圖變?yōu)?M+2)x(N+2)大小,再做3x3卷積后輸出MxN。
pooling層kernel_size=2,stride=2。這樣每個(gè)經(jīng)過pooling層的MxN矩陣,都會(huì)變?yōu)?M/2)x(N/2)大小。
一個(gè)MxN大小的矩陣經(jīng)過Convlayers固定變?yōu)?M/16)x(N/16)
Anchors
假設(shè)原圖800x600 下采樣16倍,feature map每個(gè)點(diǎn)設(shè)置9個(gè)Anchor
所以:ceil(800/16) x ceil(600/16) x 9 = 50 *38 * 9 = 17100 個(gè)框。
區(qū)分前景與背景Anchor,標(biāo)記標(biāo)簽(1正例,0負(fù)例,-1忽略)
正例:對(duì)于每一gtbox,交并比最大的anchor以及與任一gtbox交并比超過一定閾值(0.7)
負(fù)例:與所有g(shù)tboxes交并比小于一定閾值(0.3)其他忽略
對(duì)每一前景anchor,根據(jù)對(duì)應(yīng)的gtbox計(jì)算回歸值。
Region Proposal Networks
目的:判定哪些anchors有可能包含物體
輸入:
提取的特征
原圖信息(縮放比例,以及resize后尺寸)
輸出:
rpn_box 偏移量(hh*ww*9,4)
rpn_score(hh*ww*9,2)
rois(2000,4)
RPN具體網(wǎng)絡(luò)結(jié)構(gòu)
上面一條用softmax分類anchors獲得positive和negative
下面一條用于計(jì)算對(duì)于anchors的bounding box regression偏移量
最后的proposal進(jìn)一步剔除太小和超出邊界的proposal,并綜合變換量和positive anchors,計(jì)算出精準(zhǔn)的proposal。
目標(biāo):尋找一種關(guān)系使得輸入原始的anchor A 經(jīng)過映射得到一個(gè)跟真實(shí)窗口G更接近的回歸窗口G’。
其中綠色為GroundTruth,紅色為positive anchor。
Positive anchor 與ground truth之間的平移計(jì)算方法:
先平移:
再縮放:
通過觀察上面4個(gè)公式可知,需要學(xué)習(xí)的是dx(A), dy(A), dw(A), dh(A)這四個(gè)變換。當(dāng)anchorA 與GT相差較小時(shí),可認(rèn)為這是一種線性變換。
如何通過線性回歸獲得dx(A), dy(A), dw(A), dh(A)?
線性回歸就是給定輸入特征向量X,學(xué)習(xí)一組參數(shù)W,使得經(jīng)過線性回歸后的值跟真實(shí)值Y非常接近。即Y=WX。對(duì)于該問題,輸入X是feature map定義為φ;同時(shí)還有訓(xùn)練傳入A與GT之間的變換量即(tx,ty,tw,th),輸出是dx(A), dy(A), dw(A), dh(A)這四個(gè)變換那么目標(biāo)函數(shù)可以表示為:
在FasterRCNN中 foreground anchor與ground truth之間的平移量(tx, ty)與尺度縮放因子(tw,th)關(guān)系如下:
對(duì)于每張圖片,利用它的feature map,計(jì)算(H/16)x(W/16)x9(大概20000)個(gè)anchor屬于前景的概率,然后從中選取概率較大的12000張,利用位置回歸參數(shù),修正這大約12000個(gè)anchor的位置, 利用非極大值抑制,選出大約2000個(gè)ROIS以及對(duì)應(yīng)的位置參數(shù)。
輸入:anchors分類結(jié)果,對(duì)應(yīng)的bbox變換量和縮放信息
處理流程:
依據(jù)變換量對(duì)所有的anchors做bbox regression回歸。
根據(jù)fg anchor scores由大到小排序anchors,提取前pre_nms_topN(e.g.
12000)個(gè)anchors。
限定超出圖像邊界的positive anchors為圖像邊界,防止后續(xù)roipooling時(shí)proposal超出圖像邊界。
剔除尺寸非常小的positive anchors。
對(duì)剩余的positive anchors進(jìn)行NMS。
之后輸出proposal=[x1,y1,x2,y2],對(duì)應(yīng)的是MxN的圖像尺度。
即如下流程:
生成anchors->softmax分類器提取foreground anchors->bbox 回歸positive anchors->Proposal Layer生成proposals
ROIPooling
輸入:
原始的feature maps
RPN輸出的proposal boxes
由于目前的proposals還沒有具體的物體信息,因此需要從已有的bounding boxes中提取特征。
不同于CNN 網(wǎng)絡(luò)中的池化層,這里通過分塊池化的方法得到固定尺寸的輸出。
假設(shè)ROI Pooling層的輸出大小為w2*h2,輸入候選區(qū)域的大小為 w*h,ROI Pooling的過程如下:
1) 把輸入候選區(qū)域劃分為 w2*h2,大小的子網(wǎng)格窗口,每個(gè)窗口的大小為(w/w2)*(h/h2)
2) 對(duì)每個(gè)子網(wǎng)格窗口取最大元素作為輸出,從而得到大小為w2*h2的輸出。
如上圖所示,假設(shè)Feature Map大小為4x4,候選ROI區(qū)域大小為3x3,通過2x2的ROI Pooling Layer得到2x2的歸一化輸出。4個(gè)劃分后子窗口分別為1、2、3、5(5最大),3、7(7最大),9、10(10最大),11(11最大),然后對(duì)每個(gè)子窗口做Max Pooling。
這其實(shí)來自于更早提出的SPP Net,RPN網(wǎng)絡(luò)提取出的proposal大小是會(huì)變化的,而分類用的全連接層輸入必須固定長(zhǎng)度,所以必須有個(gè)從可變尺寸變換成固定尺寸輸入的過程。在較早的R-CNN和Fast R-CNN結(jié)構(gòu)中都通過對(duì)proposal進(jìn)行拉升(warp)或裁減(crop)到固定尺寸來實(shí)現(xiàn),拉升、裁減的副作用就是原始的輸入發(fā)生變形或信息量丟失(圖7),以致分類不準(zhǔn)確。而ROI Pooling就完全規(guī)避掉了這個(gè)問題,proposal能完整的pooling成全連接的輸入,而且沒有變形,長(zhǎng)度也固定。
執(zhí)行流程:
由于proposal對(duì)應(yīng)的尺寸為MxN,所以首先使用spatial_scale參數(shù)將其映射回(M/16)x(N/16)大小的feature map。
再將每個(gè)proposal對(duì)應(yīng)的feature map分為 pooled_w x pooled_h的網(wǎng)絡(luò);
對(duì)網(wǎng)格的每一份都進(jìn)行max pooling處理,以保證結(jié)果都是pooled_w x pooled_h固定大小。
分類Classification
通過全連接和softmax對(duì)proposals進(jìn)行分類
再次對(duì)proposals進(jìn)行bounding box regression,獲取更高精度的bbox
Loss
論文總結(jié)
關(guān)鍵點(diǎn):
候選區(qū)域提取——RPN
特征共享計(jì)算——RPN和FastRCNN共享骨干網(wǎng)絡(luò)特征
創(chuàng)新點(diǎn):
多尺度與縱橫比Anchor解決目標(biāo)多尺度問題
RPN提取候選區(qū)域,實(shí)現(xiàn)端到端檢測(cè)
多任務(wù)損失函數(shù)
兩階段目標(biāo)檢測(cè),提高檢測(cè)精度
啟發(fā)點(diǎn):
Anchor定義是否在不同數(shù)據(jù)集及不同場(chǎng)景下是否應(yīng)有所變化
是否有必要在整幅圖中均勻分布Anchor
Anchor定義的多尺度是否能夠滿足實(shí)際物體尺度變化要求
Faster RCNN代碼復(fù)現(xiàn)
代碼地址:
https://github.com/chenyuntc/simple-faster-rcnn-pytorch
博客《逐字理解目標(biāo)檢測(cè)simple-faster-rcnn-pytorch-master代碼》地址:
https://blog.csdn.net/qq_32678471/article/details/84776144
https://blog.csdn.net/qq_32678471/article/details/84792307
https://blog.csdn.net/qq_32678471/article/details/84882277?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-6&spm=1001.2101.3001.4242
https://blog.csdn.net/qq_32678471/article/details/85678921
注:該博客雖然有很多理解不對(duì)或不到位的地方,但注釋比較詳細(xì),能幫助新手快速理解每個(gè)模塊的具體含義。
機(jī)器學(xué)習(xí) 神經(jīng)網(wǎng)絡(luò)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。