基于深度学习的温室大棚小番茄果实计数方法
2021-08-12魏超宇刘辉军
魏超宇,韩 文,刘辉军
(中国计量大学 计量测试工程学院,浙江 杭州 310018)
产量估计是农业生产中的一个重要环节,对于种植者了解产量变化、规划劳动力安排和指导作物采收等具有重要意义。精准农业的发展使得播种、估产和收获等的自动化成为了可能,但其应用领域目前主要局限于小麦、水稻和玉米等作物[1]。果蔬植株的冠层结构复杂,果实的重叠、遮挡情况严重,多数果园仍通过人工抽样计数的方式对整个果园的产量进行估计,该方法费时费力且难以保证精度。如何实现果蔬的智能化估产是一个亟待解决的问题。
果实的准确计数是实现果蔬智能化估产的关键。部分学者采用RGB-D相机、光谱相机和雷达等设备采集果实数据并结合相关算法取得了较高的果实检测精度[2-4],但这些设备价格昂贵或易受环境条件制约,难以较好地应用于实际的农业生产。RGB相机具有简单、高效和成本低的特点,现已成为了主流的果实数据获取方式。早期的果实计数研究中主要利用人工设计的特征,如颜色、形状和纹理等,并结合分类器对果实目标进行检测,分类器可以是有监督的分类算法,如K最近邻、支持向量机等[5,6],或是非监督的聚类算法,如模糊聚类、K-means聚类等[7-8]。这些方法在特定的条件下可达到较高的精度,但当果实形态、光照情况和相机视角等发生变化时,这些方法往往需要重新设计特征或者优化分类器的参数选择,其鲁棒性较差。
近些年,随着深度学习的发展,出现了许多先进的目标检测网络,如Faster RCNN[9]、YOLOv3[10]和SSD等[11],在人脸识别、自动驾驶和智能医疗等领域得到了广泛的应用;随着农业智能化的推进,目标检测在农业领域也取得了一定的发展。Bargoti等[12]使用Faster RCNN检测杏、芒果和苹果等,其中芒果的F1值达到了0.907。但是,也有较多的错误实例来自密集的果实集群,这些果实的重叠情况较严重,易产生漏识别。Koirala等[13]采用卷积层替换下采样层设计了MangoYOLO,对芒果的F1值达到了0.89,并讨论了不同阈值下非极大值抑制(Non-maximum suppression,NMS)对检测结果的影响,结果表明NMS会降低对重叠果实的检测精度。薛月菊等[14]将密集连接引入YOLOv2网络对未成熟芒果进行识别,有效提高了重叠、遮挡果实的检测计数精度,但网络仍会将密集的芒果集群误识别为一个果实。赵德安等[15]使用YOLOv3对个数不同的苹果果实集群进行检测,单个独立果实的检测精度最高,集群果实越多,检测精度越低。基于深度学习的目标检测方法多针对于以独立果实为主的苹果、芒果和柑橘等对象,并通过对特征提取网络进行改进,在一定程度上提高了重叠、遮挡情况下果实的检测精度。但以单果为目标的检测方法难以应用于像小番茄这类果实呈簇状的对象,目前对于簇状果实的计数研究鲜有且存在较大的挑战。这一方面是因为果实簇是由多个果实聚集在一起形成的,果实间的重叠、遮挡情况严重,单果的标注精度难以保证;另一方面是因为目标检测网络需要采用NMS删除冗余的候选框,但这使得目标在严重重叠的情况下,准确的候选框也会被删去。另外,目标检测网络是通过矩形框实现目标的识别和定位,但定位不是果实计数任务的必要,通过目标检测进行果实计数会增加不必要的定位开销。
本文以小番茄植株为研究对象,根据果实特点把果实簇作为目标,果实簇的可见果实数作为类别,将复杂的果实计数任务转化为果实簇的检测和分类两个子任务,从而有效避免了果实间的重叠、遮挡问题,并大大地减少了标注工作量,于是提出了两种基于深度学习的番茄果实计数方法:方法1采用目标检测网络直接对果实簇进行检测和分类。方法2先采用目标检测网络检测果实簇,再通过分类网络对果实簇进行分类。在自制小番茄数据集上对两种方法进行测试,以期实现果实的准确计数。
1 实验数据
1.1 数据采集
实验果园位于杭州市钱塘江南岸(经度30.26°,纬度120.30°),小番茄植株采用温室大棚种植,其果实呈簇状,颜色不一,果实间重叠情况较严重。图像采集时间段为2019年12月8日上午8:00-11:00和下午2:00-5:00。图像采集装置由相机、云台、滑轨和三脚架组成,如图1。为模拟实际作业情况,将三脚架置于植株行间,相机高度通过三脚架调节至离地1.4 m,使果实落入相机视野中,滑轨长2.5 m,相机型号为索尼A6000,分辨率为1 920像素×1 080像素,匀速推动相机从滑轨的一端到移动至另一端以采集番茄植株视频数据。
注:1—相机;2—云台;3—滑轨;4—三脚架图1 图像采集装置Figure 1 Image collection devices
1.2 数据集制作
1.2.1 单果标注
通过检测单个果实进行计数是一种直接的方式,适用于果实分布稀疏的果蔬。图2为小番茄果实的单果标注示例,可以看到,果实呈簇状,具有严重的重叠情况,对单果进行标注存在以下问题:1)果实数较多,标注工作量大,且果实重叠严重,标注精度难以保证;2)目标检测网络需要通过NMS删除重合度较高的冗余框,当果实目标存在严重重叠时,一些重合度较高的真实框也会被删去。
图2 单果标注示例Figure 2 Annotating example of single fruit
1.2.2 果实簇标注
通过图像采集装置共采集了65段视频,随机选取45段,每段视频隔100帧抽取一张图像,共获取631张图像作为训练集,剩余20段视频以相同方式获取了211张图像作为测试集。为减少实验的运行时间,将图像缩放至960像素×416像素。为满足后续不同方法的数据需求,采用了不同的标注方式得到了三个数据集,如图3。数据集A:使用LabelImg标注工具以最小外接矩形框的方式对番茄果实簇进行标注,类别标注为“Tomato”。数据集B:为了训练网络对不同果实簇的分类能力,在数据集A的基础上,根据果实簇的可见果实数对每个目标框进行类别标注,并赋予不同颜色进行区分。数据集C:提取数据集A标注的所有果实簇,归一化到100像素×100像素作为样本,将果实簇的可见果实数作为类别,用于训练分类网络。从原图和标注结果图可以看出,由于果实簇的分布较为稀疏,多表现为独立的状态,所以不同果实簇的标注框之间的重叠遮挡情况较少,而且所需要的标注量相比于单果标注也大大减少。
整个数据集共标注了4 377个果实簇,果实簇所含果实数在1到9之间,其中训练集标注3 268个果实簇,测试集标注1 109个果实簇,其类别分布如图4所示。果实簇是由多个果实聚集形成的,可以看到,大多果实簇所含果实集中在4到8之间,而类别1和类别2的果实簇样本相对较少,不同类别的数据之间存在样本不平衡的问题。针对该问题,在原图上随机裁剪类别1和类别2的果实簇样本并进行水平翻转作为数据增强样本,如图3(d),然后采用与原图相同的标注方式对数据集A、B和C分别进行扩充。综合考虑下,将类别1和类别2的果实簇样本各增加100,以较好地平衡不同类别的果实簇。
图4 果实簇的分布Figure 4 Distribution of fruit clusters
2 基于深度学习的小番茄果实的计数方法
本文根据小番茄果实的特点,把果实的计数任务转化为果实簇的检测和分类两个子任务,利用图像分类网络和目标检测网络实现果实计数。
2.1 图像分类网络
图像分类是根据图像信息中所反映的特征进行分类的图像处理方法。图像分类网络主要由卷积层、池化层和全连接层组成,卷积层和池化层进行特征提取,全连接层用于分类。随着深度学习的兴起,现已涌现了一系列的图像分类网络,如AlexNet、VGGNet、GoogleNet和ResNet等。ResNet采用了图5的残差结构,可通过短接将输入的恒等映射与输出进行融合[16],从而有效缓解了网络层数增加带来的梯度消失问题,更利于提取番茄果实的特征,提高果实簇的分类精度。本文选择ResNet50网络用于番茄果实簇的分类。
图5 残差结构Figure 5 Residual module
2.2 目标检测网络
目标检测网络可分为基于区域生成和基于回归两类,各自的代表性网络为Faster RCNN和YOLOv3。Faster RCNN是二阶段的目标检测网络,它先通过区域生成网络(Regionproposal network,RPN)提出初步的候选框,再通过检测网络对候选框进行进一步的分类和坐标回归。YOLOv3是一阶段的目标检测网络,可同时进行目标的分类和坐标回归。YOLOv3的精度高、速度快,是主流的目标检测网络,本文选用YOLOv3用于番茄果实簇的检测,其网络结构如图6,由特征提取网络、检测网络和NMS三部分组成。其特征提取网络为DarkNet53,由CBL和多个残差模块resn组成,CBL由卷积层、批标准化(Batch normalization,BN)和ReLU激活函数组成,resn由CBL通过残差连接构成,可有效提取番茄果实特征。检测网络借鉴了特征金字塔(Feature pyramid networks,FPN)的思想[17],将深层、分辨率低的特征图,通过反卷积实现上采样与浅层、分辨率高的特征图进行融合,获得了13×13、26×26和52×52不同尺度的预测层[18],包含了预测框的类别和坐标信息,使网络具有多尺度检测的能力,能够对不同尺度的番茄果实簇进行识别。检测网络输出的检测结果存在冗余,NMS可根据候选框之间的重合度删去冗余框,使得对于每个目标均有唯一的检测框。
图6 YOLOv3网络结构Figure 6 Structure of YOLOv3 network
2.3 计数方法
为了较好地实现小番茄果实的计数,本文以果实簇为目标,提出两种基于深度学习的果实计数方法,通过对果实簇进行检测和分类实现计数,如图7。方法1,采用数据集B训练YOLOv3网络,使单个网络同时具有对果实簇的检测和分类能力,进而实现果实计数。方法2,先采用数据A训练YOLOv3网络,使网络具有检测果实簇的能力,再采用数据集C训练ResNet50网络,使网络能够区分不同个数的果实簇,最终结合两种网络的结果,达到果实计数的目的。
图7 小番茄果实计数方法Figure 7 Counting method of cherry tomato fruit
3 实验与结果
3.1 实验平台
本试验运行在windows 10系统下,基于NVIDIA GTX1080Ti GPU的硬件平台上搭建Tensorflow深度学习框架,python版本为3.6。设置超参数批尺寸为16,学习率为0.001,迭代次数为20 000。梯度下降方式采用自适应矩估计(Adaptive moment estimation,Adam),可自适应地计算每个参数的学习率。YOLOv3网络的9个Anchor参数由K-means算法对数据集标注框进行聚类得到,分别为18×22、23×33、23×47、34×47、27×65、31×86、43×71、50×103和140×134。
3.2 评价指标
本文采用精确率(Precision,P)、召回率(Recall,R)、均方根误差RMSE和平均绝对百分误差率MAPE作为小番茄果实计数的评价指标。各指标的定义如下:
(1)
(2)
(3)
(4)
3.3 不同方法对果实簇的检测和分类精度比较
本文将小番茄果实的计数任务转化为果实簇的检测和分类任务,提出了两种基于深度学习的计数方法。为验证两种方法对果实簇的检测和分类精度,对比分析了在测试集上的检测结果,表1为不同方法的测试结果比较,图8为不同方法检测结果的混淆矩阵。
测试集共标注1 109个果实簇,结合表1和图8可知,方法1检测到668个果实簇,精确率和召回率分别为78.14%和47.07%。方法2检测到999个果实,精确率和召回率分别为79.40%和71.51%。方法2的整体精度高于方法1,果实簇的检测任务是要求网络学习果实簇之间的共同特征,而果实簇的分类任务是要求网络学习果实簇之间的不同特征进行区分。因此方法1仅使用一个网络尝试解决果实簇的检测和分类问题,难以权衡两种不同任务的要求,精度较低。方法2采用两个网络分别训练对果实簇的检测和分类能力,精度得到了提升。
图8 不同方法检测结果的混淆矩阵Figure 8 Confusion matrix ofdetection results by different methods
从表1还可知,不同方法对于1到6的果实簇召回率均较低,而7到9的果实簇召回率均较高。7到9的这些果实簇果实较多,多为完整的果实簇,且这些类的样本量较多,网络能够有效地学习特征,达到较高的精度。1到6的果实簇所含果实数较少,既可能是原本果实就较少的果实簇,也可能是果实较多的果实簇由于遮挡、视角变化等因素,使得可见果实为1到6之间,这些果实簇的形态更为多样,但样本量又较少,网络较难学习有效、统一的特征,精度较低。
表1 不同方法的测试结果
1.9 不同方法的计数精度比较
为进一步验证两种方法的计数精度,对比了两种方法在测试集上的计数结果,部分结果示例如图9。
图9 不同方法的计数结果示例Figure 9 Examples of counting resultsby different methods
从图9可以看出,果实簇分布较稀疏,不同果实簇之间的重叠遮挡情况较少。方法1丢失了较多的果实簇,其果实簇和果实数均低于真实值。模型预测的果实数与真实果实数之间的RMSE和MAPE分别为16.35个和38.63%。方法2对果实簇采用先检测后分类的方式,较好地提高了果实簇的检测精度。由于遮挡和视角变化的原因,部分果实簇的分类存在偏差,这导致了计数结果相对于真实值有高有低。模型预测的果实数与真实果实数之间的RMSE和MAPE分别为6.37个和13.89%,较方法1分别减少了9.98个和24.74个百分点,具有较好的计数精度,见表2。
表2 不同方法的计数精度
4 结 语
本文进行了基于深度学习的温室大棚小番茄果实计数方法的研究。
1)针对于常用目标检测方法对重叠、遮挡严重的单果目标检测精度较低的问题,文中提出了一种将果实计数问题转化为果实簇检测和分类问题的方法,实现了小番茄果实的准确计数。
2)提出了对果实簇同时检测与分类和先检测后分类两种基于YOLOv3的果实计数方法,均有效避免了单果间的严重重叠、遮挡问题,并大大地简化了标注的工作量,两个预测模型的在测试集上的RMSE和MAPE分别为16.35个、6.37个和38.63%、13.89%。
3)本文所提方法为簇状果实的计数研究提供了新的思路。