APP下载

基于改进残差网络的果实病害分类方法

2020-09-18肖经纬田军委程希希

计算机工程 2020年9期
关键词:残差损失卷积

肖经纬,田军委,王 沁,程希希,王 佳

(西安工业大学 机电工程学院,西安 710021)

0 概述

果实病害识别(以下简称果害识别)是果实自动采摘与分拣[1]的技术基础,对实现农业自动化具有重要意义。精确的果害识别不仅能实现果园针对性采摘[2]及装箱,而且还可以统计各种病害的出现次数,在预测产量[3]及果害防治[4]方面提供数据指导。传统的果害识别主要通过手工特征提取法与高光谱图像法2种方式实现。例如文献[5]利用图像颜色、纹理与形状特征来对苹果果害进行分类,取得了较为满意的效果,但是特征的提取过程较为耗时,且十分依赖专家经验。文献[6]利用果害的光谱图来识别苹果病害,准确率达到95.25%,但存在高光谱图像获取成本过高的问题[7]。

文献[8]提出的深度残差网络(Deep Residual Network,DRN)是包含多个残差结构的神经网络,可以用来识别果害[9-11]。DRN将整张图像作为输入,在网络内部通过多层卷积筛选,从而获取出最优特征,避免了人为因素的干扰[12],并且成本低廉,能够大规模使用[13]。传统的DRN参数量较多,在果害分类问题中存在冗余、训练开销大的问题。同时,由于不同病害在同一果实上的表现具有一定相似性[14],容易造成识别有误。针对上述问题,本文对传统的DRN结构进行改进,并在传统的损失函数中添加类间相似惩罚项来提高相似特征病害的识别率。实验对苹果中常见的斑点病、锈病和腐病3种病害[15]进行分类,并用该分类结果来验证本文方法的准确性。

1 苹果病害图像收集

为获得与苹果相关的果害图像,实验对陕西省长武县果树病理研究场地的样本进行收集,并分别在不同角度、不同距离以及不同时间段使用相机进行图像采集,从而保证了样本的多样性。同时,对于相对较少的病害数据,为避免不均衡样本造成的模型稳定性差的问题,实验从网络上收集与之对应的病害图像对其样本模型进行扩充。

考虑到果实果害的平移旋转不变性及可缩放性,实验对已有数据进行进一步扩充,包括水平镜像、±25°角度旋转、随机缩放等方式,总共得到2 000张样本集(正常苹果、斑点病、锈病和腐病各500张),并按照7∶3的比例随机划分为训练集与测试集。

2 神经网络构建

2.1 网络主体

残差网络(Residual Network,ResNet)模型引入了残差结构,能够解决深层次网络下梯度消失以及网络难以训练的问题。残差结构如图1所示。

图1 残差结构Fig.1 Residual structure

残差块通过引入x的恒等映射连接,在网络层数过深时,通过将Y=F(x)+x中F(x)拟合为0来实现网络恒等映射,解决网络退化问题。同时,由于x的引入使得反向传播过程中导数值总大于1,有效防止梯度消失。但由于传统的ResNet面向上千种分类,参数量大,存在冗余参数,降低训练与识别速度[16-17]。考虑到果树实际生长环境中出现的病害种类不会超过两位数,本文设计出一种改进的残差网络(sResNet)模型,其结构如图2所示。

图2 sResNet网络结构Fig.2 sResNet network structure

图2(a)为残差块具体结构,由3个卷积层组成,每层间使用ReLu作为激活函数,输入经过短路连接后通过最大值池化层输出。图2(b)为sResNet的主体,由3个包含128个卷积核、3个包含256个卷积核、5个包含512个卷积核、3个包含1 024个卷积核的残差块及2层全连接层组成,模型输出维度为4,对应苹果的4种状态(3种病害状态与1种健康状态)。

表1列出了sResNet与原始ResNet50网络的卷积层主要结构及其参数量。其中,C为卷积层(Convolution),sResNet的参数量约为传统ResNet50的75%。

表1 2种网络卷积组成对比Table 1 Comparison of the composition of twonetwork convolution

2.2 损失函数的改进

