ShuffleNet v1:http://openaccess.thecvf.com/content_cvpr_2018/html/Zhang_ShuffleNet_An_Extremely_CVPR_2018_paper.html
tensorflow代码:https://github.com/MG2033/ShuffleNet
pytorch代码:https://github.com/jaxony/ShuffleNet/blob/master/model.py
ShuffleNet v1
0. 前言
作者主要提出了两个创新性的模块:pointwise group convolution 和 channel shuffle 两个创新性的模块, 来进一步提升轻量级网络的效率。通常,在现有大型网络Xception和ResNet中为了减少计算量,会采用大量的1×1卷积操作,但是如果直接将1×1的卷积运用到小网络中会存在一些问题,像MobileNet 中1×1卷积的计算量占了绝大多数,因此作者提出来pointwise group convolution 来减少计算量。在分组卷积的过程中,当前分组的卷积会只与当前分组的输入有关,各组之间的信息会没有交流,因此作者提出来channel shuffle 操作, 将不同分组的信息在一定程度上进行混合。
1. channel shuffle for group convolution
目前像ResNeXt网络只是在3×3卷积的部分运用到了分组卷积,而当中pointwise convolution占了93.4%的MAdd, 所以一个直观的想法是对pointwise convolution也采用分组卷积。但这样会使但前输出的每一部分只与对应一小部分的输入有关,如图1(a)所示,这种特性会阻止各个分组之间信息流的相互传递,会减弱网络的表达能力。
2. Shuffle Unit
采用Shuffle Unit 可以大大减少计算量,例如:给定输入大小