深度学习模型压缩方法在竹种分类中的应用研究

2021-01-13 07:27王志玲李绍稳
复旦学报(自然科学版) 2020年6期
关键词:剪枝网络结构权值

王志玲,李绍稳,金 秀

(1.安徽农业大学 信息与计算机学院,安徽 合肥 230036;2.智慧农业技术与装备安徽省重点实验室,安徽 合肥 230036)

竹类植物是禾本科竹亚科植物,全球约有88属1400多种,主要分布在亚太、拉美和非洲地区[1],我国竹林面积约占森林总面积的3%,达到了六百余万公顷[2].对竹种种类的识别,不仅是竹类学家研究竹类属性与应用的重要前提,也是人们认识竹类、了解自然的方式.因此如何高效快速对竹种进行分类具有十分重要的意义,对于推进现代信息技术与林业深度的跨界融合也具有实际理论意义.竹种分类的研究一直是植物系统分类研究中的重要部分之一,有许多植物学家为之探索.近代以来,主要以花和果实形态作为竹种分类的指标.1803年建立了第一个伞生竹属Arundinaria Michaux[3].1956年,Holttum[4]依据子房结构,提出了7族4亚族分类系统.我国竹类学家耿以礼[5]在1957年提出“耿式系统”,主要通过竹子开花的顺序划分竹子种类.后来耿伯介等[6]对“耿式系统”进行前后3次修正和补充,并将研究内容编入《中国植物志》第九卷第一册竹亚科,且目前一直在使用.李欣等[7]通过计算机技术以竹种形态学作为研究对象,使用支持向量机(Support Vector Machine,SVM)做为竹种分类的分类器.

传统的基于机器学习的图片分类,需要针对竹种图片对象设计最优特征选择,选择图片特征不明显,得出的结果会出现较大偏差.而由于竹种类型、生长时期、光照时间、地理环境复杂等因素的影响,导致竹种特征的提取也相当困难.深度卷积神经网络(CNN)利用不同的卷积核、池化和最后输出的特征向量的大小来控制整体模型的拟合能力,比传统机器学习方法具有更强大的特征学习和特征表达能力,所提取的特征更加多样化.该方法采用局部感受野、权值共享和空间采样技术[8],使得网络的训练参数相比于神经网络大大减少,具有适用性强、特征提取与分类同时进行、泛化能力强、全局优化训练参数少等优点[9].AlexNet由Alex等[10]2012年提出.VGGNet模型[11]是2014年ILSVRC竞赛的第二名,第一名是GoogLeNet.但是VGGNet模型在多个迁移学习任务中的表现要优于GoogLeNet.之后,AlexNet和VGGNet网络结构模型被广泛应用到各个领域.竹子作为重要的多用途森林资源,在世界各国的地区发展和社会发展中起着举足轻重的作用,其研究也越来越受到世界各地的重视.神经网络模型压缩方法主要分为低阶近似[12],剪枝[13],量化[14]和二值化[15],知识蒸馏[16]等.目前国内外主要以果实形态作为竹种分类的指标,本文使用AlexNet和VGGNet进行竹种分类,为以后基于深度学习的竹种分类模型移植到手机端提供理论依据.

1 竹种分类卷积神经网络模型

1.1 模型设计

目前卷积神经网络模型很多,本文使用了神经网络中的VGGNet-16和AlexNet网络结构作为实验特征提取网络,对竹种图像数据集进行训练.AlexNet整个网络结构是由5个卷积层和3个全连接层组成,深度总共8层,输入一张224×224像素的竹种图像,在第1、2、5层卷积之后增加了Max-Pooling层,还在每一个Pooling后包含了局部响应归一化处理.AlexNet中每层卷积层中只包含一个卷积,卷积核的大小是7×7.VGGNet-16网络是在AlexNet网络的基础上发展而来的,并且将网络深度增加到16~19层,整个网络都使用了同样大小的3×3卷积核尺寸和2×2最大池化尺寸,由13个卷积层和3个全连接层组成.相较于AlexNet,VGGNet-16最大的区别就是用小尺寸的过滤器代替大尺寸的过滤器,下图1是VGGNet-16网络结构图.

