简介:本资源是面向农业智能化与计算机视觉研究者的柑橘花果梢图像识别数据集,专为深度学习模型训练设计,解决柑橘种植中花、果实、嫩梢三类关键生长状态的自动识别问题,适用于精准农业监测、无人机巡检及智能采摘系统开发等实际场景。压缩包共1021个文件,含600张高质量JPG图像(覆盖不同光照、角度与遮挡条件下的柑橘植株特写)和420份对应XML标注文件(采用Pascal VOC格式,精确框出花/果/梢三类目标),另有1个子压缩包用于提交样例参考;整体体积31.76MB,轻量易下载部署。目前已有521人学习下载,资源结构清晰、标注规范,可直接用于YOLO、Faster R-CNN等主流目标检测模型的训练、验证与推理测试,显著降低农业图像识别任务的数据准备门槛。 柑橘花果梢识别数据集,这个项目名字看起来挺垂直,但做农业视觉的朋友应该一眼就能看出它的分量。柑橘的花、果、新梢是树体生长状态最直接的三个表型指标,开花量决定当年产量潜力,幼果数量决定疏果和保果方案,新梢抽发情况又直接影响来年结果母枝的培育。过去这些数据全靠农技人员一棵树一棵树地看,费时费力不说,不同人之间的判断标准还不统一。现在有了深度学习,图像识别可以替代大量重复性的巡园目测工作,但前提是有一份质量过硬的数据集。
这篇博文就围绕“柑橘花果梢识别数据集”的构建全过程展开,把我从数据采集、标注规范、模型训练到落地应用踩过的坑、验证过的经验全部整理出来。适合农业科研院所的学生、智慧农业方向的技术人员,以及想入行农业AI的算法工程师参考。内容不绕弯子,直接讲实操。
1. 项目从哪里切入:为什么要做花果梢识别
1.1 农业痛点:肉眼巡园不够用了
柑橘种植管理里,花果梢的观测频率非常高。春季要统计花量判断是否疏花,谢花后要数幼果数量决定是否保果,夏梢抽发时要控制夏梢防止落果,秋季则要观察秋梢老熟度。传统做法是技术员在果园里随机选几棵树,用目测或者简单工具估算,一个熟练的技术员一天最多也就能看几十棵树,而且数据主观性强,不同人统计出来差异很大。
这个场景里,视觉识别技术能解决的核心问题有两个:一是把观测范围从“抽样几棵树”扩展到“全园覆盖”,二是把主观估计变成客观的检测计数结果。实现这两个目标的前提,就是有一个能准确识别花、果、梢的视觉模型,而这个模型的根基就是数据集。
所以这个数据集项目的定位很清楚:它不是随便拍些照片打个框,而是要系统地覆盖柑橘不同物候期、不同生长姿态、不同光照条件下的表型样本,让训练出来的模型能真正拿到大田里去用。
1.2 数据集设计时需要考虑的几个核心问题
动手做数据集之前,有几个问题必须先想明白,不然很容易做无用功。
第一个问题是任务类型选什么。目标检测、实例分割、语义分割,这三种任务在农业场景里都有应用。我的经验是:花果梢识别优先做目标检测,也就是矩形框标注。原因是农业场景里果子密集、互相遮挡,分割标注的成本远高于检测框,但实际业务中大部分需求(计数、定位、量测大小)用检测框就完全够用。只有当你需要精确测量果实直径、做机械臂抓取规划时,才值得升级到实例分割。
第二个问题是类别怎么划分。这方面要兼顾农学意义和视觉可分性。我把类别定成了这样几个:花、幼果、成熟果、新梢。花和幼果在视觉上差异明显;幼果和成熟果在颜色、大小上有阶段性差异,分开标注有利于后续做生长分析;新梢单独类别的意义在于控制梢期需要精准识别嫩梢位置,但实际操作中梢和枝干容易混淆,标注标准要定细。
第三个问题是数据体量。不能盲目追求大而全,但也不能太少。一张复杂的果园图像里,果实常常有好几十个,所以几千张图像就能产生数万个标注实例。实际经验是:先把总量控制在1500到3000张图像,确保每一类都有足够多样的形态覆盖,训练出来的模型就已经能支撑大部分业务场景了。
2. 数据采集:好样本从哪里来
2.1 采集设备、时间、视角怎么定
数据采集是整个数据集项目里最容易被低估的环节。很多人买好相机就往果园跑,拍了一堆照片回来发现不是模糊就是过曝,要么就是角度单一,标注的时候越标越痛苦。采集环节必须想清楚几个维度。
设备上,我用过的方案有三类:地面近景拍摄、无人机俯拍、机器人车载拍摄。近景拍摄用手机或微单就好,注意保持分辨率在1200万像素以上,画面要清晰;无人机拍摄适合大范围果园产量估测,摄像头离树冠1到3米,可以拍到整个树冠的俯视面;地面机器人拍摄则更贴近实际应用场景。三类设备各有用途,如果条件有限,优先保证近景拍摄,因为大部分农事决策(疏花疏果、喷药)都发生在地面作业高度。
采集时间要覆盖完整的物候期。柑橘从露白(花蕾期)、盛花期、谢花期、第一次生理落果、第二次生理落果、果实膨大期、转色期到成熟期,至少要在四到六个关键节点分别采集。有条件的,同一棵树可以在不同时期重复拍照,这样数据集天然具备物候期变化的信息。我在采集时会在表格里记录每一批图像的拍摄日期和对应物候期,后续做数据分析会非常有用。
拍摄角度和光照条件也直接影响泛化能力。顺光、逆光、侧光都要覆盖;晴天、阴天、雨后也要覆盖。果园里那些看起来“不够好看”的照片,比如树叶遮挡严重的、逆光偏暗的,往往才是模型真正需要的学习样本。我一般会刻意保留20%左右这种“困难样本”。
2.2 图像清洗与数据集划分
采集完的原始图像不能直接进标注流程,必须先做清洗。模糊图像(尤其阳光直射导致失焦的)、严重过曝或欠曝的、重复度极高(几乎同一视角连拍很多张)的图像,都会拉低标注效率和模型效果。清洗工具我用的是一个简单的Python脚本,先通过清晰度评分(拉普拉斯方差)做初筛,把分数太低的挑出来人工确认,再手动删除重复帧。
如果是从视频里抽帧,需要注意抽帧间隔和关键帧选择。果园作业时,移动拍摄的视频相邻帧之间内容高度相似,如果每隔2到3帧抽一次,会产生大量几乎一样的图片,训练时不但没帮助,还会因为数据冗余造成过拟合。我一般会间隔10到15帧抽一张,并且只保留画质稳定、目标清晰的帧。
数据划分时有一个关键细节:按采集场景切分,而不是随机打乱。如果你把同一棵树的照片随机拆到训练集和验证集里,模型等于已经见过验证集的内容,评估结果虚高。农业场景里不同园区、不同地块的环境差异本来就大,我是按“果园区域”来做划分的,保证同一棵树的照片全部落在同一个子集里。常规比例是训练集80%、验证集10%、测试集10%,验证集和测试集中的图像数量虽然少,但代表的都是模型实际部署时会遇到的“陌生园子”情况。
3. 标注流程:质量控制是整个项目的地基
3.1 工具选型与标注规范
标注工具的选择直接影响效率和协作方式。早期我用过LabelImg,轻量但团队协作不方便;后来换成了开源的X-AnyLabeling,集成了检测框、多边形分割、自动标注模型,而且支持多平台部署;团队协作场景建议用CVAT,它在Web端就能操作,可以多人同时标注、设置标注任务和质检流。
不管用什么工具,标注规范才是重中之重。我在项目启动的时候花了一整天写标注手册,后来发现这笔时间花得极其划算。规范里面对几个容易含糊的问题做了硬性规定。
类别边界要定清楚。花和花蕾:花蕾膨胀但花瓣未展开的算花蕾,花瓣展开可辨认花型的算花。幼果和成熟果:果径小于3厘米(大约是乒乓球大小以下)且未转色的算幼果,果面转色面积超过50%的算成熟果。梢的定义容易模糊,我规定“当前生长季抽发、尚未完全木质化的嫩梢”才标注为梢,已经变成深绿色或褐色的老枝条一律不标。这样做的原因是夏梢防控和秋梢管理关注的是可控的嫩梢,老枝条年年都在,对生产决策没有参考价值。
边界框标注原则:框要刚好贴合目标的最小外接矩形,既不包含太多背景也不能切割目标主体。互相遮挡的目标,如果可见面积大于40%,就按可见部分标注;如果遮挡超过60%,则该目标不标。这样做的目的是减少标注人员的主观判断,保证不同人标出来的结果一致性。小目标——比如远处的果实——如果边界框尺寸小于图像尺寸的1%,同样不标注,否则会引入大量噪声。
3.2 双人复核和常见标注陷阱
数据标注如果只有一个人从头标到尾,标准很容易漂移。我采用的是“单人标注+双人抽检复核”的机制。第一轮标注完成之后,由另一位对柑橘农艺有一定了解的成员对30%的随机样本做二次标注,然后计算两次标注框的IoU(交并比)。IoU大于0.5的视为合格,小于0.5的框要求重新修正。整批图像的IoU均值要在0.75以上才批量放行。
实操中最容易出问题的几个陷阱我单独提一下。
第一个是梢的漏标。柑橘树的嫩梢和叶片的颜色非常接近,尤其春梢刚发出来时,嫩叶和嫩梢混在一起,标注人员在标完花和果实之后很容易疲劳,直接漏掉梢。对策是在标注界面里按类别显示,标完一类再标下一类,不要所有类别同时标。
第二个是密集果实的漏标。挂果量大的时候,一串果结在一起,人们往往会下意识只标外面一圈显眼的,把里面的漏掉。这个没有捷径,只能靠质检环节对照原始图像仔细核对。
第三个是幼果和花苞的混淆。两者形状都是圆形,大小接近,区别在于花的颜色偏白、附着点有花梗,而幼果是深绿色。这个需要标注人员到果园实地看一次,或者看一批现场照片做到心中有数,纯看文字描述是记不住的。
4. 增强与训练:把数据集价值榨干
4.1 针对性数据增强策略
数据集样本量有限,想提升模型的泛化能力,最直接的办法就是数据增强。通用增强(翻转、缩放、平移、亮度对比度调整)当然要做,但农业场景里一定要针对性地加入一些更能模拟真实环境的增强。
光照变化是果园图像最大的变量。晴天中午顶光、早晨和傍晚的低角度光、云层遮挡造成的局部阴影,都会让同一棵树呈现出完全不同的样子。增强配置里我会适当加大亮度、对比度和色相的扰动范围,用YOLO训练时的超参数文件来说,hsv_h调到0.015,hsv_s调到0.7,hsv_v调到0.5左右,让模型见过足够多的“不同天气下的柑橘”。
模糊和噪声也要做。果园里无人机和地面机器人都在运动,运动模糊是家常便饭。我会加入轻微的随机模糊增强,同时加一点高斯噪声,让模型不至于因为图像轻微不清晰就直接漏检。这里有个经验:模糊增强的强度不要过大,否则模型会把“模糊”当成一种正常特征,反而对清晰的真实目标不敏感。
针对果实目标普遍偏小的问题,我强烈推荐两招:马赛克增强和切图推理。马赛克增强把四张图缩放到小尺寸再拼接成一张输入图,等于变相增加了小目标在训练样本中的比例;切图推理则是在训练时用640或1280分辨率,推理时把大图切成小块分别检测再合并结果。这两个手段配合使用,小目标的提升非常明显。
4.2 模型选型与训练配置
模型这一块,当前的主流选择以YOLO系列为主。我用的是YOLOv8和YOLO11系列做实验对比,国产的RT-DETR也试过,效果接近但推理速度略慢。综合精度、速度、部署难易程度,YOLO11s或YOLO11m是花果梢识别的性价比较高的选择。注意,不是模型越大越好——农业场景的终端设备往往是Jetson或者手机,算力有限,一个推理速度超过30ms的模型在实际产品里很难落地。
训练分辨率要尽量用1280而不是640。原因是柑橘图像里的目标尺度跨度大:远处整棵树的冠层图像里,果实可能只有二三十个像素;近景图像里果实能占几百个像素。用640分辨率训练,小目标特征基本在主干网络下采样后就丢了。我实测下来,1280分辨率比640分辨率的mAP@0.5:0.95能高出4到6个百分点,代价是训练时间翻倍。如果显存紧张,至少也要用960。
训练配置方面,我常用的参数是:imgsz=1280,batch=16,epochs=200,初始学习率0.01,使用SGD优化器配合余弦退火调度。迁移学习用COCO预训练权重,因为COCO里有水果、树干等相近类别,特征提取层可以直接复用。训练命令大致是:
yolo detect train data=citrus.yaml model=yolo11s.pt epochs=200 imgsz=1280 batch=16 device=0 pretrained=True训练过程中要关注损失曲线,正常情况下box_loss在前期下降很快,进入平台期后开始收敛。如果val_cls_loss在某个epoch之后反弹而train_loss还在降,那就是过拟合了,需要提前停止或者加大增强强度。
5. 评测分析与问题排查实录
5.1 评估指标怎么看
模型训完之后,不能只看一个总mAP就完事,必须按类别拆开看。花果梢识别场景里,我一般会同时看mAP@0.5、mAP@0.5:0.95,以及每个类别的AP和PR曲线。
从实际效果来看,几个类别里花和新梢的AP普遍偏低,果实和幼果会高一些。原因也直观:花和小果在图像里目标小、颜色和背景接近,检测难度大;新梢形态多变,春天嫩梢是黄绿色,夏天秋梢是红色,同一个类别内部差异巨大。如果一个类别的AP比最高类别低10个百分点以上,就该针对性做数据补充了。
5.2 高频问题速查与解决方案
我在项目实践里遇到了不少具体问题,整理了一个速查表,基本覆盖了花果梢识别过程中最常见的坑。这张表对复现这个数据集的伙伴来说应该能省不少事:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 花和幼果互相误检 | 两者尺寸接近,颜色信息不强 | 补充不同光照下的样本;尝试实例分割;在推理时加入花期物候先验 |
| 远处果实漏检严重 | 小目标在特征提取阶段丢失 | 提高训练分辨率;切图推理;使用P2层特征更丰富的模型(如YOLOv8-p2) |
| 梢和枝干混淆 | 梢的标注标准不统一,类别特征不清晰 | 重新梳理标注规范;只标嫩梢;按物候期把梢拆成春梢和秋梢两个子类 |
| 模型在新园区泛化差 | 训练集场景单一,背景过拟合 | 多园区采集;在增强里增加背景替换;加入园区级别的域适应策略 |
| 密集果实计数偏少 | 遮挡导致的漏检无法回避 | 用密度图回归做二次计数校正;在检测结果上做基于位置的聚类去重 |
| 标注框位置不准导致AP上不去 | 标注规范执行不到位 | 对全部标注做一次IoU质检,框偏移超过阈值的全部重新标注 |
5.3 踩过的坑:标注数据里的“脏标签”
最后说一个经常被忽略的问题:脏标签对模型的伤害远大于数据量不足。有一批数据是我在果园里着急采集的,当时刚好下过小雨,果面有反光,我远程指挥标注员处理,结果他们把部分幼果标成了背景,还在某些叶子上误标了框。这批数据混进训练集之后,模型在验证集上的表现骤降,用混淆矩阵排查才发现标注错误的比例接近10%。
从那之后,我每次训练前都会做一轮“预测结果可视化抽查”。具体做法是:用当前最优模型预测一遍训练集,把置信度高于0.9的检测框在图上画出来,让标注员快速浏览,凡是预测框和人工标注框存在明显不一致的,都重新检查原图。这样能把训练集里的脏标签率控制在1%以下,模型精度也能稳定下来。
6. 数据集的落地场景与后续扩展
6.1 从识别到计数:产量估测与疏花疏果决策
数据集训练出的模型,最基础也最直接的应用是目标计数。在一个固定区域内统计花量,模型推理后输出的检测框数量乘以置信度修正系数,就能近似得到花量估值。这个数据相比人工巡园的优势是:它可以做到全园覆盖、实时输出、统一标准。
以疏花疏果为例,实际操作中需要知道“这一片区域的花量是否超出目标负荷”。传统做法是找经验丰富的师傅看树,主观判断“今年花量偏多还是偏少”。有了模型之后,可以通过无人机或者地面车采集图像,自动统计单位面积的花量,直接和品种的目标产量挂钩生成决策图,指导哪些区域需要重疏、哪些区域可以不疏。这套流程我在试验果园里跑通过,整个园区10亩地,从采集图像到输出决策图,半天就能完成。
6.2 机器人与无人机平台的集成
数据集的另一个用武之地是农业机器人。现在市面上已经有能够自主行走的果园植保机器人、疏果机器人,它们的眼睛本质上就是这套识别模型。以疏果机器人为例,机械臂要精准夹住多余的幼果放下,就需要视觉模块实时输出幼果的像素坐标和大小信息。检测框的中心点就是机械臂的抓取参考位置,框的宽度可以换算成果径,用于判断是否在“需要疏除”的尺寸区间内。
无人机平台则更适合大面积的数据采集和监测。多光谱相机的成本还比较高,但普通RGB相机配合一套训练好的模型,已经能在转色期自动统计成熟果数量,生成“成熟度分布图”。这个图对确定采摘顺序、调配采收人力很有帮助。我在秋收季节做了一次测试,无人机沿着规划航线飞一遍果园,2小时内输出了整片果园的成熟果密度热力图,准确率大概在88%左右,低于地面近景识别的93%,但胜在覆盖率极高,这个指标在实际生产调度中够用了。
6.3 数据集迭代方向
现在这个数据集覆盖的主要是柑橘里的宽皮柑橘类,脐橙、沃柑、柚子的花果形态差异还不小。后续扩展方向有几个:一是增加更多品种,让模型具备跨品种识别能力;二是补充极端天气条件下的样本,比如台风过境后的落叶和倒伏、高温日灼条件下的果实外观变化;三是把单一帧图像识别升级为多视角融合识别,通过多帧数据对同一个果实做多次确认,大幅降低漏检率。数据集的构建永远不是一次性的工作,而是一个持续滚动迭代的资产。
还有一个很实在的方向:把“识别”升维成“分析”。目前在花果梢识别的基础上,已经可以进一步计算果实的坐果率(幼果数/花数)、新梢密度与果实数量的相关性等农学指标。模型输出的检测框不只是框,还能附带位置信息,在重复访园时通过图像匹配关联同一棵树不同时期的检测结果,自动生成“花期-坐果期-膨大期”的生长变化曲线。这比单纯出一张识别图要有价值得多,也是农业AI真正走进生产决策的关键一步。
做这个数据集的过程中,我最大的体会是:农业视觉项目里,数据采集和标注的投入回报比,往往比算法模型调优高得多,数据质量决定了模型效果的上限。如果现在有人问我从头开始做柑橘花果梢识别,需要准备的第一个东西是什么,我的答案不是某个模型框架,而是花两周时间到园子里把采集路线、标注规范和场景清单想清楚。给刚入坑的朋友一个建议:先找一片果园,用手机拍个两三百张图,完整跑通“采集-标注-训练-评估”这条链路,再决定要不要放大规模,这样推进起来会从容很多。
本文还有配套的精品资源,点击获取