Fast R-CNN中的邊框迴歸

前面對R-CNN系的目標檢測方法進行了個總結,其中對目標的定位使用了邊框迴歸,當時對這部份內容不是很理解,這裏單獨學習下。網絡

R-CNN中最後的邊框迴歸層,以候選區域(Region proposal)爲輸入,來對Region proposal中包含的目標進行准將的定位。可是,這個輸入的候選區域一般不會正確的包含目標區域,以下圖:
app

綠色邊框是飛機的Ground Truth邊框,綠色的是Region proposal邊框,雖然Region proposal中包含了目標飛機,可是其定位卻不是很準確,這就須要對候選區域的邊框進行修正,調整其位置和大小,以使其可以更爲接近綠色的Ground Truth邊框。函數

邊框迴歸的方法

不管是Ground Truth邊框仍是Region proposal邊框,能夠使用一個四元組\((x,y,w,h)\)來表示。其中,\((x,y)\)表示邊框的中心位置,\((w,h)\)表示邊框的寬和高。
在邊框迴歸時,實際就是找到一種變換,使修正的後的Region proposal邊框位置和Ground Truth邊框儘量的接近,公式表示以下:
\[ f(P_x,P_y,P_w,P_h) \approx (G_x,G_y,G_w,G_h) \]
其中,\((P_x,P_y,P_w,P_h)\)輸入的候選區域的邊框,\((G_x,G_y,G_w,G_h)\)是Ground Truth邊框。學習

那麼這種變換\(f\)怎麼進行呢?spa

觀察邊框的四元組表示\((x,y)\)表示中心位置,對於位置的修正一般使用平移;\((w,h)\)表示邊框的寬和高,則能夠使用縮放進行修正。也就是對邊框的迴歸修正,設計

  • 對邊框的中心位置進行平移\((\Delta x,\Delta y)\)
    \[ \begin{align*} \Delta x &= P_w d_x(P) \\ \Delta y &= P_h d_y(P) \end{align*} \]
    則修正的中心位置就是
    \[ \begin{align*} \hat{G_x} &= P_w d_x(P) + P_x \\ \hat{G_y} &= P_h d_y(P) + P_y \end{align*} \]blog

  • 對邊框的寬和高進行縮放\((S_w,S_h)\),
    \[ \begin{align*} S_w &= exp(d_w(P)) \\ S_h &= exp(d_h(P)) \end{align*} \]
    修正後的邊框的寬和高爲
    \[ \begin{align*} \hat{G_w} &= P_w exp(d_w(P)) \\ \hat{G_h} &= P_h exp(d_h(P)) \end{align*} \]io

修正後的邊框\((\hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h} )\)要近似等於Ground Truth的邊框。ast

經過上述公式能夠知道,邊框迴歸實際上就是學習\(d_x(P),d_y(P),d_w(P),d_h(P)\)這4個變換。在邊框迴歸的全鏈接層,輸入的是候選區域的特徵信息\(X\)以及其邊框信息\(P\),要學習的是全鏈接層的權值矩陣\(W\),也就說迴歸的全鏈接層就實現了上述變換,輸出的是\(d_x(P),d_y(P),d_w(P),d_h(P)\),通過上述公式的能夠獲得平移和縮放\((\Delta x,\Delta y,S_w,S_h)\)。 對候選區域的邊框進行該平移和縮放獲得的邊框儘量的和Ground Truth相近。class

學習獲得的\(d_x(P),d_y(P),d_w(P),d_h(P)\)經過數碼的公式能夠很容易獲得\((\Delta x,\Delta y,S_w,S_h)\),也能夠說學習獲得的是\((\Delta x,\Delta y,S_w,S_h)\)。 這二者沒有區別,不用作區分。 可是在計算預測邊框位置的時候,須要注意。

損失函數

R-CNN使用一個全鏈接網絡實現邊框的迴歸,

  • 其輸入的是候選區域的特徵及其邊框\((P_x,P_y,P_w,P_h)\)
  • 輸出的該候選框要進行的平移和縮放\((\Delta x,\Delta y,S_w,S_h)\)
  • 要學習的是權值矩陣\(W\),以使候選框進行\((\Delta x,\Delta y,S_w,S_h)\)變換後,儘量和Ground Truth接近。

