ShuffleNet 结构笔记:通道混洗与高效推理


ShuffleNet 学习笔记

一、ShuffleNet 概述

提出背景:
MobileNet 使用 Depthwise Separable Conv 减少计算量,但在实际移动端(如 ARM CPU)中仍存在计算瓶颈(尤其是 1×1 卷积耗时多)。
ShuffleNet 的目标是:

保持精度的前提下,进一步降低计算成本与内存访问量,并提升在真实设备上的运行速度。

二、ShuffleNet v1

关键词:Group Convolution, Channel Shuffle(分组卷积,通道混洗)


1. 设计动机

  • 1×1 卷积虽然参数少,但内存访问占比高
  • 分组卷积(Group Convolution)能减少计算,但组间通道信息被隔离,信息流不畅。
  • 解决方案:引入通道混洗(Channel Shuffle)机制,打通不同组的特征流通。

2. 核心模块结构:Shuffle Unit

一个 Shuffle Unit 由以下部分组成:

  1. 1×1 Group Convolution(降维)
    • 先用分组卷积减少计算量。
  2. Channel Shuffle(通道打乱)
    • 将通道重新排列,使不同分组的信息可以交叉传播。
  3. 3×3 Depthwise Convolution(空间特征提取)
  4. 1×1 Group Convolution(升维)
  5. Shortcut 连接
    • 当 stride = 1 时,使用残差连接;
    • 当 stride = 2 时,使用 concat 拼接。

3. Channel Shuffle 原理详解

问题:
分组卷积会让特征图在通道维度上被割裂(每组信息独立),组间没有交互。

解决:
通道混洗步骤:

  1. 将特征图 reshape 成 (g, c/g, H, W) 形式;
  2. 在 group 维度上 transpose;
  3. 再 flatten 回原始通道顺序。
原始通道 Group1 Group2
Input [a1, a2, a3] [b1, b2, b3]
Shuffle 后 [a1, b1, a2, b2, a3, b3] 组间通道交互

这样可以在不增加计算量的前提下,让不同组的信息流通。


4. 计算复杂度分析

与传统卷积相比,使用 Group Conv + Depthwise Conv + Shuffle 组合:

  • 参数量减少至原来的约 1/4
  • Multiply-Adds 减少约 75%
  • 在移动端设备上推理速度提升显著。

5. 网络整体结构

Stage Output Size Repeat Out Channels Notes
1 112×112 - 24 Conv3×3, stride=2
2 56×56 4 240 Shuffle Unit ×4
3 28×28 8 480 Shuffle Unit ×8
4 14×14 4 960 Shuffle Unit ×4
5 7×7 - 1024 Conv1×1 + Pool

6. 实验结果

模型 Top-1 准确率 FLOPs (M) 参数量 (M)
MobileNet v1 70.6 569 4.2
ShuffleNet v1 (g=3) 70.9 137 1.8

更快更轻量,几乎相同的精度。


三、ShuffleNet v2

关键词:实际部署优化、通道分裂、逐层融合


1. 设计动机

虽然 ShuffleNet v1 理论 FLOPs 低,但在真实硬件上仍存在:

  • 内存访问开销高(MAC 不等于真实速度);
  • 通道分组/拼接导致缓存效率低;
  • 小通道数时,GPU 并行度低;

因此,作者通过大量实验,总结了 4 条实用准则:


2. 高效 CNN 设计四原则

原则 内容 解释
① 均衡通道宽度 同一层输入输出通道应相近 避免带宽瓶颈与缓存浪费
② 最小化碎片化操作 避免过多分支结构 多分支会降低并行效率
③ 减少元素级操作 比如 add / concat / shuffle 这些操作不耗算力但耗时间
④ 注意内存访问成本(MAC) 实测性能并非完全取决于 FLOPs 要考虑数据读写与访存优化

3. ShuffleNet v2 Block 结构

核心模块:Channel Split + ShuffleNet v2 Unit

流程如下:

  1. Channel Split(通道分裂)
    将输入特征图分成两部分:
    • 一部分直接 shortcut 连接;
    • 另一部分进行卷积操作。
  2. 卷积分支:
    • 1×1 Conv → BN → ReLU
    • 3×3 DW Conv → BN
    • 1×1 Conv → BN → ReLU
  3. Concat 拼接输出
  4. Channel Shuffle(再次混合)

优点:

  • 无 group conv,避免组间信息受限;
  • 无复杂分支,计算与访存更均衡;
  • 实测速度显著提升。

4. Downsample Unit(步长为2的结构)

当 stride=2 时:

  • 不使用 Channel Split;
  • 使用两个分支:
    • 主分支:普通卷积降采样;
    • Shortcut 分支:DW Conv + 1×1 Conv;
  • 最后 concat 拼接。

5. 网络结构

Stage Output Size Repeat Out Channels
1 112×112 - 24
2 56×56 4 116
3 28×28 8 232
4 14×14 4 464
5 7×7 - 1024

6. 性能对比

模型 FLOPs (M) Params (M) Top-1 (%)
ShuffleNet v1 (g=3) 140 1.8 70.9
ShuffleNet v2 (1.5×) 299 3.5 72.6
MobileNet v2 300 3.4 74.7

ShuffleNet v2 在相同复杂度下推理更快、延迟更低。


7. ShuffleNet v1 vs v2 总结对比

对比项 ShuffleNet v1 ShuffleNet v2
分组卷积 使用 group conv 去除 group conv
通道混洗 明确 Shuffle 操作 自然混合(split + concat)
计算优化 理论 FLOPs 低 实测延迟更低
模块复杂度 稍高 更简洁、更硬件友好
精度速度权衡 精度略低但快 平衡更优

8. 总结

  • ShuffleNet v1 的贡献在于: 用通道混洗创新解决了分组卷积的通道隔离问题。
  • ShuffleNet v2 的贡献在于: 用结构化经验法则总结了轻量网络设计的本质原则,关注真实设备效率
  • 两者合起来,代表了从减少算力优化访存的过渡阶段。

Author: linda1729
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source linda1729 !
评论
  TOC