日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Faster R-CNN论文及源码解读

發(fā)布時間:2024/9/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Faster R-CNN论文及源码解读 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

R-CNN是目標檢測領(lǐng)域中十分經(jīng)典的方法,相比于傳統(tǒng)的手工特征,R-CNN將卷積神經(jīng)網(wǎng)絡(luò)引入,用于提取深度特征,后接一個分類器判決搜索區(qū)域是否包含目標及其置信度,取得了較為準確的檢測結(jié)果。Fast R-CNN和Faster R-CNN是R-CNN的升級版本,在準確率和實時性方面都得到了較大提升。在Fast R-CNN中,首先需要使用Selective Search的方法提取圖像的候選目標區(qū)域(Proposal)。而新提出的Faster R-CNN模型則引入了RPN網(wǎng)絡(luò)(Region Proposal Network),將Proposal的提取部分嵌入到內(nèi)部網(wǎng)絡(luò),實現(xiàn)了卷積層特征共享,Fast R-CNN則基于RPN提取的Proposal做進一步的分類判決和回歸預(yù)測,因此,整個網(wǎng)絡(luò)模型可以完成端到端的檢測任務(wù),而不需要先執(zhí)行特定的候選框搜索算法,顯著提升了算法模型的實時性。

模型概述

??Faster R-CNN模型主要由兩個模塊組成:RPN候選框提取模塊和Fast R-CNN檢測模塊,如下圖所示,又可細分為4個部分;Conv Layer,Region Proposal Network(RPN),RoI Pooling,Classification and Regression。

Faster R-CNN網(wǎng)絡(luò)模型

  • Conv Layer: 卷積層包括一系列卷積(Conv + Relu)和池化(Pooling)操作,用于提取圖像的特征(feature maps),一般直接使用現(xiàn)有的經(jīng)典網(wǎng)絡(luò)模型ZF或者VGG16,而且卷積層的權(quán)值參數(shù)為RPN和Fast RCNN所共享,這也是能夠加快訓練過程、提升模型實時性的關(guān)鍵所在。
  • Region Proposal Network: RPN網(wǎng)絡(luò)用于生成區(qū)域候選框Proposal,基于網(wǎng)絡(luò)模型引入的多尺度Anchor,通過Softmax對anchors屬于目標(foreground)還是背景(background)進行分類判決,并使用Bounding Box Regression對anchors進行回歸預(yù)測,獲取Proposal的精確位置,并用于后續(xù)的目標識別與檢測。
  • RoI Pooling: 綜合卷積層特征feature maps和候選框proposal的信息,將propopal在輸入圖像中的坐標映射到最后一層feature map(conv5-3)中,對feature map中的對應(yīng)區(qū)域進行池化操作,得到固定大小(7×77×7)輸出的池化結(jié)果,并與后面的全連接層相連。
  • Classification and Regression: 全連接層后接兩個子連接層——分類層(cls)和回歸層(reg),分類層用于判斷Proposal的類別,回歸層則通過bounding box regression預(yù)測Proposal的準確位置。

??下圖為Faster R-CNN測試網(wǎng)絡(luò)結(jié)構(gòu)(網(wǎng)絡(luò)模型文件為faster_rcnn_test.pt),可以清楚地看到圖像在網(wǎng)絡(luò)中的前向計算過程。對于一幅任意大小P×QP×Q的圖像,首先縮放至固定大小M×NM×N(源碼中是要求長邊不超過1000,短邊不超過600),然后將縮放后的圖像輸入至采用VGG16模型的Conv Layer中,最后一個feature map為conv5-3,特征數(shù)(channels)為512。RPN網(wǎng)絡(luò)在特征圖conv5-3上執(zhí)行3×33×3卷積操作,后接一個512維的全連接層,全連接層后接兩個子連接層,分別用于anchors的分類和回歸,再通過計算篩選得到proposals。RoIs Pooling層則利用Proposal從feature maps中提取Proposal feature進行池化操作,送入后續(xù)的Fast R-CNN網(wǎng)絡(luò)做分類和回歸。RPN網(wǎng)絡(luò)和Fast R-CNN網(wǎng)絡(luò)中均有分類和回歸,但兩者有所不同,RPN中分類是判斷conv5-3中對應(yīng)的anchors屬于目標和背景的概率(score),并通過回歸獲取anchors的偏移和縮放尺度,根據(jù)目標得分值篩選用于后續(xù)檢測識別的Proposal;Fast R-CNN是對RPN網(wǎng)絡(luò)提取的Proposal做分類識別,并通過回歸參數(shù)調(diào)整得到目標(Object)的精確位置。具體的訓練過程會在后面詳述。接下來會重點介紹RPN網(wǎng)絡(luò)和Fast R-CNN網(wǎng)絡(luò)這兩個模塊,包括RPN網(wǎng)絡(luò)中引入的Anchor機制、訓練數(shù)據(jù)的生成、分類和回歸的損失函數(shù)(Loss Function)計算以及RoI Pooling等。

