石洪康,肖文福,黄亮,胡丛武,胡光荣,张剑飞
(1.四川省农业科学院蚕业研究所,四川南充,637000;2.西南大学家蚕基因组生物学国家重点实验室,重庆市,400700)
养蚕业是我国的传统产业和优势产业,历来都是我国农业体系中重要的组成部分[1]。然而,在养蚕过程中,家蚕十分容易遭受病害侵袭,造成大量的损失,据统计每年因病害造成的蚕茧损失约占总产量的10%以上[2-3],所以病害预防是养蚕过程中一项十分重要的工作。现行的家蚕病害防治方法主要是在饲育季节,定期使用消毒液对蚕房和蚕具进行严格消毒,并采用向蚕座中铺撒石灰粉的方式抑制病原滋生,当察觉到出现病害传播时,人工将蚕病及时进行无害化处理,起到人为预警和防治的作用[4],具有一定的效果。但现行的病害防治方法只适用于传统的手工养蚕,随着我国养蚕业逐步转向以机械饲育为主的规模化模式[5],过度依赖消毒液和石灰粉会导致严重的环境问题,不利于产业的长远发展,并且采用机械饲育时,人工直接参与饲喂的时间较少,病害只有在传播到一定范围时才能被察觉,因此亟需开展针对规模化养蚕的病害防治新方法研究。
对农作物病害图像和健康图像实现准确识别,可有助于开展病害早期预警和精准防治,一直是农业信息化领域的研究重点。早期因受到数据集和计算机性能的限制,一般采用模式识别算法进行研究[6-9],取得了一定的效果,但存在人工特征筛选、识别速度慢、以及依赖的图像数量少导致特征表达不够全面等问题。近年来,随着深度学习技术的快速发展,诞生了许多经典的卷积神经网络算法,推动了图像识别技术向着更加智能的方向发展。在农业视觉领域,研究人员使用卷积神经网络广泛地开展病害的识别研究,取得了显著的效果[10-11]。
郭小清等[12]研究了番茄叶片病害的识别方法,采用改进的Multi-Scale AlexNet算法进行了识别试验,结果表明,该方法对番茄叶部病害及每种病害早中晚期的平均识别准确率达到92.7%。黄双萍等[13]研究了稻瘟病的检测方法,以1 467株田间样本的高光谱图像为识别对象,采用基于GoogLeNet的改进算法进行了识别试验,最高识别准确率为92.0%。Xing等[14]进行了柑橘叶片病虫害的识别研究,采用增加跨通道运算和特征重用的频率来延伸网络深度的方法,设计了一种弱连接的卷积神经网络(Weakly DenseNet-16),试验结果表明,该方法对柑橘叶片病虫害的识别准确率可达到93.42%。何欣等[15]研究了葡萄叶片病害识别方法,通过引入多尺度卷积核组合的方式改进ResNet底层对不同尺度特征的响应,设计了一种基于Multi-Scale ResNet的多尺度残差神经算法,试验结果表明该方法8种葡萄病害叶片的平均识别率为90.83%。
综上所示,卷积神经网络可对农作物病害实现准确高效的识别,结合家蚕患病后,会与健康家蚕表现出不同的视觉特征[2],基于此,本文提出采用卷积神经网络进行家蚕病害的识别研究,为规模化养蚕模式下的病害防治研究提供参照。
家蚕在我国饲养广泛,因气候条件不同,各地的主要推广的品种也不相同。然而不同的家蚕品种外表会有所差异,且同一品种在不同的生长阶段下患同一疾病后也表现出不同的特征,为便于开展研究,结合生产实际中的推广量和抗病能力,选择我国西南蚕区的主推品种之一,芳·绣×白·春[16]为试验对象,该家蚕品种的外观主要呈白色,花纹较少,且对病害的抵抗能力较弱。并且根据家蚕病害通常在小蚕期染病和大蚕期发病的特点,以及病害样本获取的难易程度,选择生长阶段为大蚕期的家蚕开展识别试验。
卷积神经网络可自行进行图像特征提取,但对图像的数量有一定的要求,数量较少时,难以提取到足够的特征,无法确保形成可靠的识别能力[17]。此外,为使训练出的模型具有较强的应用能力,最佳的方法是直接从实际养蚕中获取病蚕样本,但这种方法在实际环境中难以开展,因一旦出现病害滋生,就必须要对病蚕进行无害化处理,防止病害的进一步传播。对此,为集中获取充足的样本用于构建数据集,并保证图像所属病害种类的准确性,采用饲养和感染病原的方法集中获取病蚕样本。
饲养方法是在相同的环境下,按照饲育规程将蚕卵孵化并饲养至3龄,再将其分为6组,每组数量约700只,其中5组用于病害样本,1组用于健康样本。感染病原的方法是用病原污染桑叶,如图1所示,再进行添食,家蚕食入后会造成感染,具体是在蚕病学专家的辅助下开展的,根据家蚕几种病害的发病时间,并确保参与识别的家蚕处于相同的生长阶段,将每种病原的使用剂量控制在从4龄第四天开始发病,因此在3龄第一天添食微粒子病原,4龄第一天添食脓病病原(NPV,血液型脓病)、白僵病原、4龄第三天进行细菌病原添食。使用的农药名称为敌杀死,其主要成分为溴氰菊酯,该农药主要用于农作物害虫防治,田间使用时会影响周边的桑园,是造成家蚕农药中毒的主要原因。使用的剂量是在10 L水中加入4滴后浸泡桑叶,再将桑叶晾干后再进行添食。用作获取病害的样本只感染一次病原,后续仍然按照饲育规程正常饲育。农药中毒组是在采集图像前,取出部分家蚕进行添食。
(a)病原涂抹桑叶
从4龄第四天开始采集图像,每天均在蚕病学专家的指导下,仅对确诊染病的家蚕采集图像,且为避免交叉感染,所有采集过图像的家蚕均不再进行饲养,直接对其进行无害化处理。
使用6个型号完全相同的智能手机为图像采集装置,品牌是iPhone 6s,具有1 200万像素,采集环境为室内自然光照,农药中毒组的家蚕在添食农药20 min后开始采集,其他家蚕的采集时间为每一天的13:00至17:00,以此确保家蚕的生长期基本相同。采集时,使用一个三脚架将采集装置的位置固定,并使镜头竖直朝下,如图2所示,将家蚕从蚕箔中取出放置在镜头下,保持正常姿态,使用桑叶为图像背景,并在采集过程中频繁更换桑叶。为确保尺寸缩放后,家蚕形状不发生变化,将采集装置的屏幕拍摄长宽比设置为1∶1,焦距设置为固定高度下屏幕能够包含完整蚕体的距离。
图2 图像采集装置
采集装置获取的原始图像尺寸为3 024像素×3 024 像素,该尺寸超出了一般卷积神经网络的输入尺寸,采用双线性插值法[18]将图像尺寸缩放为224像素×224像素,除此之外未进行任何的图像预处理操作。每种类别的家蚕图像尺寸缩放结果如图3所示,并将相同类别的图像放置在同一文件夹下,构建了家蚕病害图像数据集,图像总数为3 600张,如表1所示。并采用随机挑选图像的方法,数量按照6∶2∶2的比例将数据集拆分成训练集、验证集和测试集。
(a)白僵病
表1 家蚕病害图像数据集
使用卷积神经网络进行图像运算前,需先对图像类别进行编码。分类识别一般采用one-hot编码,其向量格式为y=(c1,c2…cj)T,其中,j为图像类别数量。编码方法是将每个类别图像在编码向量中对应元素的值设为1,其他元素值设为0。例如,假设白僵病图像对应在编码向量中第一个元素值,则对于该类图像,其类别编码结果为y=(1,0,0,0,0,0)T,并且在卷积神经网络的输出结果向量中,第一个元素值为图像属于白僵病类别的概率值。
本文对于训练集和验证集中的图像,直接使用深度学习开发工具Keras提供的ImageDataGenerator工具包从文件夹中自动读取图像类别并编码。对于测试集的图像,使用Python工具依次将图像存储在一个数组中,数组中单个元素为图像的像素值组成的数组,再将每张图像的类别标签对应存储在另一数组中。
残差神经网络(ResNet)是由He等在2015设计的,并获得了该年度的ILSVRC&COCO竞赛的目标检测和定位任务的冠军成绩。ResNet的核心思想是将网络靠前层的特征跨越连接到靠后层,如图4所示,通过特征共享实现增加网络深度的同时避免出现梯度消失或爆炸。因ResNet在特征提取上展现的优异性能,使得后续出现的经典网络基本都借鉴了残差连接的思想,如Inception-ResNet、DenseNet和YOLO v3。因此本文选择残差神经网络进行家蚕病害的分类识别研究,可以确保达到理想的识别结果。
图4 残差连接示意图
根据训练参数量,ResNet又可分为多个版本,通常采用ResNet后跟参数层数字表示网络的版本,例如ResNet-18、ResNet-50和ResNet-101等。其中,ResNet-50的应用相对广泛的版本,其整体结构如图5所示,主要由Convolutional块和Identity块构成,其输入为224像素×224像素的彩色图像。
图5中:“Conv”代表卷积层,“7×7 Conv,64,stride=2”代表该卷积层上使用64个尺寸为7×7的卷积核按步长为2进行卷积运算;“3×3 MaxPool,stride=2”代表池化层上使用尺寸为3×3的池化核进行最大值池化运算,“Identity block”后“×3”代表该结构重复3次;AveragePooling代表全局平均值池化;“FC-6”代表全连接层,输出类别个数为6。
图5 ResNet-50网络结构示意图
Convolutional块和Identity块的结构如图6所示,在Convolutional块上的运算分为2组,第一运算是对特征图使用尺寸为1×1,3×3和1×1的卷积核进行3次卷积运算,另外一组运算是在残差连接上,对特征图使用尺寸为1×1的卷积核进行卷积运算,并将2次运算的结果合并,激活后传输到下一层,“BN”代表批量归一化,“ReLU”代表特征值激活,在Identity块上,也将执行与Convolutional块上第一组相同的运算,并将结果直接输入特征合并后传递至下一层。Convolutional块上有2次1×1的卷积运算的步长为2,所以会使特征图的维度降低,而Identity块的特征图输入和输出维度不发生变化,用于增加网络深度。
图6 Convolutional和Identity块
包括ResNet在内的经典卷积神经网络都是利用COCO和VOC等大型数据集进行设计训练的,而在这些数据集上图像类别和数量都非常多,所以经典神经网络的参数量多,网络结构庞大,应用在自建微型数据集上必然会出现不必要的计算耗损,还可能出现过拟合,造成识别准确率下降。对此,本文采用对ResNet-50进行部分修改,减少训练的参数量,提升运算效率。
对ResNet-50修改后的结构如图7所示。
图7 改进的ResNet网络
图中“1×”等代表Identity block数量,“112×112×32”等代表该部分运算后的输出维度。为便于表述,先将ResNet-50的4个Identity块分别命名为Identity block A~D,将其数量分别减少为1、2、2、1个,将网络所有卷积运算层上卷积核的数量减少为原来的1/2,将结构缩减后的网络命名为缩减的ResNet;其次在结构缩减的基础上,采用对Identity block C和Identity block D进行特征融合的方法,来增强网络的特征表达能力。具体为:对于任意输入图像,在经过Identity block D的运算后,其输出特征图的维度为7×7×1 024,为进行特征融合,采用256个尺寸为1×1的卷积核进行卷积运算,特征图的维度调整为7×7×256,然后对其进行上采样运算(UpSampling2D),将其特征维度还原成14×14×256,再与Identity block C的输出特征图合并(Concatenate)运算,合并后的特征图维度为14×14×768;最后对融合后的特征分别进行一次Convolutional块和Identity块运算,特征图的输出维度变为7×7×512,并采用全局平均值池化和全连接运算后输出预测结果,将结构缩减和特征融合后的网络命名为改进的ResNet。
特征图合并的原理如图8所示,将维度为m×m×n的特征图与m×m×k的特征图进行合并运算,合并后特征图维度变为m×m×(n+k)。
图8 特征图合并示意图
主要试验的硬件环境为DELL Precision 5820工作站(设备一),其处理器为Intel(R)Core i7-9800X,图像显卡为RTX2080 Ti,具备11 G内存,计算平台为Cuda-10.0。此外,部分试验使用了Lenovo Legion Y7000笔记本电脑(设备二),其处理器为Intel(R)Core i5-8300H,显卡为GTX 1050Ti,具备4 G内存。两套设备的软件环境相同,均是Windows 10专业版操作系统,编程语言为Python 3.7,深度学习框架为TensorFlow 1.14和Keras 2.2.5,编译环境为Jupyter notebook。
试验方法是先使用训练集和验证集在设备一上进行网络训练,再使用测试集对网络进行测试,以测试集上的准确率和测试集上的识别时间为试验评价指标,准确率的计算公式如式(1)所示。
(1)
测试集上识别时间的计算方法是在测试前和识别结束后读取当前系统时间,再求两个时间点的差获得模型的检测时间。
对本文改进的ResNet网络训练使用的超参数分别是,初始学习率为0.001,在训练过程中,以训练集损失值为参照,当该值连续5次迭代而未出现明显下降时,就将学习率乘以0.8,batch_size为16,损失函数为交叉熵,优化器为Adam,迭代次数为200次。记录网络在训练集和测试集上的准确率与损失值,用于评价网络的训练效果,如图9所示。
(a)准确率
从网络在训练集和验证集上的准确率与损失值的变化过程可以得出,在本研究的试验环境下,改进的ResNet在约经过75次迭代就处于稳定状态,并且在训练集和验证集上的准确率都在95%以上,训练效果较为理想。
网络训练结束后,使用测试集上对其进行测试,将识别结果的混淆矩阵输出,结果表2所示。
表2 测试集家蚕病害图像识别统计结果的混淆矩阵
在混淆矩阵中,主对角线上的数值表示网络正确识别的图像数量,其他位置则是误识别的数量,从中可以得出,发生误识别较多的是,将7张农药中毒图像误识别成健康家蚕图像,将11张健康图像误识别为农药中毒图像,将4张微粒子病图像识别成细菌病图像,将6张细菌病图像识别成微粒子病图像。最终使用式(1)求得网络在测试集上的识别准确率为94.31%。
查看测试集中所有误识别的图像后,分析造成部分健康家蚕与农药中毒蚕出现混淆识别的原因可能在于,部分家蚕在轻量的农药中毒后,身体呈现卧伏状,与健康的家蚕特征非常类似,且部分健康家蚕在进行图像采集,受到人为刺激,蚕体蜷缩后,与农药中毒特征相似。此外,部分家蚕在感染微粒子病和细菌病后,未能够准时休眠和蜕皮,呈现出半蜕皮状态,在外观上非常相似,容易造成误识别。
为验证改进后的ResNet算法对家蚕病害图像的识别性能,本节使用标准的ResNet-50和经过结构缩减的ResNet网络在相同的环境下进行家蚕病害的识别试验,即使用2.2节中的超参数在设备一上进行网络训练,并分别在设备一和设备二上进行测试,记录各个网络的单次迭代时间、在测试集上识别准确率和测试时间等,结果如表3所示。
表3 3种网络的结果对比结果
从对比结果可得,在对标准的ResNet-50网络进行结构缩减后,会使网络的参数量和权重文件的大小大幅减少,也会使网络在训练集和测试集上的准确率降低,但对网络的单次迭代时间却无明显改变。在缩减网络的基础上,通过对不同维度的特征进行融合的方法,可以在参数量和权重大小大幅降低的情况下,保持与标准的ResNet-50网络相当的测试准确率,在对测试集的识别效率也大幅提升,尤其是将训练出的模型从专业图像设备(设备一)移植到普通设备(设备二)时,改进的ResNet网络的测试耗时仅为标准ResNet-50的1/3左右,表现出了非常明显的优势。此外,分析3种网络的单次迭代时间和测试集的检测耗时上的出现的差异,即对ResNet-50的结构缩减后,对单次迭代时间无明显改变,但在测试集上的检测时间却大幅度降低,鉴于在测试集上测试时,卷积神经网络只进行了前向传播,残差神经网络主要是进行图像卷积运算,而单次迭代同时包含一次前向传播和反向传播,可以得出结论是,卷积神经网络的反向传播,包括计算损失值、计算损失函数对各个参数层的偏导数、参数更新等会耗费主要的迭代时间。
针对现有的病害防治方法无法满足规模化养蚕需求的问题,本文使用卷积神经网络对家蚕常见病害图像的进行了识别研究。
主要内容包括:首先采用实际饲喂和感染病原的方法集中获取了家蚕品种芳·绣×白·春在大蚕期部分生长阶段的病害样本和健康样本,病害种类包含白僵病、农药中毒、脓病、微粒子病、细菌病;其次在实际环境下进行了图像采集,构建了家蚕病害图像数据集,总数达到3 600张;然后采用特征融合和结构缩减的方法对ResNet-50网络进行了部分修改,以减少直接使用该方法时的计算耗损;最后进行了家蚕病害的识别试验,结果表明,使用ResNet-50网络进行家蚕病害的识别时,在测试集上的准确率可达到94.72%;使用缩减的ResNet网络在测试集上的识别准确率为93.15%,且网络的训练参数量约为原来的1/6;使用结构缩减和特征融合对ResNet-50进行改进的方法,设计的改进的ResNet网络在测试集上的准确率可为94.31%,与ResNet-50的准确率相当,但网络训练参数量仅为原来的1/3,能够同时兼顾识别准确率和运算效率,更有利于网络的训练与部署。
本文研究表明了卷积神经网络可实现对家蚕病害图像的高效准确识别,但仍然存在一些不足之处,最主要的是数据集的构建上,首先是在固定的场景下进行的图像采集,不能保证训练的模型对其他的采集设备或在其他环境下采集的图像形成良好的识别能力。其次是只采集了部分生长阶段的图像,然而数据多样性还有待提升,因此还需重复样本获取试验,以获得不同生长阶段下的病蚕样本。最后是每张图像中仅包含了一个家蚕的图像,但在实际养蚕环境下,出现病害传播时,往往是健康家蚕与患病家蚕共存,或是健康家蚕夹杂着患病家蚕,所以本文的图像采集方法还需要进一步改进。
在后续的研究中,计划进一步增强数据集中图像的多样性,包含不同的家蚕品种、不同的生长阶段以及不同的病变程度,并且将研究重点放在当患病家蚕和健康家蚕混杂的情况下,利用卷积神经网络对病蚕进行定位检测,以及家蚕病变过程中早期识别与预警,这样能够更加有助于开发智能病害早期预警与精准防治系统。