序言
ShuffleNet由旷视科技提出,V1版2017年推出,V2版2018年,晚于2016年出炉的SqueezeNet(fire-module),是一种轻量级计算高效的CNN模型,目的在于处理好速度和精度之间的平衡,即如何利用有限的计算资源来实现更高的模型推断精度。
立意方向:模型结构设计,而非模型压缩量化。
网络结构
图解
ShuffleNet V1
ShuffleNet V2
详解
ShuffleNet V1
Channel Shuffle
ShuffleNet Units
ShuffleNet V2
优化真是精细,先提出问题:
1.除了FLOPs,还应考虑memory access cost;
2.网络的parallelism影响运行速度;
3.与硬件平台极为相关(个人认为这才是key point)。
再提网络设计指导原则:
1.保持卷基层的输入输出通道相同;卷积层的输入和输出特征通道数相等时MAC最小,此时模型速度最快;
2.小心使用分组卷积;过多的group操作会增大MAC,从而使模型速度变慢;
3.减少使用碎片化的操作;碎片化分支数量越少,模型速度越快;
4.减少元素级的操作;element-wise操作所带来的时间消耗远比在FLOPs上的体现的数值要多。
作者还分析了一些比较火的网络结构:ShuffleNetV1违反了2,bottleneck的结构违反了1,而MobileNetV2使用的inverse bottleneck的结构违反了1,其中嵌入的DWconv和Relu都违反了4,自动生成结构(auto-generated structures)高度碎片化违反了3。
创新思想
核心点
ShuffleNet V1
【pointwise group convolution】
【channel shuffle】
ShuffleNet V2
【内存访问消耗时间(memory access cost)】
【四条轻量化网络设计指导原则】
感悟点
论文写的挺好,有理有据有节,毫无疑问,ShuffleNet确实是个good work,V2中更是对网络运行速度展开了深入的思考;but于我的工程实战中差强人意,项目落地中罕有使用。
参考论文
1.ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices. Xiangyu Zhang, Xinyu Zhou, Mengxiao Lin, Jian Sun. Megvii Inc (Face++)
2.ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design. Ningning Ma, Xiangyu Zhang, Hai-Tao Zheng, Jian Sun. Megvii Inc (Face++)