Fast R-CNN test網(wǎng)絡(luò)結(jié)構(gòu)

Region Proposal Network(RPN)

??傳統(tǒng)的目標檢測方法中生成候選框都比較耗時,例如使用滑動窗口加圖像金字塔的方式遍歷圖像,獲取多尺度的候選區(qū)域;以及R-CNN、Fast R-CNN中均使用到的Selective Search的方法生成候選框。而Faster R-CNN則直接使用RPN網(wǎng)絡(luò),將檢測框Proposal的提取嵌入到網(wǎng)絡(luò)內(nèi)部,通過共享卷積層參數(shù)的方式提升了Proposal的生成速度。

Anchor

??Anchor是RPN網(wǎng)絡(luò)中一個較為重要的概念,傳統(tǒng)的檢測方法中為了能夠得到多尺度的檢測框,需要通過建立圖像金字塔的方式,對圖像或者濾波器(滑動窗口)進行多尺度采樣。RPN網(wǎng)絡(luò)則是使用一個3×33×3的卷積核,在最后一個特征圖(conv5-3)上滑動,將卷積核中心對應(yīng)位置映射回輸入圖像,生成3種尺度(scale){1282,2562,5122}{1282,2562,5122}和3種長寬比(aspect ratio){1:1,1:2,2:1}{1:1,1:2,2:1}共9種Anchor,如下圖所示。特征圖conv5-3每個位置都對應(yīng)9個anchors,如果feature map的大小為W×HW×H,則一共有W×H×9W×H×9個anchors,滑動窗口的方式保證能夠關(guān)聯(lián)conv5-3的全部特征空間,最后在原圖上得到多尺度多長寬比的anchors。

Anchor示意圖

??最后一個feature map后面會接一個全連接層,如下圖所示,全連接的維數(shù)和feature map的特征數(shù)(channels)相同。對于原論文中采用的ZF模型,conv5的特征數(shù)為256,全連接層的維數(shù)也為256;對于VGG模型,conv5-3的特征數(shù)為512,全連接的的維數(shù)則為512,相當于feature map上的每一個點都輸出一個512維的特征向量。

RPN網(wǎng)絡(luò)結(jié)構(gòu)


關(guān)于anchors還有幾點需要說明:

  • conv5-3上使用了3×33×3的卷積核,每個點都可以關(guān)聯(lián)局部鄰域的空間信息。
  • conv5-3上每個點前向映射得到k(k=9)個anchors,并且后向輸出512維的特征向量,而anchors的作用是分類和回歸得到Proposal,因此全連接層后須接兩個子連接層————分類層(cls)和回歸層(reg),分類層用于判斷anchors屬于目標還是背景,向量維數(shù)為2k;回歸層用于計算anchors的偏移量和縮放量,共4個參數(shù)[dx,dy,dw,dh][dx,dy,dw,dh],向量維數(shù)為4k。

訓練樣本的生成