1.2 卷积神经网络模型参数解析

卷积神经网络主要有卷积层、池化层、全连接层组成[17],卷积层目的是进行特征提取,神经网络的核心在卷积层,卷积层的核心在卷积运算.低卷积层往往只关注图像整体特征,提取很少能准确描述竹种图片的特征元素,高层卷积更加关注图像复杂特征,在卷积运算中不断迭代更能表现竹种特征.

经过卷积操作后学习到竹种图像特征之后,在卷积层后加一个池化层,在尽可能保留竹种图片空间信息的前提下,降低图片的尺寸,增大卷积感受野,提取高层特征,同时减少网络参数,可以根据提取出的竹种特征进行分类.对于卷积神经网络而言,每个卷积层的参数量计算见公式(1):

Params=C0*(Kw*Kh*Ci+1),

(1)

其中:C0表示输出通道数;Kw表示卷积核宽;Kh表示卷积核高;Ci表示输入通道数.括号内的w*h*Ci表示一个卷积核的权重数量,+1表示偏置单元bias,括号内表示一个卷积核的参数量.

对全连接层而言,其参数量计算见公式(2):

Params=(I+1)*O,

(2)

其中:最初由feature map flatten而来的向量视为第一层全连接层,即此处的I;O表示偏置单元bias数量.表1是AlexNet网络结构卷积层卷积核和参数量,其中Con表示卷积层.

表1 AlexNet网络结构卷积层参数Tab.1 AlexNet network structure volume layer parameters

深度学习网络结构空间复杂度主要包含两部分总参数数量和各层输出特征图,参数量是指模型所有带参数的层的权重参数总量即模型体积,特征图是指模型在实时运行过程中每层所计算出的特征图大小.空间复杂度由公式(3)表示.

(3)

其中:K表示卷积核的尺寸;C表示通道数;D表示网络层数;M表示空间尺寸.

2 竹种分类卷积神经网络模型压缩方法

2.1 模型压缩思想

竹种分类压缩模型是基于VGGNet和AlexNet网络结构,这两种网络结构主要有卷积层和全连接层组成,由于参数共享原因,连接层的参数远大于卷积层,但是卷积层也存在大量冗余参数,所以本文基于权重的剪枝主要对是卷积层和全连接层参数进行删减.在VGGNet-16网络结构中,卷积层的秒浮点运算次数(FLOPS)占了整个模型的90%,全连接模型参数占了整个模型参数的89.36%,在剪枝算法中对卷积层和全连接层进行剪枝.本文使用的剪枝方法是指在权重张量中去除不重要的权值,着眼点是神经网络的参数.将低于某一阈值的神经网络参数值设置为0,以删除估计的神经网络各层之间不必要的连接,减少神经网络层之间的连接数量,减少计算中涉及的参数,从而降低操作次数,在训练过程中使神经网络能够适应变化.经过不断训练,确定好稀疏度后,根据动态设定阈值进行剪枝训练.模型剪枝主要是对卷积层和全连接层进行不重要权值删除.模型的剪枝实际上是一个迭代的过程,这通常称为“迭代式剪枝”.防止试验中一次性修剪得太多,则网络可能严重受损,无法恢复.迭代的过程就是剪枝和模型训练两者的交替重复的过程.再将剪枝后的稀疏模型权值通过K-Means++算法进行聚类,通过K-Means++聚类算法对神经网络各层的权值聚类之后,将聚类后的中心表示为权值,从而实现权值共享.同一个权值被本层多个连接共同享有.由于k值远远小于权值数量,从而降低权值数量,实现竹种分类模型压缩.

2.2 模型剪枝

2.2.1 稀疏度的设置

