深度学习轻量化算子:从公式证明到数值计算

摘要 :在轻量化网络的设计中,我们常说"计算量降低了9倍"或"参数量减少了数倍"。这些数字究竟是怎么算出来的?本文将通过严谨的数学推导,对比 标准卷积深度可分离卷积(MobileNet)分组卷积(ShuffleNet) 以及 Ghost Module 的计算差异,并提供一个具体的推理计算案例。


0. 符号定义 (Notation)

为了保证推导的严谨性,我们统一以下符号:

  • H×WH \times WH×W: 输入/输出特征图的空间尺寸(假设输入输出尺寸不变,即 Stride=1, Padding=Same)。
  • CinC_{in}Cin: 输入通道数 (Input Channels)。
  • CoutC_{out}Cout: 输出通道数 (Output Channels)。
  • K×KK \times KK×K: 卷积核尺寸 (Kernel Size,通常为 3x3)。
  • FLOPs : 浮点运算次数 (Floating Point Operations),我们主要计算乘加运算(MACC,Multiply-Accumulate Operations),通常 1 MACC≈2 FLOPs1 \text{ MACC} \approx 2 \text{ FLOPs}1 MACC≈2 FLOPs。本文以 MACC 为基准单位。

1. 基准:标准卷积 (Standard Convolution)

1.1 计算过程推导

标准卷积中,输出特征图的每一个像素点 ,都是由一个 K×K×CinK \times K \times C_{in}K×K×Cin 的立体卷积核与输入进行点积得到的。

  • 单个输出像素的计算量

    需要遍历 CinC_{in}Cin 个通道,每个通道做 K×KK \times KK×K 次乘加。
    Costpixel=K⋅K⋅Cin Cost_{pixel} = K \cdot K \cdot C_{in} Costpixel=K⋅K⋅Cin

  • 总计算量 (FLOPs)

    输出特征图共有 H⋅WH \cdot WH⋅W 个像素,且有 CoutC_{out}Cout 个输出通道(即有 CoutC_{out}Cout 个卷积核)。
    FLOPsstd=H⋅W⋅Cout⋅(K⋅K⋅Cin) FLOPs_{std} = H \cdot W \cdot C_{out} \cdot (K \cdot K \cdot C_{in}) FLOPsstd=H⋅W⋅Cout⋅(K⋅K⋅Cin)

    整理后:
    FLOPsstd=H⋅W⋅Cin⋅Cout⋅K2 \mathbf{FLOPs_{std} = H \cdot W \cdot C_{in} \cdot C_{out} \cdot K^2} FLOPsstd=H⋅W⋅Cin⋅Cout⋅K2

  • 参数量 (Params)

    卷积核数量 ×\times× 单个卷积核体积。
    Paramsstd=K⋅K⋅Cin⋅Cout \mathbf{Params_{std} = K \cdot K \cdot C_{in} \cdot C_{out}} Paramsstd=K⋅K⋅Cin⋅Cout


2. 核心:深度可分离卷积 (Depthwise Separable Conv)

这是 MobileNet 系列的核心。它将标准卷积分解为 Depthwise (DW)Pointwise (PW) 两步。

2.1 步骤一:Depthwise Convolution (DW)

每个卷积核只负责1个输入通道(Channel-wise),不改变通道数。

  • 输入:CinC_{in}Cin,输出:CinC_{in}Cin。
  • 卷积核:K×K×1K \times K \times 1K×K×1,共有 CinC_{in}Cin 个。
  • 计算量
    FLOPsdw=H⋅W⋅Cin⋅(K⋅K) FLOPs_{dw} = H \cdot W \cdot C_{in} \cdot (K \cdot K) FLOPsdw=H⋅W⋅Cin⋅(K⋅K)

2.2 步骤二:Pointwise Convolution (PW)

使用 1×11 \times 11×1 卷积将 DW 的结果在通道维度进行融合,改变通道数。

  • 输入:CinC_{in}Cin,输出:CoutC_{out}Cout。
  • 卷积核:1×1×Cin1 \times 1 \times C_{in}1×1×Cin,共有 CoutC_{out}Cout 个。
  • 计算量
    FLOPspw=H⋅W⋅Cout⋅(1⋅1⋅Cin) FLOPs_{pw} = H \cdot W \cdot C_{out} \cdot (1 \cdot 1 \cdot C_{in}) FLOPspw=H⋅W⋅Cout⋅(1⋅1⋅Cin)

