1. 程式人生 > >論文閱讀筆記(六)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

論文閱讀筆記(六)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

采樣 分享 最終 產生 pre 運算 減少 att 我們

作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun

SPPnet、Fast R-CNN等目標檢測算法已經大幅降低了目標檢測網絡的運行時間。可是盡管如此,仍然不能在工程上做到實時檢測,這主要是因為region proposal computation耗時在整個網絡用時中的占比較高。比如,Fast R-CNN如果忽略提取region proposals所花費的時間,就幾乎可以做到實時性。為此,該論文介紹了Region Proposal Network(RPN)用以解決該問題。經實驗證實,應用該算法的系統在GPU上的處理速度可以達到5fps的幀率。下面將從Faster R-CNN的網絡結構、算法過程、訓練方法等方面進行記錄。


1. Faster R-CNN 網絡結構

技術分享圖片

Fig. 2展示了網絡的大致結構。可以發現,Fast R-CNN網絡分為兩部分,一部分是Region Proposal Network(RPN),另一部分是Fast R-CNN object detection network。其中RPN包括圖中proposals和conv layers,detection network包括conv layers、ROI pooling及後面全連接層等部分。另外,conv layers被RPN和Fast R-CNN object detection network兩部分共享。

RPN網絡部分會告訴Fast R-CNN object detection network去看哪裏,即搜索到的region proposals的location。這裏使用的是神經網絡中流行的“attention” mechanisms。


2. Region Proposal Networks

技術分享圖片

Fig. Region Proposal Networks


RPN網絡可以輸入一個任何尺寸的圖像,然後利用anchors和softmax初步提取出foreground anchors作為候選區域。

該網絡的前部是共享卷積層(conv layers),論文中作者使用兩種模型作為共享卷積層:一種是Zeiler and Fergus model(ZF),它有5層可共享的卷積層;另一種是Simonyan and Zisserman model(VGG-16),它有13層可共享的卷積層。

RPN網絡的卷積過程如下圖(ZF):

技術分享圖片

Fig. 3PN網絡卷積過程


圖中原始圖像(600*1000)經過卷積層後輸出256個40*60的feature maps,即論文中提到的W x H

(typically,~2,400)。這些feature maps被RPN網絡和Fast R-CNN detector共享。

那麽如何利用一幅圖像生成region proposals呢?下面以共享卷積層為VGG16為例進行說明:

Fig. 4是網上找到的一幅圖,該圖更加詳細地展示了 Faster R-CNN 網絡結構的細節。需要註意的是,圖中共享的卷積層(conv layers) 選擇的是 Simonyan and Zisserman 模型,即VGG16(13層共享卷積層):

技術分享圖片

Fig. 4 aster RCNN具體結構

RPN輸入一幅圖像image(resized,論文中設置為800*600)後經共享卷積層生成通道數為256的feature maps,然後使用一個size為n*n(二維)的空間sliding window與feature maps(50*38*256)進行非標準的卷積運算(strides=1,padding=(n-1)/2,單通道卷積核,運算和標準池化類似,運算前後通道數不變),計算結果仍然是50*38*256。可以發現,每個位置通過卷積求得的特征是256-d,這就是論文中說到的將每個sliding window都被映射到一個256-d的低維特征。而anchors的生成過程具體是這樣:sliding window的中心在image上對應一片區域(相當於中心位置的神經元在image上的感受野,當n=3時,ZF 模型中中心位置的神經元在image上的感受野大小為171*171;VGG 模型中為228*228),計算出該區域的中心位置後以該位置為中心,按3種scale(即面積,128*128,256*256,512*512)、每種scale各有3種aspect ratios(即長寬比,1:1,1:2,2:1)要求取9個(默認為9個)矩形區域。這些區域就是提取到的anchors boxes。可見,feature maps中的一個位置,共有9個anchors,提取到的候選anchors的大致位置也被獲悉(後面會有修正)。另外,3種scale也是可以根據具體情況更改的,更改時最好能使最大的scale能基本將input image覆蓋。作者將輸入圖像resize成最短邊s=600,可以發現,最大的scale已經幾乎能覆蓋整幅圖像,這也是借助anchors能實現尺度不變的原因。圖Fig.5中左邊是每個位置對應的9個anchors在image上的分布情況,右圖是所有anchors的分布情況。對於50*388的feature maps,共有50*38*9個anchors。

技術分享圖片

Fig. 5 9個anchors在input image上的分布


