深度学习目标检测UOLOV8模型训练 橘子成熟度目标检测数据集 柑橘成熟度检测数据集的训练及应用

以下文字及代码仅供参考学习使用

**橘子成熟度目标检测数据集 txt格式

项目 内容
数据集名称 橘子成熟度目标检测数据集
图像总数 7,200 余张(约 7,200+)
数据大小 约 3 GB
图像来源 - 果园实拍场景(自然光照、枝叶遮挡)
- 单个果实拍摄图(背景干净,用于精细识别)
任务类型 多类别目标检测(成熟度分级)
标注格式 YOLO .txt 格式(每张图像对应一个标签文件)
格式:class_id center_x center_y w h(归一化坐标)
适用模型 YOLOv5、YOLOv8、YOLO-NAS 等主流目标检测模型
坐标归一化 是(0~1 范围)

在这里插入图片描述

类别信息(共3类)

类别编号 类别名称(英文) 中文含义 成熟阶段说明
0 green orange 绿色橘子 未成熟,果皮全绿,硬度高
1 half-green orange 半绿橘子 半成熟,果皮部分转黄/橙,处于过渡期
2 orange 橙色橘子 成熟,果皮完全变为橙色,适合采摘

在这里插入图片描述

数据集特点

特点 说明
多场景覆盖 包含复杂果园环境与干净背景果实图,提升模型泛化能力
成熟度三级分类 支持精细化农业管理,可用于采摘时机预测
YOLO标准格式 可直接用于 YOLO 系列模型训练,无需格式转换
大规模数据 7200+ 图像,适合训练高精度检测模型
标注质量高 边界框准确标注果实位置,避免枝叶误检

建议数据划分比例(可选)

注:若未提供划分,建议按以下比例切分:

划分类型 图像数量(估算) 占比 用途
训练集 (train) ~5,760 张 80% 模型训练
验证集 (val) ~720 张 10% 超参调优、训练监控
测试集 (test) ~720 张 10% 最终性能评估

✅ 实际使用时,请确保每个类别的样本在三集中均衡分布(分层抽样)


在这里插入图片描述

YOLO data.yaml 配置文件模板

# data.yaml
train: ./images/train
val: ./images/val
test: ./images/test

# 类别数量
nc: 3

# 类别名称(按编号顺序)
names: ['green orange', 'half-green orange', 'orange']

✅ 将此文件保存在项目根目录,即可用于 YOLO 训练命令调用。


推荐训练命令(YOLOv8 示例)

yolo train \
    model=yolov8s.pt \
    data=data.yaml \
    epochs=100 \
    imgsz=640 \
    batch=32 \
    name=orange_ripeness_detection

以下是针对 橘子成熟度目标检测数据集 的完整训练方案,包含:

  • ✅ 数据集说明
  • ✅ YOLOv8 训练代码(使用官方 ultralytics 库)
  • ✅ 验证与推理代码
  • ✅ 推荐训练参数与技巧

🍊 一、数据集信息

