ShuffleNetV2:Practical Guidelines for Efficient CNN Architecture Design

ShuffleNetv2 通过分析模型内存访问代价 (MAC) 的规律,设计出 4 个降低这个指标的网络构建规则

什么是 ShuffleNetv2?

  • ShuffleNetV2-20230408141126
  • ShuffleNetv2 认为采用 FLOPs 评估模型性能不合理的,因为训练时间除了看 FLOPs,还有很多过程需要消耗时间,例如文件 IO,内存读取,GPU 执行效率等等
  • ShuffleNetv1 的分组卷积以及 bottleneck 结果均会提高内存访问代价 (MAC),但是导致不可忽视的计算损耗
  • ShuffleNetv2 从内存消耗成本, GPU 并行性两个方向分析了模型的非 FLOPs 的损耗,提出轻量化模型设计的 4 个策略

ShuffleNetv2 的设计策略?

  • 1)当输入通道数和输出通道数相同时,MAC 最小
  • 2)MAC 与分组数量 g 成正比
  • 3)网络的分支数量降低并行能力
  • 4)Element-wise 操作是非常耗时的

ShuffleNetv2 的网络结构?

  • ShuffleNetV2-20230408141127
  • 类似于 ShuffleNetv1,设定 stage2-4 为堆叠 ShuffleNetv2 Unit 的结构,在全局池化前加了一个卷积来帮助特征融合
  • ShuffleNetV2 不仅速度快,准确率也不低,主要得益于两个方面,首先是模型性能高,使得可以使用更大的维度以及网络容量,其次是 channel split 可以使得部分特征直接穿过 block,相当于 DenseNet 的特征重用

ShuffleNetv2 Unit 结构?

  • ShuffleNetV2-20230408141127-1
  • (a) 和 (b) 是 ShuffleNetv1 的 base unit 和下采样 unit;©、(d) 是 ShuffleNetv2 设计的 base unit 和下采样 unit
  • 改进:(1) 利用 channel split 对输入通道对半分。因为输入输出相同 MAC 最小;(2) 利用 channel split 替换了 group 操作。因为 group 越少 MAC 越小;(3) 将 shuffle 移到了 concat 之后。因为分支越少 MAC 越小;(4) 去掉 Elementwise 改成 concat, 因为 Elementwise 越少 MAC 越小

ShuffleNetv1 与 DenseNet 比较?

  • ShuffleNetV2-20230408141128
  • 图 a、b 分别是对 DenseNet 以及 ShuffleNetV2 的特征重用程度进行了可视化对比
  • 在 DenseNet 中,相邻层的连接比其它层更强,意味着所有层的稠密连接存在冗余,而在 ShuffleNetv2 中,层间的影响力以倍数进行衰减,与 DenseNet 有一定的相似性

什么是内存访问代价 (Memory Access Cost,MAC)?

  • 即内存访问操作的次数
  • 假设输入、输出通道数分别是 c1, c2,特征图大小是 hw,那么 1x1 卷积的 FLOPs 为 B=hwc1c2B=hwc_1c_2 ,对应的

    MAC=h×w×(c1+c2)+c1×c2MAC=h \times w \times (c1+c2)+c1 \times c2

  • ShuffleNetv2 认为 FLOPs 评估模型性能不严谨,因此提出该指标