基于改进Tiny-YOLOv5l算法的串型番茄定位与计数
2022-03-05赵九霄史凯丽李晶晶李作麟
赵九霄 张 馨 史凯丽 李晶晶 李作麟
(1. 北京市农林科学院信息技术研究中心,北京 100097;2. 农业农村部农业信息软硬件产品质量检测重点实验室,北京 100097; 3. 北京市农林科学院智能装备技术研究中心,北京 100097)
2021年,中国番茄加工生产量为480万t,其中串型番茄由于其植株承果能力强、萼片质量好、果实品质高等优良的商品特性而受到消费者的广泛认可,但在串型番茄市场需求量增加的同时也带来了一系列挑战:① 需要对产后串型番茄进行分级,分级的前提是需要定位串型番茄位置及每一串的果实数量;② 需在该过程中降低人工分拣带来的损失等[1]。传统的人工定位、计数方法需要消耗大量劳动力资源,且精确度较低、实时性较差,现代化智慧农业的发展需要一种新型视觉无损检测方法来代替传统的人工定位和计数。
Michael等[2]提出了一种机器视觉系统,可以准确地定位目标并计算其数量。该方法使用Fast R-CNN框架[3]实现了高效的检测。周胜安等[4]提出了一种改进CenterNet方法,通过替换骨干网络的方法,提升检测中小残缺块的检测能力。Parico等[5]提出了一种先进目标检测模型YOLOv4的变体,并对多重目标跟踪算法进行深度排序,构建了应用于移动端的鲁棒实时果实计数器。高芳芳等[6]提出了基于轻量级目标检测网络YOLOv4-tiny和卡尔曼滤波跟踪算法的目标检测与视频计数方法,其平均检测精度达94.47%。Wang等[7]提出了一种检测和计数的两阶段方法。该方法可以准确地检测并计算图像中具有高度邻接度的目标,优于基于手工特征的方法和YOLOv3方法[8-9]。Chen等[10]提出了一种基于无人机巡线视频的目标检测计数解决方案,结合YOLO快速检测的特点,将卷积神经网络应用于极点状态的图像检测。目前,有关农业中作物定位和计数的研究较少,且研究场景大多数为正常情况下的目标检测问题,并未对实际的产后串型番茄定位与计数过程中出现的果实之间遮挡问题、产后分级地点光线变化、拍摄过程中出现的图像虚化问题以及背景干扰问题进行深入研究。
研究拟提出基于深度学习的改进Tiny-YOLOv5l串型番茄定位与计数算法,利用适用于样本数据的注意力机制增加分类准确度;通过加入空洞卷积层增大感受野;通过加入深度可分离卷积层减少模型参数,旨在进一步提高串型番茄检测框架的准确率和实时性。
1 试验方法与材料
1.1 图像采集
试验所用的串型番茄由北京宏福国际农业科技有限公司提供,采集的图像是成熟后的串型番茄,品种为Juanita,生长高度区间为1.8~2.4 m,种植间隔45~60 cm。拍摄设备选用佳能EOS7D,相机采用双数字影像处理器,像素为1 800万像素,图像采集工作从2021年8月—2022年1月,每月采集2次串型番茄图像,共采集12批,数据样本共969张图片。
1.2 数据集构建
通过对训练样本旋转来实现数据扩增,水平旋转角度范围为-35°~+35°。在水平旋转的基础上,加入20%随机裁剪和高斯噪声。扩增完成后对新增样本进行筛选,去除劣质样本,将增强后的图像和原图混合融入串型番茄数据集中。所有图像统一使用JPG格式,分辨率为1 920×1 080,标注方式使用labelme手动标注,数据集标准为coco数据集,分为训练集、验证集、测试集,分割比例为5∶3∶2。
如表1所示,经数据增强及去除劣质样本后,混合数据集共有2 280张图片,数据集包含5个类别。① 正常情况:为防止叶片、杆径、果实等对串型番茄的干扰,选取串型番茄背面朝上的样本。② 遮挡条件:分别选取被叶片、茎秆、果实等遮挡情况下的串型番茄样本。③ 背景干扰:选取试验器材干扰物干扰的串型番茄样本。④ 光照变化:选取由强到弱5种不同光照条件下的串型番茄样本。⑤ 图片虚化:选取虚化的串型番茄样本。
表1 数据集中不同挑战图片数量
2 Tiny-YOLOv5l模型建立
2.1 Tiny-YOLOv5l模型
YOLOv5l网络结构由Darknet-53主干网络、路径聚合网络(PANet)组成[11-12]。采用CSP1_X作为主干,形成两个支路,X个Bottleneck模块串联组成支路一,卷积层组成支路二,采用这种结构使串型番茄深层特征提取能力增强。PANet结构是由卷积操作、上采样操作、CSP2_X构成的循环金字塔结构,可以使串型番茄图像不同特征层之间相互融合,以进行掩模预测,经非极大值抑制(NMS)获得最终串型番茄定位预测框。图1为改进的Tiny-YOLOv5l框架。
YOLOv5l的损失函数由边框回归损失、置信度损失以及分类概率损失3部分组成,采用完全交并比损失函数(CIoU Loss)实现预测[13],其计算式为:
(1)
图1 改进的Tiny-YOLOv5l框架结构图
(2)
(3)
(4)
式中:
b、bgt——预测框和真实框的中心点;
ρ——预测框和真实框中心点之间的欧式距离;
c——能够同时包含预测框和真实框的最小闭包区域的对角线间距;
w、wgt——预测框和真实框的宽度,像素;
h、hgt——预测框和真实框的宽度,像素;
IoU——预测框和真实框之间的交并集之比。
2.2 SVM-MHSA
YOLOv5l包含Bottleneck CSP结构,该结构中的Bottleneck层常出现在ResNet50[14]网络结构中,可以降低深层网络的计算量,bottleneck结构中第1个1×1层是降低特征维度,第2个1×1层用于提高维度。经过降维和升维后形成类似于沙漏的Bottleneck结构,如图2(a) 所示。串型番茄个体均为小目标,且检测环境多为非结构化环境,果实受到密集分布、遮挡、光照变化等因素影响,在前向传播过程中果实表层特征信息逐渐减弱,导致果实的轮廓信息丢失出现漏检情况,因此加强环境因子影响下的果实目标特征学习尤为重要。在较深的网络层数且需要更高性能的检测网络中使用注意力机制,其中输入图像的分辨率为1 920×1 080。考虑到在指数范围内执行自我注意力机制所需内存和计算量,在主干网络中将深层特征图纳入自我注意力机制模块中。残差网络主干网中的堆栈使用3个块,每个块中有一个3×3的空间转换,使用MHSA层进行替换,构成改进Bottleneck CSP体系结构的基础。第1个块使用3×3的卷积,步长为2;其他两个块步长为1。对第1个改进CSP块使用步长为2的2×2平均池化层,改进后Tiny-YOLOv5l的bottleneck层结构如图2(b)所示。
图2 Bottleneck改进前后结构对比图
支持向量机(SVM)的原理是二分类,其基础是定义在线性空间的间隔最大线性分类器,同时可以通过核函数解决非线性数据的分类问题,使用高斯核函数SVM进行分类决策。
(5)
SVM优势:试验数据集总规模为969张,规模较小,SVM分类器相较softmax分类器在处理小规模样本方面具有优势;串型番茄特征相对于背景干扰特征较为明显,不同于softmax函数的精细评分机制,使用二分类的SVM方法只要满足边界值则给出判断,因此SVM分类函数更适用于产后串型番茄;softmax函数存在过拟合风险,SVM函数可以解决softmax分类器对于非结构环境下串型番茄分类识别能力不足的问题。因此,使用SVM代替MHSA结构中的softmax分类层,即提取特征后利用SVM分类函数进行分类。多头注意力机制方法可以在不同的投影空间中建立不同的投影信息将多个注意力的方法进行组合,因此多个注意力的组合效果优于单个注意力机制。SVM-MHSA机制中,不同的随机初始化映射矩阵可以将输入向量映射到不同的子空间,可以使SVM-MHSA模型从串型番茄的色泽、大小、位置信息等不同角度理解输入的数据,通过收集多尺度信息可以使模型从多维度理解串型番茄的表型信息,以提高检测模型的鲁棒性。
改进后的SVM-MHSA层如图3所示,其步骤为:
步骤1:初始化算法需要用到的patch维度、高度、宽度;
步骤2:设置卷积核长度为1;
步骤3:对query、key、value值进行2d卷积;
步骤4:对长和宽进行空间相对位置编码;
步骤5:将nn.SVM赋值给self.SVM;
步骤6:定义多头注意力机制输入项x;
步骤7:得到的x.size由batch_size高度、宽度、通道个数组成;
步骤8:将长宽拉直后的值、batch_size、通道数三者乘机赋值给q、k、v;
步骤9:计算content_content与content_new_position值;
图3 SVM-MHSA层结构图
步骤10:content_content与content_new_position相加得到的值调用self.SVM,最终得到attention值;
步骤11:v与attention乘积得到的值赋值给out;
步骤12:输出。
改进后的Tiny-YOLOv5l特征提取图如图4所示,Stage2的CSP输出的特征提取图保留了串型番茄的大部分内容信息,极大程度地突出了串型番茄的轮廓信息,利用前3层浅层特征提取层提取串型番茄的轮廓特征,Stage23的CSP输出的特征提取图突出了串型番茄的深层细节信息,但对轮廓信息表述较差。使用注意力机制可以较好地结合串型番茄的轮廓信息和细节信息,使用浅层的轮廓信息恢复最后的检测结果图。
图4 特征提取图
2.3 深度可分离卷积
将Tiny-YOLOv5l中3×3卷积替换为深度可分离卷积。在保持输入数据集大小稳定的前提下,改进前卷积计算量C1为:
C1=Dk×Dk×M×N×DF×DF,
(6)
式中:
DF——输入与输出特征图的宽度与高度,像素;
M——输入特征图的通道数;
N——输出特征图的通道数;
Dk——卷积核的长和宽。
替换可分离卷积后的总计算量C2为:
C2=Dk×Dk×M×DF×DF+M×N×DF×DF。
(7)
改进后卷积与改进前卷积计算量之比C3为:
(8)
2.4 空洞卷积
在串型番茄检测过程中,对于一些尺寸较小的番茄检测比较困难。由于遮挡、虚化等因素影响,对小番茄的外观特征数据收集匮乏,因而出现漏检、误检的情况。如图5所示,空洞卷积可以使卷积囊括更大范围的信息,从而有效利用信息量来提高模型的性能,进而有效捕获边缘特征信息,因此引入空洞卷积来扩大感受野。
图5 空洞卷积示意图
扩张率为卷积核处理数据时各数据值之间的间距[15],空洞卷积核和感受野大小为:
fk'=fk+(fk-1)*(r-1),
(9)
(10)
式中:
fk——原始卷积核大小;
fk'——空洞卷积核大小;
r——卷积核的扩张率;
Rm——经空洞卷积后第m层感受野大小;
Si——第i层的步长;
*——卷积。
2.5 Rrelu激活函数
YOLOv5l使用的激活函数为Mish激活函数与Leaky_relu激活函数,Mish激活函数应用于Backbone结构中,Leaky_relu结构主要应用于CSP结构中,Backbone结构中的Mish激活函数不作改变,使用Rrelu激活函数[16],Leaky_relu表达式为:
(11)
式中:
ai——(1,+∞)区间内的固定参数。
使用Rrelu激活函数代替Leaky_relu激活函数,其表达式为:
where
aji~U(l,u),l (12) 训练采用的CPU为(英特尔)Intel(R) Core(TM) i5-11400,内存为32 G,操作系统为Windows 10,显卡为RTX3060,拥有12 G独显。 (1) 配置模型训练所需文件结构及路径。 (2) 用Anaconda3配置虚拟环境,调用环境所需python版本以及pytorch等;根据不同数据集规模及难易程度调整模型阈值参数,将改进后的模型导入。 (3) 总训练迭代次数为300轮,为使梯度下降学习法有更好的效率,初始学习率为0.01。根据串型番茄数据集大小设置每步骤更新公式为: α=0.95epoch_num·α0, (13) 式中: α——实时学习率; α0——初始学习率; epoch_num——epoch次数。 为了评价Tiny-YOLOv5l的性能,主要使用精确度[17]、召回率[18]等评价指标。召回率和精度分别按式(14)、式(15)计算。 (14) (15) 式中: R——召回率; P——精确度; TP——准确检测出的串型番茄目标数; FP——误检出的串型番茄目标数; FN——漏检的串型番茄目标数。 在同一数据集上分别训练YOLOv5l以及改进的Tiny-YOLOv5l两种算法,在正常拍摄条件下改进前的算法检测置信度为93%,改进后的Tiny-YOLOv5l算法对目标检测的置信度为94%,检测并无显著提高。 由于拍摄角度不同导致取图过程中存在较多遮挡问题(果实被果实遮挡、果实被叶遮挡等)。如图6(a)所示,蓝色框为YOLOv5l算法漏检的串型番茄,其中未识别的遮挡串型番茄占未识别总数的77.8%;如图6(b)所示,Tiny-YOLOv5l算法可以100%识别所有目标区域中的串型番茄,且置信度方面较YOLOv5l提高了1%~3%。背景干扰下,如图6(c)中黄色框所示,无关环境因子被误检为串型番茄;如图6(d)所示,Tiny-YOLOv5l算法可以识别遮挡面积超过70%的串型番茄。选择5种光照环境进行对比检测试验。图6(e)中绿色框为YOLOv5l算法漏检的串型番茄,图6(f)表明Tiny-YOLOv5l算法均能有效识别串型番茄个体。在图片虚化情况下,图6(g)表明YOLOv5l算法识别到的串型番茄数量为0;Tiny-YOLOv5l算法在加入Bottleneck替换层后[图6(h)],加强了对模糊特征的学习,可以检测出全部串型番茄。 图6 图片虚化下算法改进前后对比图 4.2.1 检测速度 由图7可知,Tiny-YOLOv5l算法较YOLOv5l所需检测时间少,即使在使用普通电脑配置(酷睿i5,16 GB内存)训练参数规模是3.76×107的网络模型,训练一步所需时间仅为8~10 s,总训练时长为12.77 h。在正常拍摄、遮挡情况、背景干扰、光照变化和图像虚化情况下收敛速度分别缩减,说明在不利拍摄情况下,改进后的算法表现出更好的计算速率。 图7 改进前后算法检测速度比较 4.2.2 损失率 由图8(a)可知,当训练轮数<13时,YOLOv5l的损失率比Tiny-YOLOv5l的低;当训练轮数增加至210时,YOLOv5l的损失率从11.13%收敛至1.91%,Tiny-YOLOv5l的损失率从11.98%收敛至1.93%,Tiny-YOLOv5l的降低幅度明显高于YOLOv5l;当训练轮数>250时,两种算法的损失率降低幅度逐渐趋于稳定,模型训练效果良好,未出现梯度消失或梯度爆炸现象,Tiny-YOLOv5l的最终损失率为1.41%,低于YOLOv5l的。由图8(b)可知,训练开始时Tiny-YOLOv5l算法检测框损失率为10.74%,低于YOLOv5l的,随着迭代次数的增加,当迭代次数>226时,损失率趋于稳定,最终Tiny-YOLOv5l算法的损失率为0.65%,优于YOLOv5l算法的。 图8 改进前后检测框损失率对比图 由图9(a)可知,当训练轮数<15时,改进前算法损失率从11.9%上升至17.83%后又回落至10.32%,改进后算法处于不稳定状态,损失率由8.93%上升至14.83%后又回落至7.27%;当训练轮数>15时,两种算法均趋于稳定,且YOLOv5l算法的目标损失率波动幅度大于Tiny-YOLOv5l。由图9(b)可知,Tiny-YOLOv5l算法的目标损失率趋于稳定,最终稳定在1.37%,优于YOLOv5l算法的。 图9 改进前后目标损失率对比图 由图10可知,当训练轮数<30时,改进前后算法的置信度损失情况相似,当训练轮数>143时,无论是训练集还是验证集,Tiny-YOLOv5l算法具有更低的置信度损失率,比YOLOv5l低0.14%。 图10 改进前后训练集和验证集置信度损失率对比图 4.2.3 精度 由图11可知,改进前的YOLOv5l算法的检测精度稳定于98.89%,高于改进后的Tiny-YOLOv5l算法。 图11 改进前后精度对比图 4.2.4 召回率 由图12可知,初始时,两种算法的召回率均<20%,因为串型番茄形状大小不一,训练开始时漏检情况较多。当训练轮数<210时,两种算法的召回率均在波动上升,而Tiny-YOLOv5l的上升趋势较YOLOv5l更具优势;当训练轮数>210时,二者召回率均趋近于1,且Tiny-YOLOv5l的召回率高于YOLOv5l。 图12 改进前后召回率对比图 研究建立了一种串型番茄实时检测与计数算法模型。在模型中加入注意力机制可以加强对串型番茄目标识别的准确率;采用SVM分类函数代替softmax分类函数,可使之更适用于样本数据,并拥有更好的泛化能力;加入空洞卷积增大对样本特征的感受野可以提高检测准确率;在模型中引入深度可分离卷积,可以减少参数量以增加实时性;使用随机纠正线性单元激活函数可以增加网络训练的收敛速度。在串型番茄检测过程中,计算量仍是一项挑战,如何在保持精度的前提下优化模型是待解决的问题之一;检测的品种种类过于单一,如何提高泛化性能也是一项重要的工作;此外,后续将对串型番茄色泽、残缺种类等其他参数进行研究分类。3 模型训练与测试
3.1 模型运行平台
3.2 参数设置及训练步骤
3.3 评价指标
4 结果与分析
4.1 监测识别结果
4.2 模型性能评估
5 结论