版权声明:https://blog.csdn.net/z0n1l2 https://blog.csdn.net/z0n1l2/article/details/83962261
ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
Why
ResNet,DenseNet等网络已经把分类问题的精度推到一个很高的水平,而很多轻量级网络MobleNet, XceptionNet和ShuffleNet则在不牺牲太多精度的前提下,降低网络计算量,令深度学习网络可以运行在一些资源受限的平台上,比如ARM,FPGA。本文发现轻量级网络设计的指标FLOPs只能间接的描述网络复杂度,因为网路运行速度除了和浮点操作多少外,还和内存访问(MAC)和指令可并行度有关系,本文建议使用这些直接描述性能的指标指导轻量级网络的设计,另外要在多个平台下测试网络性能。下图是shuffleNetV2和其他几个轻量级网络在GPU和ARM两个平台上的对比,speed-accuracy都是state-of-art了
How
文中提出设计网络的四个指导原则
-
卷积层的输入通道数和输出通道数一致时,MAC最小,有利于提高速度
-
分组卷积不利于速度提升,卷积分组不易过大
-
网络分支/多个卷积穿行不利于并行化
-
element-wise操作虽然FLOP很小,但是MAC很大,不利于速度提升
element-wise包括Add/Relu/ResNet的short-cut等
最终基于shuffleNet,遵守上述四个原则设计了shuffleNetV2,以下是Block building
- element-wise操作被channel-split和concat替换
- 分组卷积GConv被取消(也是因为有了channel-split)
- depthwise convolution保留
shuffleNetV2网络结构