r-cnn學習(二)


faster r-cnn

         1、問題

       在fast r-cnn中,proposals已經成為速度提高的瓶頸。在本文中,使用深度網絡來計算proposals,

使得與檢測網絡的計算量相比,proposals的計算量可忽略不計。為此,本文提出了RPN網絡(Region Proposal Network),

與目標檢測網絡共享卷積層,大大減少了計算proposals的時間。

       2、方案

      在fast r-cnn中,region-based detectors可以使用卷積特征圖,那么這些特征圖也可以用來生成region proposals。

在這些卷積特征上,通過增加兩個卷積層來構造RPN:一個將每個位置的卷積圖編碼成短的特征向量,另一個在每個卷積圖的位

置上,輸出objectness score和k個region proposals的regression bounds。

       因此,本文的RPN可以看作是fully-convolutional network (FCN),對於生成detecting proposals這種任務,是

end-to-end的。為了使RPN和fast r-cnn相統一,我們提出了一個簡單的訓練框架,在region proposal task和object detection

的微調中依次交替(保持proposals固定)。

      小結:設計RPN,利用卷積特征圖生成region proposals(而不是selective search等),提升了速度;訓練RPN和fast r-cnn(檢測網絡)

共享卷積層,提高檢測速度

 

     上圖為[1]博友給出的faster r-cnn的網絡結構圖,非常清晰,包括fast r-cnn+RPN網絡。原博認為不是

所有卷積層都參與共享。其流程為:

     (1)向CNN網絡(ZF或VGG-16)中輸入任意大小的圖片;

     (2)經前向傳播至最后共享卷積層,一方面成為RPN的輸入特征圖,另一方面前向傳播至特有卷積層,

產生更高維特征;

     (3)供RPN輸入的特征圖經過RPN網絡,得到region proposals和objectness scores。對objectness scores采用

非極大值抑制,輸出top-N(文中為300)的region proposals 給RoI池化層。

     (4)第2步得到的高維特征圖和第3步得到的region proposals同時輸入RoI池化層,提取對應region proposals的特征

     (5)由第4步得到的region proposals特征圖輸入全連接層,輸出cls scores和regressors bounding-box。

     3、具體介紹

     Region Proposal Networks

       RPN的輸入為一張圖像,輸出為一系列的矩形框(proposals),每一個會帶有objectness score。本文使用fcn模型來處理

這個過程。因為我們的目標是與fast r-cnn的檢測網絡共享計算,因此我們假設這些網絡共享卷積層。

      為了生成region proposals,在最后一個共享卷積層中,我們對其輸出滑動使用小的網絡。這個網絡與n*n的空間窗口(輸入為卷積特征圖)

全連接。每個滑動窗口被映射為低維的向量,然后將其輸入兩個獨立的全連接層中,一個是回歸層,一個是分類層。

    這個小網絡是以滑窗的方式操作的,因此全連接層共享所有空間位置。 

    小結:RPN在CNN輸入特征圖后,增加滑動窗口操作以及兩個卷積層完成region proposals。其中第一個卷積層將特征圖的每個滑窗位置

 

編碼成一個特征向量;第二個卷積層對應每個滑窗位置輸出k個objectness scores和k個回歸后region proposals,同時使用非極大值抑制。

 

 

   上圖為[1]給出的PRN網絡流程圖,其流程為:

   (1)套用ImageNet上常用的圖像分類網絡(ZF或VGG-16),利用這兩種網絡的部分卷積層產生原始圖像的特征圖;

   (2)對於(1)中的特征圖,用3*3的滑窗滑動掃描,通過1映射為低維的特征向量后采用ReLU。每個滑窗位置對應k

個anchors;

   (3)將低維特征向量輸入兩個並行連接的卷積層2,分別用於回歸region proposals產生bounding-box和對是否為前景

或背景打分。

 

   Translation-Invariant Anchors

     在每個滑窗位置上,同時預測k個proposals和4k個reg相應的輸出,以及2k個cls scores(每個proposal為目標/非目標的概率),這k

個proposals相對k個reference boxes,稱為anchors。在每個滑動位置上,使用3個scales和3個aspect ratios,共生成9個anchors。對於

一個W*H的特征圖,共有W*H*k個anchors,這種方法的好處就是translation invariant。

   Anchors:表示RPN網絡中對特征圖滑窗時每個滑窗位置所對應的原圖區域中9種可能的大小。根據圖像大小計算滑窗中心點對應原圖區域的

中心點,通過中心點和size就可以得到滑窗位置和原圖位置的映射關系,由此原圖位置並根據與Ground Truth重復率貼上正負標簽,讓RPN

學習該Anchors是否有物體即可。

  A Loss Function for Learning Region Proposals

    為了訓練RPN,為每個anchor賦一個類別標簽(是否是object)。我們為兩類anchors賦於正值:(1)anchor與ground_truth box有最大的

IoU重疊;(2)IoU重疊超過0.7。 IoU小於0.3則為negative。損失函數定義如下:

 

 