2.3 总计算量与压缩比推导

总计算量为两步之和:
FLOPsdsc=FLOPsdw+FLOPspw FLOPs_{dsc} = FLOPs_{dw} + FLOPs_{pw} FLOPsdsc=FLOPsdw+FLOPspw
FLOPsdsc=H⋅W⋅Cin⋅K2+H⋅W⋅Cin⋅Cout FLOPs_{dsc} = H \cdot W \cdot C_{in} \cdot K^2 + H \cdot W \cdot C_{in} \cdot C_{out} FLOPsdsc=H⋅W⋅Cin⋅K2+H⋅W⋅Cin⋅Cout

计算压缩比 (Reduction Ratio)
FLOPsdscFLOPsstd=HWCinK2+HWCinCoutHWCinCoutK2 \frac{FLOPs_{dsc}}{FLOPs_{std}} = \frac{H W C_{in} K^2 + H W C_{in} C_{out}}{H W C_{in} C_{out} K^2} FLOPsstdFLOPsdsc=HWCinCoutK2HWCinK2+HWCinCout

分子分母同时约去 H⋅W⋅CinH \cdot W \cdot C_{in}H⋅W⋅Cin:
Ratio=K2+CoutCout⋅K2=K2CoutK2+CoutCoutK2 \text{Ratio} = \frac{K^2 + C_{out}}{C_{out} \cdot K^2} = \frac{K^2}{C_{out} K^2} + \frac{C_{out}}{C_{out} K^2} Ratio=Cout⋅K2K2+Cout=CoutK2K2+CoutK2Cout

Ratio=1Cout+1K2 \mathbf{\text{Ratio} = \frac{1}{C_{out}} + \frac{1}{K^2}} Ratio=Cout1+K21

2.4 推理分析

当 K=3K=3K=3 时,K2=9K^2=9K2=9。

如果 CoutC_{out}Cout 较大(例如 64, 128, 512),则 1Cout→0\frac{1}{C_{out}} \to 0Cout1→0。

此时:
Ratio≈19 \text{Ratio} \approx \frac{1}{9} Ratio≈91
结论:3x3 深度可分离卷积的计算量约为标准卷积的 1/8 到 1/9。


3. 进阶:分组卷积 (Group Convolution)

ShuffleNet 利用分组卷积来降低 1×11 \times 11×1 卷积(PW)的计算量。

3.1 推导过程

假设我们将输入通道 CinC_{in}Cin 和输出通道 CoutC_{out}Cout 都平均分成 ggg 组。

每一组内部进行独立的标准卷积。

  • 单组计算量

    输入通道 Cing\frac{C_{in}}{g}gCin,输出通道 Coutg\frac{C_{out}}{g}gCout。
    FLOPsgroup_i=H⋅W⋅Cing⋅Coutg⋅K2 FLOPs_{group\i} = H \cdot W \cdot \frac{C{in}}{g} \cdot \frac{C_{out}}{g} \cdot K^2 FLOPsgroup_i=H⋅W⋅gCin⋅gCout⋅K2

  • 总计算量 (ggg 组之和)
    FLOPsgroup=g⋅(H⋅W⋅Cing⋅Coutg⋅K2) FLOPs_{group} = g \cdot \left( H \cdot W \cdot \frac{C_{in}}{g} \cdot \frac{C_{out}}{g} \cdot K^2 \right) FLOPsgroup=g⋅(H⋅W⋅gCin⋅gCout⋅K2)
    FLOPsgroup=H⋅W⋅Cin⋅Cout⋅K2⋅1g FLOPs_{group} = H \cdot W \cdot C_{in} \cdot C_{out} \cdot K^2 \cdot \frac{1}{g} FLOPsgroup=H⋅W⋅Cin⋅Cout⋅K2⋅g1

  • 压缩比
    FLOPsgroupFLOPsstd=1g \frac{FLOPs_{group}}{FLOPs_{std}} = \frac{1}{g} FLOPsstdFLOPsgroup=g1

3.2 实际应用中的推理

在 ShuffleNet 中,通常针对 1×11 \times 11×1 卷积使用分组(g=2,3,4,8g=2, 3, 4, 8g=2,3,4,8 等)。

若 g=3g=3g=3,则计算量直接除以 3。但分组卷积会导致通道间信息不流通,因此必须配合 Channel Shuffle 操作。


