共计 2925 个字符,预计需要花费 8 分钟才能阅读完成。
近期,动静网络在减速推理这方面有很多钻研,DGC(Dynamic Group Convolution)将动静网络的思维联合到分组卷积中,使得分组卷积在轻量化的同时可能增强表达能力,整体思路间接清晰,可作为网络设计时的一个不错的抉择
起源:晓飞的算法工程笔记 公众号
论文: Dynamic Group Convolution for Accelerating Convolutional Neural Networks
- 论文地址:https://arxiv.org/abs/2007.04242
- 论文代码:https://github.com/zhuogege1943/dgc
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)将动静网络的思维联合到分组卷积中,使得分组卷积在轻量化的同时可能增强表达能力,整体思路间接清晰,可作为网络设计时的一个不错的抉择。
如果本文对你有帮忙,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】