掌桥专利:专业的专利平台
掌桥专利
首页

一种基于通道梯度剪枝的柔性深度学习网络模型压缩方法

文献发布时间:2023-06-19 09:58:59


一种基于通道梯度剪枝的柔性深度学习网络模型压缩方法

技术领域

本发明涉及一种柔性深度学习网络模型压缩方法,具体涉及智能手机APP 上实现物体识别的实际应用。

背景技术

深度学习在图像识别、目标检测、图像分割、语音识别,QA问答等多个任 务中都得到了应用,并取得了相较传统方法更出色的效果。但深度神经网络出色 的性能与其复杂的结构和自身庞大的参数量密切相关。并且随着技术进步,深度 学习领域有着神经网络模型结构趋于复杂的发展趋势。因此,高性能的深度神经 网络模型对硬盘存储空间,内存带宽和平台计算资源的需求非常高。深度神经网 络模型的高资源需求和手机、手环、自动驾驶车辆等平台的有限资源间的矛盾限 制了其在此类平台的部署工作,降低神经网络的应用价值。为了将深度神经网络 模型部署到资源受限的平台,网络模型需要被进一步压缩来实现保证性能的同时 降低模型复杂度、模型计算量和提升推理速度的目标。

剪枝一些冗余的网络参数是压缩卷积神经网络模型进而加快模型推理的一 种普遍方法。根据修改的粒度不同以及剪枝后的网络结构是否发生变化,剪枝可 以分为非结构化剪枝和结构化剪枝。非结构化剪枝的目标是神经元(通道)内部权 重参数矩阵。在剪枝过程中,通道中的权重会根据一些规则被删除进而减少模型 参数量。在论文Learning bothweights and connections for efficient neural network (Han S,Pool J,Tran J,etal.Learning both weights and connections for efficient neural network[C].Advances in neural information processing systems.2015: 1135-1143.)中Has等将权重大小小于阈值的权重视为冗余参数并剪除得到稀疏 通道。但稀疏通道无法被通用硬件直接加速,使得实际剪枝后的网络依赖特殊设 计的软硬件才能进行推理。结构化剪枝的目标是神经元(通道)。在保证性能稳定 和结构规整前提下,结构化剪枝通过减少每一层的通道数来减少模型参数量和加 速通用硬件上网络推理。专利(郭烈,高建东,赵剑,刘蓬勃,石振周.一种基于网络 层剪枝的深度学习网络模型压缩方法[P].辽宁省:CN111401523A,2020-07-10) 中,郭烈等提出一种以批规范化(Batch Normalization,BN)层Gamma参数大小 作为判别标准的通道剪枝方法,将Gamma参数小于阈值的通道删除。但该方法 采用BN层Gamma参数作为反映实际通道对结果影响大小的标准是欠妥的。这 两者并非完全一致。在论文基于层融合特征系数的动态网络结构化剪枝(卢海伟, 袁晓彤.基于层融合特征系数的动态网络结构化剪枝[J].模式识别与人工智 能,2019,32(11):1051-1059)中,卢海伟等人提出一种基于层融合特征系数的动态 网络结构化剪枝方法,同时考虑BN层参数和Dropout操作对特征图的影响,利 用多动态参数寻找并删除冗余通道,获取最优网络结构。但是该方法将卷积层 +BN层的结构转化为全连接层结构后,引入超参数来控制压缩率不能直接反映 实际压缩率,即无法在剪枝结束前预测最终的每秒浮点运算次数(Floating-point Operations Per second,FLOPs)压缩率。此外,被剪后的通道不再提取特征意味 着剪枝后的模型不可避免出现一定程度的性能下降。

发明内容

本发明克服现有技术的上述缺点,提出一种基于通道梯度剪枝的柔性深度学 习网络模型压缩方法。

本发明在剪枝过程中考虑剪除神经元对损失函数变化的影响,基于一阶泰勒 展开式将损失函数的变化值与参数大小和参数梯度相关联,得到仅依赖参数值和 参数梯度的通道重要性评估标准。为每个卷积核设置一个遮掩层(Mask layer)张 量,其值由所述的通道重要性评估标准确定,使得参数可选择地参与到网络计算 中。同时,柔性剪枝使得包含被剪枝参数的通道可以在可能的需要时被重新激活 从而重新学习提取特征。整个网络修剪更为可控,并且可以比较每次剪枝后保存 通道数对应的FLOPs和目标FLOPs差异,自动地更新需要被剪枝的通道个数。 本发明还提供了经剪枝后的紧凑模型导入到智能设备中通过应用APP实现物体 识别,包括实时物体识别功能和对照片中物体识别功能。

