1. 程式人生 > 其它 >【CVPR2021】Decoupled dynamic filter networks

【CVPR2021】Decoupled dynamic filter networks

論文:https://thefoxofsky.github.io/files/ddf.pdf
程式碼:https://github.com/thefoxofsky/ddfnet
主頁:https://thefoxofsky.github.io/project_pages/ddf

先從論文首頁的圖說起。第一行為普通靜態卷積,對於道路、車輛、建築使用相同的卷積核,這樣會導致一個問題:sub-optimal feature learning。第二行為動態卷積,每一個畫素都使用不同的卷積核,道路、車輛、建築使用的卷積核就不一樣了,有助於特徵學習。但是會引入一個新的問題:引數量大大增加。

可以看出,動態卷積的引數量從普通靜態卷積的 (\(c \times c \times k \times k\)

) 提升為 (\(c \times c \times k \times k \times h \times w\) ),引數量顯著增加,計算複雜。為了降低計算量,作者提出瞭解耦的思路,把 (\(c \times h \times w\)) 分解成 (\(h \times w + c\)),即先計算空間位置的動態卷積,再計算通道上的動態卷積。

如圖所示,包含兩個步驟:

  • 在 spatial 維度上,首先用 1x1 的卷積將 channel 數變成 \(k^2\),reshape後,就是每個空間位置上的卷積核,引數量是 \(k\times k \times h \times w\)
  • 在 channel 維度上,通過 GAP + SE 操作,每個 channel 得到一個 \(k^2\)
    向量,即每個 channel 分配一個卷積核,引數量是 $k \times k \times c $。

好的,終極問題來了? 每個空間位置上有一個卷積核,每個 channel 上有一個卷積核,如何把卷積核作用到 \((c, h , w)\) 的三維矩陣中的每個畫素上?

具體方法是: 每個畫素點,找到與它 對應位置的卷積核對應通道的卷積核 ,這兩個卷積核進行 逐畫素相乘 ,得到新的卷積核再對這個點進行卷積

論文中還有一個點值得注意,為了提升效能,卷積核歸一化時,作者設計了一個 Filter-Norm,效能會優於使用 Batch-Norm 和 Sigmoid,具體可以參考作者實驗,不再多說。