『計算機視覺』經典RCNN_其一:從RCNN到Faster-RCNN


RCNN介紹

目標檢測-RCNN系列

一文讀懂Faster RCNN

一、目標檢測

1、兩個任務

目標檢測可以拆分成兩個任務:識別和定位

圖像識別(classification)
輸入:圖片
輸出:物體的類別
評估方法:准確率

定位(localization)
輸入:圖片
輸出:方框在圖片中的位置(x,y,w,h)
評估方法:檢測評價函數 intersection-over-union ( IOU )

對於識別任務,卷積神經網絡可以很好的幫助我們完成,但是定位任務則更加麻煩一些,我們接下來討論一下定位任務的解決思路。

2、兩種思路

看做回歸問題

我們需要預測出(x,y,w,h)四個參數的值,從而得出方框的位置。



步驟1:
  • 先解決簡單問題, 搭一個識別圖像的神經網絡
  • 在AlexNet VGG GoogleLenet上fine-tuning一下

 

步驟2:
  • 在上述神經網絡的尾部展開(也就說CNN前面保持不變,我們對CNN的結尾處作出改進:加了兩個頭:“分類頭”和“回歸頭”)
  • 成為classification + regression模式


步驟3:
  • Regression那個部分用歐氏距離損失
  • 使用SGD訓練

 

步驟4:
  • 預測階段把2個頭部拼上
  • 完成不同的功能

 
這里需要進行兩次fine-tuning
第一次在ALexNet上做,第二次將頭部改成regression head,前面不變,做一次fine-tuning

 

Regression的部分加在哪?

有兩種處理方法:
  • 加在最后一個卷積層后面(如VGG)
  • 加在最后一個全連接層后面(如R-CNN)

 

regression太難做了,應想方設法轉換為classification問題。
regression的訓練參數收斂的時間要長得多,所以上面的網絡采取了用classification的網絡來計算出網絡共同部分的連接權值。

 

取圖像窗口

  • 還是剛才的classification + regression思路
  • 我們預先划好不同大小的“框”
  • 讓框出現在不同的位置,得出這個框的判定得分
  • 取得分最高的那個框


左上角的黑框:得分0.5

右上角的黑框:得分0.75

左下角的黑框:得分0.6

右下角的黑框:得分0.8

根據得分的高低,我們選擇了右下角的黑框作為目標位置的預測。
注:有的時候也會選擇得分最高的兩個框,然后取兩框的交集作為最終的位置預測。

如何選區候選框?
取不同的框,依次從左上角掃到右下角。

總結一下思路:
對一張圖片,用各種大小的框(遍歷整張圖片)將圖片截取出來,輸入到CNN,然后CNN會輸出這個框的得分(classification)以及這個框圖片對應的x,y,h,w(regression)。


這方法實在太耗時間了,做個優化。
原來網絡是這樣的(overfeat的全卷積結構思路):



優化成這樣:把全連接層改為卷積層,這樣可以提提速。

 

二、RCNN譜系

1、R-CNN

(1)輸入測試圖像;

(2)利用selective search 算法在圖像中從上到下提取2000個左右的Region Proposal;

(3)將每個Region Proposal縮放(warp)成227*227的大小並輸入到CNN,將CNN的fc7層的輸出作為特征(原文會funtune如下圖);

(4)將每個Region Proposal提取的CNN特征輸入到SVM進行分類(原文將特征保存到磁盤,再分別使用SVM處理,如下圖);

(5)對於SVM分好類的Region Proposal做邊框回歸,用Bounding box回歸值校正原來的建議窗口,生成預測窗口坐標.

缺陷

(1)     訓練分為多個階段,步驟繁瑣:微調網絡+訓練SVM+訓練邊框回歸器;

(2)     訓練耗時,占用磁盤空間大;5000張圖像產生幾百G的特征文件;

(3)     速度慢:使用GPU,VGG16模型處理一張圖像需要47s;

(4)     測試速度慢:每個候選區域需要運行整個前向CNN計算;

(5)     SVM和回歸是事后操作,在SVM和回歸過程中CNN特征沒有被學習更新.

 

2、FAST-RCNN

(1)輸入測試圖像;

(2)利用selective search 算法在圖像中從上到下提取2000個左右的建議窗口(Region Proposal);

(3)將整張圖片輸入CNN,進行特征提取;

(4)把建議窗口映射到CNN的最后一層卷積feature map上;

(5)通過RoI pooling層使每個建議窗口生成固定尺寸的feature map;

