王卫民,符首夫,顾榕蓉,王东升,何林容,关文斌
(1.江苏科技大学计算机学院,江苏 镇江 212003; 2.南京林业大学计算机科学与技术学院,江苏 南京 210037; 3.江苏慧禾融智信息技术有限公司,江苏 南京 210019)
在我国,农作物的虫害常年对作物造成严重的危害,并使得农业经济遭受到严重的损失。要想有效地防治虫害,就必须要预测虫害的发生趋势、数量、种群动态及其潜在危害,并且也要评估各项防治措施所得到的不同预期和实际结果。对于农业虫情预测的首要前提是对田间虫情进行数据获取和准确识别。但是,就目前的技术而言,对虫情的检测存在着很大的难度,主要体现在虫情的计数和识别方面,对虫情的计数和识别往往需要大量的人力、物力,并且耗时漫长,工作繁琐,另外还存在着譬如时效性差和准确度低等问题,无法满足现代农业发展的需求。因此,本文针对虫情自动计数展开研究。
计算机、图像处理和模式识别等技术和理论的发展,为实现昆虫自动分割和计数提供了基础。21世纪初,国内专家提出了阈值法[1]对背景与目标昆虫进行分割。例如,张洪涛等[2]采用的直方图阈值法,罗涛华[3]采用的自适应阈值法以及于新文等[4]采用的相对熵阈值法,分别实现了储粮昆虫、鳞翅目昆虫的图像分割,但阈值的选定直接影响这些方法的分割效果。因此,李小林[5]提出了基于边缘流的图像分割算法,以方向相反的边缘流相遇的位置确定对象的边缘,解决了传统基于边缘的图像分割算法难以确定合理阈值的问题。Zhao等[6]利用Gabor小波对储粮害虫的图像分割取得了相对满意的效果。张卫芳等[7]采用高斯混合模型GMM(Gaussian Mixture Model)表征颜色概率分布的图割理论,在高斯混合模型参数学习估计过程中通过不断扩大背景样本点修正GMM参数,完成对能量函数的最小化,从而进一步改善了储粮害虫的分割效果。
随着计算机各种理论的不断成熟,国内外学者已将数学形态学、多分辨率分割等算法用于昆虫图像分割中,取得了较好的分割效果[8]。黄小燕等[9]提出了用形态模板过滤彩色数字图像进行分割的方法,并将该方法运用于储粮害虫彩色数字图像的分割中,构造躯干模板和足与触角模板,使用2模板有效地将储粮害虫数字图像的躯干和足与触角分割开;张学庆等[10]将基于数学形态学的改进的图像分割方法应用于谷蠹、锯谷盗等储粮害虫图像分割中,很好地保留了昆虫各个部分的边缘细节特征。Shariff等[11]利用多分辨率分割等图像处理方法实现了稻纵卷叶螟等水稻害虫的自动识别与计数。
虽然经典的模式识别方法在小样本数据集上表现突出[12],但模型的建立需要手工设计图像特征,过程复杂繁琐,且模型的鲁棒性和泛化能力表现一般。
近年来,随着深度学习在计算机视觉领域的迅猛发展,为实现昆虫自动识别和计数提供了良好的基础。马鹏鹏[13]采用基于全局特征的支持向量机分类器,分别对水稻灯诱大型昆虫和水稻灯诱小型昆虫进行识别分类,得到了较为理想的结果。沈驭风[14]使用Faster R-CNN(Faster Region Convolutional Neural Networks)方法,对储粮害虫进行检测,其平均准确率达到了88%。
本文采用卷积神经网络对3种不同监测相机拍摄的虫情图像进行检测,实现了从大量虫情图像中自动提取昆虫轮廓并计数。经实验表明,昆虫轮廓检测的准确率达到了94.4%。
2015年,Ronneberger等[15]提出了一种基于少量数据进行训练的网络模型,得到了不错的分割精度,并且网络的速度很快,分割1幅512×512大小的图像只需要不到1 s(GTX 1080 Ti显卡运算)的时间。它的网络模型结构如图1所示,看起来像是1个U型,故也叫U-Net。
图1展示的网络结构由contracting path 和 expansive path组成。
左边的网络contracting path是典型的卷积网络结构,它是1种重复结构,每个重复结构中均有2个卷积层和1个池化层,卷积层中卷积核大小均为3×3,采用ReLU作为激活函数,2个卷积层之后是1个2×2的步长为2的最大化池(max pooling)层。每1次下采样后特征通道的数量是上1次的2倍。
Figure 1 U-Net model structure图1 U-Net模型结构
右边的网络expansive path中的每1步都首先使用反卷积,将特征通道数量减半,特征图尺寸加倍。反卷积过后,将反卷积的结果与contracting path中对应步骤的特征图拼接起来。contracting path中的特征图尺寸稍大,将其修剪过后进行拼接(图中虚线部分表示修剪)[16]。对拼接后的map进行2次3×3的卷积。最后1层的卷积核大小为1×1,将64通道的特征图转化为特定深度(分类数量,二分类为2)的结果。网络总共23层。
本文采用的是数值二分类,分类阈值为0.5,所以在原有U-Net的结构上,将最后1层通道数量改为1。由于原U-Net结构中卷积层没有采用补齐方式,每次卷积后特征图尺寸会有所减小,导致输入图像与输出图像尺寸不同。本文使用全0补齐方式的卷积使图像的输入和输出尺寸一致,改进后的U-Net结构如图2所示。
由于本文使用的训练图像分辨率较大,而U-Net模型的输入尺寸较小(512×512),为了让图像中体积小的昆虫特征不会丢失,本文将完整的输入图像切割为4份,分别训练。随后,将得到的训练结果拼接起来,还原成完整输入图像的尺寸。虽然此方法能够有效避免体积小的昆虫丢失,但是在拼接的时候会导致拼接线上的昆虫轮廓变大,所以本文将完整输入图像(Complete input)与分割输入图像(Split inputs)得到的结果折衷,通过1个融合层(Merge)和卷积层(Conv2D)处理后得到最终的结果。本文将此模型命名为Insect-Net,模型结构如图3所示,模型输入包括左边降低分辨率后的完整图像和右边的分割图像。
图3中的U-Net为图1中的U-Net结构;Concatenate将4幅分割图像顺序拼接成1幅大图,相当于Split的逆操作;Resize改变图像分辨率;Merge将2个特征矩阵在第3维度拼接;Conv2D采用1×1卷积核,步长为1,使用激活函数Sigmoid。
这里采用Merge方法,仿照U-Net中卷积层和反卷积层对应的特征图拼接,将分割结果(Split result)和完整结果(Complete result)作为2个不同通道的特征拼接。而1×1的卷积核早在2014年就被Lin等[17]使用,其作用主要是将不同通道同一位置的信息融合,一定程度上减少了网络的参数,其原理如图4所示。
Figure 2 Improved U-Net model structure图2 改进后的U-Net模型结构
Figure 3 Insect-Net model structure图3 Insect-Net模型结构
Figure 4 1*1 convolution图4 1*1卷积
通过对原始虫情图像做预处理构建数据集,然后训练 Insect-Net,采用Open CV对分割结果进行调整,获取昆虫的轮廓并计数。
图像数据为监测相机拍摄的6 960幅训练样本图像和720幅测试样本图像,这些图像的长宽尺寸均在1 000~2 000像素,大致分为3种:纯白色背景、方形网格背景和圆形网格背景,如图5所示。所有图像均来自农业虫情检测实时监控设备,为了更好地观察昆虫的数目,本文采用了性诱剂、诱捕器诱杀农田昆虫并采用虫体分散技术将其平铺在监测区域,以减少堆叠。
在训练模型之前,对图像进行预处理。首先人工标注出图中昆虫的轮廓,用白色填充昆虫,其余部分变为黑色,作为标签图像(二值图,白色为1,黑色为0),如图5所示。
Figure 5 Manually labeled insect image图5 虫情图像人工标注
然后将原始RGB图像转为灰度图,并等比例切割为4份,将标签图像也等比例切割成4份。最后将以上所有图像的尺寸(包括切割图像的原完整图像)统一为512×512像素,以JPG格式保存,这样每幅图像就产生了1组(共5对)输入输出,如图6所示。
(1)对每1幅图像按3.1节进行预处理,得到5组输入图像和标签图像。
(2)将所有输入图像和标签图像打乱后训练U-Net模型。
(3)冻结U-Net模型的参数,将5幅输入图像中的完整图像作为Insect-Net模型(图2)左边的输入,其余4幅分割图像作为Insect-Net右边的输入。将5幅标签图像中的完整标签图像作为Insect-Net的标签图像。训练Insect-Net。
(1)将1幅原始RGB虫情图像记为imageIn,按照3.1节中的步骤预处理后输入训练好的Insect-Net模型中,产生模型的预测图像,记为imageOut。
Figure 6 A set of input images and their labels图6 1组输入图像及其标签图像
(2)对imageOut进行二值化,所有像素值大于0.5的像素都设置为1,否则设为0。提取所有像素值为1的轮廓,本文采用Open CV里的findContours方法,该方法参照Suzuki等[18]的思想。
(3)在imageIn中标记(2)中提取的轮廓,并根据轮廓的数量确定虫子的数量,按顺序标出。如图7所示。在计数过程中对于轮廓面积小于imageIn面积1/10000的轮廓,视为污点杂质并将其抛弃,不计入总数;大于ImageIn面积1/100的轮廓,用白色虚线标注出,视为体积较大的虫;其余轮廓视为体积较小的虫。
Figure 7 Counting process图7 计数流程
本文实验环境为:Windows 10操作系统,使用NVIDIA GeForce GTX 1080 Ti显卡,核心频率为1480-1582 MHz,显存为11 GB,软件编程环境为 Python 3.6,CUDA显卡运算平台和cuDNN 神经网络GPU加速库。
定义1将训练样本中的每幅图像序号记为i,i=1,2,3,…,n。其中,n为训练样本的数量。
定义2第i幅图像的昆虫真实数目,即人工标注数目为y(i)。
定义3第i幅图像的昆虫预测数目为pred(i)。
定义4对比二值化后的预测图像与它所对应的标签图像,第i幅图像的像素值(0或1)正确率为p(i):
(1)
定义5第i幅图像预测结果T(i):
(2)
所以,总的昆虫预测数目正确率T为:
(3)
同时,本文采用像素值正确率P来评价Insect-Net模型。
(4)
另一方面,定义单幅图像训练的平均时间t为:
(5)
2014年Kingma等[19]提出了Adam优化器,其在神经网络的训练优化上表现突出。本文采用文献[19]中推荐的参数设置α=0.001,β1=0.9,β2=0.9999 和ε=10-8。
损失函数均采用二分类交叉熵损失函数:
(1-yi,j)ln(1-y′i,j)])/d
(6)
其中,d表示图像的像素点个数,n表示训练样本个数。yi,j表示第i幅图像的第j个像素真实值,y′i,j表示第i幅图像的第j个像素的预测值。
(1)U-Net训练采用Adam算法优化损失,批次大小为2(显卡最大容量),训练样本迭代50轮。
(2)Insect-Net训练采用Adam算法优化损失,批次大小为16,训练样本迭代50轮。
训练采用十折交叉验证,每次预留1/10的训练数据对模型进行评估,保留L最小的模型作为最终模型。验证集的损失函数值L和正确率P与迭代次数的关系分别如图8a和图8b所示。
Figure 8 Curve of loss value and correct rate图8 损失值和正确率曲线
为了更好地说明Insect-Net模型的分割效果,本文进行了对比实验。利用上述的评估标准,分别提取了使用完整图像(Complete input)和分割图像(Split inputs)输入U-Net后的分割结果,以及使用Insect-Net模型的分割结果。此外,将完整的高分辨率图像输入1024×1024的U-Net模型中,得到1组高分辨率结果。接着采用完全相同的处理方法对得到的4组分割结果进行轮廓提取和计数。实验结果如表1所示,本文所有的测试数据全部来自于3.1节中的720幅测试图像。
Table 1 Model test results表1 各模型测试结果
从表1中的实验结果来看,使用Insect-Net模型的分割和计数效果达到最优,但其训练时间也最长。与输入分辨率为512×512的U-Net(Complete input)相比,输入分辨率较大的U-Net(1024×1024 imput)对分割效果的提升并不明显,时间消耗反而增加至4倍多。通过对数据的分析发现,测试集中影响计数准确率的主要原因是,昆虫之间的粘连导致将多个连续的昆虫被识别为1个昆虫。其次,模型在白色背景图像上的表现最佳,而在圆形网格背景图像上表现最差,可能与背景的复杂性有关。
本文提出了一种基于卷积神经网络的农作物虫情分割和计数方法。该方法利用U-Net模型,有效地将昆虫与背景分离,提取出昆虫轮廓并计数,实现了从大量虫情图像中自动计算出昆虫的数目和提取其轮廓。
Insect-Net模型利用分割图像输入U-Net有效改善了小体积虫体丢失问题;融合完整输入图像减少了拼接线上虫体误差,提高了分割和计数的精度,但训练时间也随之增长。
Insect-Net模型生成的分割结果,经过筛选后可以作为无背景昆虫的样本图像,可充当深度学习方法下的昆虫种类识别的数据集。
在下一步的工作中,应该减少昆虫粘连对昆虫数目计算造成的影响,并进一步利用本文得到的昆虫轮廓图像,在去背景的情况下对昆虫种类进行识别。