Faster-Rcnn掃盲

faster-rcnn原理介紹
faster-rcnn原理及相應概念解釋
從結構、原理到實現,Faster R-CNN全解析(原創)

R-CNN:

(1)輸入測試圖像;

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

(3)將每個Region Proposal縮放(warp)成227*227的大小並輸入到CNN,將CNN的fc7層的輸出作爲特徵;

(4)將每個Region Proposal提取的CNN特徵輸入到SVM進行分類;

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

缺陷:

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

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

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

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

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

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網絡中訓練

改進:

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

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

(2) 訓練時速度慢:R-CNN在訓練時,是在採用SVM分類之前,把通過CNN提取的特徵存儲在硬盤上.這種方法造成了訓練性能低下,因爲在硬盤上大量的讀寫數據會造成訓練速度緩慢.

FAST-RCNN在訓練時,只需要將一張圖像送入網絡,每張圖像一次性地提取CNN特徵和建議區域,訓練數據在GPU內存裏直接進Loss層,這樣候選區域的前幾層特徵不需要再重複計算且不再需要把大量數據存儲在硬盤上.

(3) 訓練所需空間大:R-CNN中獨立的SVM分類器和迴歸器需要大量特徵作爲訓練樣本,需要大量的硬盤空間.FAST-RCNN把類別判斷和位置迴歸統一用深度網絡實現,不再需要額外存儲.

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)聯合訓練.

相比FASTER-RCNN,主要兩處不同:

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

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

改進:

(1) 如何高效快速產生建議框?

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

概念解釋:

1、常用的Region Proposal有:

-Selective Search

-Edge Boxes

2、softmax-loss
softmax-loss 層和 softmax 層計算大致是相同的. softmax 是一個分類器,計算的是類別的概率(Likelihood),是 Logistic Regression 的一種推廣. Logistic Regression 只能用於二分類,
而 softmax 可以用於多分類.
softmax 與 softmax-loss 的區別:
softmax 計算公式:

在這裏插入圖片描述

關於兩者的區別更加具體的介紹,可參考: softmax vs. softmax-loss
用戶可能最終目的就是得到各個類別的概率似然值,這個時候就只需要一個 Softmax 層,而不一定要進行 softmax-Loss 操作;或者是用戶有通過其他什麼方式已經得到了某種概率似然值,然後要做最大似然估計,此時則只需要後面的 softmax-Loss 而不需要前面的 Softmax操作.因此提供兩個不同的 Layer 結構比只提供一個合在一起的 Softmax-Loss Layer 要靈活許多.不管是 softmax layer 還是 softmax-loss layer,都是沒有參數的,只是層類型不同而已
softmax-loss layer:輸出 loss 值
layer {
name: “loss”
type: “SoftmaxWithLoss”
bottom: “ip1”
bottom: “label”
top: “loss”
}
softmax layer: 輸出似然值
layers {
bottom: “cls3_fc”
top: “prob”
name: “prob”
type: “Softmax"
}

3、Selective Search

這個策略其實是藉助了層次聚類的思想(可以搜索瞭解一下"層次聚類算法"),將層次聚類的思想應用到區域的合併上面;

總體思路:

l 假設現在圖像上有n個預分割的區域(Efficient Graph-Based Image Segmentation),表示爲R={R1, R2, …, Rn},

l 計算每個region與它相鄰region(注意是相鄰的區域)的相似度,這樣會得到一個n*n的相似度矩陣(同一個區域之間和一個區域與不相鄰區域之間的相似度可設爲NaN),從矩陣中找出最大相似度值對應的兩個區域,將這兩個區域合二爲一,這時候圖像上還剩下n-1個區域;

l 重複上面的過程(只需要計算新的區域與它相鄰區域的新相似度,其他的不用重複計算),重複一次,區域的總數目就少1,知道最後所有的區域都合併稱爲了同一個區域(即此過程進行了n-1次,區域總數目最後變成了1).算法的流程圖如下圖所示:

在這裏插入圖片描述
在這裏插入圖片描述

4、SPP-NET

SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

先看一下R-CNN爲什麼檢測速度這麼慢,一張圖都需要47s!仔細看下R-CNN框架發現,對圖像提完Region Proposal(2000個左右)之後將每個Proposal當成一張圖像進行後續處理(CNN提特徵+SVM分類),實際上對一張圖像進行了2000次提特徵和分類的過程!這2000個Region Proposal不都是圖像的一部分嗎,那麼我們完全可以對圖像提一次卷積層特徵,然後只需要將Region Proposal在原圖的位置映射到卷積層特徵圖上,這樣對於一張圖像我們只需要提一次卷積層特徵,然後將每個Region Proposal的卷積層特徵輸入到全連接層做後續操作.(對於CNN來說,大部分運算都耗在卷積操作上,這樣做可以節省大量時間).

現在的問題是每個Region Proposal的尺度不一樣,直接這樣輸入全連接層肯定是不行的,因爲全連接層輸入必須是固定的長度.SPP-NET恰好可以解決這個問題.

在這裏插入圖片描述

由於傳統的CNN限制了輸入必須固定大小(比如AlexNet是224x224),所以在實際使用中往往需要對原圖片進行crop或者warp的操作:

  • crop:截取原圖片的一個固定大小的patch
  • warp:將原圖片的ROI縮放到一個固定大小的patch

無論是crop還是warp,都無法保證在不失真的情況下將圖片傳入到CNN當中:

  • crop:物體可能會產生截斷,尤其是長寬比大的圖片.
  • warp:物體被拉伸,失去“原形”,尤其是長寬比大的圖片