一种基于通道梯度剪枝的柔性深度学习网络模型压缩方法,具体步骤如下:

步骤1:获取待剪枝的深度卷积神经网络初始模型,这一过程具体实现是在 卷积层输出后添加额外的遮掩层,上一层卷积层的输出即当前卷积层的输入,输 入可以记为z

z

步骤2:训练网络模型,更新模型掩码信息,设定模型的压缩率s(既可以 指网络剩余通道数占全部通道数的百分比,也可以表示剩余FLOPs占原FLOPs 的百分比),在压缩率的限制下,使用训练集训练待剪枝深度卷积神经网络模型;

步骤2-1:训练过程中,计算全局通道重要性指标:依据模型表现越好,损 失函数越低这一先验知识,冗余的通道对于模型变化的影响是相对较小的,以损 失函数值的变化幅度来体现当前通道的重要性程度,其数学表示式为:

步骤2-2:训练过程中,网络的权重参数W通过随机梯度下降更新,掩码数 组M则通过迭代阈值选择方法更新,生成阈值和调整掩码过程是将考虑剪枝的 通道按照通道的重要性指标从小到大排序,生成一张表,包括index,key和value, index为序列下标,key为通道坐标(l,i)((l,i)表示第l层第i个通道),value为 通道重要性指标

T

步骤2-3:在训练过程,柔性迭代更新掩码信息,对于第m轮训练,重置掩 码全部为1,整个网络在数据集上被训练,按照步骤2-2,步骤2-3更新掩码信 息并保存,对于第m+1轮训练,依据上一轮的掩码信息,屏蔽对应通道,残余 网络在数据集上被训练,对于第m+2轮训练,按照第m轮训练过程,整个网络 在数据集上被训练,此时第m+1轮被剪枝的通道恢复,重复上述迭代过程,直 到跑完所有训练轮数后停止训练,保存最后得到稀疏模型和掩码信息;

步骤3:步骤2-3得到的掩码信息是一张表,包括key和value,key为通道 坐标(l,i)((l,i)表示第l层第i个通道),value为掩码值0或1。统计每一层掩码 值为1的通道的个数,按照每一层剩余通道数量重新构造一个新的规模更小的网 络,将新网络的通道坐标按顺序对应掩码信息中的通道坐标,再把稀疏模型中仍 然处于激活态的权重参数按照坐标对应关系一一保存到新网络中,得到紧凑的深 度卷积神经网络模型;

步骤4:完成紧凑的深度卷积神经网络模型重训练,在原数据集上重新训练 剪枝后的紧凑深度卷积神经网络模型,超参数设置为每次迭代的批次数量选取为 128,一共迭代50~100个epoch,优化方法选择带0.90~0.99动量的随机梯度下 降,权重衰减为0.0001~0.001,初始学习速率设置为0.01~0.1,然后在loss不发生 显著变化的3个epoch后将学习率除以10。输出性能良好且模型参数量少的最 终网络模型。

本发明还将通过基于通道梯度剪枝的柔性深度学习网络模型压缩方法压缩 的紧凑神经网络模型应用到智能手机的物体识别APP中,实现视频形式的实时 物体识别和对单张图片内物体的识别。模型导入APP实现物体识别步骤如下:

步骤1.加载并调用模型,在电脑端将剪枝好的模型转换为torchScript格式并 保存为后缀.pt的模型文件,并将其放在安卓项目的assets文件夹下,同时,在 安卓端的Android Studio中导入Pytorch1.4依赖包,并通过Module.load函数导 入assets路径下的模型文件,本发明将通过Ptorch自带的Pytorch Mobile移动端 框架运行模型文件;

步骤2.需要调用摄像头加载图像,导入androidx.camera的依赖包CameraX。 请求打开手机的相机权限,若允许,则可以使用相机,调用相机的预览图像在 UI界面上显示,若不允许,则提示信息,其次打开摄像头,注册ConnectionCallback 和OnImageAvailableListener,设置camera获取图片的一些输出参数,包括图片 预览大小和摄像头方向等,然后,调用相机,每隔0.5s取一张摄像头所拍到的 最近队列的图片,将获取到的图像调整为宽224,高224的图像,输入到神经神 经网络中进行处理,调用子线程进行图像格式转换并且实现模型计算以及UI界 面的更新,最后,当预处理结束,相机设备会回调之前注册到的 OnImageAvailableListener;

