智慧农业 西红柿番茄生长周期成熟度YOLO数据集
【西红柿番茄生长周期成熟度检测YOLO数据集】共【2609】张,按照8比2划分为训练集和验证集,其中训练集【2087】张,验证集【522】张,模型分为【5】类,分类为:【‘ripe’, ‘green’, ‘flower’, ‘half_ripe’, ‘bud’】
每个类别的图片数量和标注框数量如下:
ripe: 图片数【1149】,标注框数【4516】
green: 图片数【1202】,标注框数【9071】
flower: 图片数【821】,标注框数【2056】
half_ripe: 图片数【857】,标注框数【2856】
bud: 图片数【642】,标注框数【1807】
专注于番茄生长周期的多分类任务。
适配YOLOv8的训练代码。由于数据集中包含花朵和花蕾,建议训练时适当调整输入尺寸以捕捉小目标。
数据集概览与统计![]()
该数据集共包含2609张图像,划分为5个类别,涵盖了从花蕾到成熟果实的完整生长过程。
| 类别名称 | 中文含义 | 图片数量 | 标注框数量 | 平均每图标注数 |
|---|---|---|---|---|
| ripe | 成熟番茄 | 1149 | 4516 | ~3.9 |
| green | 未成熟(青) | 1202 | 9071 | ~7.5 |
| flower | 花朵 | 821 | 2056 | ~2.5 |
| half_ripe | 半成熟 | 857 | 2856 | ~3.3 |
| bud | 花蕾 | 642 | 1807 | ~2.8 |
| 总计 | - | 4671 | 20306 | ~4.3 |
数据特点分析:
- 类别不平衡:
green(青果)的数量远多于其他类别,且包含大量密集的小目标。- 小目标挑战:
bud(花蕾)和flower(花朵)通常尺寸较小,对模型的检测头(Detection Head)提出了更高要求。
YOLOv8 训练代码
以下代码使用 Ultralytics 库,针对番茄数据集的特点进行了参数微调(如增加输入尺寸以利于检测花朵和花蕾)。
1. 数据集配置文件 (tomato.yaml)
请在你的数据集目录下创建此文件,确保路径指向正确。
# tomato.yamlpath:./datasets/tomato_growth# 数据集根目录train:images/train# 训练集图片路径 (2087张)val:images/val# 验证集图片路径 (522张)# 类别定义nc:5names:-ripe# 0: 成熟-green# 1: 青色-flower# 2: 花朵-half_ripe# 3: 半熟-bud# 4: 花蕾2. 训练脚本 (train.py)
fromultralyticsimportYOLOimporttorchdeftrain_tomato_model():# 1. 加载预训练模型# 推荐使用 YOLOv8n (Nano) 或 YOLOv8s (Small)# 如果追求高精度,可选用 'yolov8m.pt'model=YOLO('yolov8n.pt')# 2. 设置训练参数results=model.train(data='tomato.yaml',# 数据集配置文件epochs=300,# 训练轮数 (数据量适中,300轮可保证收敛)imgsz=640,# 输入尺寸 (640是标准值,若花朵检测效果差可提升至1280)batch=16,# 批次大小 (根据显存调整)name='tomato_growth_v1',# 实验名称project='runs/train',# 保存路径device=0,# 使用 GPU 0,若无 GPU 设为 'cpu'workers=4,# 数据加载线程数patience=50,# 早停机制 (50轮无提升则停止)# --- 针对农业场景的优化 ---optimizer='SGD',# SGD 通常在目标检测中比 Adam 泛化性更好lr0=0.01,# 初始学习率lrf=0.01,# 最终学习率momentum=0.937,# 动量weight_decay=0.0005,# 权重衰减warmup_epochs=3.0,# 预热轮数box=7.5,# 边框损失权重cls=0.5,# 分类损失权重 (可适当提高以区分相似颜色)hsv_h=0.015,# 色调增强 (农业场景光照变化大,增强色调鲁棒性)hsv_s=0.7,# 饱和度增强hsv_v=0.4,# 亮度增强flipud=0.5,# 上下翻转 (植物生长方向可能不同)fliplr=0.5,# 左右翻转mosaic=1.0,# Mosaic增强 (设为1.0,有助于检测密集的青果和花蕾)mixup=0.0,# MixUp增强 (对于颜色区分明显的任务,MixUp可能会混淆颜色特征,建议关闭))# 3. 验证模型性能metrics=model.val()if__name__=='__main__':# 检查 CUDA 是否可用iftorch.cuda.is_available():print(f"检测到 GPU:{torch.cuda.get_device_name(0)}")else:print("未检测到 GPU,将使用 CPU 训练 (速度较慢)")train_tomato_model()训练建议
- 输入尺寸 (
imgsz):- 代码中默认使用
640。由于数据集中包含bud(花蕾)和flower(花朵)等小目标,如果发现对小目标漏检严重,建议将imgsz修改为1280,但这会显著增加显存消耗和训练时间。
- 代码中默认使用
- 颜色增强 (
hsv_h,hsv_s):- 番茄的成熟度主要通过颜色区分(青 -> 红)。代码中开启了较强的 HSV 增强,这有助于模型适应不同的光照条件(如阴天、阴影下),防止模型过拟合于某种特定的红色或绿色。
- 类别权重:
- 由于
green类别的数量(9071个框)远多于bud(1807个框),YOLOv8 会自动计算类别权重来平衡损失,但如果在实际应用中bud检测效果不佳,可以在train函数中手动调整cls参数或修改数据集配置。
- 由于