-
开放科学(资源服务)标识码(OSID):
-
我国是世界第一大柑橘生产国,约占世界柑橘产量的三分之一[1]。据国家统计局和联合国粮食及农业组织统计,2020年我国柑橘种植面积超过2.8×106 hm2,产量超过5×107 t,分布于全国19个省(自治区、直辖市)[2]。目前,柑橘果园仍采用人工采摘的方式收获成熟柑橘果实,采摘过程耗时长,劳动强度大,人工成本高,如何实现自动化采摘代替人工采摘作业成为柑橘果园管理中亟待解决的问题[3]。
近年来,随着机器视觉和人工智能技术的迅猛发展,新的图像处理与分析方法层出不穷[4]。然而在自然环境下,柑橘多个果实相互遮挡、重叠,以及果实部分受枝叶遮挡的现象非常严重,给目标果实的检测识别与空间定位带来了很大的困难[5]。图像分割技术在农业生产方面的应用吸引了众多学者的关注[6]。刘振宇等[7]提出了一种凝聚层次聚类算法用于检测被遮挡果实,将圆心点集作为改进型凝聚层次聚类分类器的输入,并对输出结果进行圆拟合实现遮挡果实的识别,对未被遮挡的果实识别率高达93.53%,但对被大面积遮挡的果实识别效果较差,仅为82.71%。李立君等[8]基于改进的凸壳理论对被遮挡油茶果进行定位,对被遮挡油茶果的正确识别率达到了93.21%,平均分割误差和平均重合度分别为5.53%和93.43%。李颀等[9]提出了基于YCbCr颜色空间模型和Otsu阈值分割技术,应用边缘检测法和凸包算法提取被遮挡果实的轮廓特征来定位目标果实,果实平均检出率达到90.48%。吴德刚等[10]提出了一种利用K-means聚类方法分离被遮挡的苹果目标与背景,采用Canny算法和凸壳理论相融合的方法获得苹果被遮挡部分真实轮廓,运用三点定圆理论实现了被遮挡苹果整体目标的边缘定位,平均重叠系数为88.921%。通过对上述文献的分析可以看出,现有算法多对被遮挡果实的二维图像进行识别,虽具有较高的准确度,但未结合果实的三维空间信息,无法获得被遮挡果实的空间坐标,难以对果实采摘作业的空间标定提供实质性的帮助。
因此,为解决柑橘果实受枝叶与果实遮挡严重,难以对目标果实进行准确空间定位的问题,本文提出了一种使用双目立体相机三维稠密深度点云并基于YOLOv8-SAM算法对目标柑橘进行识别与空间定位的方法,同时运用边缘检测法提取被遮挡果实的轮廓特征,对其进行椭圆拟合补完,测算果实直径并推断果实形心空间位置,实现对被遮挡柑橘果实的准确分割与精确空间定位,为柑橘采摘的空间标定提供有效帮助。
全文HTML
-
本次试验使用的图像数据为果园实地拍摄所得,拍摄地点为西南大学柑桔研究所,拍摄设备使用的是Canon 60D和手机,图片保存格式为JPG,分辨率为4 032×3 072。图 1为部分采集到的图像数据。
为了对真实采摘环境中的目标柑橘果实进行检测识别,采集了1 796张不同角度、光照、距离、大小的待采摘柑橘图片,使用LabelImg工具对原始图像进行标注,并随机划分为训练集1 200张、验证集300张、测试集296张。同时,为了提高模型的鲁棒性和泛化能力,防止过拟合,在模型训练前对数据集进行数据增强。增强方式包括翻转、等比例缩放、随机平移、模糊、调节亮度等。数据增强后得到4 382张待采摘柑橘图片,其中训练集2 921张、验证集730张、测试集731张。
-
本文训练使用的硬件环境为CPU Intel(R) Xeon(R) Gold 6242R CPU @ 3.10 GHz,GPU Tesla V100-PCIE 32 GB×2,内存126 GB,软件环境为Ubuntu 20.04.1操作系统,Python 3.8,PyTorch 1.10,Torchvision 0.11,CUDA 11.2,cuDNN 8.2.0。
识别试验的计算机硬件环境为CPU Intel(R) Core(TM) i7-10875H @ 2.30 GHz,GPU GeForce RTX 2060,内存8 GB×2,软件环境为Win10操作系统,Python 3.8,PyTorch 1.10,Torchvision 0.11,CUDA 11.3,cuDNN 8.2.0。
经多次调整参数测试后,最终确定训练时选用的模型参数如表 1所示。
-
识别的精度是对柑橘果实目标检测的重要评价指标,因此本文选择准确率P(Precision)、召回率R(Recall)、平均精度AP(Average Precision)、平均精度均值mAP(Mean Average Precision)作为目标检测模型的评价指标。其中P可以反映模型的查准率,R可以反映模型的查全率,AP可以反映单个类别的平均精度,mAP可以反映所有类别的平均精度均值[11]。具体计算方法如下:
其中:Tp表示模型预测结果为正样本,实际结果也为正样本,即正确识别出目标果实的数量;Fp表示模型预测结果为正样本,实际结果为负样本,即误报的负样本数量;FN表示模型预测结果为负样本,实际结果为正样本,即错误识别的样本数量。
文中算法的主要功能是为被遮挡的柑橘果实进行更准确的识别与空间定位,得到目标果实的形心空间坐标与果实直径,为柑橘采摘机器人末端执行器的运动目标点提供参考。
利用目标果实拟合轮廓与人工标注果实轮廓区域内部像素的面积重合度作为算法拟合的评价指标[12],计算公式为:
式中:C为重合度;Q为人工标注果实轮廓区域内像素个数;Qi为拟合轮廓内像素个数。
在实际试验过程中,很难准确获取目标果实的实际形心空间坐标,不适合以形心空间位置误差来评价算法的定位精度。因此,仅将被遮挡柑橘果实的推断空间位置与其未被遮挡状态下推断的空间位置进行对比,来评价算法的定位效果[13]。
算法定位误差的计算公式为:
式中:Δ为算法定位误差;xi,yi,zi为未被遮挡状态下的柑橘果实推断三维空间坐标;xj,yj,zj为同一柑橘果实被遮挡状态下的算法推断三维空间坐标。
果径误差的计算公式为:
式中:E为果径推断误差;D为目标果实真实直径;Di为推断果实直径。
1.1. 数据集构建
1.2. 试验环境与训练策略
1.3. 评价指标
-
由于传统的图像处理方法对柑橘果实识别与定位的误差较大,且难以分离相互重叠的柑橘果实,本文提出一种结合改进的YOLOv8与SAM算法的目标检测与分割模型,较传统方法提高了识别准确率,具有较强的鲁棒性,可适应果园中的复杂环境变化。
YOLOv8是目前较前沿的一阶段目标检测算法,能在保证较高检测精度的同时保持较快的检测速度[14]。本文将YOLOv8网络作为目标检测模型来构建空间定位系统,图 2为YOLOv8网络模型的结构示意图。
YOLOv8网络的检测模型主要分为4个模块:输入模块、骨干网络模块、检测头模块和输出模块。输入模块负责把待检测的柑橘图片输入到网络模型中,通过Mosaic数据增强、自适应锚框计算与自适应图像缩放等方法,对输入的柑橘图像进行预处理,并将原始图像统一缩放到同一标准尺寸;骨干网络模块负责提取图片特征,其中C2f模块在保证模型轻量化的同时能获得更加丰富的梯度流信息;检测头模块采用FPN(Feature Pyramid Networks)自顶向下和PAN(Pixel Aggregation Network)自底向上的双塔结构传递特征,能进一步提高模型特征提取能力;输出模块把提取的特征经过非极大抑制得到图片中检测目标的置信度与坐标[15]。
由于柑橘果实相互重叠极易被识别为同一果实,且YOLOv8网络模型中的骨干网络模块隐含层容易忽视被遮挡过大的果实特征信息,而BAM注意力机制模块能对这部分特征信息进行注意力重构,形成一种分层的注意力机制,可以有效地抑制背景特征,使模型更加聚焦于前景特征,从而增强高级语义,实现更高的性能和更准确的识别效果[16]。BAM模块结构如图 3所示。
在骨干网络模块中增加BAM注意力机制模块,置于C2f模块之后,BAM模块会通过2个分离的路径Channel和Spatial,得到1个Attention Map,可以很好地和YOLOv8目标检测算法进行融合,使提取到的高层特征更加丰富,更加适用于柑橘果实的检测。
通过引入混合注意力模块,共同结合通道注意力和空间注意力,可以有效检测目标轮廓特征,从而得到更好的对重叠果实和被遮挡果实的检测效果。其计算方法为:
式中:σ为Sigmoid函数;Mc(F)为通道注意力,Mc(F)∈RC;Ms(F)为空间注意力,Ms(F)∈RH×W。
式中:BN为Batch Normalization,即批归一化;W0∈RC/r×C;b0∈RC/r;W1∈RC×C/r;b1∈RC。
式中:f为卷积操作;上标为卷积核大小;1×1表示Filter Size为1,用于通道降维;3×3为Dilated Convolution,即空洞卷积。
在改进的YOLOv8模型检测后,可以得到目标柑橘果实所在的目标图像区域。在此区域内应用Meta AI发布的SAM实例分割模型对目标柑橘果实进行分割,从而提取出目标柑橘果实的轮廓[17]。
SAM架构(图 4)包含3个组件,它们协同工作以返回有效的分割掩码:图像编码器用于生成一次性图像嵌入;提示编码器用于生成提示嵌入,提示可以是点、框或文本;轻量级掩码解码器结合了提示和图像编码器的嵌入。
由于柑橘果实图像的果实与背景之间的类间方差较大,通常采用最大类间方差法对图像进行分割处理,如图 5a所示。最大类间方差法又称Ostu法,是在灰度直方图的基础上用最小二乘法原理推导出来的一种常用阈值选取方法,计算简单快速,且不受图像亮度和对比度的影响[18]。
Ostu法虽能有效分割柑橘果实,但对于重叠的柑橘果实图像,难以区分果实与果实之间的轮廓,而SAM算法能有效解决这一问题。如图 5b所示,SAM算法能有效区分2个相互重叠的果实。
-
本文采用Stereolabs旗下的ZED 2i双目立体相机(分辨率3 840×1 080,30 fps,通过USB接口与PC连接)实时获取柑橘果实图像的深度信息,其能够提供RGB-D图像。其中,RGB图片提供了像素坐标系下的(x,y)坐标,而深度图提供了相机坐标系下的z坐标,也就是相机到点的距离[19]。
根据RGB-D图像的信息和相机的内参,可以反推出像素坐标系下任一点在世界坐标系中的空间坐标[20]。取双目立体相机左相机图像作为识别基准,通过上述识别算法对柑橘图像进行目标检测,得到目标柑橘果实所在图像区域。双目立体相机各坐标系转化关系如图 6所示。
世界坐标系P与像素坐标系Puv下点的坐标关系公式为:
式中:ZC为相机坐标系下的深度值;K为相机的内参矩阵;R为外参旋转矩阵;t为平移矩阵。
对双目立体相机进行标定,得到标定结果的相机内部参数矩阵K为:
则彩色镜头焦距为(fx,fy)=(1 060.680 1,1 060.040 0),主光点为(cx,cy)=(952.720 0,524.030 0)。
-
利用改进的YOLOv8模型可检测出柑橘果实所在的图像区域,得到目标果实所在图像区域的长方形框坐标(xmin,ymin)和(xmax,ymax)。可推断得到果实中心点坐标为((xmin+xmax)/2,(ymin+ymax)/2),代入双目立体相机算法中分别计算目标果实左右边距离,即((xmin+xmax)/2,ymin)与((xmin+xmax)/2,ymax)的三维坐标,从而得到目标柑橘果实的直径特征[21]。同时,将目标果实的中心点坐标代入深度图像中,得到该点的深度值信息,加上目标果实半径即可推断出目标果实的空间三维坐标。这也是常见的用于推断未被遮挡柑橘果实空间坐标的方法[22]。
但对于被遮挡的目标柑橘果实,通常有2点原因会对目标果实空间三维坐标造成较大的影响:①识别框仅能框选出未被遮挡部分的目标柑橘,无法对被遮挡部分进行预测,因此可能对柑橘果径的测算造成较大偏差;②识别框的中心点空间三维坐标并不一定为目标柑橘果实的坐标,也有可能为前置遮挡物的空间坐标,以此来测算被遮挡柑橘果实的坐标可能会有较大偏差[23]。
随机选取未被遮挡与被遮挡柑橘果实各20组,测算其果实直径,实际值采用游标卡尺手动测量,测量相对误差值如图 7所示。
可以看出,在对未被遮挡柑橘目标进行果径识别时,其相对误差值较小,仅在1%左右;而在对被遮挡柑橘目标进行果径识别时,其误差值较大,在0.6%到15.6%不等,波动明显。这主要是受遮挡面积和遮挡部位变化的影响,因此需要一种算法能够尽量规避遮挡面积和遮挡部位带来的误差影响。
-
柑橘果实可以近似为一个椭圆形,因此可将被遮挡的柑橘果实问题抽象为对被遮挡的椭圆形进行补完。当得到被遮挡果实的有效轮廓边时,可用椭圆拟合算法求得完整的椭圆[24]。
本文采用Canny检测算子对分割后的柑橘目标进行轮廓提取[25]。
平面上任意位置的一个椭圆,其中心坐标为(x0,y0),半长轴为a,半短轴为b,长轴偏角为θ,椭圆的一般方程为:
其中:A、B、C、D、E分别为椭圆参数。
现采集到多个测量点坐标(xi,yi),所拟合的目标函数为:
为了使F最小,需使F的各项偏导为0,即:
求解线性方程组即可解出拟合的椭圆参数[26]。
当得到被遮挡柑橘果实的轮廓时,基于双目立体相机的点云图像,可以获得该轮廓上点的深度信息。经多次试验尝试,取该轮廓上深度值最大的30个点的像素坐标,以其定位被遮挡柑橘轮廓的有效边,采用最小二乘法进行椭圆拟合,使推断的实际柑橘果实轮廓最接近真实柑橘果实轮廓。
考虑到实际柑橘果实轮廓为类圆形,在实际定位过程中可能由于双目立体相机点云坐标的误差产生一定的偏差,在进行椭圆拟合时,重复选取50次,若椭圆的轴比(椭圆长轴与短轴的比值)为0.8~1.2,且椭圆的焦距不大于或小于50次定位焦距平均值的50%,则视该次拟合为一次有效的拟合,计算所有有效拟合椭圆的均值,获得最终拟合效果,从而确保柑橘果实目标定位的精度。
拟合后的效果如图 8所示,可以看出,该算法拟合后的果实轮廓接近真实的柑橘果实轮廓。
柑橘采摘机器人在工作过程中常以目标柑橘的形心作为末端执行器目标点的参考坐标。得到目标柑橘果实推算轮廓后,结合轮廓有效边的空间坐标,可推得被遮挡果实的拟合直径,从而求出果实中心点空间坐标。
2.1. 改进的YOLO目标检测与分割算法
2.2. 双目视觉空间定位
2.3. 常见的空间定位方法
2.4. 优化后的空间定位算法
-
为了验证BAM注意力机制的有效性,本文将BAM注意力模块与其他热门注意力模块进行对比试验,将BAM注意力模块与未添加注意力模块、BoTNet(Bottleneck Transformers)注意力模块、SimAM(Simple Attention Module)注意力模块进行对比,如表 2所示。可以发现,引入BAM注意力模块后的检测精度更高。
-
为了验证本文改进YOLOv8网络的有效性,选取目前热门的深度学习目标检测算法作为对比,使用同一数据集分别对Faster RCNN、YOLOv5、YOLOv8和改进的YOLOv8网络进行训练和测试。如表 3所示,使用引入BAM注意力模块后的改进YOLOv8网络模型相比其他网络模型,具有最高的平均精度均值。
-
选取特定环境下的柑橘果实图片,分别使用YOLOv8网络(图 9a)与改进后的YOLOv8网络(图 9b)进行检测。
由图 9可知,原始的YOLOv8网络模型在果实重叠与被枝叶遮挡的情况下,出现一定的漏检和识别偏差的情况,通常出现在果实重叠面积和被枝叶遮挡面积过大时;而改进的YOLOv8网络模型对这种情况有更好的识别效果,漏检目标更少且平均置信度更高。综合分析可知,改进的YOLOv8网络模型对该环境下的柑橘果实检测具有良好的泛化性。
-
为了验证本文提出的改进方法的有效性和实用性,选取120幅被遮挡柑橘果实图像进行试验。按照目标柑橘果实被遮挡情况的区分,可将测试图像分为3类各40幅,如图 10所示:a类为如图 10a所示的多个果实同时出现但未被遮挡;b类为如图 10b所示的果实部分区域被枝叶遮挡导致目标轮廓不完整;c类为如图 10c所示的果实之间相互重叠遮挡。
利用本文算法对图像进行处理,中间过程效果如图 11所示。
分别用凸包算法[23]与本文改进算法对目标果实与实际果实像素面积重合度进行对比验证,对于a类的果实,果实像素重合度较高,重合度均值分别达到92.61%与93.04%,2种方法检测效果相近,均能达到采摘精度要求;对于b、c类果实,凸包算法对于果实轮廓缺失严重的情况难以做到有效识别,重合度均值为63.85%,且波动范围较大,而本文算法得到的重合度均值为86.73%,且波动范围较小。其中,当两果实重叠程度超过78%时,算法容易将其识别为同一果实,导致识别失败。
-
分别用未改进的算法(如2.3节所述)与本文改进算法计算3类目标柑橘果实形心空间坐标位置与果实直径,得到如表 4所示的定位误差与果径误差对比数据。
由表 4可知,本文算法对未被遮挡的分离果实(a类)的定位与果径识别没有较大的提升,但在被枝叶遮挡与果实重叠的情况下,本文算法有着明显的提升效果,平均定位误差减小了16.22 mm,平均果径误差降低了7.99%,证明了本文算法能够较为准确地进行被遮挡柑橘果实的定位检测与果径识别。
为直观验证改进后的YOLOv8-SAM算法的检测效果,对同一果园环境进行对比测试。图 12显示了在果园环境中算法改进前后运行对比的效果。
在图 12所示的环境中,共有12颗目标柑橘果实,改进前的算法检测到9颗柑橘果实,漏检3颗,且对于大面积重叠果实与枝叶遮挡的情况有明显的形心位置判断偏差;而改进后的算法,仅漏检1颗,相比改进前,漏检数目更少且对目标果实的形心位置和果径判断更为准确。综合分析可知,改进后的YOLOv8-SAM算法对被遮挡柑橘的目标识别和定位效果更好,更适用于果园采摘环境。
3.1. 改进后的网络模型效果
3.1.1. 注意力对比试验
3.1.2. 不同模型对比试验
3.2. 检测效果对比
3.2.1. 果实识别效果
3.2.2. 拟合效果
3.2.3. 定位检测效果
-
针对柑橘果实相互重叠与被枝叶遮挡导致的对机器视觉定位目标柑橘空间位置造成误差的问题,本文提出了一种基于YOLOv8-SAM算法对被遮挡柑橘的位置形状进行识别,并运用边缘检测法结合双目立体相机三维稠密深度点云得到被遮挡柑橘的有效轮廓边,使用最小二乘法拟合出被遮挡柑橘的完整轮廓以确定目标柑橘更精确的空间坐标位置。主要结论如下:
1) 提出一种改进的YOLOv8网络结构,在骨干网络模块中加入BAM注意力机制模块,使其对重叠果实与被枝叶遮挡果实有更好的识别效果。改进网络在果园环境下的柑橘果实检测中达到了88.4%的准确率、87.4%的召回率以及91.1%的平均精度均值,相较于原始的YOLOv8网络模型,改进的YOLOv8网络在果实重叠与被枝叶遮挡环境下的识别准确率提高了1.9个百分点,平均精度均值提升了1.8个百分点。
2) 提出一种对被遮挡柑橘果实轮廓的重建方法,基于图像分割与深度图像数据对被遮挡柑橘果实有效轮廓边进行补完,并获得果实形心空间坐标,利用该方法获得的重建轮廓与实际果实轮廓重合度高。对未被遮挡或被轻度遮挡的果实,重合度均值达到93.04%;对被枝叶遮挡或果实重叠的情况,重合度均值达到86.73%。
3) 使用本文算法模型对目标柑橘果实的空间位置与果径进行识别时,对形心位置定位的平均误差减少了16.22 mm,平均果径误差降低了7.99%,证明了本文提出的改进算法能够较为准确地识别被遮挡柑橘果实目标并对其进行定位与果径测量,验证了本文算法用于自动化柑橘采摘的可行性,为柑橘果实及相似水果在自然环境下的识别和定位提供了参考,为水果采摘机器人的研制提供了支撑。