FSAF深入地分析FPN層在訓練時的選擇問題,以超簡單的anchor-free分支形式嵌入原網路,幾乎對速度沒有影響,可更準確的選擇最優的FPN層,帶來不錯的精度提升
來源:曉飛的演算法工程筆記 公眾號
論文: Feature Selective Anchor-Free Module for Single-Shot Object Detection
Introduction
目標檢測的首要問題就是尺寸變化,許多演算法使用FPN以及anchor box來解決此問題。在正樣本判斷上面,一般先根據目標的尺寸決定預測用的FPN層,越大的目標則使用更高的FPN層,然後根據目標與anchor box的IoU進一步判斷,但這樣的設計會帶來兩個限制:拍腦袋式的特徵選擇以及基於IoU的anchor取樣。
如圖2所示,60x60選擇中間的anchor,而50x50以及40x40的則選擇最小的anchor,anchor的選擇都是人們根據經驗制定的規則,這在某些場景下可能不是最優的選擇。
為了解決上述的問題,論文提出了簡單且高效的特徵選擇方法FSAF(feature selective anchor-free),能夠在每輪訓練中選擇最優的層進行優化。如圖3所示,FSAF為FPN每層新增anchor-free分支,包含分類與迴歸,在訓練時,根據anchor-free分支的預測結果選擇最合適的FPN層用於訓練,最終的網路輸出可同時綜合FSAF的anchor-free分支結果以及原網路的預測結果。
Network Architecture
FSAF的網路結果非常簡單,如圖4所示。在原有的網路結構上,FSAF為FPN每層引入兩個額外的卷積層,分別用於預測anchor-free的分類以及迴歸結果。這樣,在共用特徵的情況下,anchor-free和anchor-based的方法可進行聯合預測。
Ground-truth and Loss
對於目標$b=[x,y,w,h]$,在訓練時可對映到任意的FPN層$P_l$,對映區域為$bl_p=[xl_p, y^l_p, w^l_p, hl_p]$。一般而言,$bl_p=b/2l$。定義有效邊界$bl_e=[x^l_e, y^l_e, w^l_e, hl_e]$和忽略邊界$bl_i=[x^l_i, y^l_i, w^l_i, h^l_i]$,可用於定義特徵圖中的正樣本區域、忽略區域以及負樣本區域。有效邊界和忽略邊界均與對映結果成等比關係,比例分別為$\epsilon_e=0.2$和$\epsilon_i=0.5$,最終的分類損失為所有正負樣本的損失值之和除以正樣本點數。
Classification Output
分類結果包含$K$維,目標主要設定對應維度,樣本定義分以下3種情況:
- 有效邊界內的區域為正樣本點。
- 忽略邊界到有效邊界的區域不參與訓練。
- 忽略邊界對映到相鄰的特徵金字塔層中,對映的邊界內的區域不參與訓練
- 其餘區域為負樣本點。
分類的訓練採用focal loss,$\alpha=0.25$,$\gamma=2.0$,完整的分類損失取所有正負區域的損失值之和除以有效區域點數。
Box Regression Output
迴歸結果輸出為分類無關的4個偏移值維度,僅迴歸有效區域內的點。對於有效區域位置$(i,j)$,將對映目標表示為$dl_{i,j}=[dl_{t_{i,j}}, d^l_{l_{i,j}}, d^l_{b_{i,j}}, dl_{r_{i,j}}]$,分別為當前位置到$bl_p$的邊界的距離,對應的該位置上的4維向量為$d^l_{i,j}/S$,$S=4.0$為歸一化常量。迴歸的訓練採用IoU損失,完整的anchor-free分支的損失取所有有效區域的損失值的均值。
Online Feature Selection
anchor-free的設計允許我們使用任意的FPN層$P_l$進行訓練,為了找到最優的FPN層,FSAF模組需要計算FPN每層對目標的預測效果。對於分類與迴歸,分別計算各層有效區域的focal loss損失以及IoU loss損失:
在得到各層的結果後,取損失值最小的層作為當輪訓練的FPN層:
Joint Inference and Training
Inference
由於FSAF對原網路的改動很少,在推理時,稍微過濾下anchor-free和anchor-based分支的結果,然後合併進行NMS。
Optimization
完整的損失函式綜合anchor-based分支以及anchor-free分支,$L=L{ab}+\lambda(L{af_{cls}}+L^{af_{reg}})$
Experiments
各種結構以及FPN層選擇方法的對比實驗。
精度與推理速度對比。
與SOTA方法對比。
Conclusion
FSAF深入地分析FPN層在訓練時的選擇問題,以超簡單的anchor-free分支形式嵌入原網路,幾乎對速度沒有影響,可更準確的選擇最優的FPN層,帶來不錯的精度提升。需要注意的是,雖然拋棄以往硬性的選擇方法,但實際上依然存在一些人為的設定,比如有效區域的定義,所以該方法還不是最完美的。
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】