天天看點

Fast RCNN筆記Fast RCNN筆記

2018 November 27 fast-rcnn

Fast RCNN筆記

除了Proposal階段,Fast RCNN基本實作了end-to-end的CNN對象檢測模型

Fast RCNN筆記Fast RCNN筆記

1. R-CNN、SPP-net的缺點

  1. R-CNN和SPP-Net的訓練過程類似,分多個階段進行,實作過程較複雜。這兩種方法首先選用Selective Search方法提取proposals,然後用CNN實作特征提取,最後基于SVMs算法訓練分類器,在此基礎上還可以進一步學習檢測目标的boulding box。
  2. 訓練時間和空間開銷大。SPP-Net在特征提取階段隻需要對整圖做一遍前向CNN計算,然後通過空間映射方式計算得到每一個proposal相應的CNN特征;差別于前者,RCNN在特征提取階段對每一個proposal均需要做一遍前向CNN計算,考慮到proposal數量較多(~2000個),是以RCNN特征提取的時間成本很高。R-CNN和SPP-Net用于訓練SVMs分類器的特征需要提前儲存在磁盤,考慮到2000個proposal的CNN特征總量還是比較大,是以造成空間代價較高。
  3. R-CNN檢測速度很慢。RCNN在特征提取階段對每一個proposal均需要做一遍前向CNN計算,如果用VGG進行特征提取,處理一幅圖像的所有proposal需要47s;
  4. 特征提取CNN的訓練和SVMs分類器的訓練在時間上是先後順序,兩者的訓練方式獨立,是以SVMs的訓練Loss無法更新SPP-Layer之前的卷積層參數,是以即使采用更深的CNN網絡進行特征提取,也無法保證SVMs分類器的準确率一定能夠提升。

2. Fast-RCNN 改進

  1. 訓練的時候,pipeline是隔離的,先提proposal,然後CNN提取特征,之後用SVM分類器,最後再做bbox regression。Fast RCN實作了end-to-end的joint training(提proposal階段除外);
  2. 訓練時間和空間開銷大。RCNN中ROI-centric的運算開銷大,是以Fast RCN用了image-centric的訓練方式來通過卷積的share特性來降低運算開銷;RCNN提取特征給SVM訓練時候需要中間要大量的磁盤空間存放特征,Fast RCN去掉了SVM這一步,所有的特征都暫存在顯存中,就不需要額外的磁盤空間了;
  3. 測試時間開銷大。依然是因為ROI-centric的原因(whole image as input->ss region映射),這點SPP-Net已經改進,Fast RCN進一步通過single scale(pooling->spp just for one scale) testing和SVD(降維)分解全連接配接來提速。

3. 網絡架構

3.1 訓練過程

  1. selective search在一張圖檔中得到約2k個建議視窗(Region proposal);
  2. 将整張圖檔輸入CNN,進行特征提取;
  3. 把建議視窗映射到CNN的最後一層卷積feature map上;
  4. 通過一個Rol pooling layer(SSP layer的特殊情況)使每個建議視窗生成固定尺寸的feature map;
  5. 利用Softmax Loss(探測分類機率) 和Smooth L1 Loss(探測邊框回歸)對分類機率和邊框回歸(Bounding box regression)聯合訓練(測試時候,在4之後做一個NMS);
Fast RCNN筆記Fast RCNN筆記
Fast RCNN筆記Fast RCNN筆記

3.2 RoI pooling layer

這是SPP pooling層的一個簡化版,隻有一級“金字塔”,輸入是N個特征映射和一組R個RoI,R»N。N個特征映射來自于最後一個卷積層,每個特征映射都是H x W x C的大小。 每個RoI是一個元組(n, r, c, h, w),n是特征映射的索引,n∈{0, … ,N-1},(r, c)是RoI左上角的坐标,(h, w)是高與寬。輸出是max-pool過的特征映射,H’ x W’ x C的大小,H’≤H,W’≤W。對于RoI,bin-size ~ h/H’ x w/W’,這樣就有H’W’個輸出bin,bin的大小是自适應的,取決于RoI的大小。

3.2.1 作用

  • 将image中的rol定位到feature map中對應patch
  • 用一個單層的SPP layer将這個feature map patch下采樣為大小固定的feature再傳入全連接配接層。即RoI pooling layer來統一到相同的大小-> (fc)feature vector 即->提取一個固定次元的特征表示。

3.2.2 Roi Pooling Test Forward

Roi_pool層将每個候選區域均勻分成M×N塊,對每塊進行max pooling。将特征圖上大小不一的候選區域轉變為大小統一的資料,送入下一層。

Fast RCNN筆記Fast RCNN筆記

