1.背景:
深度学习以及大规模卷积神经网络已经成为目前解决视觉识别任务最常见的办法。我们发现许多精确的卷积神经网络在进行精确计算时,需要几百个卷积层以及上千条通道,因此需要数以百万计的FLOPs计算。
但是随着近些年来在一些计算机视觉领域中,嵌入式设备对深度神经网络的需求日益增多,这更加鼓励了我们对高效模型的设计灵感:如何在有限的计算能力范围以内(10或者100个MFLOPs)能达到最好的准确率以及最高的精确度,特别是实现在一些智能手机的平台上。而这篇文章就是探索和设计一种高效率的基础架构并将其作为一种计算能力的延伸。
2.模型对比:
在深度神经网络的模型设计过程中,相比于仅仅对卷积层进行累加,GoogleLeNet是选择了增加卷积神经网络的深度从而降低计算复杂度。而Squeeze Net是在保持准确率的情况下减少了大规模的参数以及计算量。ResNet利用了高效的障碍物结构从而获取出色的性能。另外SENet介绍了一种体系结构单元使用了较少的计算开销从而提高性能。
因此基于之前的模型和算法,本文就是致力于为手机移动端这种只具备有限计算能力的设备,探索一种高效的设计模型。虽然mobile NASNet模型作为shuffeNet模型副本取得了客观的性能(与ImageNet 错误分类的百分比相似)。但是其并没有报导在微小模型上的结果,也没有评估手机设备真实的推理时间。因此本文在其基础上进行了改良并提供了实现办法。
3.技术实现:
3.1 Group Convolution(组卷积)
卷积神经网络通常是由一些重复的组成结构所建立的。其中,最先进的网络例如Xception和ResNeXt引入了一些高效的深度可分卷积和组卷积,在结构模型层面上达到表现能力以及计算开销之间完美的交互。
但是在轻量级网络中,昂贵的逐点卷积运算限制了许许多多具有复杂性约束的通道,而这些都将会严重损害准确度。为了解决这些问题,最直接的解决方案是稀疏通道连接,如图(a),但是这个过程阻碍了信息流在通道组之间的交换,并削弱了它的性能表现。
所以本文决定允许组卷积从不同的群体中获取输入信息 ,如图(b),这样输入与输出通道可以彻底被联系起来,另外特别的,对于之前组层产生的特征图谱,此操作还可以将每一个组通道拆分成几个子组,然后这些子组数据在下一层流入不同的组,这就有效且优美的应用了通道重排操作。
如图(c),假设一个卷积层中有g个组,且它的输出有g*n个通道,我们可以重新改变输出通道维度到(g,n),然后进行置换并整合作为下一层的输入。注意到这个操作尽管这两个卷积有许许多多的组,但依然会产生一些副作用,通道重排是可区分的,这就意味着在训练的过程中可以很好的融合在网络结构中。
3.2 Channel Shuffle Operation(通道重排操作)
据我们所知,在很早以前的高效率模型设计的工作中,通道重排操作的理念被很少的提及,卷积神经网络库cuda-convnet库(是 Alex Krizhevsky 公开的一套CNN代码,运行于Linux系统上,使用GPU做运算,)就倡导过“随机稀疏卷积”操作。而通道重排的目的是使得组间信息能够互相交流。
因此利用通道重排操作给我们带来的优势,本文打算为一个小型网络设计一个新颖的重排单元。本文的设计原理开始于瓶颈单元,如图(a),他是一些残余的小模块。这些残余分支,是一个3*3层的结构,我们应用了一种合理经济的3*3深度卷积计算模式在瓶颈特征图谱上。
紧接着本文将原先1*1层的逐点组卷积替换成通道重排操作,然后建立通道重排单元,如图(b),第二个组卷积的目的是恢复频道维度以匹配快捷路径。为了简单起见,我们不会在第二个逐点卷积层下再次应用通道重排操作,这样可以得到可比较的结果。通过使用BN(分批标准化)和非线性特征。在一些大幅度应用重排网络的案例中,本文简单的做了两个修改,如图(c):在快速匹配路径的过程中加入了3*3的平均池化;用通道连接替换元素方式的添加,可以很容易地扩大通道尺寸,而不需要额外增加计算成本。
在一些轻量级的网络工作中通常会没有充足的通道来处理信息。而逐点组卷积正是运用了通道重排技术,使得在重排网单元里每一个元素都能被高效的计算,相比于ResNet和ResNeXt,在相同的设置下ShuffleNet结构具有较低的复杂度。
3.3 Model Acceleration(模型加速)
这个方向旨在保留预先训练好的模型精确度的情况下加快速率。在之前训练好的模型中通过修剪网络连接以及减少通道冗余连接从而提升性能。在不改变参数的情况下,最优化卷积算法被应用在快速傅里叶变换以及减少实践生活中时间消耗的理论。提取大模型中的理论,有利于更加简单的训练小的模型。
模型加速的方法有:
1) 修剪网络,减少分支(pruningnetwork connections)。
2) 对于一个训练好的网络(pre-trainedmodel),在性能不下降的情况下减少冗余的分支。
3) 量化(quantization)和因式分解(factorization)加速。
4) 在不改变参数的情况下,使用FFT算法对卷积进行加速。
5) 提取网络的精华部分,减小网络模型。
4.实验结果:
本文还通过做不同的对比性试验,并以表格的形式说明了以下几点:
(1)在限定complexity的情况下,通过改变group(g)的数量来改变output channel的数量,更多的output channel一般而言可以提取更多的特征。
(2)ShuffleNet可以使用更多的feature map不同大小的ShuffleNet在不同group数量情况下的分类准确率比较。其中一个重要结论是group个数的线性增长并不会带来分类准确率的线性增长。但是发现ShuffleNet对于小的网络效果更明显,因为一般小的网络的channel个数都不多,在限定计算资源的前提下,ShuffleNet可以使用更多的feature map。
(3)channel shuffle的重要性。
(4)几个流行的分类网络的分类准确率对比。
5. 评估:
5.1 逐点组卷积
较小的模型倾向于从团体中获益更多。请注意,组卷积允许更多特征映射通道用于给定的复杂性约束,所以我们假设性能增益来自更宽的特征映射,这有助于编码更多信息。 另外,较小的网络涉及更薄的特征映射,这意味着它可以从放大的特征映射中获益更多。
随着组数的增加(具有更宽的特征图谱),每个卷积滤波器的输入通道变得更少,这可能损害表示能力。 有趣的是,我们还注意到对于ShuffleNet 0.25等较小的模型, 更大的群体数量趋于更好的结果一致,这表明更广泛的功能图谱为小型模型带来更多好处。
5.2 通道重排VS无重排
重排操作的目的是为多组卷积层启用交叉组信息流。很明显,通道重排在不同的设置下都一直在提升分类的评分。 尤其是,当组号相对较大时(例如g = 8),带有通道重排的模型表现优于对手,显示了跨组信息交换的重要性。
5.3 与其他模型对比
在本节中,我们调查各种构建块例如convolutional units in VGG ,ResNet, GoogleNet , ResNeXt and Xception,并在相同的复杂性约束条件下与ShuffleNet进行比较。
5.4 与mobilenet和其他框架比较
结果表明,较简易的模型shufflenet 仍然明显优于相应的MobileNet,这意味着ShuffleNet的有效性主要来自其有效结构,而不是深度。
6.总结
ShuffleNet的核心就是用逐点组卷积,通道重排和深度分离卷积代替ResNet block的相应层构成了ShuffleNet 单元,达到了减少计算量和提高准确率的目的。channel shuffle解决了多个group convolution叠加出现的边界效应,逐点组卷积和深度分离卷积主要减少了计算量。
伴随着巨大的计算复杂度,更宽的通道(如ShuffleNet 1x),较大的分组对于移动端应用(只能进行有限的浮点操作,且具有并不高效的服务器集群)尤其重要。
网友评论