这是卷积神经网络学习路线的第19篇文章,主要为大家介绍一下旷世科技在2017年发表的ShuffleNet V1,和MobileNet V1/V2一样,也是一个轻量级的卷积神经网络,专用于计算力受限的移动设备。新的架构利用两个操作:逐点组卷积(pointwise group convolution)和通道混洗(channel shuffle),与现有的其他SOTA模型相比,在保证精度的同时大大降低了计算量。ShuffleNet V1在ImageNet和MS COCO上表现出了比其他SOTA模型更好的性能。论文原文见附录。
当前很多CNN模型的发展方向是变得更大,更深,这让深度卷积神经网络的准确率更高,但难以运行在移动设备上,针对这一问题,许多工作的重点放在对现有预训练模型的剪枝,压缩或使用低比特表示。这篇论文提出的ShuffleNet基于探索一个可以满足受限条件的高效基础网络架构。论文发现先进的架构如Xception和ResNetXt在小型网络模型中效率较低,因为大量的1*1卷积耗费了大量时间。论文提出了逐点群卷积(pointwise group convolution
)帮助降低计算复杂度;但如果只使用逐点群卷积会有副作用,所以论文还提出了通道混洗(channel shuffle
)帮助信息流通。基于这两种技术,论文构建了一个名为ShuffleNet的高效架构,相比于其他先进模型,对于给定的计算复杂度预算,ShuffleNet允许使用更多的特征映射通道,在小型网络上有助于编码更多信息。
现代卷积神经网络会包含多个重复模块。其中,最为先进的网络例如Xception和ResNeXt将有效的深度可分离卷积或组卷积引入block中,在表示能力和计算消耗之间取得了很好的折中。但是我们注意到这两个设计都没有充分使用的逐点卷积,因为这需要很大的计算复杂度。例如,在ResNeXt中卷积配有逐点卷积(),逐点卷积占了93.4%的multiplications-adds。在小型网络中,昂贵的逐点卷积造成有限的通道之间充满约束,这会显著的降低计算损失。然而,如果多个组卷积堆叠在一起,会产生一个副作用:某个通道的输出信息会从一小部分输入通道导出,如下图(a)所示,这样的属性降低了通道组之间的信息流通,降低了信息的表示能力。如果我们允许组卷积能够得到不同组的输入数据,即下图(b)所示效果,那么输入和输出通道会是全关联的。具体实现的话,我们就可以对于上一层输出的通道做一个混洗操作,如下图c所示,再分为几个组,和下一层相连。
通道混洗的算法过程如下:
在实际过程中,我们构建了一个ShuffleNet Unit(混洗单元),便于后面组合为网络模型。
在这里插入图片描述
在上面的基本单元的基础上,论文提出了ShuffleNet的整体架构:
在这里插入图片描述
整个架构主要分为3个阶段:
实验在ImageNet的分类数据集上做评估,大多数遵循ResNeXt的设置,除了两点:
为了评估逐点卷积的重要性,比较相同复杂度下组数从1到8的ShuffleNet模型,同时论文通过放缩因子s来控制网络宽度,扩展为3种:
在这里插入图片描述
从结果来看,有组卷积的一致比没有组卷积的效果好。注意组卷积可允许获得更多通道的信息,我们假设性能的收益源于更宽的特征映射,这帮助我们编码更多信息。并且,较小的模型的特征包含更少的特征映射,这意味着可以从更多的特征映射上获益。表2还显示,对于一些模型,随着g增大,性能上有所下降。意味着组数增加,每个卷积滤波器的输入通道越来越少,损害了模型,损害了模型的表示能力。值得注意的是,对于小型的ShuffleNet 0.25,组数越大性能越好,这表示对于小模型更宽的特征映射更有效。受此启发,在原结构的阶段3删除2个单元,即表2中arch2
结构,放宽对应的特征映射,明显新的架构效果要好得多。
Shuffle操作是为了实现多个组之间信息交流,下表表现了有无Shuffle操作的性能差异:
三个不同复杂度下带Shuffle的都表现出更优异的性能,尤其是当组更大(arch2, g=8),具有shuffle操作性能提升较多,这表现出Shuffle操作的重要性。
我们对比不同Unit之间的性能差异,使用表1的结构,用各个Unit控制阶段2-4之间的Shuffle Unit,调整通道数保证复杂度类似。
可以看到ShuffleNet的表现是比较出色的。有趣的是,我们发现特征映射通道和精度之间是存在直观上的关系,以38MFLOPs为例,VGG-like, ResNet, ResNeXt, Xception-like, ShuffleNet模型在阶段4上的输出通道为50, 192, 192, 288, 576,这是和精度的变化趋势是一致的。我们可以在给定的预算中使用更多的通道,通常可以获得更好的性能。
上述的模型不包括GoogleNet或Inception结构,因为Inception涉及到太多超参数了,做为参考,我们采用了一个类似的轻量级网络PVANET。结果如下:
后面的我就不说了,都是一些速度和精度对比。
论文针对现多数有效模型采用的逐点卷积存在的问题,提出了组卷积和通道混洗的处理方法,并在此基础上提出了一个ShuffleNet unit,后续对该单元做了一系列的实验验证,证明了ShuffleNet的结构有效性。