类别 含义 数量
green orange 不成熟(青橘)
half-green orange 半成熟(黄绿相间) 共计 7200+ 张图像
orange 成熟(全黄/橙红)
  • 格式:YOLO 格式 .txt 标注文件(每张图对应一个 .txt
  • 图像来源:果园实拍 + 单个果实拍摄
  • 数据量:约 3GB
  • 建议划分比例(如未划分):
    • 训练集:6000 张
    • 验证集:720 张
    • 测试集:480 张

📁 二、目录结构建议

orange_maturity/
├── images/
│   ├── train/      # 6000 张
│   ├── val/        # 720 张
│   └── test/       # 480 张
├── labels/
│   ├── train/      # 对应 .txt
│   ├── val/
│   └── test/
├── data.yaml       # 数据配置文件
└── train.py        # 训练脚本

🛠️ 三、环境准备(YOLOv8)

# 创建虚拟环境(推荐使用 conda)
conda create -n orange_det python=3.9
conda activate orange_det

# 安装 PyTorch + GPU 支持(CUDA 11.8 示例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 安装 Ultralytics YOLOv8
pip install ultralytics opencv-python numpy matplotlib pillow

# 验证安装
yolo version
yolo checks

🧩 四、创建 data.yaml 文件

在项目根目录创建 data.yaml

# data.yaml
train: ./images/train
val: ./images/val
test: ./images/test

# 类别数量
nc: 3

# 类别名称(顺序必须与标签 ID 一致)
names:
  - green orange
  - half-green orange
  - orange

⚠️ 注意:

  • 所有 .txt 标注中类别 ID 为 0, 1, 2
  • 确保路径正确,可使用绝对路径或相对路径

🚀 五、训练代码(YOLOv8)

train.py 完整代码

# train.py
from ultralytics import YOLO

# 加载预训练模型(推荐使用 yolov8s 或 yolov8m 提升多类识别精度)
model = YOLO('yolov8s.pt')  # 可替换为 yolov8m.pt / yolov8l.pt

# 开始训练
results = model.train(
    data='data.yaml',           # 数据配置文件
    epochs=200,                 # 成熟度差异小,建议训练更久
    imgsz=640,                  # 输入尺寸,可尝试 800 提升小目标检测
    batch=16,                   # 根据显存调整(24GB 显卡可用 16~32)
    name='orange_maturity_v8s', # 实验名称
    device=0,                   # 使用 GPU 0,多卡写 [0,1]
    workers=8,                  # 数据加载线程
    optimizer='AdamW',          # 更稳定,适合细粒度分类
    lr0=0.001,                  # 初始学习率
    patience=50,                # 早停:50轮无提升则停止
    project='runs/train',       # 结果保存路径
    cache=False,                # 可设 True 加快训练(内存足够)
    close_mosaic=15,            # 最后15轮关闭 Mosaic 增强
    augment=True,               # 启用数据增强
    hsv_h=0.015,
    hsv_s=0.7,
    hsv_v=0.4,
    degrees=20,
    translate=0.2,
    scale=0.5,
    flipud=0.0,
    fliplr=0.5
)

print("✅ 橘子成熟度检测模型训练完成!")

🔍 模型选择建议:

模型 显存需求 速度 精度 推荐场景
yolov8n.pt ~4GB ⚡⚡⚡ ★★☆ 快速原型
yolov8s.pt ~6GB ⚡⚡ ★★★★ 推荐(平衡)
yolov8m.pt ~8GB ★★★★★ 高精度识别(推荐)

📌 因为三类颜色相近(绿→黄绿→橙),建议使用 yolov8m 以提升区分能力


在这里插入图片描述

🔍 六、推理代码(单张图像)

# predict.py
from ultralytics import YOLO

# 加载训练好的最佳模型
model = YOLO('runs/train/orange_maturity_v8s/weights/best.pt')

# 单张图像检测
results = model.predict(
    source='test_orange.jpg',   # 输入图片路径
    conf=0.25,                  # 置信度阈值
    iou=0.45,
    save=True,                  # 保存带框图像
    project='runs/predict',
    name='maturity_result',
    show=False
)

# 打印结果
for result in results:
    boxes = result.boxes
    for box in boxes:
        cls_id = int(box.cls)
        conf = float(box.conf)
        label = model.names[cls_id]
        print(f"🍊 检测到: {label}, 置信度: {conf:.3f}")

📊 七、评估代码(在测试集上评估)

# evaluate.py
from ultralytics import YOLO

# 加载训练好的模型
model = YOLO('runs/train/orange_maturity_v8s/weights/best.pt')

# 在 test 集上评估
metrics = model.val(
    data='data.yaml',
    split='test',
    batch=16,
    imgsz=640,
    save_json=True,
    project='runs/val',
    name='maturity_metrics'
)

# 输出关键指标
print(f"📊 mAP@50: {metrics.box.map50:.4f}")
print(f"📊 mAP@50:95: {metrics.box.map:.4f}")
print(f"📊 Precision: {metrics.box.p:.4f}")
print(f"📊 Recall: {metrics.box.r:.4f}")
print(f"📊 F1-score: {metrics.box.f1.mean():.4f}")

🎯 八、训练技巧(提升成熟度识别精度)

1. 增强颜色感知能力

model.train(
    ...
    hsv_h=0.015,     # 色调扰动(对颜色敏感任务重要)
    hsv_s=0.7,       # 饱和度增强(突出绿色 vs 橙色)
    hsv_v=0.4,       # 明度变化
)

2. 使用更高分辨率

imgsz=800  # 更好区分果实颜色边界

3. 使用 yolov8myolov8l

model = YOLO('yolov8m.pt')

4. 添加“复制粘贴”增强(适合小目标)

copy_paste=0.3  # 随机复制果实到背景

📦 九、导出模型(用于部署)

# 导出为 ONNX(通用部署)
model.export(format='onnx', dynamic=True, simplify=True)

# 导出为 TensorRT(NVIDIA 加速)
model.export(format='engine', device=0)

# 导出为 CoreML(iOS)
model.export(format='coreml')

生成 best.onnx,可用于无人机、采摘机器人、手机App等。


✅ 十、预期性能(使用 yolov8m)

指标 预期值
mAP@50 0.88 ~ 0.94
mAP@50:95 0.55 ~ 0.65
成熟 vs 半成熟区分准确率 > 90%
推理速度(640×640) ~30 FPS(RTX 3060)

更多推荐