DGC:真動態分組卷積,可能是解決分組特徵阻塞的最好方案 | ECCV 2020 Spotlight
近期,動態網路在加速推理這方面有很多研究,DGC(Dynamic Group Convolution)將動態網路的思想結合到分組卷積中,使得分組卷積在輕量化的同時能夠加強表達能力,整體思路直接清晰,可作為網路設計時的一個不錯的選擇
來源:曉飛的演算法工程筆記 公眾號
論文: Dynamic Group Convolution for Accelerating Convolutional Neural Networks
Introduction
分組卷積目前廣泛應用於輕量級網路中,但論文分析發現分組卷積有兩個致命的缺點:
- 由於引入稀疏連接,減弱了卷積的表達能力,導致性能的降低,特別對於難樣本。
- 固定的連接模式,不會根據輸入樣本的特性而改變。而論文通過可視化DenseNet中間層的輸入維度對輸出維度的貢獻發現,不同的輸入維度對不同的輸出的貢獻是不一樣的,而且這個貢獻關係在不同的輸入樣本之間也存在差異。
參考動態網路的思想,論文提出動態分組卷積(DGC, dynamic group convolution),為每個分組引入小型特徵選擇器,根據輸入特徵的強度動態決定連接哪些輸入維度,而多個分組能捕獲輸入圖片中不同的互補特徵,學習到豐富的特徵表達能力。為此,動態分組卷積能夠在保持原網路的完整結構下,自適應地為每個分組的選擇最相關輸入維度。
Group-wise Dynamic Execution
DGC的結構如圖2所示,將輸出維度分成多個分組,每組都配有輔助head,用來決定那些輸入維度用於卷積計算。每個分組的邏輯如下:
- saliency generator生成輸入維度的重要性分數。
- input channel selector採用gating策略根據重要性評分來動態決定輸入維度最重要部分。
- 對選擇的輸入維度子集進行正常的卷積操作。
最後,將所有head的輸出concate並打亂,送入後續的BN層和激活層。
Saliency Generator
saliency generator為每個輸入維度指定一個分數用來表示其重要程度,每個head都有特定的saliency generator,用來引導不同的head使用不同的輸入維度,從而增加特徵的多樣化表達。saliency generator遵循了SE block的設計,對於第i個head,重要性向量g^i的計算為:
g^i\in \mathbb{R}^{1\times C}代表輸入維度的重要性向量,(z)_+代表ReLU激活,p將每個輸入特徵圖縮小為單個標量,論文採用使用全局平均池化,\beta^{i}和W^{i}為可學習參數,\beta^{i}為偏置,W^{i}兩部轉換操作\mathbb{R}^{1\times C}\mapsto \mathbb{R}^{1\times C/d}\mapsto \mathbb{R}^{1\times C},其中d為壓縮比。這裡的x^{i}為全部輸入維度,即在每個head中,所有的輸入維度都是候選。
Gating Strategy
在獲得重要性向量後,下一步是決定當前head選擇哪些輸入維度參與後續的卷積操作,可以用head-wise閾值或network-wise閾值來過濾分數較低的輸入特徵。論文使用的是head-wise閾值,給定目標裁剪比例\zeta,第i個head的閾值\tau^{i}滿足:
重要性分數有兩個作用:1) 重要性分數小於閾值的將被去除 2) 剩餘的維度會使用對應的重要性分數進行加權,得到加權特徵y^{i}\in \mathbb{R}^{(1-\zeta)C\times H\times W}。假設head數量為\mathcal{H},第i個head的卷積核為w^{i}\subset \theta^{i}, \theta^{i} \in \mathbb{R}^{k\times k\times C\times \frac{C^{‘}}{\mathcal{H}}},則對應的卷積計算為:
公式7其實就是將選擇的特徵和對應的權值選出來進行常規卷積計算,\mathcal{I}_{top} \lceil k\rceil (z)返回z中最大的k個元素的下標,輸出x^{‘i}\in \mathbb{R}^{\frac{C^{‘}}{\mathcal{H}}\times H^{‘}\times W^{‘}},\otimes為常規卷積。在DGC的最後,各輸出會合併然後打亂,輸出x^{‘}。
為了讓重要性分數盡量稀疏,引入lasso損失:
\mathcal{L}為DGC層數,\lambda為預設的超參數。
Computation Cost
卷積核大小為k的常規卷積MAC為k^2C^{‘}CH^{‘}W^{‘},而DGC中,每個head的saliency generator和卷積的MAC為\frac{2C^2}{d}和k^2(1-\zeta)C\frac{C^{‘}}{\mathcal{H}}H^{‘}W^{‘}。所以DGC層的MAC相對於常規卷積的節省比例為:
head的數量\mathcal{H}幾乎對整體的計算消耗沒有影響。
Invariant to Scaling
DGC方法整體思想與動態剪枝演算法FBS有點類似,FBS演算法的流程如上圖所示,計算的是輸出維度的重要性分數,在最後的特徵輸出時使用重要性分數進行了加權,沒有採用BN。這種加權方式會導致每個樣本的特徵分布差異較大,造成internal covariate shift問題。
而DGC雖然也使用重要性分數進行特徵加權,但其對最後的卷積結果進行BN+ReLU歸一化來避免這個問題:
Training DGC Networks
DGC網路從零開始訓練,不需要預訓練模型。在反向傳播階段,僅計算推理時選擇的維度的相關權值的梯度,其它設為零。為了防止剪枝導致訓練損失變化過大,在訓練過程逐步增加裁剪比例\zeta。整體訓練分為3個階段,第一階段(前1/12 epochs)用於warm up,第二階段逐步提升剪裁比例進行訓練,第三階段(後1/4 epochs)用於fine-tune稀疏網路,學習率下降採用餘弦退火下降方法。
Experiments
與剪枝方法和動態維度選擇方法對比,DGC-G使用network-wise閾值進行維度選擇,這個閾值是在訓練中學習來的。
與其它輕量級網路對比。
不同參數設置的性能對比。
可視化淺層和深層的重要性分數和過濾情況。
DGC網路某層的其中一個head對於各輸入維度的裁剪概率。
Conclustion
DGC(Dynamic Group Convolution)將動態網路的思想結合到分組卷積中,使得分組卷積在輕量化的同時能夠加強表達能力,整體思路直接清晰,可作為網路設計時的一個不錯的選擇。
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】