基于贡献率的CNN模型卷积核稀疏化方法
2022-07-07李晓宾黎禧
李晓宾 黎禧
(北京航空航天大学 北京市 100191)
1 引言
随着CNN模型的性能提升,CNN模型会不断增加其参数规模,这就会增加神经网络卷积操作次数。在部署在嵌入式平台的情况下,这就要求平台具有更多的存储资源和计算资源,此外,在嵌入式平台运行CNN模型进行推断过程中,需要不断通过I/O总线传输当前传播过程中使用的网络层参数信息,输入至对应结构的IP核完成卷积计算的推断过程,而I/O总线的传输效率往往是有限的,而对高比特位参数的传输效率较低就限制了CNN模型的推断速率。
由于传统的模型参数剪枝方式能够大幅度降低存储体积,但是在模型实际推理过程中需要恢复成稠密矩阵,并不能做到实质上的加速。同时传统量化方法依旧采用浮点数表达形式,无法起到加速效果,也并未考虑嵌入式平台的传输效率的限制。针对这些问题,本文设计了基于贡献率的模型卷积核稀疏化方法,以降低对嵌入式平台的计算资源与存储资源的需求,保障模型推断速度的同时,优化模型参数的运算复杂度。
本文组织结构如下:第二节讨论了相关工作;第三节介绍了基于贡献率的卷积核稀疏化方法设计;第四节给出了本文算法的试验结果分析。第五部分对全文进行总结。
2 相关工作
在深度神经网络发展的过程中,随着在目标检测领域效果不断优越的情况下,网络模型变得更加复杂,其中的模型参数不断增加到百万级甚至千万级,导致对计算资源的需求不断增加,网络模型需求的存储空间不断增加,导致大型神经网络模型在实际应用中受到了诸多应用条件限制。近几年神经网络的压缩算法成了一个研究热点,主要的网络压缩途径有五种,量化、稀疏化、低秩分解、教师-学生网络、轻量化网络设计,量化就是将以往用32bit或者64bit表达的浮点数用1bit、2bit占用较少内存空间的形式进行存储。稀疏化的目的是为了去掉一些不重要的神经元、连接、通道等,低秩分解主要是通过各种分解方法用精简的张量来表达复杂张量,教师-学生网络间接通过提升小网络性能来压缩学生网络的规模,一般可以与其他压缩方法同时使用,轻量化网络设计主要是类似MobileNet 这种设计的非常精简但性能又好的网络。本文针对在这之中研究较为丰富的模型稀疏化和量化进行介绍。
目前许多专家已经提出一些方案解决CNN模型参数规模庞大导致的问题,例如稀疏化模型权重参数,构架稀疏化网络结构,模型参数的低比特位表示方法等。关于降低CNN模型的规模方面的研究是近几年的研究热点,例如更精细模型的设计方法,研究者们试图通过直接涉及轻量级的模型结构来达到模型在嵌入式硬件上的适配部署,例如经典的手工轻量级网络模型有SqueezeNet、MobileNet等,还有目前基于自动手段获得的CNN网络模型FBnet等。 现阶段诸多学者已经提出了诸多网络模型的稀疏化方法。Schmidhuber和Hinton G.E.采用随机移除边的方法,根据该理论实现了对神经网络的有效稀疏化,并在此基础上改良了因训练次数过多导致过拟合的问题。Molchanov等人指出随着网络层越深,其剪枝的程度越高。这意味着最后的卷积层被剪枝得最多,这也导致后面的全连接层的神经元数量大大减少。此外针对网络模型计算复杂度方面,Li等人使用卷积窗口的贡献度排序的方法对卷积层进行迭代稀疏化,实现完全的剪枝。然而,计算敏感性的复杂度对于大型网络来说过于高昂,所以基于量值的修剪方法使用权重的大小来近似其敏感度,具体而言,即去除权重值较小的权重,Han等人将这个想法应用到最近的网络中,并且实现了大幅度的模型尺寸缩减,他们迭代地修剪和全局微调网络,修剪后的权重将始终为零值。Guo等人基于权重值的稀疏化算法,并允许恢复先前迭代中的修剪权重,并紧密地与修剪、全局微调阶段进行结合,从而实现更大的模型压缩倍数。
但是对于多种场景任务来说,需要设计有针对模型算法,从而只能利用不改变模型结构的方式来实现模型的压缩。卷积核的稀疏化作为重要的手段之一,在训练过程中,对权重的更新进行诱导,使其更加稀疏,对于稀疏矩阵,可以使用更加紧致的存储方式,但是使用稀疏矩阵操作在硬件平台上运算效率不高,容易受到带宽的影响,因此加速并不明显。
3 基于贡献率的卷积核稀疏化
目前针对CNN模型的稀疏化方法有多种实现方法,其中较为常见的两个角度是在权重参数规模方面与卷积核规模方面。然而在嵌入式平台上部署CNN模型时,进行推理预测过程中,即使对CNN模型进行了稀疏化存储,依旧会在IP核中将其恢复成稠密矩阵形式,在嵌入式平台上的单层网络执行过程如图1所示。
图1:嵌入式平台单层网络执行示意图
如图1所示,在嵌入式平台上单层网络的执行过程,首先缓存卷积层中的模型参数,IP核1到IP核n负责实现卷积核的计算规则以及尺寸、步长等参数信息。实现结构相同的卷积核,可以通过同一IP核来设置不同的数值,构建多个卷积核,实现复用功能。其后将特征图和卷积核交由DSP进行计算,结果再传入DDR存储。
由此可知,IP核内的参数是以稠密矩阵的形式存储数值,对参数稀疏化后的模型,其卷积核大部分是稀疏矩阵,构建卷积核时依旧会恢复成稠密矩阵形式,再交由DSP处理,虽然卷积核内大部分参数已经是零值,但是依旧会执行计算,并不能对模型发挥提升效果。因此该方向对在嵌入式平台部署CNN模型提升效果并不明显,需要依赖特制的软硬件加速支持方案。而针对卷积核稀疏化的方向,是根据网络层输出的各个通道特征图的信息进行分析,依照稀疏化通道数的比例,筛选出来需要稀疏化的卷积核,不依赖特制的软硬件加速支持方案,就能有效实现在嵌入式平台的模型部署与加速推断。
本文设计采用针对卷积核的稀疏化方法,基于贡献率的设计方案,对神经网络模型的结构进行稀疏化,选择对CNN模型的预测精度贡献较少的卷积核编号,修改CNN模型中的输出通道参数,一方面能够减少CNN模型的参数规模与模型体积,另一方面能够减少模型在推断过程中执行卷积操作的次数,降低对嵌入式平台计算能力的需求,提升CNN模型的推断速度。
其中贡献率的度量方法,根据神经网络模型网络层所包含的各通道的特征图输出结果,根据神经网络推断过程的正向传播方法特征,若当前通道的特征图输出结果接近于零值左右,将作为下一网络层的输入数据,同时神经网络模型需要激活函数引入非线性因素,然而激活函数通常在处理数值较小的输入值时,通常会直接消除该输入值的影响,因此若通道的特征图输出符合上述特征,便无法有效为后续网络层的推断预测做出贡献。其贡献率的计算方法是利用一个批次的输入数据进行度量,获得神经网络网络层的中间特征图输出结果,依照L2正则化的形式计算通道的贡献率。L2正则化项的计算方式如式(1)所示:
表1:Vgg-19稀疏化实验结果
表2:ResNet-50稀疏化实验结果
因为L2正则化的计算方式,能够是依照数据的平方值进行累加,会保障所筛选出的卷积核所输出的特征图数值不会存在诸多为零值的情况,然而会保障其卷积核输出的特征图能够提供更多的数值不为零值的数据特征。
根据计算得到的全部卷积核的贡献率信息,得到全部卷积核对CNN模型的预测结果的影响程度排序,由此可以根据卷积核最终预测结果的贡献率由小到大,稀疏化卷积核。其具体稀疏化过程的示意图如图2所示。
图2:卷积核稀疏化示意图
如图2所示,特征图1、特征图2和特征图3分别为conv层的输入特征图、conv层的输出特征图和Next conv层的输出特征图,其中特征图2中虚线框所包含的特征图内容为conv层中虚线框表示的卷积核2与卷积核4通过卷积运算所产生的特征图。同时由于conv层的卷积核被裁减,势必会导致Next conv层中的卷积核的运算次数有所降低,即将会降低模型在推断检测过程中的检测计算复杂度。
图3:基于贡献率的模型卷积核稀疏化方法算法示意图
在卷积核稀疏化过程中,为将稀疏化过程造成的CNN模型的检测性能损失降到最低,需要构建损失函数来指导卷积核稀疏化过程的方向,以此损失函数来保障在稀疏化过程中不会造成检测精度损失过大,因此可以根据完成稀疏化conv层的卷积核操作之后,判断是否会对其后的推断过程产生较大影响,即判断特征图3说产生的波动变化最小,其数学表达式如式(2)所示:
其中N为Next conv层生成特征图3的通道数量;x为输入图像信息;w与w为原有模型参数信息与稀疏化后的模型参数信息,u为模型架构,由此可得到u(w;x)和u(w;x)作为生成的特征图,即使用均方误差MSE计算方式能够得到由稀疏化过程造成的CNN模型的检测性能损失。其具体稀疏化算法流程如图3所示。
其流程如图3所示,首先预设稀疏化比例,本方法对卷积核进行按层分组,将根据该稀疏化比例,将以此对该层卷积层中包含的卷积核进行稀疏化,当处理其中一层卷积层时,将利用一个批次的图像数据,计算得到全部卷积核的贡献率,其后对卷积层结构进行逐层处理,依照稀疏化比例利用掩码的方法消除贡献率较小的卷积核所计算出的特征图,判断在该方案下是否会对检测性能造成较大损失,调整稀疏化的卷积核组合,直至找到最优稀疏化卷积核的方案,其后迭代到下一网络卷积层结构,直至全部卷积层迭代完毕,根据选择的稀疏化组合,即通过掩码的信息稀疏化处理模型,并对稀疏化后的模型进行重训练,补偿稀疏化导致的精度损失。
4 试验结果分析
首先是基于贡献率的模型卷积核稀疏化方法,考虑到在嵌入式平台上的模型计算特点,本方法主要对稀疏化后的模型精度、计算规模和所需内存进行分析。这部分使用较为常用的模型Vgg19,可以作为神经网络部分的特征提取器,同时参数规模较为合适,检测性能较优,使用数据集为CIFAR-10。设置的不同的稀疏化比例为ratio进行实现。在CIFAR-10数据集上,对Vgg19进行基于贡献率的模型卷积核稀疏化方法实验,其结果如表1所示。
由表1可知,本方法能够较为准确地减少模型中的卷积核,在模型精度损失1%的范围内,能够有效降低Vgg19中的参数规模以及内存消耗需求,最大化能够减少推理过程中的内存消耗减少为24.73%,模型中的参数计算规模为原有的18.86%,能够有效减少CNN模型对嵌入式平台的计算资源与存储资源的需求。
其后利用ResNet50在CIFAR-10也进行了验证实验,其结果如表2所示。
综上所述,本文设计的基于贡献率的模型卷积核稀疏化方法,能够有效的减少模型执行过程中需要的计算资源和内存大小,内存占用减少了4倍,模型参数减少3-5倍。相比于量级的卷积核稀疏化方法,能够有效的保障精度损失的在1%范围内,避免模型精度的大幅度损失。同时能够保障各层在嵌入式平台推理过程中,所占用的内存大小较为均匀,易于资源分配。本方法为神经网络模型在嵌入式平台上的部署提供有效支持。
5 结论
本文提出的基于贡献率的模型卷积核稀疏化方法,针对卷积神经网络中的冗余卷积核,不但降低卷积神经网络中的参数规模,而且减少模型在推理预测的过程中所需要的卷积计算次数,降低对嵌入式平台部署模型是对计算资源的需求,加快模型的检测速率,能够在精度损失在1%内的同时,内存占用减少4倍,模型参数量减少3-5倍。