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 评估模型性能不严谨,因此提出该指标