稀疏度是指该层有多少权重为0,若稀疏度为50%,则该层50%权重为0.稀疏度可以预先设置,指定最初目标稀疏度和最终目标稀疏度.随着训练的进行,修剪程序将按计划执行,消除(即设置为零)幅度值最低的权重,直到达到最终当前稀疏目标为止.在竹种分类模型压缩实验中发现,初始稀疏度不宜设置很大,若是设置过大会将原本重要的权重剪除,降低准确率,稀疏度需要逐渐提高,效果最佳.本文稀疏度通过不断试验,得到将最初稀疏度设置为0.5和最终稀疏度设置为0.9剪枝后效果最好.0.5的稀疏度到0.9的稀疏度之间是自动逐步修剪的,处于动态变化,在每一步找到最优稀疏度.这个自动逐步修剪算法,从训练步骤开始,剪裁开始的训练步数为t0,裁剪的频率为Δt(相对训练步数),将稀疏度从初始稀疏度值(本文初始稀疏度值为0.5),增加到修剪步骤跨度内的最终稀疏度值,二进制权重掩码Δt更新一次.稀疏度从0.5到最终的0.9,在进行剪枝操作时,会再次计算此时设置的稀疏度,通过平滑上升函数来达到最终稀疏度.各个时刻稀疏度都是变化的,某个时刻的稀疏度计算公式为:

(4)

其中:一开始的稀疏度为Si,最终稀疏度为Sf.

2.2.2 阈值的设置

为了使特征提取因素更好分类竹种,本文使用了动态设置阈值方法去除权重中不重要的权重.阈值是指每层设置一个阈值,低于这个门限的权值被设置为零.其中每个权值都有与之对应的掩膜(mask)代表其剪枝状态,每层的权值矩阵w(l)设置一个同等大小的掩膜矩阵M(l)来实现的.掩膜的取值为1和0,取值为1表示该权值被保留,取值为0表示该权值被剪除,而M(l)通过比较权值与此层阈值进行更新,公式(5)是权值变化公式,根据权值的分布为每一步计算一个阈值t(l).通过大量实验,寻找一个最优的阈值定值,但是最优也不是对于每一层最优.所以本文稀疏度设置后,根据每层不同参数大小,设置的稀疏度不同,相对应的阈值也不一样,阈值变化是通过稀疏表,它决定权重的阈值大小.当神经元之间的权重低于此阈值时,就认为此连接不重要,删除此连接[18].

(5)

阈值由公式(6)计算,

t(l)=μ(l)+c(l)σ(l),

(6)

2.2.3 剪枝过程

本文通过动态设置阈值的方法,避免在某些卷积层不必要的阈值保留.标识为true的权值即为之前剪枝过程中被剪除的,在重新训练的过程中,这一部分权值不会随着训练而更新,这样,其他权值可以继续得到训练,而模型依然保持剪枝的稀疏性.剪除对神经网络模型影响较小的权值,从而降低模型中的不重要权值,减少模型存储的容量,提高竹种分类模型的运行效率.通过实验表明,权值的减少会带来竹种分类精度的减低.本文试验通过掩膜矩阵的方式实现了剪枝模型的重新学习,对于每一个被修剪的层,在被剪枝的层中,会加入一个二元掩码矩阵,该矩阵是和此层权重大小形状相同.该矩阵的作用是标志该位置的权值在之前的剪枝过程中是否被剪除,该矩阵的内容随之前的剪枝过程而保存.图2是掩膜矩阵的原理图.在重新训练的过程中,权值会按照绝对值大小排列,在训练过程中通过将掩码置0来达到期望的稀疏度.掩码置0的权值会被剪除,不会随着训练更新.M没有被剪除的权重继续训练,剪枝和训练同时进行.可以保存竹种分类剪枝模型的稀疏性.