3.2.3 Roi Pooling Training Backward

首先考慮普通max pooling層。設 $x_{i}$ 為輸入層的節點,$y_{j}$ 為輸出層的節點。

$$\frac{\partial L}{\partial x_{i}} =\begin{cases} 0 & \delta \left ( i, j \right )= \text { false }\\ \frac{\partial L}{\partial y_{j}} & \delta \left ( i, j \right )= \text { true } \end{cases}$$

其中判決函數 $\delta \left ( i, j \right )$ 表示 i 節點是否被 j 節點選為最大值輸出。不被選中有兩種可能:$x_{i}$ 不在 $y_{j}$ 範圍内,或者 $x_{i}$ 不是最大值。

對于roi max pooling,一個輸入節點可能和多個輸出節點相連。設 $x_{i}$ 為輸入層的節點,$y_{rj}$ 為第 r 個候選區域的第 j 個輸出節點

Fast RCNN筆記Fast RCNN筆記

判決函數 $\delta \left ( i, r,j \right )$ 表示 i 節點是否被候選區域 r 的第 j 個節點選為最大值輸出。代價對于 $x_{i}$ 的梯度等于所有相關的後一層梯度之和。

4. 訓練過程

4.1 Pre-trained

用了3個預訓練的ImageNet網絡(CaffeNet/VGG_CNN_M_1024/VGG16)。預訓練的網絡初始化Fast RCNN要經過三次變形:

  1. 最後一個max pooling層替換為RoI pooling層,設定H’和W’與第一個全連接配接層相容。(SPPnet for one scale -> arbitrary input image size )
  2. 最後一個全連接配接層和softmax(原本是1000個類)-> 替換為softmax的對K+1個類别的分類層,和bounding box 回歸層。 (Cls and Det at same time)
  3. 輸入修改為兩種資料:一組N個圖形,R個RoI,batch size和ROI數、圖像分辨率都是可變的。

4.2 Fine-tuning

4.2.1 Multi-task loss

兩個輸出層,一個對每個RoI輸出離散機率分布:

一個輸出bounding box回歸的位移:

k 表示類别的索引,前兩個參數是指相對于 object proposal 尺度不變的平移,後兩個參數是指對數空間中相對于 object proposal 的高與寬。把這兩個輸出的損失寫到一起:

$k^{\ast}$ 是真實類别,式中第一項是分類損失,第二項是定位損失,L 由 R 個輸出取均值而來.

  1. 對于分類 loss,是一個 N+1 路的 softmax 輸出,其中的N是類别個數,1是背景。SVM → softmax
  2. 對于回歸 loss,是一個 4xN 路輸出的 regressor,也就是說對于每個類别都會訓練一個單獨的 regressor,這裡 regressor 的 loss 不是 L2 的,而是一個平滑的 L1,形式如下:

in which

$$\text{smooth}_{L_{1}}\left (x \right )= \begin{cases} 0.5x^{2} & \text{ if } \left | x \right | < 1 \\ \left | x \right | -0.5 & \text{ otherwise } \end{cases}$$

4.2.2 Mini-batch sampling

  • each mini batch:sampling 64 Rols from eatch image
  • images num:N = 2
  • Rols num:R = 128
  • data argumentation: flipped with probability 0.5

R個候選框的構成方式如下:

類别 比例 方式
前景 25% 與某個真值重疊在 [0.5,1] 的候選框
背景 75% 與真值重疊的最大值在 [0.1,0.5) 的候選框

4.2.3 全連接配接層提速

分類和位置調整都是通過全連接配接層(fc)實作的,設前一級資料為 x 後一級為 y,全連接配接層參數為 W,尺寸 $u \times v$。

一次前向傳播(forward)即為:

計算複雜度為 $u \times v$ 。

将進行SVD分解,并用前t個特征值近似, 原來的前向傳播分解成兩步:

計算複雜度變為 $u \times t + v \times t$。

在實作時,相當于把一個全連接配接層拆分成兩個,中間以一個低維資料相連。

Fast RCNN筆記Fast RCNN筆記

5. 實驗結論

  • 多任務Loss學習方式可以提高算法準确率
  • 多尺度圖像訓練Fast-R-CNN與單尺度圖像訓練相比隻能提升微小的mAP,但是時間成本卻增加了很多。是以,綜合考慮訓練時間和mAP,作者建議直接用一種尺度的圖像訓練Fast-R-CNN.
  • 訓練圖像越多,模型準确率也會越高
  • 網絡直接輸出各類機率(softmax),比SVM分類器性能略好
  • 不是說Proposal提取的越多效果會越好,提的太多反而會導緻mAP下降