文怀兴 王俊杰 韩 昉
(陕西科技大学机电工程学院,陕西 陕西 710021)
红枣是中国极具特色的干果,维生素含量高,被誉为“天然维生素丸”。大部分红枣经干制后流入市场,部分红枣还需进行去核、切片、干燥等深加工处理,红枣若不进行初步的品质分级,缺陷枣流入市场,将影响干制红枣的附加值。
由于人工检测分级效率较低,为顺应农产品精深加工自动化、智能化的要求,基于机器视觉的红枣自动分级检测成为研究热点。早期缺陷枣分类检测方法主要为:人工对红枣图像进行预处理得到红枣缺陷特征值向量,然后采用监督学习算法支持向量机为分类器进行统计分类,每张红枣图像分类时均需经过大量人工设计步骤且存在一定的人为主观判断性,对多种缺陷特征分类准确率存在较大差异,算法的时间复杂度和空间复杂度较高,因而还需进行主成分分析(PCA)进行降维处理,使得整体分类准确率提高不显著。蒋伟[1]提出了基于灰度共生矩阵通过图像灰度的空间位置描述红枣纹理的检测方法;海潮等[2]提出了基于Blob的红枣表面缺陷检测方法,识别准确率均为90%以上;苏军等[3]提出了基于GA优化SVM的红枣识别方法,3种方法均只对红枣纹理、破损等特征进行分类,存在对霉变枣分类效果不明显的问题。Lecun等[4]提出的7层结构的LeNet-5卷积神经网络模型在手写数字识别方面取得重大突破,用于银行的手写支票识别。而神经网络在学习深度加深时会出现梯度弥散现象,只能局部收敛,所以早期分类识别主要使用SVM分类方法。
2012年,Krizhevsky提出的AlexNet模型在斯坦福ImageNet图像识别大赛上以绝对优势击败SVM分类器后,卷积神经网络进入大范围应用且成为经典分类网络模型,通过权值共享使得网络权值数量减少,复杂度降低,而且采用卷积操作提取的特征具有一定的平移、缩放和扭曲不变性等特点[5],特别适合果蔬表面纹理等特征的提取,因而基于卷积神经网络模型的果蔬识别技术的研究得到迅速发展[6-8]。随后Krizhevsky等[9]提出用Relu激活函数代替Sigmoid激活函数和在全连接层后引入Dropout层改善传统卷积神经网络,不仅提高了训练速度,而且有效抑制了梯度弥散现象,而采用Dropout层则有效防止了网络的过拟合[10]。但该模型使用了如11×11,5×5等尺寸非常大的卷积核,导致计算量大且不利于模型深度提升。Simonyan等[11]提出VGGNet模型,采用多个连续的3×3卷积核替换AlexNet模型中的大尺寸卷积核,提高了网络非线性变换的能力和学习深度。然而简单地堆叠卷积模块加深学习深度的方法导致网络退化,但浅层网络又无法提升识别准确率[12],因而何凯明等[13]提出了ResNet残差网络模型,通过残差模块来抑制网络退化,具有较好的识别效果。Klambauer等[14]提出了缩放指数型线性单元(SELU)作为激活函数,使卷积产生的输出可进行自归一化,并验证了SELU函数的网络训练收敛速度以及分类准确率优于采用Relu激活函数的CNN网络。
试验拟采用计算机视觉技术融合深度残差网络模型的优点,对红枣图像分类模型的网络进行改进,从而提升识别准确率,旨在实现对红枣多种缺陷进行检测。主要改进方面为:用SELU激活函数替换Relu激活函数得到新的残差学习模块;采用学习率随迭代次数增多而减小的方式优化学习;通过将最能体现红枣缺陷特征的彩色图像通道分离来降低深度学习的学习维数;针对softmax分类产生类间距较大的现象,提出采用中心损失函数center loss代替softmax loss。
新疆若羌灰枣:依据表面是否有破损、霉变和褶皱对红枣进行筛选,对于缺陷枣数量不足的问题采用人为的方法来获得,得到正常枣和缺陷枣各490个。
主要包括硬件平台和软件平台,以及图像采集装置及软件开发环境。硬件平台如图1所示,计算机3为配置CPU Intel CORE i5 8G的处理器、GPUGTX1060 4G处理器、Windows10 x64系统的检测用计算机,图像采集装置6为大恒MER-500-14U3C-L型CCD工业相机。软件开发平台为基于OpenCV且配置深度学习架构TensorFlow的Spyder集成开发环境,TensorFlow是一个谷歌开源的深度学习架构,编程语言为Python3,在Spyder软件的编译环境下采用CPU+GPU并行计算的方式训练深度学习模型。红枣5通过上料斗1上料,在辊轮4的输送过程中,通过毛刷2实现红枣的有序排列,然后图像采集装置6将采集到的图像传输到计算机3,在计算机的Spyder软件中对红枣缺陷进行检测和分类。
1. 红枣上料斗 2. 毛刷 3. 计算机 4. 输送辊轮 5. 红枣 6. 图像采集装置
为了防止因训练样本不足导致卷积神经网络对红枣图片分类模型的欠拟合,增强模型的鲁棒性,将红枣进行翻转拍摄多个表面以保证训练样本数量,共采集1 960张彩色图片。
(1) 将红枣图像尺寸调整为512×512,然后将彩色图像通道进行分离,选取最佳通道作为神经网络输入层。为了降低网络训练维度,同时获取最佳训练效果,对红枣彩色图片进行R、G、B颜色通道分离处理,缺陷枣图像RGB3通道分离后如图2所示。由图2可知,缺陷枣的G分量图在红枣正常部位和缺陷部位的反差色较大,并且褶皱处纹理细节特征更加明显,而破皮枣和霉烂枣在缺陷部位具有相似的灰度值特征,故采用G分量来描述红枣缺陷特征,并作为卷积神经网络的输入层。
(2) 将G分量图的灰度值进行按位取反操作,得到正常枣和缺陷枣的影像图(图3)。将得到的红枣影像特征作为残差经网络输入,将彩色图像需要训练的三维度降到了一维度,既保留了红枣的缺陷和纹理等有用信息,又大大减少了彩色图像作为输入时的神经网络运算量。
图2 缺陷枣RGB颜色通道分量图Figure 2 Bad jujube RGB color channel component diagram
图3 正常枣和缺陷枣影像图Figure 3 Image of good jujube and bad jujube
试验采用ResNet34即34层残差网络结构模型进行红枣分类训练,模型结构如图4所示,在全连接层后用Dropout层输出,最后用损失函数softmax和center loss分别计算每种红枣的归类概率并输出分类标签。
卷积层Conv1采用3×3大小的24个卷积核,卷积方式为valid对红枣表面纹理、破皮以及霉变等缺陷进行特征提取;Conv2~Conv33每层均采用3×3大小的24个卷积核,卷积方式为same对特征进行无监督下的学习,学习方式为对每层输入与输出间的残差信息进行学习。卷积操作后的激活函数均采用SELU,用于将学习得到的红枣缺陷特征进行非线性映射。
图4 试验算法的残差网络结构图Figure 4 Structure of jujube deep residual network
传统卷积神经网络学习深度过深时,梯度在反向传播的过程中,靠近输出层的参数收敛较快,靠近输入层的参数收敛速度较慢。为避免网络陷入梯度爆炸降低分类准确率,将残差单元引入卷积网络,残差单元如图5所示。传统的卷积层或全连接层进行网络信息传递时,存在梯度信息丢失现象,在卷积层之间加入shortcut结构,目的是用目标函数变为输出减去输入后的残差,保护信息的完整性,即学习网络的输入信息得出输出与输入的差别部分,其中:
h(x)=f(x)+x,
(1)
式中:
f(x)、h(x)——输入函数和目标函数。
该结构未引入新参数,不会增大额外计算量,有效解决了网络误差反向传播过程中的梯度弥散现象。
图5 残差单元Figure 5 Residual element
卷积神经网络中常用的激活函数为Relu,其梯度值大,在反向传播阶段,能防止梯度传播到前几层网络时出现弥散消失现象,性能优于传统的激活函数Sigmoid[12],其形式为:
(2)
最新研究[12]表明,使用SELU激活函数后的网络收敛速度大于使用Relu激活函数的,采用SELU激活函数后可使样本分布自动归一化到0均值和单位方差,其中SELU函数为:
(3)
其中,λ、α均为经证明出来的常数,λ≈1.057 00,α≈1.673 26。
为抑制训练过程中的梯度爆炸或消失,激活函数在负半轴坡度平缓,可减小激活操作后过大的方差,防止梯度爆炸。由式(2)、(3)可得,Relu激活函数在正半轴斜率为1,SELU激活函数在正半轴部分斜率>1,故在训练过程中可增大过小的方差,避免提前收敛,同时防止梯度消失。因此,激活函数有一个不动点,网络加深后每一层的输出都是均值为0,方差为1。故采用SELU作为激活函数优化网络训练。经过全连接层输出可将学习得到的正常枣、霉变枣和破皮枣3个分类标签训练得到一个3分类的残差网络模型。
为验证试验提出的算法在红枣分类上的有效性,首先将试验提出的算法和相同网络层数但不使用残差单元的传统卷积网络进行对比,然后将分别使用Relu和SELU作为激活函数的深度残差网络进行对比,最后将损失函数分别采用softmax loss和center loss的SELU作为激活函数的深度残差网络进行对比。采用Kappa系数、总体分类精度以及各类红枣分类精度作为算法的精度评价准则。Kappa系数是一种用来衡量分类精度的指标,其值越接近1表明模型分类精度越高。假设p0为总体分类精度,即正确分类的样本数量yi之和除以总样本数n。每类红枣实际数量分别为x0,x1,…,xn,正确预测得到的数量为y0,y1,…,yn,则Kappa系数为:
(4)
试验将980个红枣进行翻转拍摄不同表面共得到1 960张红枣图片,然后将图片批量进行旋转一定角度以扩充试验数据集得到3 920张图片。如表1所示,在Spyder软件中用TensorFlow搭建残差网络框架,将训练集中80%红枣随机划分为训练集部分,剩余20%红枣划分为测试集部分,其余红枣作为验证集样本测试网络模型的泛化能力。试验通过控制单一变量,在同一台计算机上分别运行不同改进算法的残差网络模型,然后进行整合分析,为防止网络过拟合或欠拟合产生的模型泛化能力较差,因而引入新的验证集进行不同模型识别准确的检验,同时采用Kappa系数作为分类精度的准则来检验4种模型的泛化能力和分类精度。
表1 试验数据集Table 1 Experimental dataset
为验证残差结构对红枣分类识别精度的影响,将SELU替换Relu作为激活函数,且采用损失函数center loss代替softmax loss,同时使用Adam优化器采用学习率逐步降低的方法对卷积神经网络进行训练,随着迭代次数增加,学习率由大逐步减小,不仅避免了因学习步长过大从而越过最优过早网络退化的现象,而且避免了学习步长过小导致网络收敛速度慢的问题。将网络的权重用均值为0且方差为1的截断正态分布赋值,初始化偏置值为0.1,Dropout值设置为0.2(即随机隐藏20%的神经元进行训练),学习率初始值赋值为0.001,网络迭代次数设置为2 000。图6、7分别为3种改进ResNet34残差网络和卷积神经网络的损失率曲线与分类准确率曲线。
由图6、7可知,仅通过优化激活函数,在使用SELU激活函数下,网络的收敛速度和识别准确率高于使用Relu激活函数的网络,且在网络训练层数加深多次迭代下,残差网络模型未出现明显的网络退化现象,而CNN的识别准确率产生明显下降。
图6 损失函数曲线Figure 6 Lossfunction curve
图7 识别率曲线Figure 7 Accuracy curve
由表2可知,验证集的Kappa系数也反映出不使用残差学习的CNN网络识别准确率提高不明显,是因为网络传播中节点间信息流动出现学习特征丢失。将分别使用softmax loss和center loss损失函数的模型进行比较,可看出使用center loss损失函数,模型识别缺陷准确率略高,主要是因为center loss有效解决了softmax分类在类内间距上较大的缺点,使网络学习得到的特征不仅能有效分类,而且尽量满足了同类特征相互间间距较小的要求。采用激活函数SELU和损失函数center loss的模型对三类枣的分类准确率高于其余分类模型,说明该模型在多分类问题上具有更好的泛化能力。
表2 优化残差网络与其余网络比较Table 2 Comparison between optimized residual network and other networks
试验提出了对残差网络采取替换激活函数与损失函数的方法,相比传统的CNN网络,识别准确率提高了4.54%,表明引入残差学习方式且优化激活函数和损失函数后的网络分类性能更佳,采用残差网络对红枣表面缺陷检测的多分类效果较好,对其他水果的表面缺陷检测具有一定的应用价值。后续可采用softmax结合center loss的方法,或者使用交叉熵损失函数分类的方法对模型进行改进。试验中的误差来源除模型本身误差外,还有红枣照片采集时留下的高光等噪声对网络学习的干扰,后续可以考虑红色等有色光源的使用是否能减小红枣图像采集的噪声,以提供更好的分类图片。