Shuffle Net的Channel Shuffle模块是咋回事?

Shuffle Net的Channel Shuffle模块是咋回事?_第1张图片
看一下这个图片,
[a]就是普通的分组卷积,比如(M,M,16)的feature map按channel分成4组,每组(M,M,4),每组用K个(3,3,4)的卷积核去卷积,这样就能得到4个feature map(如果加了padding使大小不变的话,就是4个(M,M,K)的feature map),这样(M,M,16)=>(M,M,4K),接下来再做一次分组卷积,又分为4份。这样的话,每个group之间就完全没有信息交流了(比如普通的卷积,是每个channel卷积然后对应位置相加)

[b]就是mobileNetV1的深度可分离卷积,在a的基础上,加了1*1的卷积,比如a中的output为(M,M,4K),然后再用N个(1,1,4K)的卷积核去卷积,得到(M,M,N)的输出,1*1卷积就是point wise的convolution,加上group就是所谓的group point wise convolution。

[c]就是shuffleNetV1的shuffle模块,在a的基础上,与b形成对比,把4组(M,M,K)的feature map按channel重排,第一组的channel1放第一层,第二组的channel1放第二层,第三组的channel1放第三层,第四组的channel1放第四层;第一组的channel2放第5层,以此类推。然后再进行分组卷积?(如果希望shuffle后还是能分成4组,就把每一组的前K/4个channel拿出来组在一起,就可以变成新的第一组)

有一点要注意:
Shuffle Net的Channel Shuffle模块是咋回事?_第2张图片
a是普通的bottlenet+DWConv
b是shufflenetv1,stride=1。此时1*1的卷积也是Group Convolution

你可能感兴趣的:(学习笔记,卷积神经网络,卷积,深度学习)