ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile
conf & author: CVPR18 & Xiangyu Zhang et al.
arXic: https://arxiv.org/abs/1707.01083
intro: pointwise group conv and channels shuffle
ShuffleNet中主要使用pointwise group conv
(1*1分组卷积)和channel shuffle
(通道打乱)来降低网络的参数和计算量。
Group conv:
group conv最早出现的AlexNet中,就是讲输入的feature map分成几个组,如下图,每个组内进行正常的卷积过程,然后将输出的通道再合起来。通常说的卷积实际上就是一个组的分组卷积,Depthwise conv就是将每个通道作为一个组的分组卷积。假设输入的feature map的尺寸为,卷积核大小为,输出通道为,那么通常的卷积需要的参数个数为:。使用分组卷积,分为组,则对应的参数个数为:。
Channel Shuffle:
channel shuffle就是对feature map的channel进行打乱重排。使用分组卷积可以减少计算量,但是如果仅仅使用分组卷积,输出的通道中,某一个组中的通道的信息仅仅来自卷积前的feature map中的一小部分的通道,这样导致信息无法再组间流动,削弱了模型的表达。channel shuffle就是为了实现组间信息的“流动”而设计的,如下图。
ShuffleNet使用上述的group conv和channel shuffle构建了结构上类似ResNet中的bottleneck的shufflenet unit(下图左二,图片来自原论文)。单元主要由4个层构成,的group conv+channel shuffle,然后是一个的depthwi conv,最后是一个的group conv(这一层使得channel数目恢复至与unit的输入相同,以便可与跨层连接进行element-wise相加),文中表示在这一层group conv之后没有作shuffle,可以达到同等的效果的同时简化了网络。对于需要缩小feature map尺寸的情况,在Depthwise conv这一层将卷积的步长设为2,同时对跨层连接使用步长为2的平均池化,最后在输出的时候,直接将卷积输出的结果与跨层连接的通道连接在一起,这样既增加了通道数,同时又简化了计算。