(6)利用Softmax Loss(探測分類概率) 和Smooth L1 Loss(探測邊框回歸)對分類概率和邊框回歸(Bounding box regression)聯合訓練.

 

相比R-CNN,主要兩處不同

(1)  最后一層卷積層后加了一個ROI pooling layer;

(2)  損失函數使用了多任務損失函數(multi-task loss),將邊框回歸直接加入到CNN網絡中訓練

改進

測試時速度慢:R-CNN把一張圖像分解成大量的建議框,每個建議框拉伸形成的圖像都會單獨通過CNN提取特征.實際上這些建議框之間大量重疊,特征值之間完全可以共享,造成了運算能力的浪費.

FAST-RCNN將整張圖像歸一化后直接送入CNN,在最后的卷積層輸出的feature map上,加入建議框信息,使得在此之前的CNN運算得以共享.

效果提升明顯

3、FASTER -RCNN

 

(1)輸入測試圖像;

(2)將整張圖片輸入CNN,進行特征提取;

(3)用RPN生成建議窗口(proposals),每張圖片保留約300個建議窗口;

(4)把建議窗口映射到CNN的最后一層卷積feature map上;

(5)通過RoI pooling層使每個RoI生成固定尺寸的feature map;

(6)利用Softmax Loss(探測分類概率) 和Smooth L1 Loss(探測邊框回歸)對分類概率和邊框回歸(Bounding box regression)聯合訓練.

 

相比FAST-RCNN,主要兩處不同

(1)使用RPN(Region Proposal Network)代替原來的Selective Search方法產生建議窗口;

(2)產生建議窗口的CNN和目標檢測的CNN共享

 

改進

快速產生建議框:FASTER-RCNN創造性地采用卷積網絡自行產生建議框,並且和目標檢測網絡共享卷積網絡,使得建議框數目從原有的約2000個減少為300個,且建議框的質量也有本質的提高.

 

RPN簡介
  • 在feature map上滑動窗口
  • 建一個神經網絡用於物體分類+框位置的回歸
  • 滑動窗口的位置提供了物體的大體位置信息
  • 框的回歸提供了框更精確的位置

PRN的構成和SSD中特征層的處理極為相似。

 

放到整體網絡中如下,

使用3*3的滑窗,每個滑動窗口位置生成9個候選窗口(不同尺度、不同寬高),對應36個坐標、18個分類。

訓練過程中,

1)丟棄跨越邊界的anchor;

2)與樣本重疊區域大於0.7的anchor標記為前景,重疊區域小於0.3的標定為背景;

與FastRCNN類似。目標分類只需要區分候選框內特征為前景或者背景。 邊框回歸確定更精確的目標位置,基本網絡結構如下圖所示:

故一個網絡,四個損失函數;
  • RPN calssification(anchor good.bad)
  • RPN regression(anchor->propoasal)
  • Fast R-CNN classification(over classes)
  • Fast R-CNN regression(proposal ->box)

 

4、回顧演進路線

附一、回歸/微調的對象是什么? 

(4)   Bounding-box regression(邊框回歸) 
那么經過何種變換才能從圖11中的窗口P變為窗口呢?比較簡單的思路就是: 
 


注意:只有當Proposal和Ground Truth比較接近時(線性問題),我們才能將其作為訓練樣本訓練我們的線性回歸模型,否則會導致訓練的回歸模型不work(當Proposal跟GT離得較遠,就是復雜的非線性問題了,此時用線性回歸建模顯然不合理).這個也是G-CNN: an Iterative Grid Based Object Detector多次迭代實現目標准確定位的關鍵. 
線性回歸就是給定輸入的特征向量X,學習一組參數W,使得經過線性回歸后的值跟真實值Y(Ground Truth)非常接近.即.那么Bounding-box中我們的輸入以及輸出分別是什么呢? 

     

附錄二、損失函數設計

在計算Loss值之前,作者設置了anchors的標定方法.正樣本標定規則:

1)   如果Anchor對應的reference box與ground truth的IoU值最大,標記為正樣本;

2)   如果Anchor對應的reference 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)按一定比重組成的.

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

i.     預測框,即RPN網絡預測出的proposal的中心位置坐標x,y和寬高w,h;

ii.      錨點reference box:

        之前的9個錨點對應9個不同scale和aspect_ratio的reference boxes,每一個reference boxes都有一個中心點位置坐標x_a,y_a和寬高w_a,h_a;

iii.  ground truth:標定的框也對應一個中心點位置坐標x*,y*和寬高w*,h*.因此計算regression loss和總Loss方式如下: 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM