李振权 李功燕
1(中国科学院大学微电子学院 北京 100049)2(中国科学院微电子研究所 北京 100029)
我国是脐橙生产大国,脐橙表面瑕疵是影响脐橙销售的重要因素。脐橙自动分级的流程主要是:(1) 用高速相机在线采集脐橙图像;(2) 实时处理图像,得到脐橙所属类别;(3) 控制设备将脐橙送入相应的分类仓库。目前我国脐橙自动分级检测存在正确识别率低、实时性不强等缺点,部分工业现场仍采用人工方式进行分级。因此寻找高效、合适的脐橙品质分级算法对农机设备智能化、脐橙分级全自动化有着重要的意义,能够有效地促进脐橙产业的发展,极大提高脐橙生产力。随着计算机技术的发展与应用,国内外对图像处理在农业生产中的应用进行了较深入研究,越来越多的脐橙分类算法被提出,主要分为传统的数字图像处理与深度学习两类算法。文献[1]采用多特征量向量对研究对象进行分级检测,取得了较高的识别率,但因考虑的特征量过多,而降低了系统的实时性。文献[2]提出一种基于前馈神经网络的混合算法进行水果分类,然而这种算法的精度上有所欠缺,适应性也不够强。文献[3]直接采用卷积神经网络对脐橙进行分类,人工标注脐橙类别,不能适应不同客户的需求。文献[4]采用基于深度学习目标检测的方法检测脐橙瑕疵、果梗和脐部,然而目标检测框架较大,耗时长,并且需要后处理让其应用于分类等场合。
本文以脐橙快速、准确分级为目标,设计高效的神经网络模型结构,提出多任务即分类与回归的方式提升分级效果,利用通道剪枝的方式对算法进行优化,以提高现有算法的准确度和速度。
图 1所示是一套脐橙分级系统设备。其机器视觉部分主要由高分辨率工业相机,光电开关,LED光源和带滚轮的传送带组成,其中高分辨率工业相机和光电开关用于控制图像捕获。相机的分辨率为1 280×1 024,帧率为60帧/s。为了获取整个脐橙的表面信息,当相机捕捉图像时,脐橙在传送的过程中与滚筒一起旋转。
图1 脐橙在线分级
果梗、脐部与瑕疵具有相似的特征,数据采集时,椭球形的脐橙横置摆放,因此拍摄的图像中,果梗和脐部出现的样本数所占比例比较低。数据的不平衡以及样本种类的不够丰富,往往让神经网络的拟合出现偏差。为了缓解以上问题,本文通过采样的方式,从总体数据集抽取训练样本时,对果梗和脐部特征明显的样本置以更大的概率,并随机旋转重复抽样的图像。
分类信息如图2所示,其中:(a) 代表花皮果,表示可以直接分类,标注为1,忽略输出的回归值;(b) 代表普通果,标注为0,表示需要根据回归值输出的瑕疵占比进行分类。
图2 两类典型脐橙图
文献[5]提出用深度卷积和点乘卷积代替传统的全通道卷积。深度卷积是分组数等于通道数的分组卷积,只融合卷积核大小的图像邻域内的信息,不融合通道间的信息。点乘卷积的卷积核尺寸大小为1×1,只用于融合所有通道间的信息。文献[6]提出了高效CNN设计的思路,作者通过理论证明和实验发现:(1) 同等计算量下输入通道数与输出通道数相同能减少MAC(内存访问代价);(2) 组卷积分组数越多,MAC越大;(3) 多分支结构减小并行性;(4) 元素级别的操作开销也很耗时,包括张量相加、ReLU和加偏置值等操作。
该算法基于以上准则设计神经网络结构。模型的构造使用模块化的方法,主体部分由两个模块以一定的数目堆积而成,称为特征提取模块和下采样模块,如图3所示。每个特征提取模块与下采样模块均有3层,表1所示即为模型结构的详细设置,总层数为29。
(a) 特征提取模块 (b) 下采样模块图3 模型结构
表1 模型结构
特征提取模块如图3(a)所示,DWConv代表深度卷积。先进行通道分离,一半的通道通过三个卷积层输出与不进行任何操作的另一半堆叠在一起,再进行通道混洗。三个卷积层输入通道数均等于输出通道数,让MAC最小。通道分离操作有两个好处:一是能够让浅层的特征能够被网络深层所利用,特征重用考虑了深层特征与浅层特征之间的联系,能够更好地进行特征的表示;二是减少卷积操作,压缩了网络的计算量。紧跟着通道混洗操作,以保证分支左侧的特征通道能在之后进行卷积操作。下采样模块承担全通道信息融合和特征图尺寸减小的功能,如图3(b)所示,有两层卷积,第一层用于全通道融合,第二层卷积进行通道的扩展,最后一个最大池化将特征图尺寸减小。
损失函数由分类损失和回归损失两部分构成。针对脐橙分级任务,分类与回归的难易程度并不相同,本文使用自适应的加权损失函数:
(1)
(2)
loss=lossc+α×lossr
(3)
式(1)为交叉熵损失函数,用于分类;式(2)为均方误差,作为回归损失函数,只有当类别标注为0时,才计算它,因此只有部分样本拥有回归损失;式(3)即为整个模型的损失函数,其中α为超参数,通过给回归损失加权,控制误差反向传播与权重的更新,从而影响模型拟合训练数据分布的倾向性。若模型分类表现较好,而回归表现差,则加大回归损失权重,反之亦然。
超参数α由模型训练时自动学习得到,形成自适应加权损失函数,具体做法是:先初始化α,模型训练部分周期后,加入验证集,评判当前损失函数下的模型在验证集上分类和回归的表现,当且仅当分类准确度没有下降并且回归的性能提升时,α增大一个步长(实验设置为0.1),如果分类准确性下降,则α减小一个步长。之后每三个周期进行一次验证集评判与α更新,让最终的模型在分类与回归任务上同时表现良好。其中,回归性能以均方误差作为评判标准,如式(4)所示。在验证集下,如果模型能够在保证分类误差的前提下尽可能提升回归性能,那么其将有最佳的泛化性能。
(4)
以式(4)作为α自适应学习的回归性能判断准则主要有两个因素:一是S对应模型训练时的损失函数中的回归损失,符合优化目标;二是防止过拟合。展开式(4)得到式(5),从左至右分别为方差、噪音和偏差的平方。若方差太大,预示模型可能发生过拟合,偏差太大则可能欠拟合,以S作为判别准则考虑了偏差和方差的综合最优情况。
S=E[(f(x)-y)2]=
E[(f(x))2]+E(y2)-2E(y)E(f(x))=
(5)
CNN加速的研究对模型在实际应用中的部署有着重要意义,其中结构简化与紧凑是主要方法之一。文献[7-8]采用权重张量分解将原卷积操作变成小卷积的叠加,但是对于1×1的卷积操作却很难应用。文献[9]提出网络稀疏连接的方法,但是模型推断耗时主要在卷积层,参数量主要在速度较快的全连接层,因此不仅加速效果一般,而且稀疏造成的不规则结构对算法实现不友好。文献[10-12]采用通道剪枝的方法,去除冗余的特征图通道,从理论和实际上让模型结构变得更窄,实现加速效果。
本文通过通道剪枝对模型进行优化,首先对表1中编号为2、3和4的下采样模块中的卷积层分别进行局部剪枝,固定除剪枝层外的其他参数,微调模型,观察其通道冗余程度。然后对模型进行全局剪枝,得到最终的紧凑网络。总体的模型优化步骤如图4所示。
图4 剪枝流程
把每个卷积核参数的l1范数[10]作为剪枝优先的依据,其值越小,证明前向传播的信息量越小,对应的通道的重要性越低,剪枝的优先级越高。当剪枝层后的一层为正常卷积时,假设初始的输入层的通道数为M,输出层通道为N,再下一层通道数为S,则初始卷积核的维度分别为(k,k,M,N)和(k,k,N,S)。剪枝将输出通道数N减小为N′,此时由于后一层的输入通道数减少,其每个卷积核的对应维度也会减小。因此卷积核大小变成了(k,k,M,N′)和(k,k,N′,S)。
当剪枝层后为图3所示的特征提取模块时,由于剪枝造成输入此模块的特征通道减少,为了保证通道分离左右两支的通道数一致,以及整个模块的输入输出通道数相等,剪枝将造成之后连续的特征提取模块的改变,此时对应参数的保持十分困难,本文将重新初始化这些层的参数,并以更多的周期训练剪枝后的网络,观察通道的冗余程度。
全局剪枝由局部剪枝结果确定。典型的通道剪枝都是保留重要参数并微调,文献[13]指出,剪去神经网络模型中的冗余通道可被看作网络结构搜索过程,即使不保留重要的权重,从头开始训练,得到的结果与微调的方法无明显差异。本文算法中全局剪枝是为了得到紧凑的结构,将随机初始化权重并从头训练。
本实验使用了3 875幅脐橙图像作为数据集,其中3 186幅用作训练集,353幅作为验证集,336幅作为测试集。在配备GPU的服务器上训练网络,测试实验包括CPU和GPU,CPU为56 Intel (R) Xeon(R) CPU E5-2683 v3 @ 2.00 GHz,GPU为NVIDIA TITAN Xp。在将图像输入网络训练之前,先进行数据预处理,包括:1) 将图像分辨率统一转换成128×128;2) 所有图像做直方图均衡,再将图像随机进行镜像翻转;3) 去均值归一化。
为了衡量最终的算法效果,通过以下评价标准进行计算:
(6)
首先控制式(3)中的参数权重α与非剪枝层不变,对剪枝层单层进行剪枝实验,例如编号2第一层卷积表示为2_1,每次剪枝完对当前模型进行微调,对于第2节所述的两种不同层的剪枝,微调周期分别为10和20。
由图5实验结果发现,单层卷积通道存在极大的冗余,绝大部分通道剪枝50%以下时,准确率几乎没有损失,甚至出现了不降反升的现象。其中准确率下降最大的是2_1,当剪掉其90%的通道时,准确率由94.05%下降到84.82%,4_1剪去90%通道时,准确率仅仅下降到91.37%。还从实验中发现,剪枝层越浅,对剪枝越敏感,准确率下降程度越大。
图5 单层剪枝准确率变化
为验证超参数α自适应学习的有效性,实验将以21个不同的α值,控制训练周期数相同,训练21个模型,并在测试数据集上计算R1指标值,观察不同的α值对应的模型的效果。α以1至3,间隔为0.1均匀取值,实验结果如图6所示。
图6 不同α取值模型效果对比
R1指标的容忍因子比较小,更能反映模型对回归和分类的平衡效果。分析实验结果可知,α在2.0至2.5取值时效果比较好,等于2.3时R1指标达到最优,而继续增大α不能继续提升总体效果,因为回归任务权重太大影响了分类任务准确性。超参数α的自适应学习过程可以被视为图6中准确度曲线的峰值搜索过程,实验证明了此方法的有效性。
根据剪枝实验结果,可以确定模型剪枝后的最终结构。最终的通道数设置如表1所示,并通过随机初始化重新训练神经网络。为了展现该算法在脐橙分级任务上的表现,将该算法与复杂度相近的模型在速度、R1和R1.5三个指标上进行比较,实验结果如表2所示。从中发现,对于本文数据集,该算法在R1.5的准确率达到了94.05%的最优效果,在R1的准确率达到88.39%的最优效果,均好于传统分类网络vgg19和ResNet34。模型剪枝后速度达到最优,在CPU下每秒能够处理90幅图像,相比剪枝前速度提升了两倍,速度与准确率均优于精简网络MobileNet v2,对CPU下的处理较为友好。
表2 不同算法实验效果对比
回归偏差分布如图7所示,使用的模型是“本文算法+剪枝”,从中统计得到,偏差的均值约为0.1,方差约为1.24,另外,除了极少部分异常样本,大多数样本的回归偏差在容忍因子为1.5的忍受范围内。
图7 回归偏差分布
对于输入的脐橙图像,算法作出的预测如图8所示。对于第三幅图像,类别为花皮果,是不适合回归的一类,因此其回归标注为空,同时忽略输出的回归值。
图8 效果展示
针对脐橙实时分级任务,本文提出一种基于通道剪枝和多任务的分级算法。该算法以高效CNN为模型结构基础,结合通道剪枝让模型变得更加紧凑,基于多任务的方式进行分类与回归的预测。设计加权损失函数超参数自适应学习算法,让模型的准确性大大提高。通过分析实验结果发现,剪枝可在降低2.37百分点准确率的情况下,加快200%的推断速度。该算法速度明显优于其他算法,通过损失函数权重的调节,最优的准确率可达94.05%。