ShuffleNetV2:Practical Guidelines for Efficient CNN Architecture Design
ShuffleNetv2通过分析模型内存访问代价 (MAC)的规律,设计出4个降低这个指标的网络构建规则
什么是ShuffleNetv2?
- ShuffleNetv2认为采用FLOPs评估模型性能不合理的,因为训练时间除了看FLOPs,还有很多过程需要消耗时间,例如文件IO,内存读取,GPU执行效率等等
- ShuffleNetv1的分组卷积以及 bottleneck 结果均会提高内存访问代价 (MAC),但是导致不可忽视的计算损耗
- ShuffleNetv2从内存消耗成本, GPU并行性两个方向分析了模型的非FLOPs的损耗,提出轻量化模型设计的4个策略
ShuffleNetv2的设计策略?
- 1)当输入通道数和输出通道数相同时,MAC最小
- 2)MAC与分组数量g成正比
- 3)网络的分支数量降低并行能力
- 4)Element-wise操作是非常耗时的
ShuffleNetv2的网络结构?
- 类似于ShuffleNetv1,设定stage2-4为堆叠ShuffleNetv2 Unit的结构,在全局池化前加了一个卷积来帮助特征融合
- ShuffleNetV2不仅速度快,准确率也不低,主要得益于两个方面,首先是模型性能高,使得可以使用更大的维度以及网络容量,其次是channel split可以使得部分特征直接穿过block,相当于DenseNet的特征重用
ShuffleNetv2 Unit结构?
- (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 比较?
- 图a、b分别是对DenseNet以及ShuffleNetV2的特征重用程度进行了可视化对比
- 在 DenseNet中,相邻层的连接比其它层更强,意味着所有层的稠密连接存在冗余,而在ShuffleNetv2中,层间的影响力以倍数进行衰减,与DenseNet有一定的相似性
什么是内存访问代价(Memory Access Cost,MAC)?
- 即内存访问操作的次数
- 假设输入、输出通道数分别是 c1, c2,特征图大小是 hw,那么1x1卷积的 FLOPs 为 ,对应的
- ShuffleNetv2 认为FLOPs 评估模型性能不严谨,因此提出该指标