论文:https://arxiv.org/abs/1803.10615
SqueezeNext是基于SqueezeNet进行改进的一种轻量化网络。
该论文是一篇“软硬兼并”的轻量化网络论文,以往的论文大多都只讲了网络如何设计,并没有设计硬件,而SqueezeNext还从硬件角度分析如何提速,从而来知道网络结构设计。
1 摘要
现有神经网络需要大的内存和计算资源是将其部署到嵌入式设备上的最大障碍。本文SqueezeNext是SqueezeNet的进化版本,同时引入了神经网络加速技术。本文介绍的SqueezeNext可以达到AlexNet的准确度且参数数量比前者少112倍。另一版本的SqueezeNext模型可以达到VGG-19的精度且参数数量比原始VGG-19网络少31倍,仅为4.4 Million。SqueezeNext在比MobeilNet参数数量少1.3倍的情况下取得了比其更好的Top-5分类精度,同时也没有使用在很多移动式设备上不足够高效的分离卷积。作者在相比SqueezeNet/AlexNet没有精度损失的情况下,设计出了比其运算速度快2.59/8.26倍的网络,且耗能比原来少2.25/7.5倍。
2 简介
在计算机视觉中CNN已经广泛应用,这主要得益于网络结构的发展、大量的训练数据、高效的硬件设备。CNN的复兴开始于2012年的AlexNet,其赢得了当年的ILSVRC比赛。ILSVRC比赛开始于2010年,当年的冠军错误率为28.2%,2011年该比赛冠军的错误率为26.2%,但是2012年的AlexNet的错误率仅为16.4%,相比前一年提升了接近10%。AlexNet包括五个卷积层,三个全连接层,总共包括61 Million参数。由于该网络较大,所以使用了两块显卡进行模型并行训练。另外使用了Dropout防止过拟合。ImageNet分类的下一个里程碑式发展是VGG网络族,其重复使用了 3 × 3 3 \times 3 3×3卷积来代替 7 × 7 7 \times 7 7×7卷积,从而得到了更深的网络。然而,最终得到的VGG-19模型包含138 Million参数,比AlexNet更大,不适合于实时应用场景。另外一个里程碑式的发展是ResNet族模型,结合 1 × 1 1 \times 1 1×1和 3 × 3 3 \times 3 3×3卷积添加了残差连接通道。通过修改网络的深度,最终在多个任务上都取得了良好的性能。
整体上来看,神经网络设计的主流趋势是在不考虑计算复杂度的情况下设计更深更大的网络以获取更好的性能。这种设计思路基于嵌入式设备的计算能力和内存会不断发展以支持这些复杂模型的实时运行。但是,由于半导体处理芯片的发展速度缓慢,在有限资源条件下达到上述计算要求貌似不是很现实。因此,出现了两种新的设计思路,一种是对现有模型进行压缩,另外一种是从头设计新的更小的模型。SqueezeNet是后面这种思路的代表,使用比AlexNet模型少50倍的参数却取得了相同的识别精度,结合模型压缩技术则进一步将参数数量减少到了原始AlexNet的1 / 500。SqueezeNet模型也可以应用于目标检测和分割任务。另外一个值得注意的网络是DarkNet网络,在仅使用1/10的AlexNet参数的情况下取得了AlexNet的精度,模型大小仅为28MB,对每幅图像的inference过程的计算量比AlexNet少2.8倍。他们还提出了一个更小的叫做TinyDarkNet的网络,使用大小为4MB的模型取得了和AlexNet相同的性能。MobeilNet使用分离卷积,仅使用1.32 Million参数取得了和AlexNet相当的性能。后续的ShuffleNet将通道shuffle和逐点卷积结合。后续的DenseNet和CondenseNet是ResNet思想的进一步扩充。
本文提出的SqueezeNext网络旨在针对内存和计算能力有限的嵌入式应用环境设计深度神经网络。本文最小版本的模型,在取得AlexNet准确率的情况下模型参数仅有0.5 Million,比原始AlexNet少112倍,比SqueezeNet也要少2倍。另外,我们展示了网络宽度和深度的变化可以得到不同的准确率。例如,更深版本的SqueezeNext仅在4.4 Million参数的情况下取得了VGG-19的准确率。
SqueezeNext以SqueezeNet网络为基准,进行了以下的变化:
- 通过将两阶段的squeeze模块进行结合减少了通道数量,这有效地减少了参数数量;
- 使用分离的 3 × 3 3 \times 3 3×3卷积进一步减小了模型大小,同时移除了squeeze模块中额外的 1 × 1 1 \times 1 1×1分支;
- 使用了类似于ResNet中的逐元素相加的直连通道,从而避免了训练深度网络过程中的梯度弥散。尤其是,作者没有使用类似于DenseNet中的连接,因为这种方式增加了通道数量且需要增加执行时间和计算消耗;
- 在多处理器的嵌入式系统中优化了SqueezeNext的性能,这揭示了性能瓶颈的由来。基于这些观察,我们可以设计不同的网络以获取更好的部署运算速度和更小的计算消耗,有时还可以取得更好的分类性能。
3 SqueezeNext设计
目前已经发现神经网络中包含了冗余参数,将这些冗余参数进行压缩处理不会伤害模型的准确率。基于这个观察,对一个训练好的网络可以进行多种方式的模型压缩。然而,某些压缩方法需要可变的bit-width ALUs进行高效执行。为了避免该问题,作者的目的是设计一个从头训练的小网络。作者使用了下述几种策略:
- 低秩卷积核:假设网络第 i i i层的输入为 x ∈ R H × W × C i x \in R^{H \times W \times C_i} x∈RH×W×Ci,卷积核大小为 K × K K \times K K×K,输出大小为 y ∈ R H × W × C o y \in R^{H \times W \times C_o} y∈RH×W×Co,这里假设输入和输出的空间尺寸相同,输入和输出的通道数分别是 C i C_i Ci和 C o C_o Co。该层的总的参数数量为 K 2 C i C o K^2C_iC_o K2CiCo,即 C o C_o Co个大小为 K × K × C i K \times K \times C_i K×K×Ci的卷积核。在对已有模型进行压缩的实现中,尝试对现有参数W压缩成 W ^ \hat W W^。可以通过CP或者Tucker分解获取 W ^ \hat W W^。通过这些方法减小的参数量正比于原始参数矩阵W的秩。然而,检查当前各主流模型的参数W,可以发现其都有比较高的秩。所以,当前模型压缩方法都进行了一定的重训练以恢复准确率。主流的模型压缩方法包括对参数进行剪枝以减少非零参数的数量,或者减小参数的精度。另外一种思路是使用低秩参数矩阵 W ^ \hat W W^重新设计网络,这也是本文作者所采用的方法。作者所作的第一个变化是将 K × K K \times K K×K的矩阵分解为如图1所示的两个独立的 1 × K 1 \times K 1×K和 K × 1 K \times 1 K×1卷积。这样做有效地将参数数量从 K 2 K^2 K2减少成了2K,同时增加了网络的深度。两个卷积层后都使用了ReLu激活函数和BN层。
- Bottleneck模块:每一个卷积层中的参数数量正比于 C i C_i Ci和 C o C_o Co的乘积。所以,减少输入通道的数量可以有效减少模型的大小。一种思路是使用分离卷积减少参数数量,但是某些嵌入式系统由于其用于计算的带宽的限制,分离卷积的性能较差。另一种思路是squeezeNet中提出的在 3 × 3 3 \times 3 3×3卷积之前使用squeeze层以减少 3 × 3 3 \times 3 3×3卷积的输入通道数目。这里作者在SqueezeNet的基础上进行了演化,使用了如图1所示的两层squeeze层。在SqueezeNext模块中,使用了两层bottleneck,每一层都将通道数减小为原来的1/2,然后使用了两个分离卷积层。最后使用了一层 1 × 1 1 \times 1 1×1卷积的扩充层,进一步减少了分离卷积输出数据的通道数。
- 全连接层:AlexNet这个i部分96%的参数来自于全连接层,SqueezeNet和ResNet中都只包含一个全连接层。假设输入数据为 H × W × C i H \times W \times C_i H×W×Ci,那么最后的全连接层的参数数量为 H × W × C i × L H \times W \times C_i \times L H×W×Ci×L,L表示输出的类别数。SqueezeNext在最后一个全连接层之前使用了一个bottleneck层,进一步减少了参数数量。该思想在TinyDarkNet中也有使用。
4 硬件性能仿真
目前为止,硬件结构是为固定的神经网络进行最优化设计,比如SqueezeNet。然而,如下文讨论的那样,作者从硬件仿真中获取了重要的提示。这些提示信息可以用来修改网络结构在不增加损失的情况下获取更好性能和计算消耗。
本部分作者首先介绍了如何针对嵌入式系统进行网络性能的加速,接着讨论了如何对基准网络进行变换以获取更好的性能。
神经网络加速器是一种特定的处理器,旨在加速网络的部署和训练速度。其通常包含大量的叫做PE的计算单元和一种用于卷积层计算的层次性的存储和连接结构以实现大量的并行计算和数据复用。
Eyeriss引入了一种分类法,用于根据空间结构 — 即在存储器层次结构的最低层重用的数据类型对神经网络加速器进行分类。这与A1算法中所示的卷积层的六个循环的顺序有关。在我们的模拟器中,我们考虑两个执行卷积的选项:Weight Stationary(WS)和Output Stationary(OS)。
Weight Stationary:WS是许多著名的神经网络加速器中最常用的方法。对于WS方法,每个PE加载卷积滤波器并在输入的所有空间位置处执行卷积,一旦迭代了所有空间位置,PE将加载下一个卷积滤波器。在这种方法中,卷积滤波器的权重存储在PE寄存器中。对一个大小为
H
×
W
×
C
i
H \times W \times C_i
H×W×Ci的feature map,进行
C
o
C_o
Co次大小为
K
×
K
×
C
i
K \times K \times C_i
K×K×Ci的卷积,执行过程如下所示:PE将卷积参数中的单个元素加载到其本地寄存器,并将其应用于整个输入激活,然后,它移动到加载下一个元素,依此类推。对于多个PE,我们将其分解成大小为
P
r
×
P
c
P_r×P_c
Pr×Pc处理器的2D网格,其中
P
r
P_r
Pr维分解通道,
P
c
P_c
Pc维分解输出特征映射
C
o
C_o
Co,如图4所示。总之,在WS模式中,整个PE阵列保持权重张量的
P
r
×
P
c
P_r×P_c
Pr×Pc子矩阵,并且它对一系列输入激活矢量执行矩阵 - 矢量乘法。
Output Stationary:在OS方法中,每个PE一次只对输出激活映射的一个像素起作用。在每个周期中,它应用将对该输出像素做出贡献的卷积部分,并累积结果。一旦完成该像素的所有计算,PE就会移动到新的像素上。在多个PE的情况下,每个处理器仅处理来自多个通道的不同像素。总之,在OS模式中,整个阵列随时间计算输出特征图的Pr×Pc块。在每个周期中,计算相应像素所需的新输入和权重被提供给每个PE。可以通过多种方式执行OS方法。这些包括单输出通道多输出像素(SOC-MOP),多输出通道 - 单输出像素(MOC-SOP)和多输出通道-多输出像素(MOC-MOP)。这里我们使用SOC-MOP格式。
采用WS数据流的加速器被设计为通过在几次激活中重用卷积滤波器的权重来最小化卷积参数的存储器访问。另一方面,使用OS数据流的加速器被设计成通过累积对应于相同输出激活的不同时间的部分和而最小化输出激活的存储器访问。因此,x和y循环形成WS数据流中的最内层循环,而c,i和j循环形成OS数据流中的最内层循环。对于具有3×3或更大滤波器的卷积层,两个数据流都表现出良好的性能。然而,移动和嵌入式神经网络架构的最新趋势是广泛采用轻量级构建块,例如,1×1卷积,其具有有限的并行性和数据可重用性。
Hardware Simulation Setup:图5显示了神经网络加速器的框图,该加速器用作推理速度和能量估计的参考硬件。
它由16×16或8×8阵列的PE,128KB或32KB全局缓冲器和DMA控制器成,DMA控制器用于在DRAM和缓冲器之间传输数据。一个PE具有一个16位整数乘和累加(MAC)单元和本地寄存器文件。为了有效对不同参数的卷积层进行有效加速,如前所述,加速器支持WS和OS两种操作模式。为了减少执行时间和能量消耗,加速器被设计成在OS模式下利用滤波器权重的稀疏性。在这个实验中,我们保守地假设40%的权重稀疏性。
加速器一次一层地处理神经网络,并且每层使用提供更好的推理速度的操作模式。层的内存占用范围从几十千字节到几兆字节。如果层的存储器容量要求大于全局缓冲区的大小,则将平铺应用于算法1中的卷积的x,y,c和k循环。通过使用考虑推理速度和DRAM访问次数的成本函数来选择平铺循环的顺序和大小。
性能估计器计算处理每个层所需的时钟周期数,并对所有结果求和。 PE阵列和全局缓冲器消耗的周期是通过建模内部数据路径和控制逻辑的时序来计算的,并且DRAM访问时间通过使用两个数字来估计,延迟和有效带宽,假设为分别是100个周期和16GB/s。对于能量估计,我们使用类似于[2]的方法,但考虑到参考加速器的结构,组件的归一化能量成本略有修改。
5 结果
嵌入式应用在精度,功率,能量和速度方面存在各种限制。为了满足这些限制,我们探索了各种权衡。本节报告了这些探索的结果。
训练过程:对于训练,我们使用输入图像的227×227中心裁剪,并从每个输入通道中减去ImageNet的均值。我们不使用任何进一步的数据增加,并对所有实验使用相同的超参数。调整超参数可以提高某些SqueezeNext变体的性能,预计不会改变我们结果的总体趋势。为了加速培训,我们使用数据并行方法,其中输入批量大小分布在P个处理器(以下称为PE)中。除非另有说明,否则我们使用P = 32英特尔KNightsLanding(KNL),每个包含68个1.4GHz核心,单精度峰值为6TFLOPS。所有实验均在VLAB系统上进行,该系统由256个KNL组成,具有Intel Omni-Path 100系列互连。我们使用英特尔Caffe进行120个epoch的训练,批量大小为B = 1024。在数据并行方法中,模型被复制到所有的计算节点,每个KNL获得输入批量大小的B / P,从训练数据中随机选择并独立执行前向和后向传递。接下来是一个集合的全减少操作,其中通过每个计算节点反向计算传递的梯度之和被计算。然后将该值广播给每个计算节点并更新模型。
分类性能:我们在表1中报告了SqueezeNext架构的性能。网络名称附加了模块数。每个模块的原理图如图1所示。
因为AlexNet已被广泛用作文献中的参考架构,我们首先与AlexNet进行比较。我们的23层的架构超过了AlexNet 2%,参数数量减少了84倍。请注意,在SqueezeNext架构中,大多数参数都来自于1×1卷积。为了探索我们可以进一步减少网络的参数量,我们使用组大小为2的分组卷积。使用这种方法,我们能够在获得与AlexNet的Top-5表现相近的情况下,将模型大小变为了压缩了112倍。
如表1所示,SqueezeNext的更深层次变化实际上可以涵盖各种精度。我们测试的最深的模型由44个模块组成:1.0-SqNxt44。与AlexNet相比,该模型的Top-5精度提高了5%。SqueezeNext模块也可以用作其他类型网络设计的构建块。一种这样的可能性是使用树结构而不是典型的前馈结构。使用迭代深度聚合(IDA)结构,我们可以获得更好的准确性,尽管它会增加模型的大小。获得更好性能的另一个变体是增加网络宽度。我们将基线宽度增加了1.5倍和2倍,并将结果报告在表2中。宽度为两倍的版本和44个模块(2.0SqNxt-44)能够在参数数量减少31倍的情况下和VGG-19的性能相近。
专为移动/嵌入式应用设计的新型神经网络系列是MobileNet,它使用分离卷积。分离卷积可以减少参数数量,但是计算密度较差。MobileNets报告的最佳准确度结果得益于数据增加和广泛实验训练方案和超参数调整(这些结果见表2中的括号)。为了与SqueezeNext对这些结果进行更公平的比较,我们在类似的训练方案下对MobileNet进行了SqueezeNext的训练,并将结果报告在表2中。SqueezeNext能够使用一半模型参数获得和MobeilNet相似的Top-1结果以及更好的Top-5准确率。通过特定于网络的超参数调整,可以为SqueezeNext获得更好的结果。但是,我们的主要目标是展示SqueezeNext的一般性能趋势,而不是每个版本的最大可实现性能。
硬件性能结果:图6显示了1.0-SqNxt-23的每层循环计数估计,以及下面解释的优化变化。为了更好的可见性,将具有相同配置的层的结果相加在一起,例如, Conv8,Conv13,Conv18和Conv23,并表示为单个项目。在1.0SqNxt-23中,第一个7×7卷积层占总推断时间的26%。这是因为它在大输入特征图上应用了相对较大的滤波器尺寸,因此,我们首先进行的优化是用5×5卷积替换这个7×7层,并构建1.0-SqNxt-23 v2模型。此外,我们根据1.0-SqNxt-23模型的每一层的每个周期的绘制了加速器效率。请注意第一个模块中的层的效率显着下降。与8×8阵列配置相比,这种下降对于16×16 PE阵列配置更为重要。这种下降的原因是初始层具有非常少量的通道,需要应用到大的输入激活图。然而,网络的后面层由于含有多通道的卷积核,没有再出现该问题。为了解决这个问题,我们探索改变模块的数量以更好地分配工作负载。在每个阶段激活图尺寸减小之前,基线模型有6 - 6 - 8 - 1个模块,如图3所示。我们在v2模型之上考虑三种可能的变化。在v3 / v4变体中,我们将第一个模块中的块数减少了2/4,而是分别将它添加到第二个模块中。在v5变体中,我们减少前两个模块的块,而是增加第三个模块中的块。结果如表3所示。
可以看出,v5变体(1.0-SqNxt-23v5)实际上实现了更好的前1/5精度,并且在16×16 PE阵列上具有更好的性能。与基线模型相比,它使用的能量降低17%,速度提高12%(即1.0- SqNxt-23)。总的来说,与SqueezeNet / AlexNet相比,后者网络的速度提高了2.59倍/8.26倍,能效提高了2.25倍/ 7.5倍,没有任何精度降低。
v4版本观察到非常相似的性能改进,参数数量仅增加50K。我们还展示了比较MobileNet和2.0SqNxt-23v5的结果,它与其分类性能相匹配。SqueezeNext具有较低的能耗,当使用16×16 PE阵列时,与8×8相比,可实现更好的加速。其原因在于硬件性能方面的深度可分离卷积效率低,这是由于其算术强度差(计算与内存操作的比率)。随着使用更多数量的处理器,这种低效率变得更加明显,因为有了更大的带宽限制。图7显示了能量,推理速度和不同网络精度之间权衡的比较图,可以看出,SqueezeNext提供了一系列网络,可提供卓越的准确性,良好的功率和推断速度。
6 总结
在这项工作中,我们展示了SqueezeNext,这是一种新的神经网络架构,能够以112×更少的参数实现AlexNet的Top-5性能。 SqueezeNext架构的更深层次变化超过了VGG-19的精度,参数减少了31倍。MobileNet是一个非常新颖的移动应用网络,但SqueezeNext能够将MobileNet的Top-5准确率提高1.6%,参数减少1.3倍。SqueezeNext在不使用深度可分的卷积的情况下完成了这一点,深度可分卷积对某些移动处理器架构来说很麻烦。基线网络包括一个两阶段瓶颈模块,用于减少空间卷积的输入通道数量,使用低秩可分离卷积,以及扩展模块。我们还限制了全连接层的输入通道的数量,以进一步减少模型参数。通过在真实神经网络加速器的PE阵列上模拟模型的硬件性能,可以实现更有效的基线架构变化,同时也得到了不同模型的能耗和推理时间。使用每层仿真分析,我们提出了基线模型的不同变化,不仅可以实现更好的推理速度和功率消耗,而且具有更好的分类精度,模型尺寸的增加可忽略不计。神经网络设计与神经网络加速器的性能建模之间的紧密耦合对于得到我们的结果至关重要。这使我们能够设计出一种新型网络,与SqueezeNet / AlexNet相比,能够快速提高2.59倍/8.26倍,节能2.25倍/ 7.5倍,而且没有任何精度降低。由此产生的宽范围的速度,能量,模型大小和精确度权衡由SqueezeNext提供,允许用户为特定应用选择正确的神经网络模型。