其中i為一個mini batch的一個anchor的索引,pi預測某anchor i是目標的概率,帶星號表示相應的標簽。

       此外,本文采用的bounding-box regression與之前的基於特征圖的方式不同。在fast r-cnn中,bounding-box regression是在任意大小的區域上

,經過pool后的特征上進行的,所有大小的區域上的回歸權重是共享的。在本文中,用於regression的特征在特征圖上有着共同的空間大小。

為了處理不同尺寸,需要學習k個bounding-box regressors,每個regressors對應一個scale和一個aspect ratio,並且k個回歸器不共享權重。

bounding-box regression的理解

     回歸公式如下:

     

     x,y,w,h分別表示窗口中心位置和寬、高。x,xa,x*分別表示預測窗口、anchor窗口和ground truth的坐標,這可以認為是從anchor窗口到ground truth

的bounding-box回歸。

  Optimization

      RPN由FCN實現,可通過end-to-end的BP算法和SGD進行訓練。采用image-centric的采樣方法訓練網絡,每個mini-batch從單張圖像中獲得,包含

正、負anchors。可以將所有的anchors loss放在一起訓練,但這樣會偏向於負anchors(負類鑫)。本文在一張圖上隨機采樣256個anchors來計算一個

mini-batch的損失函數,正、負anchors的比例為1:1.

Sharing Convolutional Features for Region Proposal and Object Detection

      至此我們已經描述了如何訓練一個region proposal generation的網絡,但沒有考慮region-based 的目標檢測CNN將利用這些proposals。采用fast r-cnn

的檢測網絡,接下來將描述一個學習卷積層的算法,這個卷積層被RPN和fast r-cnn共享。

    RPN和fast r-cnn的訓練時獨立的,通過不同的方式來修改它們的卷積層。因此我們需要提出一個技術,考慮在兩個網絡間共享卷積層,而不是獨立的兩個網

絡。注意這不是僅僅簡單定義一個包括RPN和fast r-cnn的網絡,然后用BP算法聯合優化。原因是fast r-cnn依賴於固定大小的object proposals,這是一個不清楚

的先驗,如果學習fast r-cnn同時改變proposals的機制是否收斂。

本文通過交替優化,采用4步訓練算法來學習共享特征:

    第一步,按照上述方式訓練RPN,這個網絡由ImageNet預訓練模式初始化,對region proposal task采用end-to-end微調。

    第二步,使用fast r-cnn訓練獨立的檢測網絡,使用第一步中生成的proposals。它的初始化也是用ImageNet預訓練模式,此時兩個

網絡不共享卷積特征。

   第三步,使用(2)中微調后的fast r-cnn檢測網絡重新初始化RPN網絡,但固定共享卷積層(學習率為0,不更新),只對RPN進行微調(共享卷積層)。

   第四步,保持(3)中共享卷積層固定,由(3)中得到的region proposals微調fast r-cnn中的fc layers,至此形成一個統一的網絡,如下圖所示。

 

RPN和faster r-cnn聯合訓練。

Implementation Details

    我們訓練和測試region proposal和目標檢測網絡在單一尺度的圖像上,re-scale圖像讓短邊為600像素。

    網上關於Faster R-CNN中三種尺度解釋:

    原始尺度:原始輸入的大小,不受任何限制,不影響性能; 

    歸一化尺度:輸入特征提取網絡的大小,在測試時設置,源碼中opts.test_scale=600。anchor在這個尺度上設定,

這個參數和anchor的相對大小決定了想要檢測的目標范圍; 

    網絡輸入尺度:輸入特征檢測網絡的大小,在訓練時設置,源碼中為224×224。

    對於anchors,使用3種尺度(128,256,512),以及3種aspect ratios(1:1,1:2,2:1)。

    清理anchors數目:

    文中提到對於1000×600的一張圖像,大約有20000(~60×40×9)個anchors,忽略超出邊界的anchors,

剩下6000個anchors,利用非極大值抑制去掉重疊區域,剩2000個region proposals用於訓練; 測試時在2000個區域建議中選擇

Top-N(文中為300)個region proposals用於Fast R-CNN檢測。

 文中的三種共享特征網絡的訓練方式?

 (1) 交替訓練

          訓練RPN,得到的region proposals來訓練fast r-cnn進行微調;此時網絡用來初始化RPN網絡,迭代此過程;

(2) 近似聯合訓練

       合並兩個網絡進行訓練。 前向計算的region proposals被固定以訓練fast r-cnn;反向計算到共享卷積層時,RPN

網絡損失和fast r-cnn網絡損失疊加進行優化,但此時把region proposals當作固定值看待,忽視了fast r-cnn一個輸入:

region proposals的導數,則無法更新訓練,所以稱之為近似聯合訓練。

 (3) 聯合訓練

          需要RoI池化層對區域建議可微,需要RoI變形層實現。

 

參考[1]:http://blog.csdn.net/WoPawn/article/details/52223282

      


免責聲明!

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



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