為什麽這樣操作?作者在論文中也說Faster R-CNN是通過pyramids of reference boxes實現multiple scales and sizes的

網上有個解釋我覺得比較合理,大致如下:

anchor的本質是SPP(spatial pyramid pooling)思念的逆向。SPP的作用是從不同尺寸的輸入提取相同尺寸的特征,那麽SPP的逆向就是從相同尺寸的輸出倒推得到不同尺寸的輸入。以上面提取region proposals的過程為例,對於一個n*n的sliding window,它對feature maps進行卷積後提取的固定長度特征所對應的輸入應該是sliding window的中心在image上的投射區域內。為了實現多尺度、多長寬比,我們以投射區域的中心為中心從大到小提取不同尺度的anchors。可以認為,特征就是通過對這些候選anchors進行池化得到的。可是,論文中對3*3大小的區域進行卷積(不是1*1)作為9個anchors的特征,網上說這樣做相當於每個點又融合了周圍3*3的空間信息,或許是為了更魯棒。

在確定大量anchors之後,我們就能確定相應的位置信息,但這是不準確的,不過沒關系,後面會有2次bounding-box regression對位置進行修正。

在通過“卷積”獲得每個位置的低維特征後(50*38*256)會經過一層ReLU(如Fig.4示,論文中也有提及),緊接著是兩路全連接層。第一路使用softmax classifier對anchors進行二分類(object or non-object),輸出兩個概率值,以判斷anchors是否為前景,如下:

技術分享圖片

Fig.6 RPN網絡cls部分結構

特征先經過1*1的卷積得到50*38*18(9*2)大小的矩陣。不了解計算過程,但是結果合理。因為每個位置對應了9個anchors,每個anchor有前景和背景兩種可能。

然後接一個reshape layer,這是為了便於softmax分類。至於原因則與caffe中softmax的實現形式有關。caffe的基本數據結構blob用如下形式保存數據:blob=[bacth_size, channel, height, width]

上面的50*38*18大小的矩陣在blob中的存儲形式為[1,2*9,50,38]([1,2*9,H,W]),而在softmax分類時需要進行二分類,所以reshape layer會將其變為[1,2,9*50,38](即[1,2,9*H,W]),即將channel這個維度空出以存放兩個概率值。待分類完成後會再次reshape回原狀。這時已經將帶有object的anchors通過分類器挑選出來。

另一路的作用是計算對於anchors的bounding box regression偏移量,以獲得精確的位置信息。這是進行第一次修正(bounding-box regression),過程如下:

技術分享圖片

Fig.7 RPN網絡reg部分結構

同樣,特征先經過1*1的卷積,不過得到的是50*38*36(9*4)大小的矩陣。意思是每個位置有9個anchors,每個anchor的位置信息有4個用於回歸的參數。

後面接的是一個box-regression layer(reg),對anchors的位置進行修正。

RPN網絡的最後一層是Proposal layer,該層的作用是綜合foreground anchors和bounding box regression偏移量生成region proposals,同時剔除太小和超出邊界的proposals,最後將提取到的proposals提交給後面的檢測網絡。im_info的作用是保存輸入圖像的縮放信息(輸入Faster RCNN的圖像都會先縮放到固定尺寸)以及卷積過程中的strides(用於計算anchor的偏移量)。下面一段摘自網絡:

Proposal Layer forward(caffe layer的前傳函數)按照以下順序依次處理:

  1. 生成anchors,利用技術分享圖片對所有的anchors做bbox regression回歸(這裏的anchors生成和訓練時完全一致)
  2. 按照輸入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)個anchors,即提取修正位置後的foreground anchors。
  3. 限定超出圖像邊界的foreground anchors為圖像邊界(防止後續roi pooling時proposal超出圖像邊界)
  4. 剔除非常小(width<threshold or height<threshold)的foreground anchors
  5. 進行nonmaximum suppression
  6. 再次按照nms後的foreground softmax scores由大到小排序fg anchors,提取前post_nms_topN(e.g. 300)結果作為proposal輸出。


到這裏可以很清楚的發現,RPN的作用就是先在原圖image上搜索出密密麻麻的候選anchors,然後再去判斷哪些anchor對應的區域是有目標的前景,哪些是沒有目標的背景(二分類),並對位置偏移量進行修正。其實,RPN已經初步完成了目標的檢測與定位,但是並不知道目標的類別(只知道是否為前景),location也需要進一步修正,這些都是後面Fast RCNN的工作。

