ShuffleNet - An Extremely Efficient Convolutional Neural Network for Mobile 论文解读

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的尺寸为 S ∗ S ∗ C S*S*C SSC,卷积核大小为 F ∗ F F*F FF,输出通道为 M M M,那么通常的卷积需要的参数个数为: S ∗ S ∗ F ∗ F ∗ C ∗ M S*S*F*F*C*M SSFFCM。使用分组卷积,分为 g g g组,则对应的参数个数为: S ∗ S ∗ F ∗ F ∗ C / g ∗ M / g ∗ g = S ∗ S ∗ F ∗ F ∗ C ∗ M / g S*S*F*F*C/g*M/g*g=S*S*F*F*C*M/g SSFFC/gM/gg=SSFFCM/g
ShuffleNet - An Extremely Efficient Convolutional Neural Network for Mobile 论文解读_第1张图片

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

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

你可能感兴趣的:(ShuffleNet - An Extremely Efficient Convolutional Neural Network for Mobile 论文解读)