高 翔,陈福展,董力中,卢嘉威,,李媛媛,凡 超,陈万云
(1.广东省现代农业装备研究所,广东 广州 510630;2.深圳市现代农业装备研究院,广东 深圳 518022;3.广州市健坤网络科技发展有限公司,广东 广州 510630;4.广东省农业科学院果树研究所,广东 广州 510645)
荔枝为无患子科,属于热带亚热带常绿果树。我国荔枝栽培主要集中在广西、海南、广东、福建等省(区),花期3~4 月,成熟期5~7 月,既有“南国佳果”之称,又有“岭南果王”的美誉。自20 世纪80 年代至今,我国荔枝栽培面积和总产量均有了较大幅度的增加,1987 年荔枝栽培面积为12.75 万hm2,2012 年增加 到55.33 万hm2;1987 年荔枝 总产量 为11.68 万t,2012 年增加 到190.66 万t[1]。广东省有着优越的地理环境与气候条件以及丰富的荔枝种质资源和悠久的栽培历史,具有发展荔枝生产的独特优势,素有“中国荔枝第一产区”之美誉,是中国荔枝的原产地之一,也是世界少有的荔枝宜种区,已成为世界荔枝栽种面积最大、栽培品种较多的地区[2]。
随着荔枝产业的进一步发展,推进广东省荔枝产业的发展,坚持农业科技创新势在必行。人工智能热潮的兴起,深度学习等多种算法相继被探索出来,这使农业精准估产成为可能,很多研究人员也开展了相应的尝试。西北农林科技大学周忠贤[3]基于深度学习与Android 手机双目视觉,研究了果园猕猴桃测产方法,并结合开发了相应的App 应用程序,实现实时视频计数、体积测量和实时测产功能;中国农业大学李志军等[4]基于轻量化改进YOLOv5,研究了苹果树产量测定方法,达到了较好的精度,基本能够满足自然环境下苹果树的测产要求;华中科技大学熊雄[5]利用深度学习技术,研究了大田水稻稻穗分割及无损产量预估方法,为早期稻田精准估产提供了实现路径。本文在相关研究基础上,采用深度学习技术和机器视觉技术[6],研究荔枝的精准估产算法,以期替代传统的人工估产方式,提升荔枝估产的效率和准确率。
要替代现有的通过人工凭经验进行大致推理计数的过程,主要考虑方向如下:数出荔枝4 个方向表面果实的数量,根据树宽、数高、大小年、种类特性对输出的数量进行修正,即根据经验乘以1 个估计系数。最后,根据不同荔枝种类果实的平均重量乘以修正后的果实数量得到整棵树的估计产量。基于现有人工的估产思路,考虑使用AI 图像目标检测技术进行识别,并将识别后的结果作为局部变量构建估产模型,将此模型部署到边缘设备端,则使用者可通过拍摄荔枝树4 面不同的图片,根据图像处理的结果输出所采集果树的估产结果,实现思路如图1 所示。
图1 荔枝估产技术实现思路
实现荔枝估产,需要对采集果树图片信息进行识别和计算,主要使用到的图像处理技术如下:基于深度学习的目标检测可以对图像或视频中的物体进行识别和定位;双目视觉可以通过视差获得目标物的深度信息;边缘端检测可以获得图像中目标物的外轮廓,对相机进行标定后,结合深度信息通过比例换算可以得到轮廓边缘像素点的实际距离。
融合深度学习、机器视觉等技术,本文以向阳面果实数量、其他3 面果实总数、大小年、树高、树宽、果实大小、树龄7 个参数作为模型的输入,搭建基于Py Torch 框架的多层感知机模型来训练荔枝估产模型[7]。模型结构包括1 个输入层、2 个隐藏层和1 个输出层,在前2 层全连接后面均使用ReLU作为激活函数,并在第1 层全连接后面加入Dropout层,以防止过拟合,模型的输出为1 个产量值,实现产量预估功能。BP 神经网络结构如图2 所示,其中输入层(M 层)为7 个节点[8]。
图2 BP 神经网络结构设计
1)目标检测。目标检测领域的深度学习方法有很多,主要分为One-stage 目标检测算法和Twostage 目标检测算法2 类[9],这2 类目标检测算法各有优势,但也有很大区别:Two-stage 目标检测方法先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类,检测准确率较高、定位精度较准确;One-stage 目标检测方法不用产生样本候选框,而是直接将目标边框定位的问题转化为回归问题进行处理,算法速度较快。本文探索的荔枝果树、果实目标检测,要求较高的准确度、较强的实时性以及能够快速进行计算,而Two-stage 目标检测方法中Selective Search 聚类方法需要耗费大量的时间,难以满足实时性,因此One-stage 是更好的选择。One-stage 目标检测方法的YOLOv3 算法采用了更深层的特征提取网络Darknet53,并使用3 个尺度的特征进行目标检测,检测精度效果良好,能够满足小目标的检测需求。本文选择YOLOv3 算法作为荔枝估产任务目标检测的选定算法。
2)双目测距。同一物体在2 幅图像上分别成像时,由于物体与双目的相对位置不同而存在视差,物体距离摄像头越近视差值越大,基于图像几何关系,可以测量实际物体的深度值。本文通过双目测距获取果树的深度信息。
3)边缘检测。边缘检测主要是计算显示出图像的大概轮廓,为图像的特征提提取、识别定位、测量拟合等提供支撑,是图像处理最基础而又关键的操作。本文利用边缘检测获取树高、树宽等信息。
YOLOv3[10]算法以Darknet53[11]为主干网路,并分别在32 倍下采样、16 倍下采样和8 倍下采样后进行预测,以416×416 的输入尺寸为例,网络分别在13×13、26×26 和52×52 这3 个尺度的特征图中对图像中的物体进行预测,其中52×52 尺度的特征图负责预测较小的目标;26×26 尺度的特征图负责预测中等目标;13×13 尺度的特征图负责预测较大的目标。通过将卷积层、归化层和激活层组成一个基本组件层(DBL),其中DBL(1×1)指卷积层的卷积核大小为1×1 的输入尺寸,多个DBL 层组成了一个DBL 模块,多个DBL 模块组成了Dense Module,YOLOv3 原始网络结构如图3 所示。
图3 YOLOv3 原始网络结构
在拍摄整棵树的情况下,单个荔枝在图片中相对整张图的尺寸很小,而且荔枝果实生长较为密集,这使得荔枝果实的检测任务更加困难。为了提高在大场景下荔枝果实的检测性能,本文做出了以下几点改进:①增加模型的输入尺寸到800×800,更大的输入尺寸能够更好的保存图像中小目标的特征;②为了得到更大尺度的特征图,本文将原始网络最大尺度的特征图进行了处理,通过2 倍采样以及与浅层特征进行融合,增强了对更小目标的检测能力[12-13],使用K-means 算法针对荔枝数据集中的标注框进行聚类[14-15],得到适合荔枝检测的Anchor Box 尺寸,使网络能够更好的提取特征,从而使模型达到更好的检测效果。本研究在Darknet 框架下对改进后的荔枝检测模型进行训练,在训练过程中,设置初始学习率为0.001,并分别在训练15 000 次和18 000 次时,调整为原来的0.1 倍。设置模型输入尺寸为800×800,Batch Size 为64。设置12 个Anchor Box 分 别为 6,10,8,12,10,16,12,20,14,20,14,26,18,24,20,32,24,36,30,48,46,70,76,112。优化后的YOLOv3-4scale 网络结构如图4 所示。
图4 优化后的YOLOv3-4scale 网络结构
基于新的网络结构,本研究根据测试结果进行了几次的迭代。使用YOLOv3-up1 模型(调整了3 个输出尺度),设置输入尺寸为800×800,重新使用Kmeans 聚类的Anchors。设置Batch Size=128,subdivisions=64;初始学习率调整为0.001,step 为5 000 次和10 000 次时,减少10 倍。迭代20 000次,loss 降到10 左右。改进前后的检测结果对比如图5 所示。图5(a)、(c)、(e)为原始YOLOv3 模型的检测结果图,图5(b)、(d)、(f)为改进后的YOLOv3-4scale 模型的识别结果图。通过对比后发现,在荔枝较小且密集的部分,改进后的模型检测效果更好。
图5 YOLOv3 模型与YOLOv3-4scale 模型识别结果
本文选用小觅双目摄像头实时测量图像中果树的深度,距离与视差的关系如图6 所示。摄像头成像4 个坐标系,分别为像素坐标系、图像坐标系、相机坐标系、世界坐标系。如图7 所示,像素坐标系以图像的左上角为原点O0,横纵坐标(u,v)分别表示像素点在图像中的列数和行数;图像坐标系的原点为相机的光轴与图像平面的交点,一般为图像平面的中心。令O1在像素坐标系O0-uv的坐标为(u0,u0),dx、dy为单位像素在横轴和纵轴上的物理尺寸,则像素坐标系与图像坐标系之间存在如下关系:
图6 距离与视差的关系
图7 像素坐标系与图像坐标系
转换成“齐次矩阵”表示则为
由于受外界光照影响较大,且选用的小觅双目摄像头输出的图像为灰度图,故本研究的思路是对视差图进行处理,通过算法最终获得所需要的值。处理流程为:深度图获取→图像处理(滤波去噪、物体去除、边缘检测、寻找轮廓)→树宽、树高数据输出。目标果数图像处理流程如图8 所示。
图8 目标果树图像处理过程
1)深度图获取。本研究选用小觅双目摄像头来实时测量图像中果树的深度。基于果树的深度信息,可以有效的区分前后果树位置,从而解决前后果树的重叠问题。获得的原始图像深度图与结合深度信息去除远处果实轮廓后的目标果树深度。
2)图像处理。①滤波去噪:为了减少噪声和失真,且不损坏轮廓等重要信息(矩阵卷积运算),利用不同权重的邻域算子(周围像素点),使用高斯滤波、均值滤波、中值滤波这3 种方式进行调试处理;②物体去除:分割出独立元素,采用形态学运算平滑边界,去除障碍物周围大块噪点,去除波动问题;③边缘检测:通过低错误率、高定位性、最小响应方法获取障碍物边缘信息,选定Canny 算子,Sobel 算子,Laplacian 算子检测方式进行边缘检测;④寻找轮廓:同一个障碍物边缘检测结果可能离散的,需要将统一障碍物轮廓当做一个整体处理,选定轮廓检测模式方式和轮廓近似方法进行处理,通过图像处理,可以获得目标果树的外轮廓,计算后输出树高与树宽。
基于已搭建多层感知机模型来训练荔枝估产模型,通过C++将目标检测的结果与树高、树宽的测量结果调用至MLP 神经网络中。在模型训练过程中,本研究共使用200 组数据,其中185 组作为训练集、15 组作为验证集;训练中使用均方误差作为损失函数,设置初始学习率为0.001。模型训练前500 次loss 下降明显,1 000 次以后loss 趋向平缓,最终loss 降到0.3 左右,模型的性能有待进一步的验证和优化。
将识别模型部署到边缘端,结合Jetson Nano 模块、人机交互触摸屏、摄像头等,构建手持式荔枝估产装备,如图9 所示。通过边缘端采集图像、进行图像推理与识别计算,实现快速的荔枝成熟度识别、荔枝个数统计以及产量预估等。
图9 手持式荔枝估产仪结构渲染图
本文主要描述了机器视觉结合目标检测,通过其输出的结果搭建MLP 神经网络,实现荔枝的估产。数据采集方面,一方面通过机器视觉代替人工数果,实现荔枝果实数量的自动识别获取;另一方面,通过深度学习处理,自动识别获取树高和树宽。通过向阳面果实数量、其他3 面果实总数、大小年、树高、树宽、果实大小和树龄7 个参数作为模型的输入,搭建基于Py Torch 框架的多层感知机模型来训练荔枝估产模型,最终实现了荔枝的产量预测,为荔枝智慧化估产提供了新的实现路径。但由于荔枝产量影响因素复杂多样,还需要进一步对估产结果进行验证和估产模型优化训练。