移不變與尺度不變:

  • Translation-Invariant Anchors

Faster R-CNN解決平移不變的方法是:通過卷積核中心(用來生成region proposals的Anchor)進行不同尺度、寬高比的采樣,使用3種尺度和3種比例來產生9種anchor。

平移不變:當Image中的object移動時,對應的proposal也會移動,系統能夠使用相同的函數預測到在任何位置的proposal。這個特性就是移不變

移不變特性降低了模型的規模

  • Multi-Scale Anchors as Regression References

multi-scale prediction有兩種流行的實現方法:第一種是基於image/feature pyramids。圖像被調整為多個尺度,對於每個尺度的圖像均計算feature maps或deep convolutional features,該方法很耗時;第二種是對feature maps使用multi-scale(and/or aspect ratios)的sliding windows。該方法解決多尺度問題時可以被視為“pyramid of filters”。第二種方法通常與第一種方法一起使用。

論文中提出的anchor提供了一種新穎的multiple scales and acpect ratios解決方法(anchor-based method)。(scale一般指面積;aspect ratio指長寬比)

該方法建立在一個pyramid of anchors之上,相比傳統的方法效率更高。該方法根據多尺度多長寬比的anchors對bounding boxes進行分類和回歸,並且只使用單尺度的images和feature maps。

得益於基於anchors的多尺度設計,我們可以像Fast R-CNN detector那樣,僅使用一幅單尺度圖像計算得到的convolutional features。這裏,多尺度anchors是關鍵,它使得Faster R-CNN能夠共享特征而不需要再去解決多尺度的問題。



3. Fast R-CNN object detection network

Faster RCNN的第二部分和Fast RCNN中object detction network相同,這裏不再贅述。這部分只記錄些細節。

  • bounding-box regression(邊框回歸)原理

之所以需要做邊框回歸主要是因為region proposal或者anchors與ground-truth box的交並比(IoU)不高,沒有比較精確地檢測出object的位置,這時通過bounding-box regression就能得到一個接近ground-truth box的邊界框。如下圖所示:

技術分享圖片

Fig.8

紅色區域被分類器識別為飛機,但是與綠色的邊界框交並比不高,導致定位誤差很大。這時候就可以對紅色的框進行微調,使得經過微調後的predicted窗口與Ground-truth box盡可能一致。

邊框一般使用4維向量(x,y,w,h)表示。前兩個參數表示邊框中心的坐標,後面兩個參數表示邊框的寬和高。在Fig.9中,紅色的框A表示提取到的原始region proposal,綠色的框G表示標記出的Ground-truth box,且與A屬於同一類。回歸的目標就是尋找一個映射使得A經過映射得到一個與真實窗口G盡可能接近的窗口G’。

技術分享圖片


可用公式表達如下,式中映射 f 即為待尋找的目標。:

技術分享圖片

回歸原理很簡單,就是先做平移使得框中心盡可能重合,然後進行尺度縮放,使面積接近。

    • 先平移(ΔxΔy),Δx=Pwdx(P),Δy=Phdy(P)

也就是R-CNN論文中描述的

技術分享圖片

    • 後尺度縮放(Sw,Sh),Sw =Pwdw(P),Sh=Phdh(P)

技術分享圖片

回歸需要得到的就是上面公式中的四個線性函數dx(P),dy(P),dw(P),dh(P)

另外我們需要註意的是,只有當region proposal與ground-truth相差較小時,才能認為二者之間的變換是一種線性變換,這樣就可以使用線性回歸來建模對窗口進行微調。所以R-CNN中選擇的判斷條件是IoU>0.6,Faster RCNN中設置的是IoU>0.7。如果我們使用與ground-truth相差太大的region proposal訓練回歸模型,那麽得到的回歸模型效果會很差,甚至不能工作。這主要是因為離得太遠時二者已經是非線性關系,用來訓練線性模型的話肯定不合適。

線性回歸就是給定輸入的特征向量X(不是邊框的四個參數),學習一組權重參數W,使得經過線性回歸後得到的輸出值(偏移量)dx(P),dy(P),dw(P),dh(P)相對於ground truth 的真實值非常接近,從而利用偏移量得到接近ground-truth的預測框。

理想的偏移量(tx,ty,tw,th)可以表示如下:

技術分享圖片

公式(6)(7)(8)(9)是根據(1)(2)(3)(4)變換得到的