步骤3.获取模型结果,首先,通过imageYUV420CenterCropToFloatBuffer 函数将YUV420形式的Image类型图像转化成维度为(1,3,224,224)的Tensor 输入,对于输入数据按照ImageNet数据集的标准预处理方法做预处理,转换好 的图像以Tensor形式输入模型进行前向计算,将神经网络的输出节点和输出值 拷贝出来,得到概率最大的分类类别,最后,保存单帧图片的推理时间,FPS, 平均推理时间,以及最高概率的输出类别,将结果通过安卓提供的textview组件 显示在屏幕上面,从而实现实时物体识别,此外本发明还添加了导入单张图片进 行图像分类的功能,将图像以位图的形式从相册导入,后续同实时物体识别。

本发明的优点:相比传统的基于L1或L2范数的剪枝方法,目标压缩率与 实际压缩率直接相关,剪枝结果可预测性更强,更加快速方便地得到最优结构。 相比传统方法下权重接近0的通道对网络预测结果实际仍存在影响,基于梯度评 估标准和遮掩层约束得到的需要被剪枝通道直接不参与训练从而不干扰预测结 果。这意味着更加精确地区分通道的重要性差别,提升剪枝精度。迭代更新阈值 使得掩码数组是动态变化的,这意味着允许算法对“错剪”,“漏剪”等异常进行 修复,而传统方法不存在这一机制。本发明将剪枝后的神经网络模型实际应用到 物体识别的智能手机APP中,进一步证明了本发明的应用价值。

附图说明

图1是本发明的方法示意流程图。

图2是给考虑被剪枝的卷积层添加遮掩层约束示意图

