DynamicHead:基於像素級路由機制的動態FPN | NIPS 2020
論文提出了細粒度動態detection head,能夠基於路由機制動態地融合不同FPN層的像素級局部特徵進行更好的特徵表達。從設計的路由空間來看是一個十分耗時的操作,但是作者設計的高效路由器實際計算十分高效。實驗結果來看,細粒度動態detection head可以即插即提點
來源:曉飛的演算法工程筆記 公眾號
論文: Fine-Grained Dynamic Head for Object Detection
Introduction
在目標檢測演算法的研究中,特徵金字塔FPN是十分重要的結構,能夠很好地表達目標的多尺度特徵。近期也有很多FPN接面構的改進研究,比如手工設計的PANet、FPG以及自動搜索的NAS-FPN、Auto-FPN。但上述的改進研究有兩點問題:
- 在訓練時將訓練目標粗略地分配給某個FPN層,並且認為目標區域是不可分割,層間融合也是整層進行。這種策略可能會忽略了目標分散在FPN不同層的細粒度局部特徵,這些局部特徵能夠很好地提高目標的語義資訊。
- detection head的預測結果基於單層FPN特徵,解析度固定, 可能會忽略了重要的小區域特徵。
為了解決上述的問題,論文提出了細粒度動態detection head,能夠基於路由機制動態地融合不同FPN層的像素級局部特徵進行更好的特徵表達。該方法參考了粗粒度的動態網路方法,集中在像素級別進行路由選擇。
Fine-Grained Dynamic Routing Space
FPN-based目標檢測網路通過主幹網路獲取不同解析度特徵,然後通過top-bottom pathway以及橫向連接進行多尺度特徵融合,最後使用簡單的共享detection head對不同解析度的特徵進行結果預測。
細粒度動態detection head的核心在於細粒度動態路由空間(fine-grained dynamic
routing space)的設計,如上圖所示。對於第n層特徵,動態路由空間的深度為D,與FPN的3層特徵相關,分別為n層、n-1層以及n+1層。動態路由空間的基礎為細粒度動態路由器(fine-grained dynamic router),根據狀態選擇各像素的後續路徑,每個像素有3個不同的路徑可供選擇。
Fine-Grained Dynamic Routing Process
給定路由空間以及幾個獨立的節點,使用論文提出的細粒度動態路由器(fine-grained dynamic routers)完成多尺度特徵的融合,主要進行element-wise的相加以及像素級路由路徑的選擇。
Fine-Grained Dynamic Router
給定路由空間節點l,該節點的特徵標記為x^l=\{x_i^l \}^N_{i=1},N=H\times W為像素位置,共有C維,路由節點的候選路徑F=\{f_k^l(\cdot) | k\in \{1, \cdots, K\}
\}根據相鄰FPN層的尺寸定義,K為候選路徑數。每個路徑都有一個空間控制門(spatial gate),空間控制門的輸出為門控因子(gating factor):
\theta_k^l為協助網路的參數,對應第k個控制門,參數是位置共享的。而m_i^{k,l}\in [0, 1]是連續的,允許單個像素的多個後續路徑被激活。在實現時,只取激活門控因子為正數的路徑,所以單節點的多路徑路由輸出為:
Gate Activation Function
門控激活函數的輸出範圍為[0,1],當輸出為0時禁止該路徑。另外,門控激活函數必須是可微的,方便反向傳播的學習。在考慮了其它研究的實現方案之後,論文提出了restricted tanh函數的變種:
\tau為超參數,用於控制$0^+$的梯度值。公式3不僅可導,還解決了restricted tanh在零處梯度不連續的問題。
Routing Path
路由器在每個位置均有3個可選的後續路徑,上下取樣路徑採用圖b的結構進行實現,包含線性取樣操作,而非取樣路徑則使用圖a的結構進行實現。對於空間控制門g_k^l(\cdot)則使用了圖c的輕量級結構進行實現,先通過$3\times 3卷積將輸入轉換為維度為1的特徵,然後通過論文提出的門控激活函數\delta(\cdot)將輸出約束到[0,1],將m^{k,j}進行最大池化後進行量化,非零的均量化為一,輸出掩膜\mathcal{M}^{k,j},最後基於掩膜進行空間稀疏卷積($3\times 3)。
由於激活的路徑數會被約束,池化和量化可以過濾掉大量未被激活的路徑,減少很多計算量。其實這裡最省的是只計算m^{k,j}非零的位置,但考慮非取樣路徑a需要進行兩次稀疏卷積,還是池化一下靠譜點。另外,上下取樣路徑b里的卷積都取樣深度卷積,進一步減少計算量。
Resource Budget
過多的路由路徑會造成過大的計算量,所以需要增加一個懲罰項來引導路由器禁用儘可能多的路徑。定義\mathcal{C}^{k,l}為路徑相關的計算複雜度,則單節點的計算消耗為:
\Omega_i^{k,l}為位置i的感受域,這裡採用最大池化來直接獲取需要進行計算的位置,跟上面的圖c類似。公式4能夠很好的引導減少門控特徵圖m^{k,l}的值,將細粒度動態路由添加到網路時,需增加資源消耗的損失項:
最終完整的網路損失函數為:
Experiment
在FCOS上的對比實驗。
不同網路上的適配。
Conclusion
論文提出了細粒度動態detection head,能夠基於路由機制動態地融合不同FPN層的像素級局部特徵進行更好的特徵表達。從設計的路由空間來看是一個十分耗時的操作,但是作者設計的高效路由器實際計算十分高效。實驗結果來看,細粒度動態detection head可以即插即提點。
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】