mobileNet用depthwise卷积优化了3*3卷积了,但是对于1*1卷积却没有做优化。因为1*1卷积是不能再利用depthwise卷积进一步优化的。而shuffleNet就是为了对1*1卷积做进一步优化的。
shuffleNet的优化策略是:分组卷积+channel shuffle。
分组卷积
分组卷积,是将标准的卷积分成几组,然后分别进行卷积,最后将卷积结果合并起来。例如:
标准卷积:输入通道256,输出通道128,不考虑卷积核大小。那么需要256*128=32768个卷积核。
分组卷积:假设分为4组。那么每一组的输入通道为64,输出通道为32。每组就需要64*32个卷积核,总的卷积核个数为4*64*32=8192个。比标准卷积少了4倍的参数量。
channel shuffle
如果单单只用分组卷积进行优化,参数量是下来了。但是由于分组卷积没有充分利用输入数据的不同通道数据,会使整个模型的性能上不去。为了解决这个问题shuffleNet用了一个很简单的操作,也就是channel shuffle。shuffle的意思是洗牌,也就是打乱顺序。channel shuffle就是把1*1分组卷积的输出进行通道间的随机打乱(实现上是利用转置操作)。如下图: