简介:本资源是面向农业AI研发者、计算机视觉初学者及高校科研团队的草莓成熟度目标检测专用数据集,聚焦自动化采摘与生长监测中的核心难点:红色果实与复杂背景的区分、成熟度过渡模糊、小目标密集遮挡等实际问题。数据集包含530张田间高分辨率JPEG图像及对应530份JSON标注文件(含COCO格式边界框与三级类别标签),总大小35.62MB,结构清晰、开箱即用。已有61人学习下载,适用于YOLO系列、RT-DETR、Faster R-CNN等主流检测模型训练与微调。读者可直接获得覆盖未熟、半熟、完熟三类的精细化标注样本,支持“最佳采摘窗口”建模;图像涵盖叶片遮挡、果实簇生、多角度光照等真实干扰场景,显著提升模型鲁棒性;同时适合作为小样本迁移学习基线,助力资源受限团队快速验证算法方案。
1. 项目背景与数据集价值
最近在做一个关于农业自动化采摘的小项目,核心需求是让机械臂能识别草莓并判断其成熟度,从而决定是否采摘。市面上现成的通用目标检测模型,比如COCO预训练的YOLO,对“草莓”这个特定类别的识别效果还行,但对“成熟度”这种更精细的属性判断就完全无能为力了。这就逼得我必须自己动手,从零开始构建一个专门针对草莓成熟度的目标检测数据集。
这个“草莓成熟度目标检测数据集”就是在这个背景下诞生的。它包含了530张精心标注的草莓图像,并按成熟度分成了3个类别。别看数量只有530张,在特定垂直领域,一个高质量、标注精准的小数据集,其价值远大于一个杂乱无章的大数据集。这个数据集直接瞄准了“农业视觉”这个细分场景,解决的是从“有无物体”到“物体状态判断”的升级问题。对于从事智慧农业、果蔬分选、自动化采收机器人研发的朋友,或者任何想入门“细粒度目标检测”和“自定义数据集构建”的开发者来说,这个数据集都是一个非常不错的练手材料和研究起点。
2. 数据集深度解析:构成、标注与挑战
2.1 数据内容与类别定义
这个数据集的核心是“成熟度”分类,这比简单的“草莓/非草莓”二分类要复杂得多。通常,草莓的成熟度可以根据果实的颜色、光泽、大小和花萼状态来综合判断。在这个数据集的3类划分中,我采用的是园艺和农产品检测中比较通用的标准:
- 未成熟(Immature/Green):果实整体呈绿色或白绿色,体积较小,质地坚硬。这是采摘的“禁区”,需要留给植株继续生长。
- 成熟(Mature/Ripe):果实大部分区域转变为红色或深红色,但可能尖端或局部仍有少许绿色或白色。果实饱满,富有光泽,达到最佳食用和商品化标准。这是自动化采摘系统的主要目标。
- 过熟(Overripe):果实呈现深红、暗红甚至开始发紫,表面可能失去光泽,出现轻微皱缩或软化迹象。部分果实可能已有局部腐烂或损伤。这类果实需要被及时分拣出来,避免影响整体商品品质或造成交叉污染。
这530张图像应当覆盖了多种实际场景,以增强模型的鲁棒性。我推测其中至少包含以下几种情况:
- 棚内近景:在温室或大棚内,光线相对均匀,背景较为单一(如土壤、地膜),草莓主体突出。
- 自然光户外:在田间,光线可能多变(顺光、逆光、阴影),背景复杂(包含绿叶、杂草、土地、天空等)。
- 不同密度与遮挡:单株草莓上的果实稀疏或密集,果实之间存在相互遮挡,叶片部分遮挡果实。
- 不同拍摄角度:俯拍、侧拍、平视等,以获取果实不同侧面的信息。
2.2 标注格式与质量
目标检测数据集的灵魂在于标注。一个高质量的标注文件,不仅要框得准,类别标签要正确,其格式的通用性也决定了后续使用的便利性。目前主流的目标检测框架(如YOLO系列、MMDetection、Detectron2等)通常支持PASCAL VOC的XML格式或更简洁的YOLO格式。
YOLO格式是目前最流行的选择之一,因其简单高效。对于本数据集的每一张图片,都应有一个同名的.txt标注文件。文件内每一行代表一个标注框,格式为:<class_id> <x_center> <y_center> <width> <height>这里的坐标是归一化后的值(即相对于图片宽高的比例,范围0-1)。例如,1 0.5 0.5 0.2 0.3表示类别ID为1(假设1代表“成熟”),边界框中心位于图片正中央,宽度占图片宽的20%,高度占图片高的30%。
注意:在划分训练集、验证集和测试集时,务必确保按图片名称列表来划分,并同步处理对应的标注文件,防止出现图片和标注不匹配的“鬼影”问题。
标注质量方面,有几个关键点需要人工复核:
- 边界框紧密度:框是否紧密贴合草莓果实的外缘?过于宽松的框会引入大量背景噪声,影响特征学习。
- 遮挡处理:对于被叶片部分遮挡的草莓,框应该覆盖可见部分,还是推测出的完整果实?这取决于应用需求。如果是为采摘机器人提供抓取点,框住可见部分即可;如果是为了产量估算,可能需要标注完整果实。数据集的说明文档应当明确这一点。
- 歧义样本处理:处于“成熟”与“过熟”临界点的草莓如何标注?建议设立明确的标注规则(如红色面积占比超过90%算成熟,出现明显暗斑或皱缩算过熟),并由同一人或小组完成全部标注,以保证标准一致。
2.3 数据集的典型挑战与应对
使用这个数据集进行训练,会面临几个经典的小目标检测和农业视觉挑战:
- 小目标问题:一些距离镜头较远的草莓在图像中可能只占几十个像素。YOLOv5/v8等模型有专门的小目标检测层,但在训练时,需要确保数据增强策略(如Mosaic、随机缩放)不会过度“稀释”这些小目标,同时可以适当降低用于过滤小目标的
min_bbox_size参数。 - 光照与色偏:不同时间、不同天气下拍摄的草莓颜色差异巨大。早晨的草莓可能带有露珠反光,中午的则对比强烈,傍晚的色温偏暖。必须在数据增强中引入强烈的色彩抖动(HSV空间的色相、饱和度、明度调整)、模糊、噪声等,模拟各种光照条件,防止模型过拟合到特定颜色。
- 密集与遮挡:草莓果实常常成簇生长。当多个成熟草莓紧挨在一起时,模型可能只能检测出一个大的边界框。这需要标注时尽可能区分个体,训练时可以使用
WBF(Weighted Boxes Fusion)或NMS(非极大值抑制)的变体来处理密集预测框。 - 类别不平衡:在530张图中,三个类别的样本数很可能不均衡。例如,“成熟”的样本可能最多,“过熟”的样本可能较少。训练时需要对类别权重进行调整,或在数据加载时对少数类别进行过采样,避免模型偏向于预测多数类。
3. 从数据集到模型:YOLOv8训练全流程实战
有了数据集,下一步就是将其“喂”给模型进行训练。这里以当前非常流行的YOLOv8为例,展示一个完整的训练流程。选择YOLOv8是因为它在精度和速度上取得了很好的平衡,且其ultralytics库的API设计非常友好,易于上手。
3.1 环境准备与数据组织
首先,需要建立一个标准的数据目录结构。这是所有深度学习项目规范化的第一步,能避免后续很多路径错误。
strawberry_detection/ ├── datasets/ │ └── strawberry/ │ ├── images/ │ │ ├── train/ # 存放训练集图片,例如 424张 │ │ └── val/ # 存放验证集图片,例如 106张 │ └── labels/ │ ├── train/ # 存放训练集标注文件 (.txt) │ └── val/ # 存放验证集标注文件 (.txt) ├── yolov8n.pt # 预训练模型 (可选,从官网下载) └── train.py # 训练脚本关键一步是创建数据集配置文件strawberry.yaml,放在项目根目录或datasets目录下。这个文件告诉YOLOv8你的数据在哪、有哪些类别。
# strawberry.yaml path: /path/to/your/strawberry_detection/datasets/strawberry # 数据集根目录 train: images/train # 训练集图片相对路径 val: images/val # 验证集图片相对路径 # 类别数量与名称 nc: 3 names: ['immature', 'mature', 'overripe']3.2 模型训练与关键参数解析
训练脚本train.py可以非常简洁:
from ultralytics import YOLO # 加载一个模型(从头训练或加载预训练权重) model = YOLO('yolov8n.yaml') # 从头构建一个小型模型 # 或者 model = YOLO('yolov8n.pt') # 加载预训练模型进行微调(推荐) # 开始训练 results = model.train( data='strawberry.yaml', epochs=100, imgsz=640, batch=16, device='0', # 使用GPU 0,如果是CPU则设为 'cpu' workers=4, # 数据加载线程数 project='strawberry_train', name='exp1', exist_ok=True )这里有几个参数对训练结果影响巨大,需要根据你的实际情况调整:
imgsz(图像尺寸):默认640。如果你的草莓图像中目标普遍较小,可以尝试增大到832甚至1024,这能保留更多细节,有利于小目标检测,但会显著增加显存消耗和训练时间。batch(批大小):在显存允许的前提下,尽可能设大。大的batch size能使梯度估计更稳定。如果出现CUDA out of memory错误,首先尝试减小batch,其次减小imgsz。epochs(训练轮数):100是一个常见的起点。你需要观察训练过程中的损失曲线和验证集指标(如mAP@0.5)。当验证集指标不再上升甚至开始下降时,就可能出现了过拟合,可以考虑提前停止或增加正则化。dataaugmentation (数据增强):YOLOv8内置了丰富的数据增强。对于草莓数据集,我强烈建议启用hsv_h,hsv_s,hsv_v(色彩增强)以及flipud(上下翻转,模拟不同角度)。可以通过augment=True和相关参数控制强度。
3.3 训练监控与模型评估
训练开始后,ultralytics会在runs/detect/exp1目录下生成大量有用的日志和可视化结果。最重要的两个文件是:
results.csv:记录了每一轮(epoch)的训练损失、验证损失以及各种精度指标(Precision, Recall, mAP@0.5, mAP@0.5:0.95)。weights/best.pt:保存的是在验证集上表现最好的模型权重,这是你最终要使用的模型。
评估模型性能,不能只看最后的mAP数字,一定要进行可视化验证。使用训练好的模型在验证集或全新的测试图片上运行推理,并仔细查看预测框:
from ultralytics import YOLO model = YOLO('runs/detect/exp1/weights/best.pt') results = model('path/to/test_image.jpg', save=True, conf=0.25)你需要重点关注:
- 漏检(False Negative):尤其是那些被严重遮挡或颜色不典型的草莓是否被检测出来了?
- 误检(False Positive):模型是否把红色的落叶、土壤中的红石块误认为是草莓?
- 分类错误:是否把“成熟”判为了“过熟”,或者把“未成熟”判为了“成熟”?这种错误在实际应用中可能导致误采。
- 边界框质量:框的位置和大小是否准确?不准确的框会给后续的机械臂抓取坐标计算带来误差。
根据可视化结果,你可能需要回溯检查标注质量,或者调整训练策略,例如增加困难样本(漏检、误检的样本)到训练集中重新训练(即困难样本挖掘)。
4. 超越基准:模型优化与部署考量
用默认参数跑通训练只是第一步。要让模型真正在田间地头稳定工作,还需要一系列的优化和工程化处理。
4.1 模型选择与剪枝
YOLOv8提供了从n(纳米级)到x(超大级)不同尺寸的模型。对于部署在计算资源有限的设备(如Jetson Nano、树莓派、手机)上的场景,需要在精度和速度之间权衡。
- YOLOv8n:参数量最小,速度最快,适合对实时性要求极高、精度要求稍低的场景。
- YOLOv8s/m/l/x:参数量和精度依次增加。对于草莓成熟度检测,
YOLOv8s或YOLOv8m通常能在精度和速度间取得很好的平衡。 一个实用的策略是:先用YOLOv8m训练得到一个高精度基准,然后尝试使用模型剪枝或知识蒸馏技术,将大模型的知识“压缩”到小模型中,从而让小模型在损失少量精度的情况下获得接近大模型的性能。
4.2 后处理优化
模型输出的原始预测框往往很多,需要经过后处理(主要是NMS)来筛选。默认的NMS参数可能不适合密集的草莓场景。
conf(置信度阈值):默认0.25。提高它(如0.4)可以减少误检,但可能增加漏检。需要在验证集上调整,找到召回率和精确率的平衡点。iou(NMS的交并比阈值):默认0.7。当草莓果实非常密集时,较高的iou阈值可能会把两个紧挨的果实框合并成一个。可以适当降低iou阈值(如0.5或0.45),并配合使用WBF算法。WBF不是简单地抑制重叠框,而是对重叠框的坐标和置信度进行加权融合,能更好地处理密集目标。
4.3 部署与实践中的陷阱
将训练好的.pt模型部署到实际环境(如嵌入式设备、服务器)时,通常需要将其转换为更高效的格式,如ONNX、TensorRT或Core ML。YOLOv8提供了便捷的导出功能:
model.export(format='onnx') # 导出为ONNX格式在部署和应用中,有几个“坑”需要提前预防:
- 领域漂移:你训练的数据集来自某个特定的草莓品种和种植园。当把这个模型应用到另一个品种(颜色、形状不同)或另一个种植环境(光照、背景不同)时,性能可能会大幅下降。解决方案是进行领域自适应,即在目标环境中收集少量新数据,对模型进行微调。
- 实时性要求:在传送带分选或机器人采摘场景下,需要高帧率处理。除了选择轻量模型,还可以通过降低推理图像分辨率、使用TensorRT或OpenVINO进行推理加速、以及管道并行处理(如一个线程抓图,一个线程推理)来提升吞吐量。
- 硬件与环境:户外设备面临温差、湿度、灰尘等挑战。工业相机可能需要防护罩,嵌入式设备需要宽温设计。同时,供电和网络稳定性也是实际部署中必须考虑的问题。
构建和运用“草莓成熟度目标检测数据集”的过程,是一个完整的AI项目闭环:从需求定义、数据采集标注、模型训练调优,到最终部署落地。这个530张图的数据集是一个宝贵的种子,围绕它进行的每一次实验、踩过的每一个坑,积累的经验都远不止于草莓本身,而是能复用到更广泛的农业视觉、工业质检等细粒度目标检测任务中。在实际操作中,我发现最大的挑战往往不是模型本身,而是数据的一致性和对业务场景的深度理解。比如,如何定义“成熟”的量化标准,这个标准会直接影响到标注质量和最终模型的决策边界。
本文还有配套的精品资源,点击获取