水果识别、智慧农业、采摘机器人、自动分拣系统、果园产量预估中利用AI YOLOv8训练评估检测数据集,检测识别果园苹果的识别

水果识别、智慧农业、采摘机器人、自动分拣系统、果园产量预估中利用AI YOLOv8训练评估检测数据集,检测识别果园苹果的识别

苹果数据集。
目标检测数据集,3000张
在这里插入图片描述
1
在这里插入图片描述
1
在这里插入图片描述
1
在这里插入图片描述
水果识别、智慧农业、采摘机器人、自动分拣系统、果园产量预估 等 AI 视觉任务。

以下是 从零开始搭建环境 → 数据准备 → 使用 YOLOv8 训练 → 推理 → 评估 → 部署 的完整全流程,适用于单类(苹果)目标检测任务。


✅ 一、系统环境搭建(CUDA + Anaconda + Python)

1. 确认 CUDA 驱动(GPU 加速)

nvidia-smi

确保输出中显示 CUDA 版本 ≥ 11.8(推荐 12.1),如未安装,请前往 NVIDIA 官网 安装对应驱动。


2. 安装 Anaconda(Python 包管理器)

前往 https://www.anaconda.com/products/distribution 下载并安装 Anaconda(Windows / Linux / macOS)。


3. 创建 Python 虚拟环境

# 创建名为 apple_detection 的环境
conda create -n apple_detection python=3.9

# 激活环境
conda activate apple_detection

4. 安装必要依赖

# 安装 PyTorch(以 CUDA 11.8 为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 安装 YOLOv8 官方库
pip install ultralytics opencv-python numpy matplotlib tqdm scikit-learn pandas pillow

# 可选:TensorBoard 可视化
pip install tensorboard

# 验证 GPU 是否可用
python -c "import torch; print(torch.cuda.is_available())"
# 应输出 True

✅ 二、数据集结构与 data.yaml 配置

目录结构

apple_dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
├── labels/
│   ├── train/
│   ├── val/
│   └── test/
└── data.yaml

✅ 确保图像与 .txt 标注文件一一对应,使用 YOLO 格式(归一化坐标)


data.yaml 文件内容

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

# 类别数量
nc: 1

# 类别名称
names:
  - apple  # 苹果

# 中文名称(用于可视化)
names_zh:
  - 苹果

⚠️ 注意:

  • 所有标注文件 .txt 中的 class ID 必须为 0(因为只有一类)
  • 图像格式支持 .jpg, .png, .tif
  • 建议按 8:1:1 划分 train/val/test

✅ 三、调用 YOLOv8 官方预训练模型进行训练

由于苹果在树上可能存在遮挡、光照变化、大小不一等问题,建议使用 YOLOv8mYOLOv8l 提升检测精度。

from ultralytics import YOLO

# 加载官方预训练模型
model = YOLO('yolov8m.pt')  # 推荐使用中等模型(也可用 yolov8s.pt 轻量级)

# 开始训练
results = model.train(
    data='data.yaml',           # 数据配置文件路径
    epochs=150,                 # 训练轮数(农业数据建议 100~200)
    batch=32,                   # 根据显存调整(RTX 3090 可用 64)
    imgsz=640,                  # 图像尺寸(提升小目标或遮挡检测)
    optimizer='AdamW',          # 更稳定优化器
    lr0=0.001,                  # 初始学习率
    weight_decay=0.0005,
    momentum=0.937,

    # 数据增强(关键!提升泛化)
    augment=True,
    hsv_h=0.015,
    hsv_s=0.7,
    hsv_v=0.4,
    degrees=10.0,
    translate=0.1,
    scale=0.5,
    shear=0.0,
    flipud=0.0,
    fliplr=0.5,
    mosaic=1.0,
    mixup=0.1,
    copy_paste=0.1,             # 对小目标和遮挡有效

    # 正则化
    dropout=0.2,
    label_smoothing=0.05,       # 缓解过拟合

    # 学习率调度
    cos_lr=True,                # 余弦退火

    # 保存与日志
    project='runs/train',
    name='apple_yolov8m',
    save=True,
    save_period=10,
    exist_ok=False,

    # 缓存(内存充足时开启)
    cache=True
)

提示

  • 若显存不足,改用 yolov8s.pt 或降低 batch=16
  • copy_pastemosaic 对遮挡、小样本特别有效
  • 可开启 close_mosaic 在最后 10 轮关闭 Mosaic 增强

✅ 四、推理代码(单图 / 批量 / 视频)

1. 单张图像推理

from ultralytics import YOLO
from PIL import Image

# 加载最佳模型
model = YOLO('runs/train/apple_yolov8m/weights/best.pt')

# 推理
results = model('test_orchard.jpg', conf=0.3)

# 显示结果
for r in results:
    im_array = r.plot()  # 绘制边界框和标签
    im = Image.fromarray(im_array[..., ::-1])  # BGR to RGB
    im.show()

2. 批量图像推理

results = model.predict(
    source='apple_dataset/images/test',
    save=True,
    project='runs/detect',
    name='apple_test_results',
    conf=0.3,
    imgsz=640
)
print("批量推理完成")

3. 视频检测(如果园无人机巡检)

results = model.predict(
    source='orchard_survey.mp4',
    save=True,
    project='runs/detect/video',
    name='apple_detection_video',
    conf=0.3,
    imgsz=640
)
print("视频检测完成")

4. 实时摄像头检测(OpenCV)

import cv2

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    results = model(frame, conf=0.3)
    annotated_frame = results[0].plot()

    cv2.imshow('Apple Detection', annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

✅ 五、模型评估(验证集 + 测试集)

1. 在验证集上评估

metrics = model.val(
    data='data.yaml',
    split='val',
    batch=32,
    imgsz=640,
    save_json=False,
    project='runs/val',
    name='apple_eval'
)

print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"Precision: {metrics.box.p:.4f}")
print(f"Recall: {metrics.box.r:.4f}")

2. 在测试集上独立评估(最终性能)

# 使用 test split 进行最终性能评估
test_metrics = model.val(
    data='data.yaml',
    split='test',
    save_json=True,
    name='test_final'
)

print(f"Test mAP@0.5: {test_metrics.box.map50:.4f}")
print(f"Test mAP@0.5:0.95: {test_metrics.box.map:.4f}")

✅ 六、可视化与分析

1. 使用中文标签显示

# 修改模型类名显示为中文
model.names = ['苹果']

results = model('test_orchard.jpg')
results[0].plot()  # 显示中文标签

2. 查看训练曲线

tensorboard --logdir runs/train/apple_yolov8m

✅ 七、模型导出(ONNX / TensorRT / TFLite)

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

# 导出为 TensorRT(NVIDIA GPU 加速)
model.export(format='engine', half=True, dynamic=True)

# 导出为 TFLite(移动端)
model.export(format='tflite', int8=True)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值