Faster R-CNN整體介紹及部分細節講解

論文全稱:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks



一、整體總結

1. 訓練過程

先訓RPN,後訓fast rcnn檢測器
之後用凍住共享部分訓RPN獨特部分
最後凍住共享部分訓Fast Rcnn獨特部分

2. 較Fast RCNN性能提升原因

主要是採用了能在GPU上運行的RPN提高了時間效率
通過實驗得知,共享網絡參數等均對mAP有所提高,其中影響最大的是cls層和reg層。RPN網絡在proposal數設置的小時效果仍很好,說明RPN網絡提議的proposal很好
不用NMS後效果降低,說明NMS可能並未對檢測效果有很大影響,且減少了false alarm

3. 整體架構

在這裏插入圖片描述

A. conv layers

用於特徵提取,生成特徵圖。本文中所用的conv layers部分有ZF網絡和VGG網絡兩種。

B. Region Proposal Network(RPN)

在這裏插入圖片描述
用滑動窗口的方式在整個特徵圖上進行掃描,將其通過3*3的conv層(intermediate layer),之後再將conv層之後的結果分別通過1*1 conv的cls層和reg層,這兩層分別用於判斷錨框中是否有物體和錨框的位置偏移。
由於本文中利用同樣尺寸(3*3)大小的特徵圖,要判斷多種不同尺度不同比例的錨框是否有物體,還有錨框的位置偏移,所以本文中針對類別數k設置了k個參數不共享的迴歸器。
在這裏插入圖片描述所以針對每一個3*3大小的特徵圖像窗口,cls層的輸出是2k大小(錨框內是否有目標)的,reg層的輸出是4k大小(窗口中心點座標偏移和寬高偏移)的。在得到所有窗口的cls層和reg層的結果後,選擇cls層分數最高的K個錨框進行後續的檢測,此處的K是自己設定的。

C. ROI Pooling+classifier(與Fast RCNN相似)

此部分和下圖所示的Fast R-CNN結構一致。
在這裏插入圖片描述
在通過RPN網絡得到K個最有可能有目標的錨框(錨框就相當於上圖中的紅框,是畫在原始圖像上的)之後,需要先將其進行映射,將每個錨框對應的特徵圖找出來。通過上文了解到,特徵圖將原始圖像通過conv layers(對應Fast RCNN中的Deep ConvNet)得到的,所以在找錨框對應特徵圖時,要知道conv layers對原始圖像做的處理。

以conv layers是VGG-16網絡時爲例,VGG網絡的conv層、relu層都不會改變圖像的大小,而每個pooling層都會使得圖像大小減少一半,也就是由(H,W)變爲(H/2,W/2),且總共有4個pooling層。所以原始圖像的(H,W)變爲了(H/16, W/16)。那麼在將錨框映射到對應特徵圖的時候,將大小爲(h,w)的錨框,縮小爲(h/16, w/16)大小的錨框,將對應座標也縮小16倍即可得到對應的特徵圖位置,也就是完成了上圖中的RoI projection部分。

然而由於錨框大小比例等不同,所以每個錨框對應的特徵圖大小比例也不同,所以爲了使得錨框的特徵圖能夠輸入同樣的網絡中,固定不同錨框的特徵圖大小,採用了RoI Pooling的方式。

RoI Pooling可以採用RoI max Pooling還有RoI average Pooling兩種方式。在本文中採用的是max Pooling的方式。爲了使得大小爲(h,w)的特徵圖池化到大小爲(H,W)的特徵圖,可以將大小爲(h,w)的特徵圖分成H*W個不同的小塊,每個小塊的大小爲(h/H, w/W),之後將這些小塊中最大值作爲(H,W)大小特徵圖的對應位置的特徵值即可。

RoI Pooling完成後,將特徵圖通過全連接層處理得到Rol特徵向量,之後再分別通過兩個不同的全連接層,通過softmax對錨框內物體類別進行預測,通過迴歸器對錨框位置進行矯正。

例:VGG16爲conv layers時的具體架構圖

在這裏插入圖片描述