如果Region proposal P的特征表示為Φ(P),需要學習的線性回歸模型的參數記為W*四個參數的理想偏移量表示為t*,那麽回歸模型的四個輸出表示成d*(P)=WT*Φ(P),那麽線性回歸模型的目標函數如下(*表示x,y,w,h):

技術分享圖片

接下來的任務就是通過優化上面的目標函數學習到模型參數W*

得到模型參數W*後就可以對窗口進行回歸。如果提取到的特征是Φ(P),那麽預測到的偏移量就是d*(P)=WT*Φ(P),再根據公式(1)(2)(3)(4)即可得到藍色框G‘的坐標表示,即預測到的bounding-box的位置。


  • nonmaximum suppression (非極大值抑制)

技術分享圖片

  • RoI pooling layer

作用:將不同尺度proposals的feature maps先轉換為若幹層金字塔,再逐層池化輸出固定長度的特征。

輸入有兩個:

    • 整幅圖像的feature maps
    • Region proposals(通過SS或RPN)

具體可以查看論文《Fast R-CNN》


4. RPN網絡訓練

  • Loss Function 損失函數

為了訓練RPN網絡,作者對每一個anchor使用了二值化類標簽。論文中將兩種anchors標記為positive:與一個ground-truth box有最高IoU的anchor;與任何ground-truth box的IoU都超過0.7的anchor。由此可見,一個ground-truth box可能會將多個anchors判定為positive。雖然通常第二種情況已經能充分判定出positive examples,但是依然會結合第一種判定方法使用,因為在有些時候,第二種判定方法可能會找不到positive sample。另外,將與所有ground-truth的IoU都低於0.3的non-positive anchor標記為negative,那些既不是positive也不是negative的anchors將會被忽略,不考慮進目標函數。

借助以上定義以及Fast R-CNN中的多任務損失,定義出一幅Image的loss function,如下:

技術分享圖片

上式中,i 是mini-batch中anchor的索引;pi 是anchor帶有目標(前景)的預測概率。如果anchor是positive sample的話,ground-truth label p*i 為1;anchor是negative的話 p*i 為0;non-positive 和non-negative的anchor不考慮進目標函數。ti 是回歸預測出的四個坐標的向量表示,t*i 是與一個positive anchor相關的ground-truthbox的坐標向量表示,ti t*i 只考慮positive anchors。

分類損失Lcls是兩個類別(object vs. not object)上的log loss。回歸損失則表示為Lreg(ti ,t*i )=R(ti - t*i ),其中R是定義在Fast R-CNN中的robust loss fuction(smooth L1),如下:

技術分享圖片

另外還可以發現,目標函數中的回歸損失只能被positive anchors激活(p*i =1 for positive anchor,p*i =0 for others)

損失函數中的兩項分別被NclsNreg歸一化,並且被平衡參數λ加權。作者在論文中取Ncls為256(mini-batch size)、Nreg為2400(the number of anchor locations,也就是feature maps上的位置數量)。λ取默認值10,這樣的話cls和reg兩項的加權系數就基本相等(256~2400/10)。作者在論文的後面通過實驗說明了實驗結果對λ在大範圍內變化不敏感,如下:

技術分享圖片

同時,作者也提醒,上面的歸一化不是必須的並且可以簡化。


至於RPN網絡中的邊框回歸,作者使用了一種和以往RoI-based方法不同方法。在Fast R-CNN和SPPnet中,邊框回歸使用的都是SPP layer從任意尺寸RoI中提取到的固定長度特征,並且回歸模型的權重對於不同尺寸的RoI是共享的。而在Faster R-CNN中,線性回歸使用的固定長度特征是通過相同空間尺寸的窗口獲得的。考慮到一個位置處的k個anchors擁有不同scale和aspect ratio,作者就使用了k個bounding-box regressors。每個regressor負責一種scale和一種aspect ratio,並且這k個regressors不共享權重,即各個regressor是獨立的。

回歸的原理與R-CNN中描述的類似,這裏只做簡要說明。需要的參數如下:

技術分享圖片

t* 是預測的邊框與anchor box邊框的偏移量;t**是理想的偏移量,即ground-truth與anchor box間的偏移量。二者的差會作為線性回歸的目標函數。邊框回歸可以被認為是將anchor box映射到一個接近ground-truth box的位置。


  • Training RPNs

RPN網絡可以使用反向傳播和SGD進行端到端的訓練。