??一般而言,特征圖conv5-3的實際尺寸大致為60×4060×40,那么一共可以生成60×40×9≈20k60×40×9≈20k個anchors,顯然不會將所有anchors用于訓練,而是篩選一定數(shù)量的正負樣本。對于數(shù)據(jù)集中包含有人工標定ground truth的圖像,考慮一張圖像上所有anchors:

  • 首先過濾掉超出圖像邊界的anchors
  • 對每個標定的ground truth,與其重疊比例IoU最大的anchor記為正樣本,這樣可以保證每個ground truth至少對應(yīng)一個正樣本anchor
  • 對每個anchors,如果其與某個ground truth的重疊比例IoU大于0.7,則記為正樣本(目標);如果小于0.3,則記為負樣本(背景)
  • 再從已經(jīng)得到的正負樣本中隨機選取256個anchors組成一個minibatch用于訓練,而且正負樣本的比例為1:1,;如果正樣本不夠,則補充一些負樣本以滿足256個anchors用于訓練,反之亦然。

Multi-task Loss Function

??由于涉及到分類和回歸,所以需要定義一個多任務(wù)損失函數(shù)(Multi-task Loss Function),包括Softmax Classification Loss和Bounding Box Regression Loss,公式定義如下:

?

L({pi},{ti})=1NclsΣiLcls(pi,p?i)+λ1NregΣip?iLreg(ti,t?i)L({pi},{ti})=1NclsΣiLcls(pi,pi?)+λ1NregΣipi?Lreg(ti,ti?)


Softmax Classification:對于RPN網(wǎng)絡(luò)的分類層(cls),其向量維數(shù)為2k = 18,考慮整個特征圖conv5-3,則輸出大小為W×H×18W×H×18,正好對應(yīng)conv5-3上每個點有9個anchors,而每個anchor又有兩個score(fg/bg)輸出,對于單個anchor訓練樣本,其實是一個二分類問題。為了便于Softmax分類,需要對分類層執(zhí)行reshape操作,這也是由底層數(shù)據(jù)結(jié)構(gòu)決定的。在caffe中,Blob的數(shù)據(jù)存儲形式為Blob=[batch_size,channel,height,width]Blob=[batch_size,channel,height,width],而對于分類層(cls),其在Blob中的實際存儲形式為[1,2k,H,W][1,2k,H,W],而Softmax針對每個anchor進行二分類,所以需要在分類層后面增加一個reshape layer,將數(shù)據(jù)組織形式變換為[1,2,k?H,W][1,2,k?H,W],之后再reshape回原來的結(jié)構(gòu),caffe中有對softmax_loss_layer.cpp的reshape函數(shù)做如下解釋:

1

2

3

4

"Number of labels must match number of predictions; "

"e.g., if softmax axis == 1 and prediction shape is (N, C, H, W), "

"label count (number of labels) must be N*H*W, "

"with integer values in {0, 1, ..., C-1}.";

?

在上式中,pipi為樣本分類的概率值,p?ipi?為樣本的標定值(label),anchor為正樣本時p?ipi?為1,為負樣本時p?ipi?為0,LclsLcls為兩種類別的對數(shù)損失(log loss)。
Bounding Box Regression:RPN網(wǎng)絡(luò)的回歸層輸出向量的維數(shù)為4k = 36,回歸參數(shù)為每個樣本的坐標[x,y,w,h][x,y,w,h],分別為box的中心位置和寬高,考慮三組參數(shù)預(yù)測框(predicted box)坐標[x,y,w,h][x,y,w,h],anchor坐標[xa,ya,wa,ha][xa,ya,wa,ha],ground truth坐標[x?,y?,w?,h?][x?,y?,w?,h?],分別計算預(yù)測框相對anchor中心位置的偏移量以及寬高的縮放量{t}{t},ground truth相對anchor的偏移量和縮放量{t?}{t?}

?

tx=(x?xa)/wa,?ty=(y?ya)/ha,?tw=log(w/wa),?th=log(h/ha)?(1)tx=(x?xa)/wa,?ty=(y?ya)/ha,?tw=log(w/wa),?th=log(h/ha)?(1)

?

t?x=(x??xa)/wa,?t?y=(y??ya)/ha,?t?w=log(w?/wa),?t?h=log(h?/ha)?(2)tx?=(x??xa)/wa,?ty?=(y??ya)/ha,?tw?=log(w?/wa),?th?=log(h?/ha)?(2)


