WeightNet:從SENet和CondConv得出的高效權值生成結構 | ECCV 2020
論文在權值空間將SENet和CondConv進行了總結,提出統一的框架WeightNet,能夠根據樣本特徵動態生成卷積核權值,並且能通過調節超參數來達到準確率和速度間的trade-off
來源:曉飛的算法工程筆記 公眾號
論文: WeightNet: Revisiting the Design Space of Weight Networks
Introduction
論文提出了一種簡單且高效的動態生成網絡WeightNet,該結構在權值空間上集成了SENet和CondConv的特點,先通過全局平均池化以及帶sigmoid激活的全連接層來獲得動態的激活向量(activiation vector),然後利用激活向量進行後續的特徵提取。SENet將激活向量用於加權特徵層,而CondConv則將激活向量用於加權候選卷積核參數。
借鑒上面兩種方法,WeightNet在激活向量後面添加一層分組全連接,直接產生卷積核的權值,在計算上十分高效,並且可通過超參數的設置來進行準確率和速度上的trade-off。。
WeightNet
Grouped fully-connected operation
在全連接層中,原子是全部連接的,所以全連接層可認為是矩陣計算Y=WX,如圖a所示。分組全連接則是將原子分成g組,每組(包含i/g輸入和o/g輸出)內全部連接,如圖b所示。分組全連接操作的一個顯著特性就是權值矩陣變成了稀疏的塊對角矩陣(block diagonal matrix),而全連接操作可認為是分組數為1的分組全連接操作。
Rethinking CondConv
CondConv通過m維向量\alpha將m個卷積核進行加權合併得到最終的卷積核,由樣本特徵動態生成。向量\alpha由全局池化、全連接層W_{fc1}和sigmoid操作\sigma(\cdot)計算:\alpha=\sigma(W_{fc1}\times \frac{1}{hw}{\sum}_{i\in h, j\in w}X_{c,i,j}),\times為矩陣乘法,W_{fc1}\in \mathbb{R}^{m\times C}, \alpha \in \mathbb{R}^{m \times 1},最終的卷積核權值則由多個候選卷積核與向量\alpha加權所得:W^{‘}=\alpha_1 \cdot W_1 + \alpha_2 \cdot W_2 + \cdots + + \alpha_m \cdot W_m,其中W_i \in \mathbb{R}^{C\times C\times k_h\times k_w}。
我們可以將上述的操作轉換為:
W\in \mathbb{R}^{m\times CCk_hk_w}為矩陣拼接後的結果。根據公式1,我們可變相地認為,CondConv的最終卷積核計算可通過在向量\alpha後面添加一層輸入為m、輸出為C\times C\times k_h\times k_w的全連接層進行輸出,這比原本的CondConv實現要高效地多。
Rethinking SENet
SE模塊首先根據樣本特徵動態生成m維向量\alpha,再對m個特徵進行加權。向量\alpha由全局池化、兩個全連接層、ReLU操作\delta(\cdot)和sigmoid操作\sigma(\cdot)計算:\alpha=\sigma(W_{fc2}\times \delta(W_{fc1}\times \frac{1}{hw}{\sum}_{i\in h, j\in w}X_{c,i,j})),W_{fc1}\in \mathbb{R}^{C/r\times C},W_{fc2}\in \mathbb{R}^{C\times C/r},\times為矩陣乘法。使用兩層全連接層主要為了降低整體參數量,由於\alpha為C維向量,使用單層全連接層會帶來過多參數。
在獲得向量\alpha後,可將其應用在卷積層之前Y_c=W^{‘}_c * (X\cdot \alpha),也可應用在卷積層之後Y_c=(W^{‘}_c * X)\cdot \alpha,(\cdot)為維度坐標上的乘法。上面的兩種實現實際都等價於對權值矩陣W^{‘}_c進行加權:Y_c=(W^{‘}_c \cdot \alpha_c) * X,與公式1不同的是,這裡沒有進行維度的減少,相當於一個輸入為C、輸出為C\times C\times k_h\times k_w、分組為C的分組全連接操作。
WeightNet Structure
由上面的分析我們可以看到,分組全連接層的分組數最小為1(CondConv),最大為輸入的維度(SeNet),所以我們得到了圖c的通用分組全連接層。
如表1所示,分組全連接層包含兩個超參數M和G,M用來控制輸入的維度,G則配合M一起來控制參數量和準確率之間的trade-off。
WeightNet核心模塊的結構如圖2所示,在生成激活向量\alpha時,為了減少參數量,使用reduction ratio為r的兩層全連接:\alpha=\sigma(W_{fc2}\times W_{fc1}\times \frac{1}{hw}{\sum}_{i\in h, j\in w}X_{c,i,j}),W_{fc1}\in \mathbb{R}^{C/r\times C},W_{fc2}\in \mathbb{R}^{C\times C/r},r為16,後續的卷積核權值生成則直接使用輸入為M\times C、輸出為C\times C\times k_h\times k_w、分組為G\times C的分組全連接層。
對於WeightNet中的卷積操作和權值分支的計算量分別為O(hwCCk_h k_w)和O(MCCk_h k_w / G),而參數量分別為零和O(M/G\times C\times C\times k_h\times k_w)。
Experiment
參數量/計算量與準確率的曲線對比,CondConv 2x和4x為候選卷積核數量。
不同\lambda配置的WeightNet的效果,這裡固定G=2,對ShuffleNetV2進行少量的維度修改,保證其能被G整除。
各種注意力模塊的對比實驗。
目標檢測任務上的效果。
Conclusion
論文在權值空間將SENet和CondConv進行了總結,提出統一的框架WeightNet,能夠根據樣本特徵動態生成卷積核權值,並且能通過調節超參數來達到準確率和速度間的trade-off。
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】