有了以上認識,來看下損失函數的設計
\[ L(p,u,t^u,v) = L_{cls}(p,u) + \lambda [u \ge 1]L_{Ioc}(t^u,v) \]
其中,\(L_{cls}(p,u)\)是分類的損失函數,\(p_u\)是class u的真實分類的機率。這裏,約定\(u = 0\)表示背景,不參與邊框迴歸的損失計算。上面是Fast R-CNN將分類的損失和邊框迴歸的損失放到了一塊兒,這裏這關注邊框迴歸的損失
\[ \begin{align*} L_{Ioc}(t^u,v) &= \sum_{i \in {x,y,w,h}}smooth_{L_1}(t_i^u - v) \end{align*} \]
其中,\(u\)表示類別,\(t^u\)表示預測邊框的偏移量(也就是預測邊框進行\(t^u\)偏移後,可以和真實邊框最接近),\(v\)表示預測邊框和實際邊框之間真正的偏移量。
也就是\(t^u = (\Delta x,\Delta y,S_w,S_h)\)爲學習獲得的偏移量,而\(v\)則是輸入的候選區域的邊框和Ground Truth的真正偏移。

訓練樣本偏移\(v\)的構造

咱們使用下面的公式描述了邊框修正的過程
\[ \begin{align*} \hat{G_x} &= \Delta x + P_x \\ \hat{G_y} &= \Delta y + P_y \\ \hat{G_w} &= P_w S_w ,S_w = exp(d_w(P))\\ \hat{G_h} &= P_h S_h,S_h = exp(d_h(P)) \end{align*} \]
\(P\)爲輸入的邊框,\(\hat{G}\)爲修正後的邊框,修正使用的平移和縮放爲\((\Delta x,\Delta y,S_w,S_h)\)。經過上述的公司,就能夠獲得訓練樣本\(P = (P_x,P_y,P_w,P_h)\)相對於Ground Truth\(G = (G_x,G_y,G_w,G_h)\)邊框的真實偏移量\(v\)
\[ \begin{align*} v_x &= (G_x - P_x) / P_w \\ v_y &= (G_y - P_y) / P_h \\ v_w &= log(G_w / P_w) \\ v_h &=log(G_h / P_h) \end{align*} \]

偏移量的構造

邊框迴歸的偏移量使以下公式表示
\[ \begin{align*} \Delta x &= P_w d_x(P) \\ \Delta y &= P_h d_y(P) \\ S_w &= exp(d_w(P)) \\ S_h &= exp(d_h(P)) \end{align*} \]

從上面公式可知,從邊框迴歸的學習獲得的\(d_x(P),d_y(P),d_w(P),d_h(P)\)並無直接用於平移和縮放,而是加了一步處理:對於平移,添加了比例寬高比例因子;寬和高的縮放,使用其比例的\(log\)形式。

對於中心點平移,學習到的值須要添加寬和高的因子。這是因爲,CNN具備尺度不變性,對於不一樣尺度的同一個目標,在最後的特徵輸出層學習到的特徵是相同。以下圖

兩個不一樣尺度的人,CNN提取的特徵分別爲\(\sigma_1,\sigma_2\),這兩個特徵應該是相同的。 假如邊框迴歸學習到的映射爲\(f\),且\(f(\sigma)\)學習到的量。 以\(x\)爲例,\(x1,x2\)分別爲兩我的的Ground Truth,\(P_{1x},P_{2x}\)爲兩個候選區域的\(x\)座標。假如,\(f(\sigma)\)直接表示平移的差值,則有\(x_1 - P_{1x} = f(\sigma_1),x2-P_{2x}=f(\sigma_2)\)。而\(\sigma_1,\sigma_2\),這兩個特徵是相同的,則有\(f(\sigma_1) = f(\sigma_2)\)。故有\(x_1 - P_{1x} = x2-P_{2x}\)。從,上圖看,這兩個不一樣尺度的人的平移量,顯然是不相同的。 因此,將學習到的量做爲座標偏移顯然是不可行的,R-CNN中給其添加了個尺度因子,也就是目標的寬和高。 以下:
\[ f(\sigma_1) = x_1 - P_{1w}P_{1x} \\ f(\sigma_2) = x_2 - P_{2w}P_{2x} \]

尺度(寬和高)的縮放,取其\(log\)形式。
須要學習獲得寬和高的縮放因子,就須要將學習到的值限制爲大於0,這裏就取其\(exp(d_w(P)\),來保證縮放因子都大於0.

總結

邊框迴歸輸入的是CNN學習到的候選區域的特徵,以及候選區域的邊框信息\((x,y,w,y)\)。經過學習獲得映射\(d_x(P),d_y(P),d_w(P),d_h(P)\)\(P_wd_x(P),P_hd_y(P)\)添加尺度因子後,做爲座標的平移;\(exp(d_w(P)),exp(d_h(P))\)取做爲寬和高的縮放。

相關文章
相關標籤/搜索