在mini-batch的選取上,作者並沒有使用一幅圖像中的所有anchors來優化loss function,因為anchors中negative samples占比非常高,這樣訓練出的模型會偏向negative samples,使用模型進行預測時會出現很多false positive samples。相反,作者在一幅圖像的anchors中隨機抽取256個anchors作為一個mini-batch來計算loss function,而且這256個anchors由positive samples和negative samples按照1:1的比例構成。如果一幅image中的positive samples的數量少於128個,那麽就用negative samples填充mini-batch.

共享卷積層使用的是pre-trained model(for ImageNet classification),因此不需要初始化參數。而那些new layers的權重則使用隨機從均值為0、標準差為0.01的高斯分布中提取的數值進行初始化。

微調時,如果使用的是ZF net,那麽微調所有層;如果使用的是VGG net,那麽微調conv3_1及後面的layers,這樣能夠節省內存

微調時,前60k個mini-batches使用學習速率0.001,接下來的20k mini-batches使用0.0001。動量設為0.9,權重衰減取為0.0005


5. Fast R-CNN和RPN的聯合訓練

Faster R-CNN中的detection network使用的是Fast R-CNN,訓練和測試方法完全一致。Region Proposals Network網絡的訓練方法前面也大致介紹清楚,接下來記錄在帶有共享卷積層的情況下如何統一訓練二者。

很明顯,RPN和Fast R-CNN不能單獨訓練,否則卷積層的參數會不斷被修改而無法收斂。這裏作者提出了三種訓練帶有共享特征的網絡的方法。

  • Alternating training(交替訓練)

先訓練RPN,然後使用得到的proposals來訓練Fast R-CNN,接著使用Fast R-CNN微調後的網絡來初始化RPN…..不斷叠代該過程即可

該論文中的所有實驗都使用這種訓練方法

  • Approximate joint training(近似聯合訓練)

在訓練時將RPN和Fast R-CNN融合成一個網絡訓練。在每次叠代中,前向過程產生region proposals被視為固定的、已經計算正確的proposals,並且被用來訓練Fast R-CNN detector。反向傳播和一般情況相同,不過對於共享卷積層而言,反向傳播的信號同時來自於RPN loss 和 Fast R-CNN loss。

這種方法很容易使用,但是這種方法忽視了proposal boxes 坐標的導數,因而這種方法是近似的。

在實驗中作者發現,這種方法能夠產生與準確結果接近的效果。同時,與交替訓練相比,該方法的訓練時間降低了25%-50%。在作者提供的Python code中包含了這種方法。

  • Non-approximate joint training(非近似聯合訓練)

就像上面討論的那樣,RPN預測的bounding boxes也是網絡的響應。Fast R-CNN中的RoI pooling layer 接受卷積特征和RPN預測的bounding boxes,那麽一個理論上有效的反向傳播求解器也應該包括boxes坐標的梯度。這些梯度在Approximate joint training中被忽略了。在本方法中,我們需要RoI pooling layer對box coordinates是可微的。這是一個非常重要的問題,可以通過《Instance-aware semantic segmentation via multi-task network cascades》中介紹的“RoI warping” layer給出解決方案,這超出了本文的範圍,不予介紹。


下面重點介紹4-Step Alternating training(交替訓練):

論文采用一種實用的四步訓練算法,通過交替優化來學習共享特征(共享卷積層)。

  • 訓練RPN。 RPN網絡使用一個ImageNet-pre-trained model來初始化參數,並端到端地對region proposal task進行微調。
  • 使用第一步中RPN產生的proposals訓練獨立的 detection network(Fast R-CNN)。 Detection network也使用ImageNet-pre-trained model來初始化參數。到這裏時,這兩個網絡並不共享卷積層。
  • 使用detection network來初始化RPN訓練,但是固定共享卷積層的參數,只對RPN特有的layers進行微調。至此,兩個網絡已經共享卷積層
  • 保持卷積層參數不變,微調Fast R-CNN特有的layers。像這樣,兩個網絡共享了卷積層,並且形成了一個統一的網絡。類似的交替訓練可以叠代更多次,但是作者在論文中說叠代後觀察到的改善微不足道


6. Implementation Details(應用細節)

  • 訓練和測試RPN和detection network使用的均是single-scale image(單一尺度圖像)
  • 將輸入images resize成最短邊s=600 pixels
  • Multi-scale feature extraction(多尺度特征提取,即輸入一幅image的多個尺度,使用圖像金字塔)也許會提升精度,但是需要考慮速度與精度的平衡
  • 對於anchors,作者使用的3中scales指的是128*128、256*256、512*512 pixels,3種aspect ratios指的是1:1、1:2和2:1。這些超參數不是為特定的數據集專門選擇的,後面作者也做了實驗,如下:

