水果识别、智慧农业、采摘机器人、自动分拣系统、果园产量预估中利用AI YOLOv8训练评估检测数据集,检测识别果园苹果的识别
文章目录
- ✅ 一、系统环境搭建(CUDA + Anaconda + Python)
- 1. 确认 CUDA 驱动(GPU 加速)
- 2. 安装 Anaconda(Python 包管理器)
- 3. 创建 Python 虚拟环境
- 4. 安装必要依赖
- ✅ 二、数据集结构与 `data.yaml` 配置
- 目录结构
- `data.yaml` 文件内容
- ✅ 三、调用 YOLOv8 官方预训练模型进行训练
- ✅ 四、推理代码(单图 / 批量 / 视频)
- 1. 单张图像推理
- 2. 批量图像推理
- 3. 视频检测(如果园无人机巡检)
- 4. 实时摄像头检测(OpenCV)
- ✅ 五、模型评估(验证集 + 测试集)
- 1. 在验证集上评估
- 2. 在测试集上独立评估(最终性能)
- ✅ 六、可视化与分析
- 1. 使用中文标签显示
- 2. 查看训练曲线
- ✅ 七、模型导出(ONNX / TensorRT / TFLite)
苹果数据集。
目标检测数据集,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-napple_detectionpython=3.9# 激活环境conda activate apple_detection4. 安装必要依赖
# 安装 PyTorch(以 CUDA 11.8 为例)pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118# 安装 YOLOv8 官方库pipinstallultralytics opencv-python numpy matplotlib tqdm scikit-learn pandas pillow# 可选:TensorBoard 可视化pipinstalltensorboard# 验证 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.yamltrain:./apple_dataset/images/trainval:./apple_dataset/images/valtest:./apple_dataset/images/test# 类别数量nc:1# 类别名称names:-apple# 苹果# 中文名称(用于可视化)names_zh:-苹果⚠️ 注意:
- 所有标注文件
.txt中的 class ID 必须为0(因为只有一类)- 图像格式支持
.jpg,.png,.tif等- 建议按 8:1:1 划分 train/val/test
✅ 三、调用 YOLOv8 官方预训练模型进行训练
由于苹果在树上可能存在遮挡、光照变化、大小不一等问题,建议使用YOLOv8m或YOLOv8l提升检测精度。
fromultralyticsimportYOLO# 加载官方预训练模型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=16copy_paste和mosaic对遮挡、小样本特别有效- 可开启
close_mosaic在最后 10 轮关闭 Mosaic 增强
✅ 四、推理代码(单图 / 批量 / 视频)
1. 单张图像推理
fromultralyticsimportYOLOfromPILimportImage# 加载最佳模型model=YOLO('runs/train/apple_yolov8m/weights/best.pt')# 推理results=model('test_orchard.jpg',conf=0.3)# 显示结果forrinresults:im_array=r.plot()# 绘制边界框和标签im=Image.fromarray(im_array[...,::-1])# BGR to RGBim.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)
importcv2 cap=cv2.VideoCapture(0)whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=model(frame,conf=0.3)annotated_frame=results[0].plot()cv2.imshow('Apple Detection',annotated_frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.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--logdirruns/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')