在sResNet模型中,以Sigmoid函数作为输出前的激活函数,并采用二元交叉熵(Binary Cross-Entropy,BCE)作为损失函数来计算预测值与真实值之间的差值。其中,Sigmoid函数和BCE的表达式为:

(1)

BCE(x)i=-ylln[fi(x)]-(1-y)ln[-fi(x)]

(2)

其中,x为输入样本,i为类别个数4,即每个类别都会有一个BCE值,yi为第i个类别的真实标签,fi(x)为第i个类别的模型输出值,对应式(1)的输出。

为加速训练过程,实验采用了批量法,最终损失函数Loss的表达式为:

(3)

其中,N为批量大小,即最终损失函数为一个批量的损失函数相加和再求其平均值。

在式(3)的损失函数中,若样本实际标签为真,即yi值为1,则BCE中第2项为0,BCE可简化为:

BCE(x)i=-ylln[fi(x)]

(4)

若预测值也为真,即式(1)输出趋近于1,由对数函数性质可知式(4)值接近0,产生的损失值几乎可以忽略;若预测值为假,式(1)输出趋近于0,此时式(4)的输出呈单调增大的趋势,产生的损失值也较大。同理可推知预测值为假时,损失值的变化情况相反。该损失函数仅可以判断预测类别与实际类别是否相符,无法保证不同类别之间的空间差异。而果害往往存在相似特征,此时若继续使用原始损失函数,模型的预测效果会降低。为此,提出一种改进的损失函数,它在原有损失函数基础上,加入类间相似惩罚项,具体如下所示:

(5)

其中,λ为类间相似惩罚项在损失函数中占的比重,是一个超参数,δ是较小的正实数(防止分母为0),C为类别数,A为该类主要特征空间位置,计算方法如下:

(6)

其中,x为每个样本经过卷积层提取出的主要特征。对于同一类别的不同样本,其主要特征具有相似性,则对应的x在空间中的分布位置可以看作是在一个集合中,模型在识别样本所属类别时是依靠计算样本与该类主要特征之间的距离来判别[18]。若只关注同类样本正负之间的距离差异,而忽略不同类样本之间的距离大小,则对于一些具有相似特征的不同类样本,它们在空间中的分布会接近两集合的分界线,从而使得模型难以准确判断其所属类别,降低模型识别率[19]。

改进后的损失函数表示为:

Lossfinal=Loss+P

(7)

由式(6)可知,式(5)中的A值是通过对经过卷积层后提取出的样本特征进行求平均值得到的,可以看作该类样本的主要特征在空间中的位置,而Am-An则为不同类主要特征的差值距离,通过增加Am-An的大小即可扩大不同类的主要特征在空间中的间距,从而减少模型在一些特征较为相似样本上的错误识别,提升模型识别准确率[20]。

图3对损失函数改进前后效果进行了可视化。可以看出,对于样本C,虽然属于B类别,但其具有A类别部分特征,若采用原始损失函数,则它在空间中的位置会靠近两类别分界线,从而难以分类;而在图3(b)中,采用了改进后的损失函数后,扩大了A类与B类的间距,这使得样本C虽具有A类部分特征,但由于与B类的距离未变化,从而远离了A类,使模型更加容易区分。

图3 改进前后的损失函数对比Fig.3 Comparison of loss functions before and after improvement

3 实验与结果分析

3.1 参数与环境设置

研究用的实验图片统一输入尺寸为224×224,并在输入过程中加入水平翻转、小角度旋转来扩充训练集,模型使用Adam优化器,初始学习率设定为0.001,学习率衰减值设定为0.000 01,批量大小设定为32,迭代次数为200次。

研究采取的硬件平台为Intel I9-9900K、Nvidia RTX2080TI、32 GB内存。软件平台为Windows 10 64 bit操作系统、Tensorflow-GPU 1.13.0、CUDA Toolkit 10、CUDNN 7.6。

3.2 结果分析

P-R曲线(Precision-Recall Curve)反映了模型的查准性与查全性。精准率是指实际为真的样本占预测为真的比例,召回率是指预测为真的样本占所有真样本的比例。通常来说,曲线越靠上代表模型性能越好,利用sResNet模型及改进损失函数绘制出的P-R曲线如图4所示。