技術分享圖片

  • 論文提出的方法不需要使用Image pyramid和filter pyramid來預測regions of multiple scales,節省了運行時間
  • 超出image邊界的anchor boxes需要謹慎處理(訓練和測試時處理方式不同)。在訓練時,作者忽略了所有超出邊界的anchors,所以它們不會影響loss。對於一幅1000 * 600的image,一共會有大約20000(~60*40*9,即(1000/16)*(600/16)*9)個anchors。如果忽略超出邊界的anchors,每幅圖像大概會剩下6000個用來訓練。如果訓練時不忽略超出邊界的anchors,它們會在目標函數中帶來難以糾正的error terms,並且訓練不會收斂。但是在訓練時,我們仍然將RPN應用到整幅圖像。這樣也許會產生超出邊界的proposal boxes,這時作者沒有采取忽略這些跨界anchors的做法,而是將這些超出邊界的anchors裁剪到image的邊界處,即剪掉超出image的部分,剩余的部分保留作為proposals。
  • 一些RPN產生的proposals彼此高度重合。為了減少冗余,作者根據region proposals的cls scores對它們進行非極大值抑制處理(NMS)。論文中將NMS使用的IoU閾值設為0.7,這個閾值能為每幅圖片保留下來大約2000個region proposals。作者在論文的後面也證實了NMS不會影響最終的檢測精度,但是大幅降低了proposals的數量。
  • 在NMS之後,作者使用了top-N ranked proposal regions來進行檢測,也就是將scores排在前N的proposal regions傳給detection network。接下來就是使用2000個RPN proposals訓練Fast R-CNN,但在測試時使用的proposals的數量需要進行評估。


7. 總結

筆記的最後我想把Faster R-CNN的訓練和測試過程詳細地描述一下,方便以後查看和修改。(可能有錯誤的地方,)

Faster R-CNN分為兩部分,一部分是用來生成region proposals的Region Proposals Network, 另一部分是用來對region proposals進行分類和二次位置修正的Fast R-CNN detector network,二者共享前部的卷積層。因為Faster R-CNN的訓練比較復雜。

首先是RPN的訓練。

  • 輸入一幅image後,經過卷積獲得該圖像的feature maps
  • 根據anchor選取的scales和aspect ratios從Image中提取到大量的anchor boxes(粗略的位置信息已知,還進行的正負劃分),並利用3*3的卷積計算得到對應的256-d或512-d的低維特征
  • 特征分為兩路輸出,一路用來經過二分類softmax classifier輸出anchor boxes為foreground和background兩個概率值;另一路使用全連接網絡對邊框的位置進行回歸,第一次修正使得邊框的location稍微精確些
  • 損失函數loss function不是由所有的anchor boxes決定的,而是由劃分的positive samples和negative samples影響
  • 訓練時使用的單個mini-batch全部來自於一幅圖像(我想和Fast R-CNN一樣,使用同一幅image是為了減少運算),容量為256,由128個positive samples和128個negative samples構成。如果image中的positive samples數目不足128,那就用negative samples補充。
  • 損失函數分為兩部分,一部分是邊界框坐標偏移量線性回歸的誤差,這部分只統計positive samples的誤差;另一部分是分類誤差,針對所有的正負樣本
  • 應用反向傳播和SGD就可以對RPN進行訓練
  • 訓練完成後剔除超出邊界的anchors,然後按照scores進行NMS
  • NMS之後scores按照從高到低排序,將前N個anchors提供給Fast R-CNN detection network用來檢測

Fast R-CNN detection network的訓練在Fast R-CNN的筆記裏已經介紹過,這裏就不再介紹,不過訓練過程和RPN類似

兩部分的統一訓練也不總結了。。。

測試的話和訓練類似,只不過沒有標簽。另外,測試時,RPN產生的超出邊界的region proposals不會被剔除,而是剪去超出部分,留下未超出部分。


R-CNN、Fast R-CNN、Faster R-CNN三者關系

技術分享圖片

技術分享圖片

參考:

  • anchor理解
  • Faster RCNN解析
  • faster-rcnn的記錄
  • 一文讀懂Faster RCNN
  • 如何在faster—rcnn上訓練自己的數據集(單類和多類)??
  • 目標檢測算法總結

論文閱讀筆記(六)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks