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