Fast R-CNN(RoI)


  Fast R-CNN是一個基於區域的目標檢測算法。Fast R-CNN建立在先前的工作之上,並有效地使用卷積網絡分類目標建議框。與先前的工作相比,使用幾點創新改善了訓練和測試時間並增加了檢測准確率。

2. Fast R-CNN結構和訓練

  圖1展示了Fast R-CNN的結構。該網絡輸入一個完整的圖像和一組目標建議框。首先用卷積和池化來產生一個特征圖。然后,對每一個目標建議框使用RoI(Region of Interest)池化層從特征圖提取一個固定長度的向量。每個特征向量送人兩個兄弟般的全連接層,一個來輸出類的概率,一個輸出四個值。每組的四個值是邊界框相關編碼。

圖1:Fast R-CNN結構。輸入一張圖像和多個RoI到全連接網絡。每個RoI池化成固定尺寸的特征圖,然后通過全連接層映射成一個特征向量。這個網絡對於每個RoI有兩個輸出向量:softmax概率和每個類的邊框回歸偏移。這個結構使用一個多任務損失進行端到端的訓練。

2.1 RoI池化層

  RoI池化層用最大值池化將RoI內的特征轉化成固定空間大小$H×W$(例如,7×7)的特征圖。RoI是一個矩形框,用(r,c,h,w)表示,(r,c)表示左上角,(h,w)表示高度和寬度。

RoI最大池化將$h×w$的RoI分割成$H×W$的格點,每個格點的尺寸大約為$h/H×w/W$,將每個格點最大池化格點的輸出。池化獨立應用到每個特征圖通道,好像標准最大池化一樣。RoI層SPPnets中使用的空間金字塔池化中的簡單的特殊情況。

2.2 從預訓練網絡初始化

  嘗試了3個預訓練的ImageNet網絡,每個都有5個最大池化層和5-13卷積層(4.1節有更多細節)。使用一個預訓練的網路,有三個轉換。

①最后一個最大池化層被RoI池化層取代,並且設置$H$和$W$與網絡的第一個全連接層兼容。

②用兩個兄弟般的層取代網絡的最后全連接層和softmax。

③修改網絡的輸入:一組圖像和這些圖像的RoI

2.3 用於檢測的微調

Multi-task loss. Fast R-CNN有兩個輸出層。第一個輸出每個RoI在$K+1$個類上的離散概率分布。第二個輸出是邊框偏移。

  每個訓練RoI用真值類別$u$和真值邊框回歸目標$v$標簽。在每一個標簽的RoI上用多任務損失$L$聯合訓練分類和邊框回歸:  

$L(p,u,t^u,v)=L_{cls}(p,u)+λ[u≥1]L_{loc}(t^u,v)$,  (1)

  這里$L_{cls}(p,u)=-\rm{log}p_{u}$是真實類別$u$的log損失。

  第二個損失$L_{loc}$定義在真實邊框回歸目標的$(v_{x},v_{y},v_{w},v_{h})$和預測結果$t^u=(t^{u}_{x},t^{u}_{y},t^{u}_{w},t^{u}_{h})$上。當$u≥1$函數$[u≥1]$表示1,否則為0。按照慣例,將背景類標記為$u=0$。沒有真值邊框的背景RoI不參與損失計算。針對邊框回歸,使用下面損失:

$L_{loc}(t^{u},v)=\sum{i\in{\{x,y,w,h\}}}\rm{smooth}_{L_{1}}(t^{u}_{i}-v_{i})$,  (2)

  其中:

$\rm{smooth_{L_{1}}}(x) = \left\{
             \begin{array}{lcl}
             {0.5x^{2}} & if|x|<1 \\
             { |x|-0.5} & otherwise
             \end{array}  
        \right.$  (3)

  $L_{1}$損失比R-CNN和SPPnet中的$L_{2}$更魯棒。當回歸目標沒有沒有邊界時,$L_{2}$損失訓練需要仔細調整學習率來防止梯度爆炸。公式(3)消除了這種敏感。

  公式(1)中的超參數λ控制了兩個任務損失的平衡。將真值回歸目標$v_{i}$歸一化到0均值和單位方差。左右的實驗使用λ=1。

Mini-batch sampling. 在微調過程中,SGD的批量數是$N=2$張圖像,每張圖像64RoI,共$R=128$個RoI。意思是每次訓練只輸入兩張圖像,64個RoI之間共享卷積特征。從與真值框重疊超過0.5的目標建議框中挑出25%的RoI,這些RoI只包含前景目標。其余RoI從目標建議與真值IoU在區間[0.1,0.5)的最大值中采樣。除了數據鏡像外,沒有采用其它數據增強。

Back-propagation through RoI pooling layers. 為清楚起見,假設每個批量中只有一張圖像($N=1$),這不影響結果。

  設$x_{i}\in \mathbb{R}$是RoI池化層的第$i$激活輸入,$y_{rj}$是第$r$個RoI層的第$j$個輸出。RoI池化層計算$y_{rj}=x_{i*(r,j)}$,其中$i*(r,j)=argmax_{i'\in{R(r,j)}}x_{i'}$。$R(r,j)$是在輸出單元$y_{rj}$子窗口上的一組輸入索引,就是格點區域的所有索引。一個$x_{i}$可以被分配幾個不同的輸出$y_{rj}$。

  RoI池化層的反向傳播函數計算每個輸入變量$x_{i}$損失函數的偏導數,如下所示:

$\frac{\partial L}{\partial x_{i}}=\sum_{r}\sum_{j}[i=i*(r,j)]\frac{\partial L}{\partial y_{rj}}$.  (4)

總之,對於每個批量中的RoI的$r$和對於每個池化輸出單元$y_{rj}$,如果$i$是$y_{rj}$最大池化的最大選擇,則加上所有相關的偏導數$\partial L/ \partial y_{rj}$來求得$\frac{\partial L}{\partial x_{i}}$,也就是說,這些$y_{rj}$由相關$x_{i}$貢獻得到,再反過來求$x_{i}$對於$L$的偏導數。

SGD hyper-parameters. 用於softmax分類和邊框回歸的全連接層使用零均值和分別為0.01和0.001的標准差初始化。偏置初始化為0。所有層使用一個全局學習率0.001,並且權值為1倍,偏置為2倍。

2.4 尺度不變性

  探索了兩種實現尺度不變性的方法:(1)通過暴力強迫學習(2)通過圖像金字塔。暴力強迫法是在訓練和測試時用一個預定義的像素尺寸。網絡必須從訓練數據學習尺度不變的目標檢測。

  相比而言,多尺度方法通過一個圖像金字塔給網絡提供尺度不變性。更多細節參考Spatial pyramid pooling in deep convolutional networks for visual recognition.

 


免責聲明!

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



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