指定好稀疏度后,下一步是阈值的设定.在剪枝过程中阈值是动态变化的,可自动设置剪枝从哪一步开始到哪一步结束,并且可设置多少步剪一次即剪枝频率.本文在不断试验中,得到初始稀疏度为0.5到最终稀疏度0.9,从开始步数到结束步数剪枝,且每100步剪枝效果相对最好.公式(7)是结束步数计算公式.

(7)

其中:totalsamples是总的训练样本数;batch_size是训练批次大小;epochs是轮次;Ceil用来计算大于等于括号中数值的最小整数;astype表示将括号中数值转化成整型32位.结束步数和总的训练样本数与训练批次大小,训练轮次有关.

2.3 权值量化

(8)

K-Means++的目标就是通过选择C从而最小化代价函数φw(C).使用肘方法来评价聚类效果的好坏,肘方法通过误差平方和(Sum of the Squared Errors,SSE)进行评价.

(9)

其中:ci是第i个簇;p是ci中的样本点;mi是ci的质心;SSE是所有样本的聚类误差,能够表示聚类的效果.K-Means++算法流程见表2.

表2 用于竹种分类的K-Means++算法流程Tab.2 Process of K-Means++ algorithm for bamboo classification

量化的方法通过量化模型的参数值来压缩神经网络模型,减少深度学习模型的冗余问题.权值量化是将32bit浮点型量化后8bit的整数型.量化取输入图片中的最小值和最大值,分别对应被量化的输入中的最小值(0)和最大值(255).公式

(10)

表示实际值和量化值的映射关系,其中:r表示实际值;q表示量化的比特数.这是将keras模型转换为TFLite的平面缓冲区的一部分,从而使模型大小减少了75%.基于VGGNet-16网络结构量化后的竹种模型tflite文件大小为128M,基于AlexNet网络结构量化后的竹种模型tflite文件大小为44.5M.对于大模型来说,冗余参数比较多,直接量化的影响比较小,所以本实验直接量化后精度几乎没有改变.

3 模型训练及其分析

3.1 实验环境与图像采集

训练竹种图像数据分类实验中,采用Python编程,Python是一种简单易懂,功能强大的脚本编程语言[19].在实验室服务器上运行.服务器硬件环境为Intel(R)Xeon(R) CPU E5-2630 v4 @2.20GHz,128G内存,两张16G显存,使用VGGNet-16网络结构和AlexNet网络结构进行训练.本实验中竹种图像数据集来源于徽省宣城市广德县横山国家森林公园,共计9类竹种(图3).为了使分类结果更具有普遍性,本实验的竹种图片采取各种角度拍摄,竹种高矮,粗细,竹竿大小,竹叶纹理,距离远近皆有,每种拍摄40张.对40张原图片进行旋转、平移、错切变换、放大、翻转5种增强操作以增加竹种样本的多样性,这样每张原图片扩充为14张,加上原图一共15张。增强后的数据集中训练集有图片3780张,测试集有图片1620张。

3.2 模型训练与压缩分析

本试验在Tensorflow框架上使用了VGGNet-16和AlexNet网络结构对竹种图像进行训练.对9类竹种依次打上0~8的标签,将训练集3780张竹种图片进行学习,神经网络通过卷积层,池化层,全连接层,自动提取各类竹种特征进行训练,对学习出来的模型,将分类器参数设置为9类,将测试集1620张竹种图片进行分类.

将训练参数保存为模型,对VGGNet-16卷积层和全连接层进行剪枝,剪枝和模型训练两者的交替重复进行.实验中,剪枝后训练的batch_size设置为128,epoch为200,采用ReLu激活函数,加入Batch Normalization对每一批数据进行归一化处理.RMSprop的优化器,学习率为0.001和最大池化法.图4为VGGNet-16网络结构第一个卷积层(Convl)和第一个全连接层(Dense)稀疏度随着剪枝步数从初始稀疏度0.5开始变化到最终稀疏度0.9的过程.初始时刻,稀疏度提升较快,而越到后面,稀疏度提升会逐渐放缓,慢慢靠近目标稀疏度.图5是VGGNet-16网络结构中第一个卷积层和第一个全连接层随着步数阈值在不停变化,每一层特征参数、权重值等不同,所以剪枝过程中阈值也是不停地变化.