二、論文細節(論文中出現順序排列)

  1. RPN(Region Proposal Network)
    圖→CNN→候選框+檢測分數
    在特徵圖上滑動
    在這裏插入圖片描述
  2. anchor box只依賴單一尺寸的圖片和特徵圖,用單一尺寸的filters(用單一尺寸的特徵圖,訓練針對不同比例、大小的分類器,後面會有講解)
  3. RPN的正例:a.和真值框IoU最高的anchor b.和任意真值框IoU大於0.7的anchor
    負例:與所有真值框的IoU均小於0.3
  4. 損失函數:
    在這裏插入圖片描述
    i:mini-batch中anchor索引
    pi:第i個anchor是目標的概率
    pi*:真值標籤(如果anchor是正例則爲1,負例則爲0)
    ti:預測的目標框4點座標向量
    ti*:真值框4點
    Lcls:log loss(2類,是否是目標)
    Lreg(ti, ti*)=R(ti-ti*),R是robust loss func(smooth L1)
    在這裏插入圖片描述
    Ncls:用於normalization,mini-batch大小(文中設置256)
    Nreg:用於normalization,anchor位置個數(文中設置2400)
    λ=10\lambda=10:用於平衡兩個加和項(實驗證明這個參數設多少影響不大)
  5. 候選框迴歸:
    在這裏插入圖片描述
    x,y,w,h:中心座標、候選框寬、高
    x,xa,x*:預測框、錨框、真值框
  6. RPN中,採用(3*3)大小的窗口大小在特徵圖上滑動。
    在這裏插入圖片描述
    但由於學了k個regressor,而這些迴歸器不共享參數,所以相當於得到了多尺度多比例的候選框。
  7. 用"image-centric" sampling訓練RPN
  8. mini-batch:一張照片中的正負anchors(隨機在這張圖片的所有anchors中抽樣256個,正負樣例比例1:1,如果正例樣本數小於128,則用負例補滿256個anchor)
  9. 用預訓練過的ImageNet分類模型參數初始化已有層參數,用Gaussian初始化新定義的參數。
    微調:ZFnet的所有層,conv 3_1和VGG的up部分
    lr=0.001(60k iter),lr=0.0001(之後的20k iter)
    momentum=0.9,weight decay=0.0005
    (PASCAL VOC數據集上,COCO數據集上設置的參數不同,後面會講)
  10. 訓練步驟:a.用ImageNet模型參數初始化之後,先訓練RPN網絡
    b. 用ImageNet模型參數初始化之後,利用剛剛RPN網路的輸出proposal訓練fast RCNN
    c.用Fast RCNN網絡初始化RPN的模型參數,但凍住共享部分,只訓練RPN的獨特部分
    d.保持共享部分,訓Fast RCNN的獨有部分
  11. resize圖片使短邊長度600pixel。VGG網絡和ZF網絡(本論文的實驗部分以VGG和ZF兩種網絡作爲backbone進行了實驗)最後一層卷積層的stride=16。
    訓練時忽視了超出圖像邊界的框,不過測試時將所有框都加上了,不過將超出邊界的位置裁剪掉了
  12. RPN網絡輸出proposal時,因爲候選框也就是proposal互相重疊,所以根據cls層的分數,進行了極大值抑制(NMS)。需要NMS的框互相之間IoU大於等於0.7。在NMS後,用分數top-N的候選框進行檢測(訓練時是N=2000)
  13. 部分實驗參數設置:a. Pascal VOC 2007和Pascal VOC 2012上進行了實驗
    backbone: fast version of ZF網絡:5 conv,3全連接
    VGG-16:13 conv,3全連接
    b. COCO數據集上進行了實驗:8GPU
    mini-batch大小:RPN時是8,fast RCNN時是16
    lr=0.003(240k iter)→lr=0.0003(之後的80k iter)
    負樣例:與真值框的IoU\in[0, 0.5)
    RPN網絡提出300個proposal
    將圖像resize到單一尺寸,也就是短邊長度爲600pixel

三、迴歸器reg層原理

這個鏈接講的很好:https://zhuanlan.zhihu.com/p/31426458
總體就是爲了將當前錨框向真值框靠近,需要回歸器迴歸出當前錨框與真值框之間的偏移。迴歸出的偏移用t表示,真實的偏移用t*表示。這些偏移的計算公式如下:
在這裏插入圖片描述
其中x、y、w、h分別代表窗口中心座標和窗口寬高。所以接下來就是如何求得t值並儘量向t*靠近了。爲了求得t值,本文利用了線性變換的方式,t=WTϕt=W^T\phi,也就是一個全連接層。輸入是錨框對應的特徵圖ϕ\phi,輸出是t,通過損失函數來優化參數W。由於要將t向t*靠近,所以損失函數在本文中定爲了smooth L1,
在這裏插入圖片描述
也就是smoothL1(tt)smooth_{L1}(t-t^*)
而得到了偏移之後的具體用法如下:
Gx=Awtx+AxGy=Ahty+AyGw=Awexp(tw)Gh=Ahexp(th) G'_x=A_wt_x+A_x \\ G'_y=A_ht_y+A_y \\ G'_w=A_wexp(t_w) \\ G'_h=A_hexp(t_h)
其中A是初始錨框,GG'是通過t修正後的錨框。前兩個公式是平移變換,後兩個公式是縮放變換。

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