作者团队:旷厂
时间:2017年12月
贡献:两个新操作,pointwise group convolution 和 channel shuffle。优于MobileNet
一、Introduction
Xception、ResNeXt在非常小的网络上效率很低,主要是因为dense convolution 计算量较大。
在MobileNet中分析过,depthwise seperable convolution 分为depthwise conv 和pointwise conv ,其中depthwise conv计算量为,pointwise conv 计算量为,一般是远大于的,所以计算量主要集中在pointwise conv 上,而这里提到的 convolution指的就是pointwise conv ,所以文章针对这个改进,提出了pointwise group conv。然后为了避免引入pointwise group conv带来的副效应,又提出了channel shuffle操作。
二、related work
1、高效的模型设计
GoogLeNet、SqueezeNet、ResNet、SENet、NASNet等
2、Group Convolution
最初在AlexNet的论文中提出,效果在ResNeXt中得到验证,在Xception中提出的depthwise seperable convolution是对Inception系列中seperable convolution的泛化。MobileNet使用到了depthwise seperable convolution,本文是结合了Group convolution和depthwise seperable convolution。
3、Channel Shuffle Operation
之前文章对这个的研究很少
4、Model Acceleration
- 对连接或通道进行pruning可以在保持performance的情况下,有效减少模型冗余;
- Quantization以及factorization常用来对模型推断进行加速。
- 不修改参数的情况下,以FFT等方法实现卷积也可以加快速度
- Distilling:用大模型对小模型进行知识迁移,使小模型更容易训练。
三、Approach
1、Channel Shuffle for Group Convolutions
用group convolution可以有效减少pointwise convolution的计算量,如图中(a)所示。但问题是这样会导致不同group的信息得不到交换,会一定程度上削弱模型的性能。因此最好在group conv之后再将不同group的信息综合一下,如图中(b)所示。此时就可以使用channel shuffle操作,如图中©所示,而且这个操作是可导的,因此可以加入到网络中。
Group Conv 的对比实验如下(这里表示通道数倍数):
Shuffle 的对比实验效果如下:
2、 ShuffleNet Unit
图(b)为提出的ShuffleNet Unit,图©为stride=2的情况,主要的变化是在shortcut上加入了average pooling层,以及将两路的特征由元素相加变成了concatenate(不太清楚这样改变的原因,文中说这样能少量增加计算成本来扩大通道数)。以图(b)为例计算下ShuffleNet Unit的运算量,假定输入为,block内的通道数为 ,则图(b)中模块的计算量为FLOPs,其中为group conv 的分组数。
3、Network Architecture
ShuffleNet 网络结构如下图
ShuffleNet 与 MobileNet 实验对比