图6是VGGNet-16网络结构剪枝后训练过程,图的纵轴表示模型收敛后准确率前5名的平均值.VGGNet-16网络结构的剪枝后训练集准确率结果为0.96,测试集准确率结果为0.64.图7是AlexNet网络结构训练的剪枝训练集准确率结果为0.94,测试集准确率结果为0.61.VGGNet-16剪枝前模型大小为512.31M,剪枝后模型可压缩到273.82M,将模型内存占用降低了46.5%.AlexNet剪枝前模型大小为175.81M,剪枝后模型可压缩到94.14M,将模型内存占用降低了46.4%.

量化的过程是一边量化一边训练,量化训练取batch_size为128,epoch为200,采用ReLu激活函数,加入Batch Normalization对每一批数据进行归一化处理,优化器为Adadelta.将VGGNet-16剪枝量化后的tflite文件进一步压缩可压缩到34.2M;将AlexNet剪枝量化后的tflite文件进一步压缩可压缩到11.76M.

4 实验结果

基于深度学习的竹种分类,对模型进行训练测试,结果见表3(第746页).由表3可以看出不同竹种在VGGNet-16和AlexNet网络结构准确率都不同.野外影响因素太多,图片采集区域不够准确,影响模型压缩的质量.在自然光下采集的图片背景复杂,采集角度,太阳光照等因素等导致最后得到竹种识别率不高,其中绿槽毛竹分类效果较差,龟甲竹分类效果最好,与其拍摄竹种图片角度和龟甲竹其自身特点有很大关系.实验中主要拍摄了龟甲竹的杆,其杆粗者可达20余厘米,竹子形态像龟背,特征明显,分类效果相对较好.由于9种竹种差异很大,分类效果之间存在很大差异,使用方差检验,最好分类值与平均水平之间没有显著性差异.

表3 9种竹种分类结果Tab.3 Classification results of nine bamboo species

将基于竹种分类剪枝前后模型加载到笔记本上进行测试.以下为笔记本配置,型号华硕,CPU是Intel Core i5-4200U,1.66Hz,运行内存4GB,在网络通顺环境下进行测试.结果见表4,载入VGGNet-16网络竹种分类剪枝前的模型进行测试,用时265s,VGGNet-16网络竹种分类剪枝后的模型进行测试,用时98s.使用AlexNet网络结构训练出的模型测试相同100张竹种图片时间,载入剪枝前的模型,用时126s,载入剪枝后的模型,用时40s.

表4 Web端深度网络模型压缩前后对比Tab.4 Comparison of Web end deep network model before and after compression

5 结 语

本文基于VGGNet-16和AlexNet网络结构训练竹种分类模型,再对训练后的模型进行剪枝和量化压缩操作.使用采集的9种竹种图片数据进行迁移训练,对比分析测试集准确度、F1值、召回率、压缩后测试时间等评价标准,实验结果表明基于AlexNet网络结构训练压缩后的竹种分类模型只有11.76M,其能更好的部署到移动端.实际上本文方法可对具有卷积层和全连接层的网络结构进行有效压缩,可使竹种分类识别走入人们的日常生活,网络剪枝和量化成了压缩的重要手段,也体现了压缩方法在解决深度学习问题时有实际的意义.

猜你喜欢
剪枝网络结构权值
一种融合时间权值和用户行为序列的电影推荐模型
人到晚年宜“剪枝”
基于5G MR实现Massive MIMO权值智能寻优的技术方案研究
基于YOLOv4-Tiny模型剪枝算法
快递网络结构研究进展
基于激活-熵的分层迭代剪枝策略的CNN模型压缩
一种基于互连测试的综合优化算法∗
基于AutoML的保护区物种识别①
剪枝
汽车零部件供应网络结构