4. 极致:Ghost Module 推导

GhostNet 认为 CoutC_{out}Cout 个特征图中,有很多是相似的(冗余的)。假设我们只需要生成 mmm 个"本征特征图",剩下的 n=Cout−mn = C_{out} - mn=Cout−m 个是"幻影特征图"。

4.1 步骤分解

假设总输出通道数为 nnn,其中分为两部分:mmm 个原始特征,s⋅ms \cdot ms⋅m 个幻影特征(n=m+s⋅mn = m + s \cdot mn=m+s⋅m)。

  1. 生成本征图 (Primary Conv)

    使用标准卷积生成 mmm 个通道。
    FLOPs1=H⋅W⋅Cin⋅m⋅K2 FLOPs_1 = H \cdot W \cdot C_{in} \cdot m \cdot K^2 FLOPs1=H⋅W⋅Cin⋅m⋅K2

  2. 生成幻影图 (Cheap Operation)

    对这 mmm 个通道,每个通道进行 s−1s-1s−1 次简单的线性变换(通常是 d×dd \times dd×d 的 Depthwise 卷积,且 ddd 通常等于 KKK)。
    FLOPs2=H⋅W⋅m⋅(s−1)⋅d2 FLOPs_2 = H \cdot W \cdot m \cdot (s-1) \cdot d^2 FLOPs2=H⋅W⋅m⋅(s−1)⋅d2
    (注:这里是逐通道变换,类似于 DW 卷积,输入通道为 1)

4.2 压缩比推导 (Speed-up Ratio)

标准卷积生成 nnn 个通道的计算量:
FLOPsstd=H⋅W⋅Cin⋅n⋅K2 FLOPs_{std} = H \cdot W \cdot C_{in} \cdot n \cdot K^2 FLOPsstd=H⋅W⋅Cin⋅n⋅K2

Ghost Module 总计算量:
FLOPsghost=FLOPs1+FLOPs2 FLOPs_{ghost} = FLOPs_1 + FLOPs_2 FLOPsghost=FLOPs1+FLOPs2
=m⋅H⋅W⋅(Cin⋅K2+(s−1)⋅d2) = m \cdot H \cdot W \cdot (C_{in} \cdot K^2 + (s-1) \cdot d^2) =m⋅H⋅W⋅(Cin⋅K2+(s−1)⋅d2)

压缩比 rsr_srs
rs=FLOPsstdFLOPsghost=n⋅Cin⋅K2m⋅(Cin⋅K2+(s−1)⋅d2) r_s = \frac{FLOPs_{std}}{FLOPs_{ghost}} = \frac{n \cdot C_{in} \cdot K^2}{m \cdot (C_{in} \cdot K^2 + (s-1) \cdot d^2)} rs=FLOPsghostFLOPsstd=m⋅(Cin⋅K2+(s−1)⋅d2)n⋅Cin⋅K2

利用关系 n=m⋅sn = m \cdot sn=m⋅s,代入分子:
rs=m⋅s⋅Cin⋅K2m⋅(Cin⋅K2+(s−1)⋅d2) r_s = \frac{m \cdot s \cdot C_{in} \cdot K^2}{m \cdot (C_{in} \cdot K^2 + (s-1) \cdot d^2)} rs=m⋅(Cin⋅K2+(s−1)⋅d2)m⋅s⋅Cin⋅K2
rs=s⋅Cin⋅K2Cin⋅K2+(s−1)⋅d2 r_s = \frac{s \cdot C_{in} \cdot K^2}{C_{in} \cdot K^2 + (s-1) \cdot d^2} rs=Cin⋅K2+(s−1)⋅d2s⋅Cin⋅K2

极限推理

假设 d≈Kd \approx Kd≈K (卷积核大小一致),且 Cin≫sC_{in} \gg sCin≫s (输入通道数远大于扩充倍数)。

分子分母同除以 Cin⋅K2C_{in} \cdot K^2Cin⋅K2:
rs≈s1+s−1Cin r_s \approx \frac{s}{1 + \frac{s-1}{C_{in}}} rs≈1+Cins−1s

由于 s−1Cin≈0\frac{s-1}{C_{in}} \approx 0Cins−1≈0,则:
rs≈s \mathbf{r_s \approx s} rs≈s

结论:如果你想把通道数扩充 2 倍 (s=2s=2s=2),Ghost Module 的理论加速比就接近 2 倍。


