ShuffleNet 论文解析

时间:2024-03-15 08:20:47

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的尺寸为SSCS*S*C,卷积核大小为FFF*F,输出通道为MM,那么通常的卷积需要的参数个数为:SSFFCMS*S*F*F*C*M。使用分组卷积,分为gg组,则对应的参数个数为:SSFFC/gM/gg=SSFFCM/gS*S*F*F*C/g*M/g*g=S*S*F*F*C*M/g
ShuffleNet 论文解析

Channel Shuffle:
channel shuffle就是对feature map的channel进行打乱重排。使用分组卷积可以减少计算量,但是如果仅仅使用分组卷积,输出的通道中,某一个组中的通道的信息仅仅来自卷积前的feature map中的一小部分的通道,这样导致信息无法再组间流动,削弱了模型的表达。channel shuffle就是为了实现组间信息的“流动”而设计的,如下图。
ShuffleNet 论文解析

ShuffleNet使用上述的group conv和channel shuffle构建了结构上类似ResNet中的bottleneck的shufflenet unit(下图左二,图片来自原论文)。单元主要由4个层构成,111*1的group conv+channel shuffle,然后是一个333*3的depthwi conv,最后是一个111*1的group conv(这一层使得channel数目恢复至与unit的输入相同,以便可与跨层连接进行element-wise相加),文中表示在这一层group conv之后没有作shuffle,可以达到同等的效果的同时简化了网络。对于需要缩小feature map尺寸的情况,在Depthwise conv这一层将卷积的步长设为2,同时对跨层连接使用步长为2的333*3平均池化,最后在输出的时候,直接将卷积输出的结果与跨层连接的通道连接在一起,这样既增加了通道数,同时又简化了计算。
ShuffleNet 论文解析