【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2
论文名称
深度学习模型压缩之ShuffleNetV2
作者
miclover
参考
书摘
V1版本存在的问题:
问题1:Shuffle channel在实现的时候需要大量的指针跳转和Memory set,这本身就是极其耗时的;同时又特别依赖实现细节,导致实际运行速度不会那么理想。
问题2:Shuffle channel规则是人工设计出来的,不是网络自己学出来的。这不符合网络通过负反馈自动学习特征的基本原则,又陷入人工设计特征的老路(如sift/HOG等)
之前版本问题:
1、在ShuffleNet V1中使用了大量的分组卷积,这违反了第二条;bottleneck-like的block,这违反了第一条
2、在MobileNet V2中使用了inverted bottleneck,这违反了第一条;在稠密的特征图上使用了depthwise卷积和ReLU,这违反了第四条
 
                                                                   思考
文中对于ShuffleNetV2主要工作创新点:
       文中作者讨论了常规的模型加速和压缩模型评估的指标(FLOPs:每浮点运算数,这个指标主要衡量的就是卷积层的乘法操作)的问题,并不能完全衡量模型速度,并通过实验主要讨论了MAC(内存访问操作所消耗的计算)指标。

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

       比如在Fig 1(c)(d)中,相同FLOPs的网络实际速度差别却很大,因此以FLOPs作为衡量模型速度的指标是有问题的。
1、使用相同的通道数来最小化MAC

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

对于1*1卷积核来说,输入c1维度,输出c2维度, 输出特征尺寸是h和w,那么, FLOPs可以表示为:

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

the memory access cost为:

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

通过均值不等式得出:

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

得出,当c1 = c2 的时候, 在给定FLOPs前提下,MAC达到取值最佳。
 
 
2、过多的分组卷积会增加MAC

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

对于1*1卷积核来说,输入c1维度,输出c2维度, 输出特征尺寸是h和w,并且使用g个组,那么, FLOPs可以表示为:

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

the memory access cost为:

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

可以看出在B不变时,g越大,MAC也越大。
 
 
3、网络分支会降低并行性,分支数量越少,模型速度越快

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

 
 
4、Element-wise操作不可忽视,尽可能减少element-wise操作
 

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

 
ShuffleNet v1和ShuffleNet v2的结构对比

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2

 
 
 
 
网络结构:

【ShuffleNet-V2】深度学习模型压缩之ShuffleNetV2