图3a~图3c是本发明的网络训练过程中根据通道重要性指标更新掩码信息 的示意图,其中图3a是在第k个训练epoch时,根据通道重要性指标修改部分 掩码信息(将Value

图4a~图4b是本发明具体实施中对物品识别的结果,图4a是原始模型识别 结果,图4b是紧凑模型识别结果。

具体实施方式

为了能够更清楚地理解本发明的目的、特征和优点,下面结合附图和具体实 施方式进一步对本发明的技术方案做详细描述。

本发明是一种基于通道梯度剪枝的柔性深度学习网络模型压缩方法,具体过 程如下:

步骤1:获取待剪枝的深度卷积神经网络模型

步骤1-1:对原始的深度卷积神经网络中需要考虑剪枝的卷积层添加遮掩层 约束。将从网络上获得预训练权重参数导入到已添加约束的原始深度卷积神经网 络,形成待剪枝的深度卷积神经网络模型。其中遮掩层的通道数对应考虑剪枝的 卷积层通道数,也对应掩码长度。掩码则表征对应通道的重要性。

具体地,如图2所示,考虑剪去ResNet的Bottleneck结构中第一层卷积层 和第二层卷积层,那么只需要在这两层后添加遮掩层。为了保证旁路连接的特征 图数量与第三层卷积层的输出特征图数量是相同的,第三层卷积层不被纳入考虑 被剪枝的网络层的范围。

步骤1-2:初始化遮掩张量m

其中z

步骤2:训练网络模型,更新模型掩码信息

步骤2-1:依据模型表现越好,损失函数越低这一先验知识,直觉上,冗余 的通道对于模型变化的影响是相对较小的。因此,如果以损失函数值的变化幅度 来体现当前通道的重要性程度,其数学表示式为:

其中

步骤2-2:根据各个通道的重要性指标对各个卷积核做贡献度排序,依照压 缩率计算得到阈值,重要性值低于阈值的通道的对应掩码置0,同时通道输出将 被遮掩层屏蔽,如图3a所示,在第k个epoch结束时,遮掩层屏蔽对预测贡献 度低的通道,得到掩码数组以及结构稀疏的网络模型。

步骤2-3:如图3b所示,在第k+1至第k+n-1个epoch过程中,网络模型按 照冗余通道屏蔽后的网络结构在数据集上被训练。如图3c所示,在第k+n个epoch 时,遮掩层权重的第一维全部置1,此时所有被屏蔽通道被激活,通道参数被更 新。按照步骤2-2,迭代更新阈值,实现动态更新掩码数组以及结构稀疏的网络 模型。

步骤2-4:在步骤2-3结束时,会依照掩码信息预测剪枝模型的压缩程度是 否达到预期目标,如剩余计算量FLOPs,通道剩余数量。若是,结束步骤2;否 则调整压缩率,迭代步骤2-2,2-3。

步骤3:根据掩码信息,完成模型剪枝

依次判断掩码数组M中的各个掩码是否为0,根据掩码的层名重新组织掩 码数组得到一张掩码信息表,包括key和value,key为通道坐标(表示第层 第个通道),value为掩码值0或1。统计每一层掩码值为1的通道的个数,按 照每一层剩余通道数量重新构造一个新的规模更小的网络,将新网络的通道坐标 按顺序对应掩码信息中的通道坐标,再把稀疏模型中仍然处于激活态的权重参数 按照坐标对应关系一一保存到新网络中,得到紧凑的深度卷积神经网络模型。

步骤4:完成紧凑的深度卷积神经网络模型重训练

步骤4-1:在保留下来的网络权重参数和紧凑的深度卷积神经网络模型的基 础上,使用数据集重新训练网络模型。重训练与预训练的过程一致,但需要根据 紧凑的深度卷积神经网络模型调整超参数,使得模型收敛至最优解,即获得最终 的网络模型。

步骤4-2:实施条件与结果评估:在本发明实施例中,代码实现和深度学习 框架分别是Python和PyTorch。数据集为ImageNet-1k,其中包含128万张训练 图像和5万张验证图像,共1000类。图片的每个通道都经过归一化操作,在数 据增强中,将图片补零,做随机翻转,随机裁剪后得到长宽为224的图像块,在 训练过程中,每次迭代的批次数量选取为128,一共迭代100个epoch,优化方 法选择带0.90动量的随机梯度下降,权重衰减为0.0001,初始学习速率设置为0.01, 然后在loss不发生显著变化的3个epoch后将学习率除以10。

卷积神经网络模型剪枝的评价指标一般采用原网络在测试集上的精度,以反 映模型在剪枝前后性能表现的变化情况。同时,模型的FLOPs反映模型剪枝和 加速效果。

本发明实例与现有方法在ResNet-50模型和ImageNet-1k数据集上的效果对 比结果如表1所示,其中除原始模型外,所有方法的裁剪目标均设为剪掉50% 的通道数。

表1.各方法在ImageNet-1k数据集上压缩ResNet-50模型的结果

步骤5:如图4所示,紧凑的深度卷积神经网络能够被应用到智能手机上, 能够有效完成对照片内物体识别和实时物体识别等任务。实现视频形式的实时物 体识别和对单张图片内物体的识别。模型导入APP实现物体识别步骤如下:

步骤5-1.加载并调用模型,在电脑端将剪枝好的模型转换为torchScript格式 并保存为后缀.pt的模型文件,并将其放在安卓项目的assets文件夹下,同时, 在安卓端的Android Studio中导入Pytorch1.4依赖包,并通过Module.load函数 导入assets路径下的模型文件,本发明将通过Ptorch自带的Pytorch Mobile移动 端框架运行模型文件;

步骤5-2.需要调用摄像头加载图像,导入androidx.camera的依赖包CameraX。 请求打开手机的相机权限,若允许,则可以使用相机,调用相机的预览图像在 UI界面上显示,若不允许,则提示信息,其次打开摄像头,注册ConnectionCallback 和OnImageAvailableListener,设置camera获取图片的一些输出参数,包括图片 预览大小和摄像头方向等,然后,调用相机,每隔0.5s取一张摄像头所拍到的 最近队列的图片,将获取到的图像调整为宽224,高224的图像,输入到神经神 经网络中进行处理,调用子线程进行图像格式转换并且实现模型计算以及UI界 面的更新,最后,当预处理结束,相机设备会回调之前注册到的 OnImageAvailableListener;

步骤5-3.获取模型结果,首先,通过imageYUV420CenterCropToFloatBuffer 函数将YUV420形式的Image类型图像转化成维度为(1,3,224,224)的Tensor 输入,对于输入数据按照ImageNet数据集的标准预处理方法做预处理,转换好 的图像以Tensor形式输入模型进行前向计算,将神经网络的输出节点和输出值 拷贝出来,得到概率最大的分类类别,最后,保存单帧图片的推理时间,FPS, 平均推理时间,以及最高概率的输出类别,将结果通过安卓提供的textview组件 显示在屏幕上面,从而实现实时物体识别。实践证明本发明能保证网络性能的同 时大大减小网络模型的大小,并加速网络模型的运行,具备实际应用价值。

本发明还提供了基于通道梯度剪枝的柔性深度学习网络模型压缩方法在实 际物体识别APP上的应用效果,剪枝后模型对物体的识别速度大幅提升。通过 本发明中的技术方案,实现在保证维持原有网络精度的前提下,对现有主要深度 卷积神经网络模型进行有效压缩,解决了深度神经网络模型因高存储空间占用, 高内存占用,高计算资源占用导致无法部署到嵌入式、智能手机等设备上的技术 问题,拓展了深度神经网络的应用范围。

本说明书实施例所述的内容仅仅是对发明构思实现形式的例举,本发明的保 护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于 本领域技术人员根据本发明构思所能够想到的等同技术手段。

相关技术
  • 一种基于通道梯度剪枝的柔性深度学习网络模型压缩方法
  • 一种基于通道剪枝和量化训练的联合神经网络模型压缩方法
技术分类

06120112377117