SPP爲的就是解決上述的問題,做到的效果爲:不管輸入的圖片是什麼尺度,都能夠正確的傳入網絡.
具體思路爲:CNN的卷積層是可以處理任意尺度的輸入的,只是在全連接層處有限制尺度——換句話說,如果找到一個方法,在全連接層之前將其輸入限制到等長,那麼就解決了這個問題.

具體方案如下圖所示:

在這裏插入圖片描述

如果原圖輸入是224x224,對於conv5出來後的輸出,是13x13x256的,可以理解成有256個這樣的filter,每個filter對應一張13x13的activation map.如果像上圖那樣將activation map pooling成4x4 2x2 1x1三張子圖,做max pooling後,出來的特徵就是固定長度的(16+4+1)x256那麼多的維度了.如果原圖的輸入不是224x224,出來的特徵依然是(16+4+1)x256;直覺地說,可以理解成將原來固定大小爲(3x3)窗口的pool5改成了自適應窗口大小,窗口的大小和activation map成比例,保證了經過pooling後出來的feature的長度是一致的.

5、Bounding box regression

R-CNN中的bounding box迴歸

下面先介紹R-CNN和Fast R-CNN中所用到的邊框迴歸方法.

(1) 什麼是IOU
在這裏插入圖片描述
(2) 爲什麼要做Bounding-box regression?
在這裏插入圖片描述
如上圖所示,綠色的框爲飛機的Ground Truth,紅色的框是提取的Region Proposal.那麼即便紅色的框被分類器識別爲飛機,但是由於紅色的框定位不準(IoU<0.5),那麼這張圖相當於沒有正確的檢測出飛機.如果我們能對紅色的框進行微調,使得經過微調後的窗口跟Ground Truth更接近,這樣豈不是定位會更準確.確實,Bounding-box regression 就是用來微調這個窗口的.

(3) 迴歸/微調的對象是什麼?
在這裏插入圖片描述
(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中我們的輸入以及輸出分別是什麼呢?

在這裏插入圖片描述
在這裏插入圖片描述
6、Region Proposal Network

RPN的實現方式:在conv5-3的卷積feature map上用一個nn的滑窗(論文中作者選用了n=3,即33的滑窗)生成一個長度爲256(對應於ZF網絡)或512(對應於VGG網絡)維長度的全連接特徵.然後在這個256維或512維的特徵後產生兩個分支的全連接層:

(1)reg-layer,用於預測proposal的中心錨點對應的proposal的座標x,y和寬高w,h;

(2)cls-layer,用於判定該proposal是前景還是背景.sliding window的處理方式保證reg-layer和cls-layer關聯了conv5-3的全部特徵空間.事實上,作者用全連接層實現方式介紹RPN層實現容易幫助我們理解這一過程,但在實現時作者選用了卷積層實現全連接層的功能.

(3)個人理解:全連接層本來就是特殊的卷積層,如果產生256或512維的fc特徵,事實上可以用Num_out=256或512, kernel_size=33, stride=1的卷積層實現conv5-3到第一個全連接特徵的映射.然後再用兩個Num_out分別爲29=18和49=36,kernel_size=11,stride=1的卷積層實現上一層特徵到兩個分支cls層和reg層的特徵映射.

(4)注意:這裏29中的2指cls層的分類結果包括前後背景兩類,49的4表示一個Proposal的中心點座標x,y和寬高w,h四個參數.採用卷積的方式實現全連接處理並不會減少參數的數量,但是使得輸入圖像的尺寸可以更加靈活.在RPN網絡中,我們需要重點理解其中的anchors概念,Loss fucntions計算方式和RPN層訓練數據生成的具體細節.

在這裏插入圖片描述

Anchors:字面上可以理解爲錨點,位於之前提到的nn的sliding window的中心處.對於一個sliding window,我們可以同時預測多個proposal,假定有k個.k個proposal即k個reference boxes,每一個reference box又可以用一個scale,一個aspect_ratio和sliding window中的錨點唯一確定.所以,我們在後面說一個anchor,你就理解成一個anchor box 或一個reference box.作者在論文中定義k=9,即3種scales和3種aspect_ratio確定出當前sliding window位置處對應的9個reference boxes, 4k個reg-layer的輸出和2k個cls-layer的score輸出.對於一幅WH的feature map,對應WHk個錨點.所有的錨點都具有尺度不變性.

Loss functions:

在計算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方式如下:

在這裏插入圖片描述
在這裏插入圖片描述
RPN訓練設置:

(1)在訓練RPN時,一個Mini-batch是由一幅圖像中任意選取的256個proposal組成的,其中正負樣本的比例爲1:1.

(2)如果正樣本不足128,則多用一些負樣本以滿足有256個Proposal可以用於訓練,反之亦然.

(3)訓練RPN時,與VGG共有的層參數可以直接拷貝經ImageNet訓練得到的模型中的參數;剩下沒有的層參數用標準差=0.01的高斯分佈初始化.

7、RoI Pooling

ROI pooling layer實際上是SPP-NET的一個精簡版,SPP-NET對每個proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采樣到一個7x7的特徵圖.對於VGG16網絡conv5_3有512個特徵圖,這樣所有region proposal對應了一個77512維度的特徵向量作爲全連接層的輸入.

RoI Pooling就是實現從原圖區域映射到conv5區域最後pooling到固定大小的功能.

8、smooth L1 Loss

爲了處理不可導的懲罰,Faster RCNN提出來的計算距離loss的smooth_L1_Loss.smooth L1近似理解見http://pages.cs.wisc.edu/~gfung/GeneralL1/L1_approx_bounds.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章