5. 实例计算演练 (Numerical Example)

为了彻底搞懂,我们设定一个具体的场景进行计算。

场景设定

  • 输入特征图:112×112×64112 \times 112 \times 64112×112×64
  • 输出通道:128128128
  • 卷积核:3×33 \times 33×3
  • Stride=1

5.1 标准卷积计算

FLOPs=112×112×64×128×3×3≈12,544×73,728≈924.8 M (MACCs) \begin{aligned} FLOPs &= 112 \times 112 \times 64 \times 128 \times 3 \times 3 \\ &\approx 12,544 \times 73,728 \\ &\approx \mathbf{924.8 \text{ M (MACCs)}} \end{aligned} FLOPs=112×112×64×128×3×3≈12,544×73,728≈924.8 M (MACCs)

5.2 深度可分离卷积 (DSC) 计算

  1. DW 部分
    112×112×64×9≈7.2 M 112 \times 112 \times 64 \times 9 \approx 7.2 \text{ M} 112×112×64×9≈7.2 M
  2. PW 部分
    112×112×64×128≈102.7 M 112 \times 112 \times 64 \times 128 \approx 102.7 \text{ M} 112×112×64×128≈102.7 M
  3. 总计
    7.2+102.7=109.9 M 7.2 + 102.7 = \mathbf{109.9 \text{ M}} 7.2+102.7=109.9 M

验证压缩比
109.9924.8≈0.1188 \frac{109.9}{924.8} \approx \mathbf{0.1188} 924.8109.9≈0.1188

理论公式验证:
1128+19=0.0078+0.1111=0.1189 \frac{1}{128} + \frac{1}{9} = 0.0078 + 0.1111 = \mathbf{0.1189} 1281+91=0.0078+0.1111=0.1189
结果高度一致!

5.3 分组卷积 (g=4g=4g=4) 计算

假设对 PW 过程进行分组:
112×112×64×128×1×1×14≈25.6 M 112 \times 112 \times 64 \times 128 \times 1 \times 1 \times \frac{1}{4} \approx \mathbf{25.6 \text{ M}} 112×112×64×128×1×1×41≈25.6 M


6. 总结

通过上述推导,我们可以得出以下硬核结论

  1. MobileNet (DSC) :通过解耦空间相关性和通道相关性,将计算量主要集中在 1×11 \times 11×1 的 PW 卷积上,压缩极限约为 1/K21/K^21/K2
  2. ShuffleNet (Group Conv) :进一步攻击 PW 卷积,通过稀疏连接(分组),将计算量线性降低 1/g1/g1/g
  3. GhostNet :通过线性变换替代卷积生成冗余特征,加速比近似等于通道扩充倍数 sss

实际应用建议

虽然理论 FLOPs 降低了,但 Memory Access Cost (MAC) 也是推理速度的关键。

  • DW 卷积虽然 FLOPs 低,但运算密度低,对内存带宽要求高。
  • Group 卷积 如果 ggg 过大,会增加内存碎片化访问成本。
  • 因此,理论推导是基础,RepVGG 这类重参数化方法(推理时回归标准 3×33 \times 33×3 卷积)在现代 GPU/NPU 上往往能获得更好的 FLOPs/Latency 平衡。
相关推荐
yzx9910132 小时前
[特殊字符] AI画廊:基于CNN的实时艺术风格迁移系统
人工智能·神经网络·cnn
Blossom.1182 小时前
GPTQ量化实战:从零手写大模型权重量化与反量化引擎
人工智能·python·算法·chatgpt·ai作画·自动化·transformer
KakiNakajima2 小时前
windows ollama models 路径不生效【kaki踩坑日记】
人工智能
编码小哥2 小时前
OpenCV高级形态学变换:梯度、顶帽与黑帽
人工智能·opencv·计算机视觉
睡醒了叭2 小时前
图像分割-传统算法-区域分割
图像处理·人工智能·算法·计算机视觉
Java后端的Ai之路2 小时前
【神经网络基础】-激活函数详解
人工智能·深度学习·神经网络·激活函数
LiFileHub2 小时前
神经网络全栈指南:从经典架构到NL范式落地(附12套工程化模板)
人工智能
AI_56782 小时前
智慧交通:基于边缘计算的信号灯智能调度系统
人工智能·边缘计算
min1811234562 小时前
因果推理在机器学习中的集成路径
人工智能