回歸目標就是讓{t}{t}盡可能地接近{t?}{t?},所以回歸真正預(yù)測輸出的是{t}{t},而訓練樣本的標定真值為{t?}{t?}。得到預(yù)測輸出{t}{t}后,通過上式(1)即可反推獲取預(yù)測框的真實坐標。在損失函數(shù)中,回歸損失采用Smooth L1函數(shù)

SmoothL1(x)={0.5x2?|x|≤1|x|?0.5?otherwiseSmoothL1(x)={0.5x2?|x|≤1|x|?0.5?otherwise

?

Lreg=SmoothL1(t?t?)Lreg=SmoothL1(t?t?)


Smooth L1損失函數(shù)曲線如下圖所示,相比于L2損失函數(shù),L1對離群點或異常值不敏感,可控制梯度的量級使訓練更易收斂。

Smooth L1損失函數(shù)

在損失函數(shù)中,p?iLregpi?Lreg這一項表示只有目標anchor(p?i=1pi?=1)才有回歸損失,其他anchor不參與計算。這里需要注意的是,當樣本bbox和ground truth比較接近時(IoU大于某一閾值),可以認為上式的坐標變換是一種線性變換,因此可將樣本用于訓練線性回歸模型,否則當bbox與ground truth離得較遠時,就是非線性問題,用線性回歸建模顯然不合理,會導致模型不work。分類層(cls)和回歸層(reg)的輸出分別為{p}{p}和{t}{t},兩項損失函數(shù)分別由NclsNcls和NregNreg以及一個平衡權(quán)重λλ歸一化。分類損失的歸一化值為minibatch的大小,即Ncls=256Ncls=256;回歸損失的歸一化值為anchor位置的數(shù)量,即Nreg≈2400Nreg≈2400;λλ一般取值為10,這樣分類損失和回歸損失差不多是等權(quán)重的。

Proposal的生成

??Proposal的生成就是將圖像輸入到RPN網(wǎng)絡(luò)中進行一次前向(forward)計算,處理流程如下:

  • 計算特征圖conv5-3映射到輸入圖像的所有anchors,并通過RPN網(wǎng)絡(luò)前向計算得到anchors的score輸出和bbox回歸參數(shù)
  • 由anchors坐標和bbox回歸參數(shù)計算得到預(yù)測框proposal的坐標
  • 處理proposal坐標超出圖像邊界的情況(使得坐標最小值為0,最大值為寬或高)
  • 濾除掉尺寸(寬高)小于給定閾值的proposal
  • 對剩下的proposal按照目標得分(fg score)從大到小排序,提取前pre_nms_topN(e.g. 6000)個proposal
  • 對提取的proposal進行非極大值抑制(non-maximum suppression,nms),再根據(jù)nms后的foreground score,篩選前post_nms_topN(e.g. 300)個proposal作為最后的輸出

Fast R-CNN

??對于RPN網(wǎng)絡(luò)中生成的proposal,需要送入Fast R-CNN網(wǎng)絡(luò)做進一步的精確分類和坐標回歸,但proposal的尺寸可能大小不一,所以需要做RoI Pooling,輸出統(tǒng)一尺寸的特征,再與后面的全連接層相連。

RoI Pooling

??對于傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò),當網(wǎng)絡(luò)訓練好后輸入圖像的尺寸必須是固定值,同時網(wǎng)絡(luò)輸出的固定大小的向量或矩陣。如果輸入圖像大小不統(tǒng)一,則需要進行特殊處理,如下圖所示:

  • 從圖像中crop一部分傳入網(wǎng)絡(luò)
  • 將圖像warp成需要的大小后傳入網(wǎng)絡(luò)

crop與warp操作

可以從圖中看出,crop操作破壞了圖像的完整結(jié)構(gòu),warp操作破壞了圖像的原始形狀信息,兩種方法的效果都不太理想。RPN網(wǎng)絡(luò)生成的proposal也存在尺寸不一的情況,但論文中提出了RoI Pooling的方法解決這個問題。

??RoI Pooling結(jié)合特征圖conv5-3和proposal的信息,proposal在輸入圖像中的坐標[x1,y1,x2,y2][x1,y1,x2,y2]對應(yīng)M×NM×N尺度,將proposal的坐標映射到M16×N16M16×N16大小的conv5-3中,然后將Proposal在conv5-3的對應(yīng)區(qū)域水平和豎直均分為7等份,并對每一份進行Max Pooling或Average Pooling處理,得到固定大小(7×77×7)輸出的池化結(jié)果,實現(xiàn)固定長度輸出(fixed-length output),如下圖所示。

RoI Pooling示意圖

Classification and Regression

??RoI Pooling層后接多個全連接層,最后為兩個子連接層——分類層(cls)和回歸層(reg),如下圖所示,和RPN的輸出類似,只不過輸出向量的維數(shù)不一樣。如果類別數(shù)為N+1(包括背景),分類層的向量維數(shù)為N+1,回歸層的向量維數(shù)則為4(N+1)。還有一個關(guān)鍵問題是RPN網(wǎng)絡(luò)輸出的proposal如何組織成Fast R-CNN的訓練樣本:

  • 對每個proposal,計算其與所有g(shù)round truth的重疊比例IoU
  • 篩選出與每個proposal重疊比例最大的ground truth
  • 如果proposal的最大IoU大于0.5則為目標(前景),標簽值(label)為對應(yīng)ground truth的目標分類;如果IoU小于0.5且大于0.1則為背景,標簽值為0
  • 從2張圖像中隨機選取128個proposals組成一個minibatch,前景和背景的比例為1:3
  • 計算樣本proposal與對應(yīng)ground truth的回歸參數(shù)作為標定值,并且將回歸參數(shù)從(4,)拓展為(4(N+1),),只有對應(yīng)類的標定值才為非0。
  • 設(shè)定訓練樣本的回歸權(quán)值,權(quán)值同樣為4(N+1)維,且只有樣本對應(yīng)標簽類的權(quán)值才為非0。

在源碼實現(xiàn)中,用于訓練Fast R-CNN的Proposal除了RPN網(wǎng)絡(luò)生成的,還有圖像的ground truth,這兩者歸并到一起,然后通過篩選組成minibatch用于迭代訓練。Fast R-CNN的損失函數(shù)也與RPN類似,二分類變成了多分類,背景同樣不參與回歸損失計算,且只考慮proposal預(yù)測為標簽類的回歸損失。

Classification and Regression

Faster R-CNN的訓練

??對于提取proposals的RPN,以及分類回歸的Fast R-CNN,如何將這兩個網(wǎng)絡(luò)嵌入到同一個網(wǎng)絡(luò)結(jié)構(gòu)中,訓練一個共享卷積層參數(shù)的多任務(wù)(Multi-task)網(wǎng)絡(luò)模型。源碼中有實現(xiàn)交替訓練(Alternating training)和端到端訓練(end-to-end)兩種方式,這里介紹交替訓練的方法。

  • 訓練RPN網(wǎng)絡(luò),用ImageNet模型M0初始化,訓練得到模型M1
  • 利用第一步訓練的RPN網(wǎng)絡(luò)模型M1,生成Proposal P1
  • 使用上一步生成的Proposal,訓練Fast R-CNN網(wǎng)絡(luò),同樣用ImageNet模型初始化,訓練得到模型M2
  • 訓練RPN網(wǎng)絡(luò),用Fast R-CNN網(wǎng)絡(luò)M2初始化,且固定卷積層參數(shù),只微調(diào)RPN網(wǎng)絡(luò)獨有的層,訓練得到模型M3
  • 利用上一步訓練的RPN網(wǎng)絡(luò)模型M3,生成Proposal P2
  • 訓練Fast R-CNN網(wǎng)絡(luò),用RPN網(wǎng)絡(luò)模型M3初始化,且卷積層參數(shù)和RPN參數(shù)不變,只微調(diào)Fast R-CNN獨有的網(wǎng)絡(luò)層,得到最終模型M4

由訓練流程可知,第4步訓練RPN網(wǎng)絡(luò)和第6步訓練Fast R-CNN網(wǎng)絡(luò)實現(xiàn)了卷積層參數(shù)共享。總體上看,訓練過程只循環(huán)了2次,但每一步訓練(M1,M2,M3,M4)都迭代了多次(e.g. 80k,60k)。對于固定卷積層參數(shù),只需將學習率(learning rate)設(shè)置為0即可。

源碼解析

??以上關(guān)于RPN的訓練,Proposal的生成,以及Fast R-CNN的訓練做了的詳細講解,接下來結(jié)合網(wǎng)絡(luò)模型圖和部分源碼,對這些模塊做進一步的分析。

train RPN

??訓練RPN的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,首先加載參數(shù)文件,并改動一些參數(shù)適應(yīng)當前訓練任務(wù)。在train_rpn函數(shù)中調(diào)用get_roidb、get_imdb、get_train_imdb_roidb等獲取訓練數(shù)據(jù)集,并通過調(diào)用gt_roidb和prepare_roidb方法對訓練數(shù)據(jù)進行預(yù)處理,為樣本增添一些屬性,數(shù)據(jù)集roidb中的每個圖像樣本,主要有以下屬性:

1

2

3

4

5

6

7

8

9

10

'image':圖像存儲路徑

'width':圖像寬

'height':圖像高

'boxes':圖像中bbox(groundtruth or proposal)的坐標[x1,y1,x2,y2]

'gt_classes':每個bbox對應(yīng)的類索引(1~20)

'gt_overlaps':二維數(shù)組,shape=[num_boxes * num_classes],每個bbox(ground truth)對應(yīng)的類索引處取值為1,其余為0

'flipped':取值為True/False,用于標記有無將圖像水平翻轉(zhuǎn)

'seg_area':bbox的面積

'max_classes':bbox與所有g(shù)round truth的重疊比例IoU最大的類索引(gt_overlaps.argmax(axis=1))

'max_overlaps':bbox與所有g(shù)round truth的IoU最大值(gt_overlaps.max(axis=1))

?

train_rpn_model

獲取數(shù)據(jù)集roidb中字典的屬性后,設(shè)置輸出路徑output_dir,用來保存中間訓練結(jié)果,然后調(diào)用train_net函數(shù)。在train_net函數(shù)中,首先調(diào)用filter_roidb,濾除掉既沒有前景又沒有背景的roidb。然后調(diào)用layer.py中的set_roidb方法,打亂訓練樣本roidb的順序,將roidb中長寬比近似的圖像放在一起。之后開始訓練模型train_model,這里需要實例化每個層,對于第一層RoIDataLayer,通過setup方法進行實例化,并且在訓練過程中通過forward方法,調(diào)用get_minibatch函數(shù),獲取每一次迭代訓練的數(shù)據(jù),在讀取數(shù)據(jù)時,主要獲取了3個屬性組成Layer中的Blob

1

2

3

'data':單張圖像數(shù)據(jù)im_blob=[1,3,H,W]

'gt_boxes':一幅圖像中所有g(shù)round truth的坐標和類別[x1,y1,x2,y2,cls]

'im_info':圖像的寬高和縮放比例 height,width,scale = [[im_blob.shape[2], im_blob.shape[2], im_scale[0]]]

?

從網(wǎng)絡(luò)結(jié)構(gòu)圖中可以看出,input-data(RoIDataLayer)的下一層是rpn-data(AnchorTargetLayer),rpn-data計算所有anchors與ground truth的重疊比例IoU,從中篩選出一定數(shù)量(256)的正負樣本組成一個minibatch,用于RPN網(wǎng)絡(luò)的訓練,這一層的輸出有如下屬性:

1

2

3

4

5

'rpn_label':每個anchor對應(yīng)的類別(1——fg,0——bg,-1——ignored),shape=[1,1,A*height,width]

'rpn_bbox_targets':anchor與ground truth的回歸參數(shù)[dx,dy,dw,dh],shape=[1,A*4,height,width]

'rpn_box_inside_targets':回歸損失函數(shù)中的樣本權(quán)值,正樣本為1,負樣本為0,相當于損失函數(shù)中的p*,shape=[1,A*4,height,width]

'rpn_box_outside_targets':分類損失函數(shù)和回歸損失函數(shù)的平衡權(quán)重,相當于λ,shape=[1,A*4,height,width]

注:height、width為特征圖conv5-3的高寬,A=9為Anchor種數(shù)

?

對于分類損失rpn_loss_cls,輸入的rpn_cls_scors_reshape和rpn_labels分別對應(yīng)pp與p?p?;對于回歸損失,輸入的rpn_bbox_pred和rpn_bbox_targets分別對應(yīng){t}{t}與{t?}{t?},pn_bbox_inside_weigths對應(yīng)p?p?,rpn_bbox_outside_weights對應(yīng)λλ。

generate proposals

??Proposal的生成只需將圖像輸入到RPN網(wǎng)絡(luò)中,進行前向(forward)計算然后經(jīng)過篩選即可得到,網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示

generate proposals

從rpn_proposals = imdb_proposals(rpn_net, imdb)開始,使用im = cv2.imread(imdb.image_path_at(i))讀入圖片數(shù)據(jù),調(diào)用 im_proposals生成單張圖片的rpn proposals,以及得分。im_proposals函數(shù)會調(diào)用網(wǎng)絡(luò)的forward方法,從而得到想要的boxes和scores,最后將獲取的proposal保存在python pickle文件中。

train Fast R-CNN

??訓練Fast R-CNN的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,首先設(shè)置參數(shù)適應(yīng)訓練任務(wù),在預(yù)處理數(shù)據(jù)時,調(diào)用的不再是gt_roidb方法,而是rpn_roidb,通過使用類imdb的靜態(tài)方法merge_roidb,將rpn_roidb和gt_roidb歸并為一個roidb,因此數(shù)據(jù)集中的’boxes’屬性除了包含ground truth,還有RPN網(wǎng)絡(luò)生成的proposal,可通過上一步保存的文件直接讀取。通過add_bbox_regression_targets方法給roidb的樣本增添了額外的屬性’bbox_targets’,用于表示回歸參數(shù)的標定值。屬性’gt_overlaps’是所有proposal與ground truth通過計算IoU得到的。最后就是調(diào)用get_minibatch方法從2張圖像中選取128個proposal作為一次迭代的訓練樣本,讀取數(shù)據(jù)時,獲取如下屬性組成Layer中的Blob

1

2

3

4

5

6

'data':圖像數(shù)據(jù)

'rois':proposals的坐標[batch_inds,x1,y1,x2,y2]

'label':proposals對應(yīng)的類別(0~20)

'bbox_targets':proposal回歸參數(shù)的標定值,shape = [128, 4(N+1)]

'box_inside_targets':回歸損失函數(shù)中的樣本權(quán)值,正樣本為1,負樣本為0,相當于損失函數(shù)中的p*

'rpn_box_outside_targets':分類損失函數(shù)和回歸損失函數(shù)的平衡權(quán)重,相當于λ

?

train_fast_rcnn_model

損失函數(shù)的計算與RPN網(wǎng)絡(luò)類似。在Faster R-CNN中,自定義的Python Layer包括RoIDataLayer、AnchorTargetLay、ProposalLayer,都只實現(xiàn)了前向計算forward,因為這些Layer的作用是獲取用于訓練網(wǎng)絡(luò)的數(shù)據(jù),而對網(wǎng)絡(luò)本身沒有貢獻任何權(quán)值參數(shù),也不傳播梯度值,因此不需要實現(xiàn)反向傳播backward。

reference

  • Paper: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
  • Paper: R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation
  • Paper: SPP-Net: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
  • Paper: Fast R-CNN
  • Code: Caffe implement of Faster RCNN
  • Code: Tensorflow implement of Faster RCNN
  • http://blog.csdn.net/iamzhangzhuping/article/category/6230157
  • http://www.infocool.net/kb/Python/201611/209696.html
  • http://www.cnblogs.com/venus024/p/5717766.html
  • http://blog.csdn.net/zy1034092330/article/details/62044941
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Faster R-CNN论文及源码解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。