ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
论文链接: https://arxiv.org/abs/1707.01083
一、 Problem Statement
提出一个适用于移动设备的backbone,shufflnet。
二、 Direction
提出了两个操作:
- pointwise group convolution
- channel shuffle
三、 Method
1. Channel Shuffle for Group Convolutions
作者认为mobilenet,Xception,和ResNeXt中的pointwsie convolution,也就是1x1的卷积计算量大。为了解决这个问题,作者使用了pointwise group convolution来降低1x1卷积的计算复杂度。
具体可以看下面的图示:
可以知道,group convolutions的堆叠有一个副作用就是:某个通道的输出仅来自输入通道的一小部分。某个group的输出只与group的输入有关。这种特性阻碍了通道组之间的信息流,削弱了representation。
所以如果可以使得group convolution获取不同group的输入数据,这样输入和输出的通道就会完全相连。所以提出了channel shuffle的操作。如上图所示,假设一个卷积层有g个groups,其通道数为 g × n g \times n g×n。我们首先把输出通道的维度变为 ( g , n ) (g,n) (g,n),然后换位,将其展平,作为下一层的输入。
2. ShuffleNet Unit
作者基于ResNet,进行了改动,如下所示:
对于没有stride的shuffleNet:
- 对于3x3卷积层,作者使用了和Xception一样的3x3 Depthwise convolution。
- 用pointwise group convolution和 channel shuffle操作替换了第一个1x1卷积。
- 后面的一个pointwise group convolution是为了恢复维度,匹配shortcut的连接。
对于有stirde的shuffleNet:
- 添加了3x3 average pooling。
- 把element-wise addition 替换成了 channel concatenation。
尽管深度卷积通常具有很低的理论复杂度,但作者发现在低功耗移动设备上很难有效地实现,这可能是因为与其他密集运算相比,计算/内存访问比较差,因此也只是在bottleneck中使用了depthwise convolution 来减少开销。
3. ShuffleNet Architecture
四、 Conclusion
提出了pointwise group convolution和channel shuffle operation,减少了只是使用Pointwise convolution的计算复杂度,适用于移动设备或者嵌入式设备。