1. 程式人生 > >Fast R-CNN(RoI)簡介

Fast R-CNN(RoI)簡介

fas 兩張 The 獨立 gin 意思 需要 完整 鏡像

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

2. Fast R-CNN結構和訓練

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

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}} &\text{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(i,j)$是在輸出單元$y_{rj}$最大池化的子窗口上的輸入索引組。一個$x_{i}$可以被分配幾個不同的輸出$y_{rj}$。

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

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

Fast R-CNN(RoI)簡介