曾镜源,洪添胜,杨洲
(1.广东省山区特色农业资源保护与精准利用重点实验室,广东 梅州 514015;2.嘉应学院计算机学院,广东 梅州 514015;3.华南农业大学工程学院,广东 广州 510642)
柑橘是中国第二大水果,其中柚子是柑橘中的重要品种[1]。由于中国的柚子主要种植在偏远山区,在生产的各个环节中,机械化和智能化水平较低,劳动力成本较高,迫切要求引入机械化和智能化设备[2]。在采摘和分拣柚子阶段需要投入大量的人力,而基于机器视觉农业装备能够在复杂场景中代替人执行相关操作,可有效减少劳动力投入,降低劳动强度。如采摘机器人[3]、农产品分拣[4]、果园车辆导航[4]、水肥药精准作业[5-6]、虫害监控等[5-6]、作物生长监测[7]等。
目标识别是这些设备在获取图像后首先面临的问题,对用户关注的目标采用各种算法从图像中识别、定位、分离和像素分割[8-9]。由于待识别目标的复杂性,所以当前的目标识别算法都是以深度学习为基础的[10]。目标识别的相关方法主要分双阶段和单阶段2类,双阶段以R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、Mask R-CNN为代表[11-13],单阶段以SSD、YOLO为代表[14-16]。双阶段方法在检测精度上有优势,而单阶段方法则在速度上有优势。双阶段算法代表Mask R-CNN是在Faster R-CNN基础上定义了新的损失函数,采用RoIAlign获取特征图,以及对深度学习网络结构进行了改进,最终在COCO2016数据集上取得当前最好的成绩[13]。单阶段的YOLOv3是在YOLOv2基础上,采用了新的激活函数和多尺度训练等方法,进一步提高了检测速度[16]。2种代表性的算法都有识别并分割出每一个目标,即实例分割(Instance Segmentation)。实例分割算法是目标检测算法中最精细的分支,可在对目标分类的基础上,将同一类目标的每一个体分割出来。应用场景(如柚子分拣和智能采收装备)中往往存在多个同类个体,实例分割算法的应用有助于实现智能设备对其中的某一个体进行操作。
在果实与背景颜色接近,同一幅图像中出现多个个体,以及个体颜色和体积差异较大等问题的应用场合,传统的方法难于准确地从复杂背景中分离出柚子相关目标,是柚子智能采摘[3]、虫害检测[5]、作业机械智能路径规划[4]、精准喷药和生产加工等的一个技术瓶颈[7]。新的计算技术,其处理能力和网络架构为实例分割方法的应用提供了计算能力、数据通道和安全保障等[17-19]。针对上述问题,本研究主要采用深度学习中的2种实例分割算法进行微调(Fine-tune)迁移和对比测试,研究从果树和分拣场景中分离和分割柚子的方法,实例分割算法在柚子应用中的关键问题,以及算法输出结果的应用。分割出的目标可以进行目标姿态和外形检测,为许多应用提供关键操作。针对柚子建立分割模型,并研究模型应用中的关键技术问题,为柚园监控的结构化传输和存储提供依据。
由于Mask R-CNN是双阶段实例分割算法的代表,而YOLOv3单阶段算法的代表,所以柚子检测模型基于此2种算法进行数据集制备。训练柚子相关目标检测模型,并将冻结后的模型应用于后续检测。
深度学习要求数据集(本研究指柚子相关图片)覆盖面越广,训练出来的模型泛化能力越强。训练未采用数据增强(Data Augmentation)技术,用于训练和测试的图片均为原始图片,以便与后续试验对比。由于柚子从采摘到后续分拣和加工等不同时期,其颜色、表面纹理甚至外形都有较大的变化,故为丰富样本集,试验图片部分来自现场拍摄,部分来自互联网。
试验收集到柚子相关原始图片422幅,样本量不能满足深度学习从头开始训练时需要的数量要求,但可以采用微调的方法进行迁移学习。将收集到的图像数据分为3个数据集:①训练集(Train Dataset):选取359幅作为训练集,用于反复计算网络权重;②评估集(Evaluate Dataset):选取46幅作为评估数据集,用于评估第1步计算出的权重,如果评估未满足要求,对训练集继续训练;③测试集(Test Dataset):将选择有代表性的17幅图片。
上述数据集互不重叠,且为提高测试效果,选择测试集中的图像涵盖了不同的背景复杂度、清晰度、目标类型、目标数量、遮挡、人工添加图案等类型。用于训练模型的样本图像(即训练集和验证集) 和测试集的部分图片如图1所示。
图1 柚子图像样本集Fig.1 Pomelo images dataset
为方便后续柚子姿态和品质检测的研究需求[20-23],本研究设置的目标类别包含pomelo、pomelo_leaf、pomelo_handle、rot、spot和pomelo_tail共6个类别,分别代表柚子、柚子叶、柚子果柄、表皮腐烂、表皮有斑点和柚子脐部,通过LabelMe工具对上述目标类型进行标注。
相关算法采用GPU加速,主机的软硬件配置对训练和检测(推断)速度有较大的影响。本试验的主机主要硬件和软件配置如下:CPU:Intel i5-4460(4核@3.2 GHz);内存:24 GB (8GB×3);GPU:NVIDIA GeForce GTX 1 070(显存8 GB);系统和应用软件均采用64位版本;编程语言:python3.7.1。
本研究采用基于Microsoft COCO 数据集上的预训练模型进行微调(Fine-tune),配置文件采用基于Google的TensorFlow开源框架中的Object Detection API的模型文件。
由于2种算法对数据集的制备方法不一样,所以需要对数据集进行预处理。为便于比较两种算法在柚子图像上的测试效果,模型训练的采用同一套原始图像和标注文件,然后根据模型需要,对数据集进行训练。数据集制备流程图如图2所示。
图2 数据集制备流程Fig.2 Dataset generation flow
采用TensorFlow提供的训练工具训练,训练20万步结束。Mask R-CNN训练时间为11 h,YOLOv3需要0.5 h,然后冻结训练模型供后续使用。
TensorFlow采用张量和计算图的形式编程,以适合多处理器并行处理。采用前面训练并冻结后的模型,应用于测试图像的实例分割,并将检测到的目标的轮廓以Mask形式显示。
为保证测试和运行环境的一致性,Mask R-CNN和YOLOv3的检测模型都是基于TensorFlow框架的Object Detection API。对2种算法的通用模型进行微调训练后,采用冻结的模型对测试样本进行实例分割。2种检测方法的检测结果的部分图像对比如图3所示。
图3 Mask R-CNN与YOLOv3模型测试Fig.3 Model test for Mask R-CNN and YOLOv3
图3训练模型检测出每个目标(实例)并进行标注,并输出目标类别、边框坐标,其中MaskR-CNN可选择输出像素级的Mask位置信息。2种微调模型对17张测试集图像进行测试,对检测结果进行计算和对比发现:①图3(a)与(b)对比,Mask R-CNN模型的边框定位精度和目标检测数量上有优势。边框比较准确,但Mask与目标重叠区域有偏差,越小的目标,偏差越大,边缘也不平滑。YOLOv3检出率比Mask R-CNN少30%以上,包围框(bounding box)的定位精度比Mask R-CNN目标偏离10%以上;②从图3(c)可以看出,大目标的分割效果较理想,提取的Mask像素与人工标注出的样本边界比较,柚子的重叠面积(Intersection of Union,IoU)可达85%以上,小目标如叶子,IoU偏差较大,在45%~70%之间。③Mask R-CNN推断帧速率为0.5~2 FPS,YOLOv3为18~20 FPS。
由于训练是基于预训练模型进行的微调,所以检测结果理论上是比预训练模型的效果差(Mask R-CNN在COCO数据集上平均IoU达到75%以上),特别是Mask的边缘变化较大。要提高检测精度,可以采取数据增强技术扩充数据。拟检测目标在图像中的位置、姿态、尺度、整体图片明暗度等变化不会影响分类结果,故可以通过图形图像的仿射变换技术(平移、旋转、缩放等)、直方图均衡化、切割等方法将图像库成倍扩展,用扩展的图像库训练模型,可以进一步提高分类效果[24-25]。
对柚子品质的评价,一般是依据柚子重量与体积的比值来衡量柚子果肉的品质,比值越大,则可以预测品质越好。柑橘的尺寸检测除了物理尺子直接测量外,也有采用图像处理的方法进行估算[26-28]。在柚子分拣设备上,柚子的重量直接由重量传感器获得,所以只需要计算出柚子的体积,就可以初步预测其品质[29]。由于Mask R-CNN上目前检测精度最高的实例分割算法,由其提供的Mask,可以得到最精确的目标外形。
在工程应用上,摄像头离流水线的柚子的距离是固定的,所以可以根据柚子的图像来估算其体积。标准的柚子形状如图4所示。
图4 标准的柚子形状Fig.4 Standard shape of pomelo
图4中,x为图像像素的宽,nx为当前高度的水平直径,hx为总高度,据此计算出体积V。通过这些参数,结合称重传感器的值m,可以预测柚子品质。定义柚子品质评价指标Qp为:
(1)
设柚子水平切面为圆,则可依据像素估算体积,即:
(2)
式中:h和n由目标的Mask经像素分割后确定。式(1)中的Qp直接计算涉及到像素长度x的标定,精确的长度标定甚至还需要线纹尺,不但成本高,而且步骤复杂。由于同一批次的柚子之间比较更有实际意义,所以合格品质的指标可由现场实际测出,设人工选取的标准样本品质评价指标为Qs,则:
(3)
同理可得标准样本的体积为:
(4)
则Qp与Qs的比值Rp为:
(5)
设:
(6)
由于在特定测试批次上,Ap其为常数。则令:
(7)
式中:
(8)
公式(8)中的n和h由Mask R-CNN的推断(Inference)结果中提取。此式中不再需要像素标定,简化了分拣设备的操作步骤,也减少了运算量。质量由称重传感器测出来,运行时只需要计算Vt,时间复杂度为T(n)。要计算Vt,首先要从原始图像中提出RoI图像及其对应的Mask,然后根据Mask图像的数据进行计算。本文拍摄了6个柚子的原始图片,采用Mask R-CNN推断,根据推断结果截取RoI和生成Mask中图,运行结果如图5所示。
图5 Mask R-CNN推断产生RoI和Mask Fig.5 RoI and Mask generated by Mask R-CNN Inference
由图5的Mask,由可以统计出Mask中每一行白色像素的数量n(nx/2等效于半径),并计算出Vt的值。nx/2和Vt计算结果如图6所示。
图6 Vt值输出 Fig.6 Output of Vt
此外,n和h的准确性与柚子的姿态有直接的关系。旋转柚子至合适的姿态,不仅可以得到准确的n和h值,由此得到精确的nx/2系列,可有效地用于柚子的外形分拣[21-23]。
由于采摘、路线规划、除草等需要,果园现场的智能设备需要识别特定目标的姿态。传统的方法主要是采用基于颜色直方图的阈值法,自适应阈值法(OSTU),Sobel算子提取边缘。这些方法只能应用在简单、一致性好的背景中效果较好。改进的OSTU、贝叶斯分类法、K-means法和演化算法虽然可以分割稍微复杂的背景中的对象,但附加了较多的先验知识,且不适用于目标与背景颜色较接近、特别是边缘模糊的场合,因为其阈值不好确定[30-32]。从前面模型测试结果来看,YOLOv3适用这种不需要Mask的场景,可以快速地从复杂场景中识别、定位和分割目标。
对于已训练好的模型,旋转角度是一种有效的数据增强方法[33]。通过旋转图像时检测结果对比,检测出的矩形框面积最小时,一般其纵向为柚子头部(果柄)的朝向。测试结果如图7所示。
图7 第9号测试图旋转检测效果 Fig.7 Rotate test results for image No.9
图7的复杂背景不影响目标检测和实例分割,且不同的旋转角度检测的目标合并,可以增加检出目标的数量,故旋转图像是一种快速的提高检出率的数据增强方法。利用检测结果中的柚子果实和果柄的包围框位置和大小信息进行柚子角度估算,其检测和计算结果如表1所示。
表1中计算了柚子角度,计算方法为:
(7)
式中:py:柚子矩形框中心纵坐标;px:为其横坐标;hy为果柄矩形框中心纵坐标;hx为其横坐标。
从表1的计算结果可以看出,3个旋转角度检测数据计算出来的柚子角度,因为检测精度的关系,产生误差,动态范围为±5°,对于包装、品质预测等应用是可以接受的。
表1 柚子目标测试数据和角度计算 Table 1 Pomelo object test data and angle calculate
基于Mask R-CNN和YOLOv3的预训练模型进行微调得到自定义的模型,能够识别目标并分割出来。其中YOLOv3模型在速度上优于Mask R-CNN,但检出目标的数量比后者少30%以上,目标的定位精度比后者偏离目标至少10%以上,跟YOLOv3的文献实验相比差距较大。研究结果表明,YOLOv3需要更大的样本量进行训练,才能得到更好的检测效果。
处理速度测试表明,YOLOv3模型的FPS为16~20左右,与检测出的数量有关,但动态变化范围约为(18±2)FPS,而Mask R-CNN的动态变化范围可达(2±1.5)FPS,甚至更大。测试结果说明YOLOv3在指定的硬件平台上,处理速度比较稳定。
在Mask的精确性上,占图像总面积大的目标(如柚子)的IoU可达85%以上,而小目标(如叶子)的IoU偏差较大,在45%~70%之间。训练的模型检测精度比公开的大规模数据集训练结果低,还有较大的提升空间。由此结论可知,拍摄时提高目标占整体图像比例,有利于检测识别,并且提取的精度可以得到大幅度提升。
基于Mask R-CNN的Mask图像直接得到柚子的外形,提出估算柚子品质的新的方法,避免像素标定,减少计算量,时间复杂度为T(n)。基于YOLOv3检测的柚子果实和果柄的包围框,并采用数据增加的方法,计算柚子角度,角度误差可以控制在±5°以内。
综上所述,根据2种模型的特征,Mask R-CNN适合在柚子分拣加工的场合,而YOLOv3更适合在果园现场实施。