基于轻量化深度学习模型的豆角苗-杂草检测方法
2022-11-01李兆旭蒋红海杨肖曹志鹏
李兆旭,蒋红海,杨肖,曹志鹏
(650504 云南省 昆明市 昆明理工大学 机电工程学院)
0 引言
杂草是具有持续危害性的农业有害生物,只要有种植就一定会有杂草侵染和草害,对粮食及其他农作物产量和质量造成巨大的影响[1],因此除草是农业生产中不可避免的重要环节。目前主要的除草方式有化学除草、机械除草、生物除草、生态除草等[2-3]。科学技术的发展为农业的改革与革新提供了新的动力源泉,通过统筹生产资源、提高生产效率使得农业朝着机械化、智能化、绿色可持续方向发展[4-5]。自动化除草也在农业生产中推广,杂草识别则是实现精准高效除草的关键技术。
早期的杂草识别算法主要运用图像处理技术,根据杂草特征进行目标识别,方法有颜色识别、光谱分析、纹理特征识别和外形参数识别等[6]。随着深度学习的兴起,卷积神经网络在杂草识别中逐渐得到广泛的应用。卷积神经网络用多次线性和非线性变换对输入图像进行特征提取,并对不同层次特征进行组合。这样,在很多场合不需要对单独特征进行选择变换,只需输入原始图片进行训练,模型会自动筛选出适合分类的特征[7]。邓向武[8]等使用AlexNet、VGG16 和GoogLeNet 对6 种稻田杂草进行检测,分别得到96.40%、97.48%和91.01%的识别率;孟庆宽[9]等用深度可分离卷积结合压缩与激励网络构成特征提取单元,密集连接后代替SSD 中的VGG16 作为主网络,检测玉米及伴生杂草时比原算法精度提高2.66%;Teimouri[10]等使用Google inception-v3 模型对不同生长阶段的杂草进行评估,获得了87%的mAP。
上述深度学习方法在杂草识别中都取得了不错的效果。为了提高检测的实时性并降低算法硬件需求,本文使用轻量级卷积神经网络MobileNet-SSD 进行杂草-作物检测,并针对实验中数据集大目标较多的特点调整网络特征层,将检测结果与原算法对比。比较各算法对不同尺寸目标的检测效果。
1 轻量化豆角苗与杂草识别模型
目标检测算法大致分为两大类:(1)Twostage(二阶段)算法:将检测分为产生候选区域和对区域进行分类两个阶段,以R-CNN 系列为代表;(2)One-stage(一阶段)算法:直接预测物体类别和位置坐标,以目前较为主流的YOLO 系列和SSD 为代表。Two-stage 算法由于存在RPN 网络结构使得其检测精度较高,但较大的计算量也带来了检测速率不足的问题[11-12]。为了使目标检测算法能在移动端使用,Howard 和Zhu 等人在2017 年提出了MobileNet 模型[13]。
1.1 MobileNet 网络
MobileNet 的创新点是引入了深度可分离卷积,即用深度卷积和1×1 卷积(逐点卷积)替代标准卷积。深度可分离卷积将其分为2 层,一层用于过滤,另一层用于合并。这种因式分解具有大大减少计算量和模型规模的效果。标准的卷积层将输入一个DF×DF×M的特征图F 并产生一个DF×DF×N的特征图G,当特征图通过DK×DK×M×N的卷积核时,整个标准卷积的计算量为DK2×M×N×DF2。
深度可分离卷积由深度卷积和点向卷积2 层组成。使用深度卷积对每个输入通道应用单个滤波器,计算量为M×DK2×DF2,然后还需要一个1×1 的卷积层计算深度卷积输出的线性组合,计算量为N×M×DF2。因此总的计算量为两步之和,即M×DK2×DF2+N×M×DF2。由此,可以得到深度可分离卷积与标准卷积的计算量之比:
MobileNet 使用3 × 3 深度可分离卷积,它的计算量通常在标准卷积的1/9~1/8,只是精度略有降低。普通卷积与深度可分离卷积结构如图1 所示。
图1 普通卷积与深度可分离卷积Fig.1 Ordinary convolution and depth separable convolution
1.2 MobileNet-SSD 模型原理
1.2.1 SSD 模型
SSD 模型是一种one-stage 目标检测模型,其主要思路是利用CNN 提取特征后,均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,物体分类与预测框的回归同时进行[14]。SSD 通过提取6 个特征层(称之为有效特征层)来对目标进行处理,尺寸分别为38×38、19×19、10×10、5×5、3×3、1×1。经过数次卷积操作之后将图片分为以上6 个尺度的网格,以每个网格为中心生成数个先验框,这样就有6 种尺寸的先验框来对不同尺度大小的豆角苗或杂草目标进行预测。预测框是在先验框的基础上进行微调,想要获得最终的预测结果,还要对每一个预测框进行得分排序与非极大值抑制筛选。
1.2.2 MobileNet-SSD 模型及特征层调整
标准的SSD 模型的主干网络采用VGG16,由于网络最后有全连接层的存在,使得网络的参数较多。MobileNet-SSD 模型则是将主干网络改为MobileNet 网络。用平均池化来取代全连接层,使得参数量大大减小[15]。同时,特征层处理与SSD类似,提取与以上6 个尺寸相同的卷积层进行特性处理。由于38×38 这一层在网络结构中靠前,经过的卷积次数较少,提取特征较浅,常用的MobileNet-SSD 会舍去这一层,改为使用倒数第2个卷积层(尺寸为2×2),这样最终使用的6 个有效特征层分别为conv11、conv13、conv14_2、conv15_2、conv16_3、conv17_2。然而,在本实验中有不少图片杂草或豆角苗尺寸较大,占到整张图片的1/3 甚至更多,标准的MobileNet-SSD 模型对这些大尺寸目标检测效果不尽人意,误检率高。为了使模型对大尺寸目标有较好的检测效果,本文调整了标准模型的有效特征层,采用38×38 的特征层提升模型对大尺寸目标的检测效果。结构如图2所示,与原模型对比结果如表1 所示。
表1 原模型与改动模型特征层对比Tab.1 Comparison of feature layers between original model and modified model
图2 MobileNet-SSD 模型结构图Fig.2 MobileNet-SSD model structure diagram
1.2.3 损失函数
网络的损失为MultiboxLoss,总体目标损失函数是定位损失(loc)和类别置信度损失(conf)的加权和,函数公式为:
式中:α——调整位置误差与置信度误差二者所占权重比;N——匹配上的默认框数目,当N=0 时,loss 为零;x——匹配的框是否与真实目标相匹配,x取0 或1;l——预测框位置;g——真实值的位置信息;c——框选目标属于类别p的置信度。
定位损失是一个由预测框(l)和真实框(g)产生的Smooth L1 loss,公式为:
式中:cx,cy——真实框的中心坐标;w,h——真实框的宽和高。
类别置信度损失采用Softmax loss,公式为:
式中:——类别为p时第i个先验框与第j个真实框是否相匹配,取0 或1。
2 数据采集与实验策略
2.1 数据集的获取
本文使用的数据集采用手机于郊外豆角地中进行拍摄,初始像素为1 920×1 080。由于拍摄地植株比较杂乱,拍摄图片存在多根植株相互交错、遮挡的情况,而且部分图片中杂草尺寸小,特征不明显。考虑到MobileNet-SSD 网络的输入尺寸为300×300 像素,将过大尺寸的图片进行resize 之后可能会造成细小特征的丢失,所以还需对拍摄获得的原始图片进行处理。为此本实验挑选并裁剪边界清晰的植株获得810×540 像素的豆角苗-杂草图片共600 张,用labelimg 进行标注,获得VOC2007格式的标签文件。为了防止过拟合,需要对图像进行数据增强,具体的处理方法有水平翻转、移动、随机缩放、像素填充等。
2.2 实验策略
2.2.1 实验平台
实验硬件采用lenovo LEGION R7 型笔记本,CPU 为锐龙R7-4800H;主 频2.9 GHz,显 卡为NVIDIA GeForce 1650,显存容量4 GB。基于Tensorflow 深度学习框架进行实验。
2.2.2 参数选择
在深度学习中,将所有数据(训练集)学习一次称为一个epoch。为了使网络完全收敛需要对网络进行多次训练。由于本实验对象是豆角苗和杂草,粗略选择进行100 个epoch 进行实验。考虑到数据量和实验硬件的限制,实验将图片分为多个批次(batch)进行训练,参考已有的实验将Batch Size 设为8。
2.2.3 模型预训练
深度学习应用于小型图像数据集时,使用预训练网络是一种常用且高效的方法。预训练网络(pretrained network)是一个保存好的网络,之前已经在大数据集上训练好。当原始数据集很大且通用性较好时,预训练网络学习到的空间层次结构可作为图像方面的通用模型。而卷积层提取特征的通用性主要与该层的位置有关。网络中较浅的层提取的特征往往是局部的,且具有较高的通用性。而较深的层提取的特征则更加抽象。
本实验采用VOC 数据集对网络进行训练使其收敛以得到权重,但本实验使用的豆角苗-杂草数据集与VOC 数据集差异很大,因此只能选择通用性较高的网络前几层进行特征提取。具体实现为,先冻结前80 层对模型进行一个粗略的训练,学习率选取5×10-4对顶层进行微调,整体loss 曲线如图3 所示(TL为训练损失,VL为验证损失)。然后,解冻所有层对整个网络进行训练使其完全收敛,这时模型已经有一定的精确度,选择较小的学习率(lr=0.0001)对模型进行调整即可。
图3 预训练Loss 曲线Fig.3 Pre-training loss curve
3 实验结果与分析
3.1 评价指标
目标检测模型常用的精度衡量指标主要有准确度、召回率和平均精度(mAP),考虑到本实验为了使算法在移动端也能有不错的效果而采用了轻量级网络模型,为了突出其整体参数量小、运算速度快的优点,因此除了精度之外必须把检测速度也作为非常重要的一组评价指标,这里采用图片的检测时间来作为评价标准。
准确率和召回率的计算公式为:
式中:P,R——准确度和召回率;TP,TN,FP,FN——真正例、真负例、假正例和假负例。
参考VOC 数据集的常用指标,本文把confidence(置信度)设置为0.5,即检测结果的IOU>0.5 时认定样本为真正例,反之为假正例。最后统计所有正例,再减去真正例即得假负例。
为了验证本文改进后的模型对目标的检测效果,实验选择了VGG-SSD 与标准版MobileNet-SSD 模型作为对照组,为了验证改进后的模型对大尺度目标(本实验中把真实框占图片比例超过30%的目标归类为大尺度目标)的检测效果,要将大目标作为单独的一个因素进行考虑。最终的方案为用三种模型分别对大目标和普通目标进行检测,对比不同模型的检测精度和检测速度。
3.2 损失函数变化
对预训练模型的部分顶层卷积层进行解冻后,按照上文所选用的超参数重新训练。loss 值在前20轮快速下降,随着学习率的衰减下降趋势渐缓,在85 到90 轮训练间取得最小值,继续训练后损失不再下降,90 轮训练后趋于平稳并略有上升,得到的训练损失最终在1.7 附近波动,如图4 所示。
图4 总体损失下降曲线Fig.4 Overall loss reduction curve
3.3 实验对比
在实际的检测过程中,目标的大小往往对检测结果的影响非常大,作物与杂草相互交错、遮挡是很常见的状况。这种状况下容易出现误检与漏检。小目标数量多、体积小,容易被遮挡导致漏检。大目标体积大、不易被遮挡,但容易出现预测框不够精确(某个部分被漏掉)和误检(大目标的一部分被识别为一个单独的小目标)。
3.3.1 普通目标
通过统计豆角苗与杂草被分类的样本(TP、FN、FP)获得3 种模型整体的准确率、召回率,如表2 所示。可以看出,对于普通大小的目标,VGG-SSD 模型具有最高的准确率85.43%略微优于MobileNet-SSD 模型,但检测花费时间约为其3 倍。改动特征层的MobileNet-SSD 模型(使用38×38特征层)的准确率低于标准模型大约3%,由于38×38 这一层相对于原模型使用的2×2 这一层提取的特征比较浅,所以精度下降是正常现象,且下降值在可接受的范围内。各模型预测图如图5 所示。
图5 普通目标检测效果Fig.5 Common target detection effect
表2 各模型对普通目标的豆角苗及杂草检测结果统计Tab.2 Statistics of detection results of carob seedlings and weeds of common targets by each model
3.3.2 大目标
上文已将真实框占图片比例超过30%的目标定义为大目标,统计大目标的分类样本后得到模型的评价指标如表3 所示。实验数据表明,3种模型准确率都有一定程度的下降,其中标准的MobileNet-SSD 模型准确率下降最明显,而改动特征层之后的模型对比原模型准确率高出了3%左右,检测花费时间没有变化。对比VGG 模型虽然准确率几乎持平,但检测速度达到了3 倍左右,因此我们可以认为改动后的模型在大目标检测上对原模型有一定的提升,且速度不受影响。
表3 各模型对大目标的豆角苗及杂草检测结果统计Tab.3 Statistics of detection results of carob seedlings and weeds of large targets by each model
3.3.3 误识别
由于本实验中大目标(大部分为豆角苗)的叶子在某些情况下与杂草相似,会出现误识别现象,主要是有2 种情况:如图6 所示,图6(a)为重识别,识别出大目标(豆角苗)后又将目标的一部分(叶子)识别为杂草;图6(b)为误识别,将一颗完整的豆角植株误识别为两株相邻的目标。这可能是因为原数据集中有部分大目标与小目标相交错,小目标的真实框大部分被包含进大目标的图片,这些情况导致了模型对大目标的检测准确率的下降。
图6 大目标误检测效果Fig.6 Misdetection effect of large target
3.4 实验总结
相比于原模型,特征层改动后得到的模型(MobileNet-SSD(38))在检测普通大小的目标时精度有所下降,但针对本数据集的大目标时具有更好的效果。同时在使用MobileNet 作为主网络时检测速度比VGG16 有大幅度的提升,而准确度仅仅小幅下降。
4 结论
为了满足基于深度学习的杂草识别算法在除草机器人等移动端上的使用,本文详细介绍了轻量级检测网络MobileNet-SSD,使用自己构建的豆角苗-杂草数据集进行训练,在普通目标和大目标上分别获得了83.27%和72.42%的准确率。
针对豆角苗-杂草数据集,改变MobileNet-SSD 网络结构,舍弃原2×2 特征层,改用38×38特征层,改动后模型在对普通目标检测时准确度略微下降了3%,但在针对大目标时比原模型具有更好的效果对比VGG16,以MobileNet 作为主干网络的SSD 模型具有参数少、体积小等优点,大大降低了设备的计算力需求,同时在针对豆角苗-杂草检测中检测2 种目标花费时间分别为0.32s 和0.29s,远远小于VGG-SSD 模型花费时间,因此具有更好的实时性。