URL
https://arxiv.org/pdf/2006.12030.pdf
TL;DR
- 传统过参数化网络,在训练阶段能提高收敛速度并提高算法表现,但在推理阶段速度会变慢
- 本文提出一种过参数化卷积
DO-Conv,在训练阶段有过参数化的优点——收敛速度快、算法表现好,在推理阶段将 DO-Conv 转化为标准卷积,不会带来任何额外耗时
DO-Conv 实际上是在训练阶段,将标准卷积拆分成标准卷积和Depthwise卷积的叠加;在推理阶段之前,将拆分后的标准卷积和Depthwise卷积再合并为一个标准卷积
Algorithm
何为过参数化?
- 过参数化可以理解为:通过使用更多的参数,增大模型的假设空间,增加模型的表达能力(线性与非线性),从而加速训练甚至提高算法表现
标准卷积与Depthwise卷积的数学表示:
- O=W×P
- W∈RCout×(M×N)×Cin ,表示
kernels,每一个 kernel.shape==(Cin,M,N) ,一共 Cout 个 kernel
- P∈R(M×N)×Cin ,表示输入
feature map 被 kernel 覆盖的 patch,每一个 patch.shape==(Cin,M,N)
- O∈RCout ,表示卷积结果

Depthwise 卷积的数学表示:
- O=W∘P
- W∈R(M×N)×Dmul×Cin ,表示
kernels,每一个 kernel.shape==(M,N) ,每组(每个通道为一组) Dmul 个 kernel,一共 Cin 组
- P∈R(M×N)×Cin ,表示输入
feature map 被 kernel 覆盖(所有通道)的 patch,每一个 patch.shape==(Cin,M,N)
- O∈RDmul×Cin ,表示卷积结果

DO-Conv 的数学表示:
- O=(D,W)⋆P
feature composition: O=W×(D∘P)
kernel composition: O=(DT∘W)×P
- W∈RCout×Dmul×Cin ,表示
kernels_w,每一个 kernelw.shape== ( Cin,Dmul) ,一共Cout 个 kernel_w
- D∈R(M×N)×Dmul×Cin ,表示
kernels_d,每一个 kerneld.shape==(M,N) ,每组(每个通道为一组) Dmul 个 kernel_d,一共 Cin 组
- P∈R(M×N)×Cin ,表示输入
feature map 被 kernel 覆盖(所有通道)的 patch,每一个 patch.shape==(Cin,M,N)
- O∈RCout ,表示卷积结果

这与Depthwise Separable 卷积有什么区别?
- 相同点:
feature composition 可以看做是先对 feature map 做 Depthwise Conv ,再做标准卷积
- 区别:
Depthwise Separable Conv 是`DO-Conv Dmul=1 的特殊情况
DO-Conv 怎么能保证参数量比标准卷积多呢?
- 标准卷积卷积核:
- W1∈RCout×(M×N)×Cin
DO-Conv 卷积核:
- W2∈RCout×Dmul×Cin
- D∈R(M×N)×Dmul×Cin
- 当 Dmul=(M×N) 时, W2=W1 ,此时 $ D + W_2 > W_1$ ,
DO-Conv 拥有更多的参数量
- 所以规定: Dmul≥(M×N)
怎么能保证推理阶段不增加耗时呢?
- 训练阶段
W 和 D 都是可优化参数,所以模型会保存 W 和 D
- 推理阶段之前,使用
kernel composition 对 W 和 D 处理, W′=DT∘W ,然后就使用 W′ 去做标准卷积, W′.shape==W1.shape ,所以 inference 阶段不会增加任何耗时
DO-Conv 分组卷积 / Depthwise卷积
- O=(D,W)⊙P
feature composition: O=W∘(D∘P)
kernel composition: O=(DT∘WT)T∘P
Thoughts
- 设
a = a1 * a2,能不能从数学角度证明学习 a1 * a2 比直接学习 a 更容易,效果更好?
- 芯片上常常不支持
1 * 1 Conv,能否将输入的 (N2×Cin,H,W) 使用 PixelShuffle 运算 reshape 成为 (Cin,N×H,N×W) ,再使用 kernel.shape==(Cin,N,N),stride=N 的标准卷积去算?
DO-Conv 网络的实际表现
- 在所有用到卷积的地方,无脑替换为
DO-Conv 基本都能涨点





