深度学习目标检测算法用YOLOv8 模型来训练多类别智慧化农作物检测数据集检测任务,并构建一个完整的深度学习农作物数据集检测系统。
同学,以下文字及代码仅供参考。
智慧化农业农作物检测YOLO数据集模型2042张 8类
类别 | 图片数量 | 标注框数量 | 训练集图片数(约80%) | 验证集图片数(约20%) |
---|---|---|---|---|
Maize | 608 | 733 | 486 | 122 |
Banana | 191 | 321 | 153 | 38 |
Soybean | 165 | 193 | 132 | 33 |
Rice | 579 | 641 | 463 | 116 |
Sunflower | 179 | 274 | 143 | 36 |
Sugarcane | 89 | 106 | 71 | 18 |
Wheat | 232 | 288 | 186 | 46 |
Tobacco | 31 | 44 | 25 | 6 |
总计 | 2042 | 2600 | 1633 (80%) | 409 (20%) |
说明:
- 数据集总数为 2042 张图片,按照 8:2 比例划分为训练集和验证集。
- 每个类别的训练集和验证集图片数量是基于其总图片数的 80% 和 20% 进行近似划分(四舍五入)。
- 总标注框数为 2600 个。
- 对于图片数较少的类别(如
Tobacco
),需注意在划分时尽量保证验证集中有足够的样本以避免过拟合。
使用 YOLOv8 模型来训练这个多类别检测任务,并构建完整的深度学习检测系统。
✅ 一、数据准备与组织结构
📁 数据集目录结构建议如下:
crops_dataset/
├── images/
│ ├── train/ # 1633张
│ └── val/ # 409张
├── labels/
│ ├── train/
│ └── val/
└── data.yaml
📄 data.yaml
文件内容如下:
train: crops_dataset/images/train
val: crops_dataset/images/val
nc: 8
names: ['Maize', 'Banana', 'Soybean', 'Rice', 'Sunflower', 'Sugarcane', 'Wheat', 'Tobacco']
🔧 二、安装依赖环境
确保同学 已经安装了 Ultralytics 的 YOLOv8 库:
pip install ultralytics
同学呀,如果你使用 GPU,还需要安装 PyTorch,推荐使用官方安装命令:
👉 https://pytorch.org/get-started/locally/
🚀 三、模型选择与训练
1. 加载预训练模型(推荐)
YOLOv8 提供多个版本,如 yolov8n.pt
, yolov8s.pt
, yolov8m.pt
等,根据你的硬件资源选择合适的模型。
from ultralytics import YOLO
# 加载预训练模型(例如 yolov8m.pt)
model = YOLO('yolov8m.pt') # 自动适配8类输出层
⚠️ 注意:如果你自己定义了
.yaml
架构文件,也可以加载自定义模型,但一般直接加载官方预训练模型更高效。
2. 开始训练
results = model.train(
data='path/to/data.yaml', # 替换为你的 data.yaml 路径
epochs=150, # 训练轮数,可调
imgsz=640, # 输入图像大小
batch=16, # 批次大小(根据GPU显存调整)
name='crop_detector', # 输出目录名
project='runs/crop_detect', # 可选:保存路径
save=True,
save_period=5, # 每5个epoch保存一次权重
device=0 # 使用GPU(若可用)
)
📊 四、模型评估
训练完成后自动会进行验证,也可以手动调用:
metrics = model.val()
print(f"mAP@0.5: {metrics.box.map50:.4f}, mAP@0.5:0.95: {metrics.box.map:.4f}")
你可以查看每类的精确率、召回率等详细指标:
print(metrics.class_result(i) for i in range(8))
🔍 五、推理预测(单图/批量/视频)
单张图片推理:
results = model.predict(source='test.jpg', show=True, conf=0.25)
视频或摄像头实时检测:
results = model.predict(source=0) # 0 表示默认摄像头
results = model.predict(source="video.mp4")
🖼️ 六、可视化结果
可以将预测结果绘制出来并保存:
for result in results:
annotated_frame = result.plot() # 绘制检测框和标签
cv2.imshow("Detection", annotated_frame)
if cv2.waitKey(1) == 27:
break
📦 七、模型导出(ONNX / TensorRT / TFLite)
支持多种格式导出,方便部署到不同平台:
model.export(format='onnx') # 导出为 ONNX 格式
model.export(format='engine') # 导出为 TensorRT 引擎(需要NVIDIA GPU)
model.export(format='tflite') # 导出为 TensorFlow Lite 格式
🌐 八、系统部署建议
部署方式 | 工具 | 说明 |
---|---|---|
Web服务 | Flask / FastAPI + ONNX Runtime | 在服务器上提供REST API接口 |
边缘设备 | NVIDIA Jetson / RK3588 + TensorRT | 实时检测嵌入式部署 |
移动端 | Android/iOS + TFLite | 支持手机端农作物识别 |
无人机 | DJI Mavic / Autopilot + RTSP流 | 结合航拍图像实时检测 |
仅供参考,我的同学们,
以上文字及代码仅供参考。