图4 sResNet模型的P-R曲线Fig.4 P-R curve of the sResNet model

为体现模型及算法先进性,实验设置了sResNet+改进Loss、sResNet+原Loss、ResNet50+改进Loss和ResNet50+原Loss 4组对比实验,并采用精准率(Precision)、召回率(Recall)、F1值3个指标来评价模型的优劣性。3种指标计算方法如下:

(8)

(9)

(10)

其中,TP代表真阳性样本,FP代表假阳性样本,FN代表假阴性样本,精准率和召回率的值越接近于1则代表本文模型的性能越好。

由于精准率与召回率是一对相互矛盾的衡量,且都有各自的局限性,单一使用其中一个来评价模型的优劣并不合理,综合考虑两者才能客观的对模型进行评价,因此引入了F1值评价指标。从式(10)可以看出,F1值综合考虑了精准率与召回率,同样,该值越大则代表本文模型性能越好。

表2列出了4种不同模型的对比结果。由表2可以看出,使用原损失函数的sResNet与ResNet50模型的精准率与召回率相差不大,两者的F1值也很接近,说明相比较ResNet50模型,sResNet模型在网络更加轻量化的同时,并未损失精度。在采用了改进损失函数后,sResNet与ResNet50模型的网络性能均有所提升。说明在使用了改进损失函数后,网络在训练时不仅会考虑正负样本之间的差异,也会考虑不同样本之间的差异,并在不断的迭代中,通过原损失函数来减小类内距离、通过加入的类间相似惩罚项来扩大类间距离,使得模型具有更好的精准率与召回率,从而提高模型性能。这也说明使用原损失函数训练时,会导致一些具有相似特征的苹果病害由于类间距离过小而被错误识别。

表2 4组对比实验在苹果病害上的性能对比 Table 2 Performance comparison of four groups ofcomparative experiments on apple diseases %

实验采用文献[3]中的4种方法与本文方法对苹果斑点病和腐烂病进行分类,结果如表3所示。从表3可以看出,在苹果斑点病识别上,相较于文献[3]中的4种方法,本文方法对苹果斑点病的分类准确率更高;在苹果腐烂病识别上,虽然本文方法与文献[3]中的4种方法对其分类准确率相接近,但手动提取特征对不同果害需要重新提取,不具有广泛适用性。因此,说明了本文方法对苹果病害分类更有优势。

表3 本文方法与其他方法的分类效果对比Table 3 Comparison of the classification effect between theproposed method and other methods %

表4列出了文献[6]中的高光谱图像法与本文方法对苹果病害的分类效果。由此可知,相对于高光谱图像法在苹果病害上的分类效果,虽然本文方法没有明显优势,但是高光谱仪器成本昂贵,大规模推广不现实,难以实际使用。

表4 本文方法与高光谱图像法的分类效果对比Table 4 Comparison of classification effect between theproposed method and hyperspectral image method %

通过以上对比可以看出,本文方法能够有效提升果害分类准确率,且相比手工特征提取及高光谱仪具有一定优越性。

4 结束语

针对传统残差网络和损失函数在果害分类问题上的不足,本文提出一种基于改进残差网络sResNet及损失函数的果害分类方法。该方法通过降低卷积层数与卷积核数来精简网络参数,再利用类间相似惩罚项使得模型能在训练中尽可能增大不同类之间距离。实验结果表明,相比较ResNet50,sResNet在不损失精度的情况下减小了模型计算量,而改进损失函数能提高病害识别准确率,证明了该方法的有效性。但本文方法对样本的数量以及质量要求均较高,针对一些样本数量较少的病害,如何提高识别效果是下一步的研究方向。

猜你喜欢

残差损失卷积
基于双向GRU与残差拟合的车辆跟驰建模
基于3D-Winograd的快速卷积算法设计及FPGA实现
胖胖损失了多少元
基于残差学习的自适应无人机目标跟踪算法
卷积神经网络的分析与设计
基于递归残差网络的图像超分辨率重建
从滤波器理解卷积
玉米抽穗前倒伏怎么办?怎么减少损失?
基于傅里叶域卷积表示的目标跟踪算法
综合电离层残差和超宽巷探测和修复北斗周跳