Faster R-CNN由一個推薦區域的全卷積網絡和Fast R-CNN組成, Fast R-CNN使用推薦區域。整個網絡的結構如下:
1.1 區域推薦網絡
輸入是一張圖片(任意大小), 輸出是目標推薦矩形框的集合,以及相應的目標打分。網絡的前面使用了一個基本的卷積層集合來提取特征(ZF或VGG-16)。這個基本層同時被RPN網絡和Fast R-CNN使用。
在基本層之后,文中使用一個n*n的滑動窗口在最后一層特征圖卷積,在每一個窗口位置,得到一個256維或512維的特征。這個特征隨后被送進兩個全連接層,分別是box-regression layer和box-classification layer。
上段中的迷你網絡如下圖所示。由於迷你網絡是通過滑動窗口的方式,所以得到的特征是共享位置信息的,於是box-regression和box-classification層的全連是通過1×1的卷積實現。
1.1.1 Anchors
在滑動窗口的每個位置,會預測多個推薦區域,數量記為K(文中為9)。reg層有4K個輸出(編碼K個方框的坐標),cls層有2K個輸出(預測目標或非目標的概率)。 這K個推薦區域被稱為anchors。每個anchor都在滑動窗口的中心,並有相應的尺度大小和長寬比例。文中采用了三種尺度和三種長寬比,因此K為9。在這層卷積中,padding為1, stride為1, 所以總共會產生W*H(特征圖的大小)個anchors。
1.1.2 Anchors的變換不變性(ranslation-Invariant)
變換不變性是說,anchors和根據anchors計算推薦區域的函數是對圖像的變換不變的。就是說,如果變換了圖像中的一個對象,那么推薦的區域也是相應變換的,同樣的函數可以預測任何位置的一個推薦區域。我的理解是針對圖像的平移縮放,anchors照樣能檢出對應的區域。這個性質是與文中提到的MultiBox方法使用k-means生成anchors相對的,因為k-means聚類方法是依賴於初始點的選取的,所以沒有變換不變性。
1.1.3 多尺度Anchors 作為回歸引用(Regression References)
有兩種多尺度預測方式。一種是圖像/特征金字塔,圖像在多個尺度進行resize,卷積特征在每個尺度的圖像上進行計算,比較耗費時間。另一種在特征圖上使用多尺度的滑動窗口,這種方法更為高效。
1.1.4 損失函數
為了訓練RPN,文中 對每個anchor賦予二值(是目標或非目標)類標簽。對兩種anchors賦予正標簽:1)和真值框有最高交並比的anchor/anchors;2)和任何真值框的IoU高於0.7。對和所有真值框IoU都低於0.3的anchor賦予負標簽。其他的anchors不作為訓練目標。損失函數如下:
i是一個mini-batch中anchor的序號,pi是anchor i被預測為目標的概率。真值標簽pi*是1, 如果anchor賦予了正標簽,pi*是0, 如果anchor賦予了負標簽。ti是預測的bounding box的4個參數坐標向量,ti*是正anchor的ground-truth box。Lcls是兩類的log損失。Lreg(ti, ti*) = R(ti - ti*),R是smooth L1函數(在(2)式中定義)。pi*Lreg只針對正anchors(pi*=1)。cls和reg層分別輸出{pi}和{ti}。Ncls(=256)是mini-batch的大小, Nreg是anchor位置的數目(Nreg~2400),默認設置λ=10,來使兩項損失權重大致相等。
上式中x,y,w,h表示box的中心坐標和寬度、高度。變量x, xa, x*分別表示預測框、anchor框、真值框。
1.1.5 訓練RPN網絡
每個mini-batch從單個圖像中的正負anchors產生。文中正負anchor的比例為1:1。如果正樣本數少於128,則用負樣本填充。
1.2 RPN和Fast R-CNN共享特征
RPN和Fast R-CNN單獨訓練會以不同方式修改卷積層。文中介紹了三種方式共享卷積層。
(i)交替訓練。首先訓練RPN,使用proposals訓練Fast R-CNN。網絡使用Fast R-CNN微調,然后用來初始化RPN,迭代這個過程。
(ii) 近似聯合訓練。在每次SGD迭代時,前饋計算生成區域推薦,看作訓練Fast R-CNN檢測器的預計算推薦。反饋傳播中共享層傳播RPN和Fast R-CNN結合的損失。這種方式忽略了關於推薦框坐標的導數。
(iii) 非近似聯合訓練。Fast R-CNN中的 RoI pooling層接收卷積特征和預測的bounding boxes作為輸入,這時反向傳播會涉及到box corrdinates.這時需要RoI poling層關於box coordinates是可微的。
1.2.1 4-步交替訓練
第一步,訓練RPN,用預訓練的ImageNet模型初始化,端到端微調區域推薦任務。第二步,通過Fast R-CNN訓練一個單獨的檢測網絡,從第一步的模型中產生推薦框。這個網絡也用ImageNet模型初始化。這時候兩個網絡不共享卷積層。第三步,使用檢測網絡初始化RPN訓練,固定了共享卷積層,只微調獨屬於RPN的層。現在兩個網絡共享卷積層。第四步,使卷積層固定,微調獨屬於Fast R-CNN的層。這樣,兩個網絡共享了卷基層,形成了一個統一網絡。
1.3 實現細節
訓練時,會將與邊界有交叉的anchors刪除,否則會難以收斂。測試時,僅僅將與邊界交叉的anchors切到邊界即可。