ShuffleNet是由旷视推出的专门为移动设备设计的神经网络,主要使用了pointwise group convolution and channel shuffle这两个操作。实验在Arm端手机上运行,在保持精度不变的情况下,比 AlexNet提速了13倍。
一、Channel Shuffle for Group Convolutions
现在很多网络如Xception 和 ResNeXt都会使用深度可分离卷积或是组卷积来平衡计算量和网络性能。在这两种卷积中会使用
1
×
1
1 \times 1
1×1卷积核,许多网络没有充分考虑点卷积,使得网络性能的损失。直接解决该问题的办法是通道稀疏连接,比如组卷积。通过卷积核在输入特征中相对应的通道上卷积,可以减少计算量。但是多个组卷积堆叠在一起,会产生一个问题:两层组卷积的特征输出和特征输入的通道保持不变,如Figure 1(a)所示。特征之间的通道没有进行交换。这种情况会阻碍信息的交互同时影响网络性能。如果我们将输入特征按通道重新排列,如Figure 1(b)(c)所示。这个 channel shuffle 是可微的同时可以嵌入进网络结构中进行端对端训练。这一操作可以加强网络性能。
二、ShuffleNet Unit
Figure 2(a)是一个残差块,(b)中使用
1
×
1
1 \times 1
1×1点组卷积(pointwise group convolution)和Channel Shuffle来代替标准
1
×
1
1 \times 1
1×1卷积,后面使用一个更加节约资源的深度卷积(depthwise convolution),最后同样是一个点组卷积。第二个点组卷积恢复特征的通道数量,以便和shortcut path相匹配,后面并没有加入Channel Shuffle从而减少计算。。ShuffleNet对小网络有挺大的优势,因为在资源有限的设备上使用神经网络,特征通道不会很多,ShuffleNet使用组卷积和深度卷积可以提高通道数量从而提升网络性能。为了避免过多的开销,只在残差块中使用一次深度卷积。作者发现虽然深度卷积在理论上有较大的资源节约,但是实际中却是更大计算和内存的消耗。
三、网络结构
Table 1是整个网络结构图,Stage是ShuffleNet Unit的堆叠,每经过一个stage输出通道会翻倍。设bottleneck channels是输出特征通道的
1
4
\frac{1}{4}
41。组卷积使用g来控制输入通道数量,同时调整输出通道以便保持整个网络的FLOPs保持不变。分组越多,输出的通道越多才能保持FLOPs不变。分组越多,提取的特征信息会越多。
三、消融实验
ShuffleNet的核心是点组卷积(Pointwise Group Convolutions)和shuffle操作,下面对这两个创新点做消融实验。
1.点组卷积的实验
Table 2中是对点组卷积进行实验,将组卷积的中
g
g
g分别设置从1到8,当
g
=
1
g=1
g=1时相当于没有分组,是普通标准卷积。实验在不同的模型大小基础上实验,Table 1中是基础的ShuffleNet网络结构,ShuffleNet
s
×
s \times
s×表明
s
s
s倍ShuffleNet
1
×
1 \times
1× 中卷积核的数量。从表中可以得出结论:拥有点组卷积比没有点组卷积的网络效果好。说明增加特征通道可以增加网络性能。
2.Shuffle操作的实验
Table 3对Shuffle操作做了消融实验,可见在不同的情况下,Shuffle操作提高了网络性能。
3.网络结构的实验
Table 4中是对不同网络结构进行实验。作者将ShuffleNet中的stage2-4用不同的单元来代替ShuffleNet单元进行实验。在相同FLOPs下,ShuffleNet单元达到了最好的效果。
五、实际的加速
作者在ARM平台的移动端上进行了实验,测试实际加速效果。虽然随着点组卷积的组数增加,网络性能会提升,但是实际效率是更低的。作者发现理论上每4倍的计算复杂的降低,实际中是2.6倍的加速。