反卷积引导的番茄叶部病害识别及病斑分割模型
2020-07-25任守纲贾馥玮顾兴健袁培森徐焕良
任守纲,贾馥玮,顾兴健,袁培森,薛 卫,徐焕良※
(1. 南京农业大学信息科技学院,南京 210095; 2. 国家信息农业工程技术中心,南京 210095;3. 江苏省物联网技术与应用协同创新中心,南京 210023)
0 引 言
植物病害是造成农作物减产甚至绝产的主要原因之一。植物在遭受细菌、病毒的侵害后,大多数会在叶片上有一定的表征,如生成各类病斑、滋生霉状物、局部干枯等[1]。植物病害种类复杂多样,为了避免人工诊断错误,帮助非专业人员及时发现病情并对症下药,通常利用可见光波段图像检测植物外部形态变化识别病害的类型。
早期的植物叶片病害识别主要依赖人工设计特征,使用颜色、形状、纹理等信息建立特征向量,然后利用支持向量机[2]和神经网络[3]等方法对特征向量进行分类。这种使用固定特征提取方式训练出的模型虽然能取得一定的识别效果,但一般需要先分割出病斑或病叶,增加了前期工作量,且每次都要针对不同的病害组合设计特征提取方法,缺乏鲁棒性,也难以区分相似病害。基于传统机器学习的病害识别模型不仅严重依赖于特征提取方法,还需要对不同植物的病害设计不同的识别模型,缺乏普遍适用性。
自 2012年 AlexNet[4]被提出以来,卷积神经网络(Convolutional Neural Networks,CNN)成为在图像分类上的核心模型。CNN可通过多个卷积核,自动从图片中学习特征后分类,其端到端的结构为农业领域的研究提供了便利。2016年,Mohanty等[5]使用 AlexNet和GoogleNet 2种卷积神经网络对PlantVillage病害数据集的38类叶片病害图像分类,准确率高达99.35%。孙俊等[6]将批归一化和全局池化方法加入 AlexNet用于植物叶片病害分类,准确率达99.56%。许景辉等[7]通过改进VGG16模型识别田间环境的玉米病害种类,对 3种病害的平均识别准确率为95.33%。基于深度学习的植物叶部病害种类识别已经达到了较高的精度。2018年AI Challenger比赛对38类病害重新标注,将多数病害按严重程度分为一般和严重2类,共61类。Liang等[8]重新筛选比赛数据,利用其中的45类,设计了一个可以同时识别植物种类、叶片病害和叶片病害严重程度的植物病害诊断系统,识别精度分别达到了99%、98%和91%。郭小清等[9]将番茄病害分为早中晚期3类,设计了基于AlexNet的多感受野识别模型。任胜男等[10]针对植物病害小样本问题提出了一种基于one-shot学习的植物病害识别方法,用关系网络模型识别 PlantVillage数据集中 8类样本较少的植物病害。上述研究工作主要采用细粒度分类识别叶部病害程度,以及小样本学习方法识别训练样本较少的病害种类,已经取得良好进展,但是这些端到端的分类器对特征学习过程不透明,且易过拟合,若学习到无用特征则会对病害识别产生干扰。
针对卷积神经网络的可解释性问题,目前常使用反卷积[11]、导向反向传播[12]和梯度加权类激活映射[13]等方法对CNN的学习能力进行可视化。Brahimi等[14]从CNN的可解释性出发,提出了一种植物病害分类的可视化训练方法,利用具有黑色背景的PlantVillage数据,在没有像素级标注的情况下训练病害分类模型,并使用反卷积方法将发生病害的部位可视化,比现有的可视化方法[11-13]产生了更清晰的效果。但上述方法在面对有桌面背景的PlantVillage数据时,背景容易与病斑一起响应。
目前关于病斑分割的研究主要分为图像处理方法[15-17]和深度学习方法[18-21]。随着全卷积网络[22](Fully Convolutional Networks,FCN)、U-Net[23]等语义分割网络的出现,对农作物病害分割的研究大多基于深度学习方法,无需手工特征提取并取得了更好的效果。刘文定等[18]使用不同的跳跃连接方法构造了5种不同的FCN网络,快速精确地识别复杂、边界不规则的油松林虫害区域,像素准确率达到97.86%。王振等[21]针对复杂背景的病害提出一种级联神经网络,首先对病害区域进行定位,然后使用加入多尺度特征的 SegNet[24]分割病斑,分割精度达87.04%。语义分割网络虽可同时分割不同类别的病害,但有几点不足:1)语义分割网络需要大量的像素级标注;2)多种病害的病斑相似,在做病斑分割时,只能分成背景和病斑2类,难以确定病斑所属的病害种类。
针对特征提取具有盲目和不确定性的问题,本研究标注少量病斑,利用反卷积引导CNN分类器关注真实病斑部位,提出了一种基于反卷积的番茄叶部病害识别及病斑分割模型。该模型可以同时分类病害和分割病斑,对遮挡物及光线强度干扰具有鲁棒性,并可降低对病害图片标注的强度。根据该模型的病害识别结果和分割结果,可进一步评估病害发病程度,精准高效施药,对发展高效、生态、环保农业提供技术保障。
1 数据来源
1.1 数据集
试验数据来自PlantVillage数据集中的10类番茄叶部病害图像,包括细菌性斑点病2 127张、早疫病1 000张、晚疫病1 909张、叶霉病952张、斑枯病1 771张、二斑叶螨病1 676张、轮斑病1 404张、花叶病373张、黄曲叶病5 357张、健康叶片1 591张,共18 160张。
图1给出数据集中10类番茄叶部病害样本的例子。由图 1可知,番茄叶部病害的识别和病斑分割主要有以下4个难点:1)不同病害表征不同,在病斑分割时需要分别考虑各病害的特点;2)某些病害表征相似,如二斑叶螨病和花叶病,给病害识别增加了难度;3)叶片背景给分割带来干扰,因光照因素产生的阴影容易被错认成病斑;4)病斑形状不规则,有些病害的病斑较小,肉眼难以发现发病初期的病斑,给病斑分割带来了难度。
1.2 训练数据增强
数据集中每类病害的样本分布不均匀,有限的训练数据容易使深度学习模型过拟合。在深度学习中,使用数据增强方法对数据进行扩充,可以提高模型的泛化能力。本研究的训练数据使用pytorch[25]框架下的在线增强方法,即在训练过程中对每个batch数据随机选择一种增强方法,无需增加原本的数据集数量。为了避免改变原有数据特征,更好地模拟真实拍摄条件下各样本的差异,本研究训练集主要采用以下数据增强手段:1)翻转:对图像进行水平翻转、垂直翻转、先垂直后水平翻转 3种翻转方式,模拟采集样本时拍摄角度的随机性,不会改变病斑形状与病斑在叶片上的分布状况。2)颜色抖动:改变图像的亮度或饱和度,模拟光照差异,并保证参数符合现实拍摄情况,避免图像失真。3)添加噪声:对图像增加信噪比为0.98的椒盐噪声或高斯噪声,模拟拍摄过程中产生的噪声,并弱化高频特征防止模型过拟合。训练数据增强结果如图2所示。
图1 番茄叶部健康与病害图像对比Fig.1 Comparison of tomato disease and healthy leaf
图2 训练样本增强示例Fig.2 Illustration of train data augmentation
1.3 测试数据增强
计算机视觉的一个关键挑战是处理现实世界的数据波动。本研究使用的数据集均在实验室场景下拍摄,为了模拟自然拍摄情况下会出现光照不足、叶片偏离中心和异物遮挡的情况,采用 3种图像增强方法对测试数据进行离线增强:1)平移:先裁剪图像的一部分,然后使用边界像素值将缺失像素补齐,模拟拍摄时叶片偏离镜头中心、叶片不完整等情况。2)遮挡:生成随机大小、随机位置和随机旋转角度的番茄果实、土壤以及绿色叶片对叶片区域进行遮挡,模拟目标叶片被遮挡的情况。3)降低亮度:将图片亮度依次减少到原图像的 40%、50%和60%,模拟光照不足的情况。测试数据增强结果如图3所示。
图3 测试样本增强示例Fig.3 Illustration of test data augmentation
1.4 病斑标注
PlantVillage数据集中已有可用于训练病害识别模型的图像级标注,而训练病斑分割模型,还需要对病斑进行如图4的像素级标注。
图4 叶部病斑的像素级标注Fig.4 Pixel-level annotation of leaf disease
像素级标注费时费力,目标小、数量多的病斑给标注带来了更大的困难。本研究利用病害类别和病斑位置同时训练病斑分割模型,因为反卷积模块作为分割模型的关键部分,作用是将特征提取时类响应高的像素区域作为病斑部位,所以只需要从每类病斑中选择几张典型样本,对部分样本进行病斑的像素级标注。除健康叶片不需像素级标注外,从其他9类病害中分别选出30幅样本,使用图像语义分割标注工具LabelMe[26]进行标注。其中5幅样本用于训练分割模型,25幅样本用于测试分割效果。
2 病害识别及病斑分割模型
2.1 模型构建
以 VGGNet[27]为基础构建基于反卷积的番茄叶部病害识别及病斑分割模型DGVGGNet,模型结构如图5所示。与其他语义分割的网络不同,本研究利用卷积神经网络提取图像特征后,仍保留全连接层以得到病害分类结果,病斑分割模块则只预测病斑位置不预测病斑类别。本研究模型分为3个阶段:第1阶段,由VGGNet得到病害分类结果;第2阶段,将全连接层向量重新映射到高维向量,并重塑成特征图形式;第3阶段,采用逐层上采样的方式,通过跳跃连接将VGGNet提取的特征图与上采样得到的特征图进行拼接,利用卷积层实现特征融合,最终通过重构层得到病斑分割图。模型实现端到端学习,可同时实现病害识别和病斑分割。进行特征提取时,分割模型引导识别模型更加关注病斑位置;进行反卷积时,识别模型的优化也会提升分割精度。
2.1.1 输入层
输入图像为叶片病害的彩色 3通道图像,图像尺寸统一调整为 224×224像素。为了增强模型的泛化能力,在训练过程中随机选择一种数据增强方法对原图进行处理,并将经过归一化和标准化后的数据作为 VGGNet的输入。
2.1.2 VGGNet网络设计
保留原VGG16模型的卷积层设计,共13个卷积层,5个最大池化层,每个卷积层使用Relu激活函数。卷积核尺寸为3×3,步长为1像素。将卷积层使用ImageNet数据集[28]的预训练参数进行初始化。
根据病害种类数量,将全连接层改为 2个输出神经元个数分别为256和10的全连接层。第二个全连接层的输出经过softmax被映射成(0,1)之间的类别概率分布,得到病害类别预测。
2.1.3 反向全连接层
VGGNet相当于一个编码器,病害图像经过一系列卷积层和全连接层,成为具有高级语义信息的低维特征向量,即最后输出的10个神经元。特征向量将图像中最重要的图像特征加以保留,对这些特征经过上采样即可得到病斑部位。在经过逐层上采样操作解码之前,需要将得到的10维特征向量做2次线性变换,使其重塑成特征图形式。
设计 2个反向全连接层,使其输出的神经元个数分别为256和25 088。对10维向量反向后得到256维向量,并将2个256维向量进行融合,如图5中虚线所示。再次反向后得到25 088维向量并重塑成7像素×7像素×512维的特征图,与VGGNet中第5个池化层后的特征图进行融合。2个融合操作均采用向量加法运算,可用来细化解码时得到的特征。
2.1.4 反卷积模块
采用上采样与卷积操作相结合的方法实现反卷积,反卷积的卷积块大小与 VGGNet结构相对应。在反卷积后加入重构层,得到最后的病斑分割图。反卷积模块的结构如表1所示。
图5 DGVGGNet模型架构Fig.5 Architecture of DGVGGNet
表1 反卷积模块的结构Table 1 Deconvolution architecture
上采样层使用最近邻插值法,对特征图进行 2倍上采样。最近邻插值是取采样点周围 4个相邻像素点中距离最近的点的灰度值作为该点灰度值的方法。最近邻插值算法速度最快,但会产生明显锯齿和马赛克现象,因此在每个上采样后使用一个卷积层来平滑图像边缘。Concat操作是将VGGNet中对应尺寸的特征图与上采样后的特征图进行跳跃连接,然后用 2个卷积层来融合拼接后的特征图,并改变特征图的维度以便输入下一反卷积块。第26、27层为图5中的重构层。为了确定病斑的最终位置,26层先将64通道特征图减少到3通道,可以去掉不重要的特征。27层将3通道压缩到1通道来预测病斑位置,并使用Sigmoid函数将特征映射到(0,1)。本研究设置0.5为阈值,> 0.5的像素为病斑位置。
2.2 损失函数
为了训练本模型,需要共同最小化分类损失和病斑分割损失。本研究共10类病害,所以使用多类别交叉熵作为损失函数,分类损失的表达式如式(1)所示:
式中N为样本总数,C为类别总数,i代表第i个训练样本,j代表训练样本的类别,为第i个训练样本标注的真实病害类别,为VGGNet输出的第i个训练样本为第j个类别的概率值。
病斑分割图只包括病斑和背景 2类,因此对灰度图的每个像素使用二分类交叉熵损失,其表达式如式(2)所示:
式中N为样本总数,P为输出灰度图的像素点个数,为224×224像素,共50 176个像素;i代表第i个训练样本,j代表第j个像素点为第i个训练样本的第j个像素点的真实类别,为1属于病斑,为0属于背景;为第i个
训练样本经过反卷积模块输出灰度图的第j个像素的值。在训练过程中,只有部分训练样本有病斑部位的标注,所以使用 2种不同的目标函数。当有病斑标注时,将最小化目标损失作为主要目标如式(3)所示:
式中k为0.2。当没有病斑标注时,只最小化分类损失Lcls。
2.3 模型训练
2.3.1 试验配置
试验平台为Ubuntu 16.04LTS操作系统、运行内存为32GB、使用 NVIDIA1080 TiGPU加速。算法采用Python3.6和Pytorch1.0深度学习框架实现。
2.3.2 模型参数
VGGNet卷积层使用ImageNet预训练参数初始化;其他卷积层使用 Kaiming均匀分布初始化[29]方法,现已被Pytorch用作默认的参数初始化函数,模式(mode)选择fan_in,激活函数的负斜率为0。Kaiming初始化方法主要为使用非线性激活的深层神经网络设计,可以有效地防止激活层输出在深度神经网络的正向传递中爆炸或消失,加快模型收敛。模型学习率(learning rate)为0.000 1,训练轮数(epoch)为45,迭代次数(iteration)共15 300次,训练病害分类时的批尺寸(batch size)为16,训练病斑分割时的批尺寸为8。优化器为Adam[30],权值衰减(weight decay)为0.000 05。
2.3.3 训练过程
训练分类模型时,使用5 453幅训练集,12 707幅测试集。训练分割模型时,设计 2种试验方案:分别使用45幅和9幅带像素级标注的图像做训练集,其中每类病害标注分别是5幅和1幅,使用剩余的225幅像素级标注图像做测试集。
以9幅病斑标注为例,DGVGGNet模型训练开始时,先使用9幅图像使用式(3)训练一轮,可引导网络在特征提取时重视病斑部分。然后训练无病斑标注的样本 25批后,再使用带病斑标注的训练集训练一轮,可保证对病斑生成结果的持续监督。直到无病斑标注的训练样本全部训练结束即完成一个epoch训练。
在每个epoch训练结束后,记录训练准确率和平均损失。用本轮训练好的模型对所有测试样本进行一次预测,并记录测试准确率和平均损失。训练45轮后,选择在测试集上病害识别损失最小的权重,作为最终的模型。
3 试验结果与分析
3.1 病害识别结果分析
分别使用VGGNet模型、9幅病斑监督的DGVGGNet和45幅病斑监督的DGVGGNet进行训练,保证参数设置相同,测试样本相同,并与孙俊等[6]和许景辉等[7]研究的识别方法进行比较。5个模型在训练集和测试集上的识别准确率如图6所示,孙俊等[6]无预训练参数收敛较慢,只对前45轮结果进行展示。因为每次迭代都随机使用一种图像增强方式,训练识别准确率会有小的波动。前 5轮训练时,DGVGGNet的训练识别准确率上升较快,且在测试集上的识别准确率比其他模型提前到达 95%以上,第一轮测试时DGVGGNet-45的识别准确率最高。迭代轮数在27轮左右时,DGVGGNet-45的训练识别准确率最先趋向于100%。由识别准确率变化可知,加入反卷积后的DGVGGNet可以使模型加快收敛。
图6 识别准确率变化曲线Fig.6 Changing curves of recognition accuracy rate
本研究选择VGGNet的第36轮模型、DGVGGNet-5的第44轮模型、DGVGGNet-45的第27轮模型、孙俊等[6]的 74轮模型和许景辉等[7]的第 42轮模型为最终测试模型,并在原测试集以及7个增强后的测试集上进行测试,在各测试集上的识别准确率如表 2所示。其中,DGVGGNet-45在亮度较暗的情况有明显优势。DGVGGNet-9模型识别效果较差甚至低于 VGGNet,这是因为有些病斑比较相似,一类病斑在不同阶段也会有不同的表现形式,所以每类病害只使用一张病斑标注训练反卷积时,特征提取网络会过于关注某种病害特征。孙俊等[6]不使用预训练参数,训练样本比例较小会影响模型的识别效果。
表2 不同模型在各测试集上的识别结果Table 2 Recognition result of different models on each test set
经过平移后叶片位置和背景形状发生变化,某些病斑会被裁剪掉,所以模型的识别效果都有所下降。2个DGVGGNet的识别准确率都明显高于 VGGNet,说明DGVGGNet更加关注病斑部分,能适应病斑在图像边缘的情况;而 VGGNet的特征提取器会对病斑方位比较敏感,说明模型会考虑背景形状,当背景与病斑的相对位置发生变化时,识别效果会变差。由于孙俊等[6]加入了全局池化,增强了特征图与类别的关系、对输入的空间变换的不变性,所以在平移测试中效果最好。许景辉等[7]对VGGNet加入了随机失活(dropout)层,可在一定程度上解决过拟合问题,在平移测试中结果与DGVGGNet相当。
经过番茄果实、土壤以及绿色叶片遮挡后,果实遮挡的识别准确率变化较大,而其他遮挡的结果相差不大,说明模型对颜色相差较大的遮挡物比较敏感。孙俊等[6]的方法在果实遮挡时识别准确率急剧下降,在绿叶遮挡时的识别准确率也下降较多,说明从头训练的模型不足以应对遮挡物的影响。许景辉等[7]和DGVGGNet的识别准确率明显高于VGGNet,说明dropout和反卷积能够缓解过拟合现象,可以更好地应对遮挡物的干扰。
降低光照强度后,5个模型的识别效果都有所下降,而DGVGGNet-45模型的识别准确率最高且下降最缓慢。在降低 60%光照时,DGVGGNet-9模型识别效果超过VGGNet,说明在昏暗的环境下,使用反卷积引导的特征提取网络能对叶部病斑更加敏感。而孙俊等[6]在降低光照后的识别率急剧下降,不适用于光照不足的场景。
3.2 病斑分割结果分析
3.2.1 分割结果评价指标
为了合理评估病斑区域的分割精度,本研究使用语义分割常用的4个评价指标:像素准确率(Pixel Accuracy,PA)、平均像素准确率(Mean Pixel Accuracy, MPA)、平均交并比(Mean Intersection over Union, MIoU)和频权交并比(Frequency Weighted Intersection over Union, FWIoU)。
像素准确率是所有分类正确的像素数量占总像素的比例,如式(4)所示:
式中k为类别数,pii为预测正确的像素数量,pij代表类别为i像素被预测为类别 j的数量。
平均像素准确率是分别计算每个类被正确分类像素数的比例,然后对所有类别取平均值,如式(5)所示:
平均交并比是模型对某一类预测结果和真实值的交集与并集的比值,然后对所有类别取平均值。平均交并比是语义分割中最常用的评价指标,表达式如式(6)所示:
式中pji代表类别为j像素被预测为类别i的数量。
频权交并比在平均交并比的基础上,根据每个类别出现的频率设置权值,表达式如式(7)所示:
3.2.2 病斑分割精度及运行时间比较
分别使用9幅和45幅带病斑标注的图像作为训练样本,225幅图像作为测试样本,标注只分为前景和病斑部位而不考虑病害类别,试验结果取 225幅图像测试结果的平均值。表 3为各算法分割精度对比结果。由表 3可知,DGVGGNet的分割精度相比于 FCN-8s、U-Net和 SegNet有明显提高。DGVGGNet-9的分割精度与用45幅图像训练的其他网络相差不大,说明本方法在使用极少的训练样本时,也能达到较好的分割效果。U-Net-45和SegNet-45高于FCN-8s-45,是因为FCN-8s上采样时只用到特征提取网络的后3个池化层输出的特征图,并没有融合低级语义特征,而其他3个模型都融合了低级语义特征。
表3 各算法分割精度及运行时间比较Table 3 Comparison of segmentation accuracy and run time of each algorithm
图 7展示了 9种病害在 FCN-8s-45、U-Net-45、SegNet-45、DGVGGNet-9和DGVGGNet-45 4个模型上的分割结果,可以看出添加跳跃连接融合低级语义特征后,U-Net、SegNet和DGVGGNet可以将小的病斑分割出来,而FCN-8s的分割结果会丢失一些细节,分割边界较模糊,相近的病斑区域会出现粘连的情况。DGVGGNet分割的病斑边缘比较光滑,U-Net的分割边缘出现锯齿现象,这是因为 U-Net只在上采样后加入卷积层,而DGVGGNet重构层的卷积操作可以再次平滑分割边缘。SegNet的分割边缘比较平滑,但是容易缺失某些病斑区域,如晚疫病的病斑部分,说明SegNet对同一病斑中的光照变化较敏感。从早疫病的分割图可以看出,阴影区域容易被误认为是病斑,而DGVGGNet能更好地区分阴影和真正的病斑区域。
不同病害分割的难易程度不同,如二斑叶螨病和花叶病的病斑区域为淡黄色,发病边缘不明显,所以分割难度较大。对每类病斑的25幅测试样本的分割结果取平均值,得到DGVGGNet-45模型在9种病害上的分割精度如表4所示。可以看出,对斑点类的病害,DGVGGNet-45的分割精度较高。
图7 病斑分割结果对比Fig.7 Comparison of disease segmentation result
表4 DGVGGNet-45在9种病害上的分割精度Table 4 Segmentation accuracy of DGVGGNet-45 on nine kinds of diseases
在相同的图形处理器(Graphic Processing Unit,GPU)上输入单幅图像进行测试,由表 4可知本模型的单幅图像运行时间与其他算法相差不大,达到每张12 ms,满足实时性需求。
4 结 论
针对当前植物叶部病害识别与分割模型易受阴影、遮挡物及光线强度干扰,特征提取具有盲目和不确定性的问题,使用PlantVillage数据集中10种番茄病害图像,构建了基于反卷积引导的VGG网络模型。
1)在全连接层后构造反卷积层,可增加特征提取网络的透明性,并同时实现病害分类与病斑分割。
2)只标注少量病斑样本训练模型,节省大量标注成本。与全卷积网络(Fully Convolutional Networks,FCN)、U-Net和SegNet相比,本模型达到更好的分割精度,在像素准确率、平均交并比和频权交并比 3个分割评价指标中达到最高,分别为94.66%、75.36%和90.46%。提升分割精度的同时,反卷积引导特征提取网络更加关注病斑部分,达到了99.19%的识别精度,与VGGNet相比提升了0.15%且收敛速度更快。在每项干扰测试中都得到较好的识别精度,且在降低亮度时优势明显,证明本模型对阴影、遮挡物以及低光照强度具有鲁棒性。
3)使用上采样加卷积层的方式实现反卷积,并设计重构层,使分割结果更加平滑;添加跳跃连接融合低级特征,可以恢复细节特征,保留较小的病斑并细化分割边缘。