論文:https://arxiv.org/pdf/2007.11823.pdf
代碼:https://github.com/megvii-model/WeightNet
這是香港中文大學和曠視科技的最新工作,提出了一個即插即用並可以有效漲點的網絡WeightNet,作者也指出,該網絡是受了最近關注度較高的 conditional network 的啟發。
Conditional network (或者叫做 Dynamic network)最近受到廣泛關注。作者分析了 Conditional network 和 SENet 的聯系,二者都包括兩個步驟:第1步,得到一個 attention activation vector,然后 SENet 利用該向量給特征通道分配權重,CondConv 是給一系列卷積核分配權重 (a mixture of expert weights)。兩者一直被視作完全不同的方法,作者提出一個問題:“Do they have any correlations ?”
為此,作者設計了WeightNet,首先需要了解一個概念:Grouped FC。 普通的FC操作可以理解 為一個矩陣運算 \(Y=WX\) ,如下圖(a)所示。在此基礎上添加分組操作的話,就成為了圖(b) 所示的 Grouped FC。在圖中,FC運算分為了 \(g\) 組,每一組的輸入為 \(i/g\) ,輸出 為 \(o/g\) 。這是聯系 WeightNet 和 CondConv 的關鍵操作。
同時,作者給出一個定義:設輸入特征為 \(X\in R^{C\times H\times W}\),輸出特征為\(Y\in R^{C\times H\times W}\),卷積權值可以看作 \(W \in R^{C\times C\times k\times k}\)。這樣卷積可以看作 \(Y_c=W_c * X\)。
1. Rethinking CondConv
CondConv 第一步是得到權重向量 \(\alpha\) ,這個步驟可以這樣描述:\(\alpha=\sigma(W_{fc1}\times \frac{1}{hw}X)\) ,這里 \(W_{fc1}\in R^{m\times C}\), \(\alpha\in R^{m\times1}\)。
第二步,為卷積分配權重,可以理解為:\(W'=W^T\times \alpha\),這里 \(W\in R^{m\times CCkk}\)
2. Rethinking SENet
SENet 第一步也是得到權重向量\(\alpha\),可以這樣描述:\(\alpha = \sigma(W_{fc2}\times \textrm{ReLU}(W_{fc1}\times \frac{1}{hw}X))\) 。兩個全連接層中間有降維,reduction ratio 為 16。
第二步,為 feature map 的各個通道分配權重,整個過程可以理解為:\(Y_c=(W'_c\cdot \alpha_c) * X\)。這可以理解為一個特殊的 Grouped FC,輸入是 \(C\),輸出是 \(C\times C\times k\times k\),只是分為 \(C\) 組。
3. WeightNet
作者提供了一個圖來說明 WeghtNet, SENet 和 CondConv 的區別與聯系,如下所示。三個操作都輸出同樣的 \(C\times C\times k \times k\)卷積矩陣,但是 圖(a) 為只有一組(CondConv),圖(b)為有C組(SENet),圖(c)為自定義組數(WeightNet)
作者在 WeightNet 中引入了參數 \(M\) 和 \(G\)。 權重向量 \(\alpha\) 為一個 \(M \times C\)維的向量。但是因為維度過高,使用了兩個全連接層處理: \(\alpha = \sigma(W_{fc2}\times W_{fc1} \times \frac{1}{hw}X)\),丙個全連接層,reduction ratio 為16。
在第二步里,建立 Grouped FC,輸入為 \(M\times C\),輸出為 $\times C\times C\times k \times k $,分組數量為 \(G\times C\)。總體的圖示如下:
需要注意的是,數據訓練是要分batch的,因此,輸入的X維度為\((B, C, H , W)\),對其進行reshape 得到 \((1, B\times C, H, W)\),然后對生成的 \(W\) 進行reshape得到 \((B, C, C, k, k)\),然后采用組卷積的形式進行計算。 CondConv 也采用了這樣的處理方式。
實驗部分建議參考一下論文,這里不詳細介紹了。