FSAF-Feature Selective Anchor-Free

《Feature Selective Anchor-Free Module for Single-Shot Object Detection》是由Carnegie Mellon大學Chenchen Zhu等提出的自動選擇合適的尺度以及無anchor的目標檢測方法。實驗對比圖如下
在這裏插入圖片描述
從上圖可以看出,加了FSAF模塊的RetinaNet,能把一些長寬比比較懸殊的目標檢測出來。爲什麼加入了FSAF模塊可以有這種效果?首先:
1、對比下加入FSAF模塊前後的RetinaNet網絡的結構:
在這裏插入圖片描述
在這裏插入圖片描述
相對於原始的RetinaNet網絡,FSAF模塊只是兩個卷積層,一個嵌入到分類支路中,另一個嵌入到迴歸支路中。
爲什麼在兩個支路中分別嵌入一個卷積層就可以實現特徵選擇,從而達到良好的檢測效果?
2、損失函數
作者首先定義了一些變量:
1)標籤爲kk的實例的bounding box爲b=[x,y,w,h]b=[x, y, w, h](x,y)(x, y)是矩形的中心,w,hw, h分別是矩形的寬和高。
2)其在PlP_l特徵層上的box座標爲bpl=[xpl,ypl,wpl,hpl]b_p^l = [x_p^l, y_p^l, w_p^l, h_p^l],即其座標可表示爲bpl=b/2lb_p^l = b / 2^l
3)有效box(effective box):bel=[xel,yel,wel,hel]b_e^l = [x_e^l, y_e^l, w_e^l, h_e^l];可忽略box(ignoring box):bil=[xil,yil,wil,hil]b_i^l = [x_i^l, y_i^l, w_i^l, h_i^l]。這兩個box大小分別和bplb_p^lϵe\epsilon_eϵi\epsilon_i倍的關係。即xel=xpl,yel=ypl,wel=ϵewpl,hel=ϵehplx_e^l=x_p^l, y_e^l=y_p^l, w_e^l=\epsilon_ew_p^l, h_e^l=\epsilon_eh_p^lxil=xpl,yil=ypl,wil=ϵiwpl,hil=ϵihplx_i^l=x_p^l, y_i^l=y_p^l, w_i^l=\epsilon_iw_p^l, h_i^l=\epsilon_ih_p^l
文章中的ϵe=0.2,ϵi=0.5\epsilon_e=0.2, \epsilon_i=0.5

定義完這些參數,就可計算分類和迴歸的輸出:
1)分類輸出
分類輸出層輸出KK個maps,每個map對應一個類。一個樣本以三種方式影響第kk層特徵。第一,有效box區域:belb_e^l,這是一個正樣本區域;第二,除去有效box的可忽略box區域:(bilbel)(b_i^l-b_e^l),這部分區域的梯度不傳回去;第三,相鄰特徵層的可忽略boxes(bil1,bil+1)(b_i^{l-1}, b_i^{l+1})也是可忽略的。其餘的區域都是負樣本區域。如果在一個特徵層上,有兩個相交的有效boxes,則較小的樣本有較高的優先級。
loss計算採用α=0.25,γ=2.0\alpha=0.25, \gamma=2.0的Focal loss。
2)迴歸輸出
迴歸支路只計算有效區域belb_e^l內的點。對於區域內的每個點(i,j)(i, j),其對應的projected box是一個四維矢量di,jl=[dti,jl,dli,jl,dbi,jl,dri,jl]\bold{d}_{i,j}^l=[d_{t_{i,j}}^l,d_{l_{i,j}}^l,d_{b_{i,j}}^l,d_{r_{i,j}}^l],其各分量表示當前點(i,j)(i, j)bplb_p^l上、左、下、右邊界的距離。用SSdi,jl\bold{d}_{i,j}^l進行歸一化,即每個點(i,j)(i, j)的矢量爲di,jl/S\bold{d}_{i,j}^l / SSS取值爲4。有效區域之外的區域都忽略。Loss採用IoU loss。
在這裏插入圖片描述
3)前向輸出
對於點(i,j)(i, j),其前向網絡輸出爲[o^ti,j,o^li,j,o^bi,j,o^ri,j][\widehat{o}_{t_{i,j}}, \widehat{o}_{l_{i,j}}, \widehat{o}_{b_{i,j}}, \widehat{o}_{r_{i,j}}],則預測的距各邊的距離爲[So^ti,j,So^li,j,So^bi,j,So^ri,j][S\widehat{o}_{t_{i,j}}, S\widehat{o}_{l_{i,j}}, S\widehat{o}_{b_{i,j}}, S\widehat{o}_{r_{i,j}}]。則輸出的左上角和右下角分別爲(iSo^ti,j,jSo^li,j)(i-S\widehat{o}_{t_{i,j}}, j-S\widehat{o}_{l_{i,j}})(i+So^bi,j,j+So^ri,j)(i+S\widehat{o}_{b_{i,j}}, j+S\widehat{o}_{r_{i,j}})。將得到的點放大2l2^l倍就可以得到輸出box在原圖像上的位置。
輸出box的置信度和類別由最大score以及對應的類別決定。
那如何選擇合適的輸出層得到結果呢?

3、在線特徵選擇
自動選擇合適的特徵層得到結果。
在訓練階段:設有一個樣本II,其在PlP_l層的分類損失和box迴歸損失分別爲LFLI(l)L_{FL}^I(l)LIoUI(l)L_{IoU}^I(l)。選擇最小損失的層爲最優的層:
l=argminlLFLI(l)+LIoUI(l)l^* = arg \underset{l}{min} L_{FL}^I(l) + L_{IoU}^I(l)
在訓練時,將ll^*層的損失傳遞回去,進行學習。
在推理時,無需選擇哪個層,只需要將置信度最高的層的預測結果輸出即可。

4、結合使用去推理和訓練
在使用中,anchor-based和FSAF模塊時同時使用的
推理階段
在FSAF模塊中,每一層選取置信度最高的1k個輸出,得到輸出,與anchor-based模塊的輸出合併,然後採用NMS得到最終的輸出結果
訓練優化
整個網絡的損失是FSAF和anchor-based的加權和。設anchor-based的損失爲LabL^{ab},anchor-free模塊的分類和迴歸損失分別爲LclsafL_{cls}^{af}LregafL_{reg}^{af},則網絡的總損失爲L=Lab+λ(Lclsaf+Lregaf)L = L^{ab} + \lambda(L_{cls}^{af} + L_{reg}^{af}),其中λ\lambda是anchor-based分支的權重,本章中的設置爲λ=0.5\lambda=0.5
初始化
具體參照論文

從上面對FSAF模塊分析可知,FSAF模塊在目標檢測時,沒有像anchor-based方法那樣對box長寬比有限制,從理論上看,任何長寬比都可以檢測到,因此在第一張圖上,加了FSAF模塊的RetinaNet網絡可以檢測到細長的目標

總結
這篇文章提出了FSAF的特徵選擇無anchor模塊,應用於多尺度特徵輸出網絡。在訓練和推理階段,同時使用anchor-based和anchor-free兩個分支。FSAF模塊其實一個卷積層,在訓練中,這個模塊學會選擇合適的尺度,在推理階段,可自動輸出合理的結果。

effective box, ignoring box設置的動機是什麼?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章