目标检测之YOLOV11自定义数据使用OBB训练与验证

一、前置条件与环境准备

在开始训练前,确保已完成以下准备《目标检测之YOLOV11自定义数据预处理------从原始标注到YOLO-OBB格式转换与验证》:
数据目录结构

bash 复制代码
yolov11/
├── datasets/
│   └── shrimp/
│       ├── images/
│       │   ├── train/  # 训练集图片
│       │   └── val/    # 验证集图片
│       └── labels/
│           ├── train/  # 训练集YOLO-OBB标注(.txt)
│           └── val/    # 验证集YOLO-OBB标注(.txt)
├── shrimp_obb.yaml     # 训练配置文件
└── runs/               # 训练结果保存目录
   └── obb/             # OBB任务结果

二、训练配置文件shrimp_obb.yaml设置

配置文件定义了数据集路径、类别数等关键信息,shrimp_obb.yaml应包含以下内容:

bash 复制代码
# 数据集基础信息(根据实际路径调整)
train: /datasets/shrimp/images/train  # 训练集图片目录(需提前划分训练集)
val:  /datasets/shrimp/images/val    # 验证集图片目录(你代码中的val路径)

# 标签路径(YOLO自动匹配:与图片目录同级的labels目录,如images/train → labels/train)
# 转换后标签路径labels/val(与val图片目录同级)

# 类别信息(你提到只有1个类别)
nc: 1  # 类别数量(必须与转换后的class_index=0一致)
names: ["shrimp"]  # 类别名称(与实际标注的类别一致)

# 可选:测试集路径(若有)
#test:  /datasets/shrimp/images/test

# 以下为可选超参数(可在训练命令中覆盖,非必须写在yaml里)
# 超参数参考:https://docs.ultralytics.com/yolov5/training
# hsv_h: 0.015  # 色调增强系数
# hsv_s: 0.7    # 饱和度增强系数
# hsv_v: 0.4    # 明度增强系数
# flipud: 0.5   # 上下翻转概率(OBB任务慎用,可能改变旋转方向)

三、训练命令与参数详解

1. 基础训练命令

使用YOLOv11-OBB模型(如yolo11n-obb.pt)启动训练,命令示例:

bash 复制代码
yolo obb train \
  data=shrimp_obb.yaml \
  model=yolo11n-obb.pt \
  epochs=300 \
  imgsz=640 \
  device=0,1 \
  batch=128 \
  project=runs/obb/train \
  name=shrimp_exp \
  plots=True \
  verbose=True
2. 关键参数解释
参数名 作用 示例值/说明
data 指定训练配置文件(定义数据集路径、类别等) shrimp_obb.yaml
model 预训练模型路径(OBB专用模型) yolo11n-obb.pt(轻量级)
epochs 训练轮次(根据数据量调整,日志显示300轮收敛) 300
imgsz 输入图片尺寸(与数据集中图片分辨率匹配,日志为640) 640
device 训练设备(多GPU加速) 0,1(使用2张显卡)
batch 每批次图片数(根据GPU显存调整,日志为128) 128
project 训练结果保存根目录(历史结果在runs/obb/train runs/obb/train
name 当前实验名称(避免覆盖历史结果) shrimp_exp(自定义)
plots 启用训练过程可视化(生成损失曲线、混淆矩阵等) True(默认启用)
verbose 终端输出详细日志(显示每批次损失、学习率等) True(调试时推荐)

3. 结果曲线

四、训练过程监控

1. 实时日志查看

训练过程中,终端会输出每轮(Epoch)的损失值(box_losscls_lossdfl_loss)和验证指标(mAP50mAP50-95),如日志所示:

2. TensorBoard可视化

训练完成后,日志文件(events.out.tfevents.*)保存在runs/obb/train/shrimp_exp目录。通过以下命令启动TensorBoard查看损失曲线和mAP趋势:

bash 复制代码
tensorboard --logdir runs/obb/train/shrimp_exp

浏览器访问http://localhost:6006即可查看。


五、模型验证(Val)

训练完成后,使用验证集评估最佳模型(best.pt)的泛化能力,命令如下:

bash 复制代码
yolo obb val \
  model=runs/obb/train/shrimp_exp/weights/best.pt \
  data=shrimp_obb.yaml \
  imgsz=640 \
  batch=128

输出指标与训练日志中的mAP50mAP50-95一致(日志显示mAP50-95=0.937)。

六、模型预测(Inference)

使用训练好的best.pt对新图片/视频进行预测,命令示例(隐藏类别名和置信度):

bash 复制代码
yolo obb predict \
  model=runs/obb/train/shrimp_exp/weights/best.pt \
  source=xxx.jpg \
  imgsz=640 \
  show_labels=False \
  show_conf=False \
  project=runs/obb/predict \
  name=shrimp_pred
关键预测参数
参数名 作用 示例值/说明
source 预测源(图片/视频路径或摄像头ID) 图片:/path/to/image.jpg
show_labels 是否显示类别名称(需求是隐藏) False
show_conf 是否显示置信度分数(需求是隐藏) False
project/name 预测结果保存目录(历史结果在runs/obb/predict runs/obb/predict/shrimp_pred
部分预测结果


七、常见问题与解决方案

问题现象 可能原因 解决方法
训练报错label not found 标签文件与图片文件名不匹配(如图片是.png,标签是.txt但前缀不一致) 确保images/train/xxx.jpg对应labels/train/xxx.txt(同名不同后缀)
mAP远低于预期 数据增强参数不当(如rotate过大导致标注方向混乱) 调整shrimp_obb.yaml中的rotate值(如从0.5降至0.3)
预测框偏移原图目标 数据转换时坐标归一化错误(如图片尺寸读取失败) 检查convert_to_yolo_obb.pyimg.shape是否正确获取宽高(shape[1]是宽)

八、总结

难以想象,一句像样的代码都没怎么写,就能完成了一个yolov11的训练和验证。

通过本文的步骤,已完成从数据格式转换→训练配置→模型训练→验证→预测的全流程。训练得到的best.pt可直接用于实际场景(如虾类检测),后续可通过调整超参数(如学习率、数据增强)进一步优化模型性能。

不过对比之前用yolov5-obb和现在的yolov11-obb,现在的结果比之前的好很多,无论是训练过程还是结果都有提升。

相关推荐
吹风看太阳8 分钟前
机器学习15-XGBoost
人工智能·机器学习·机器人
赵药师14 分钟前
YOLO官方自带的数据集Dotav1,直接训练
python·yolo·av1
Code_流苏18 分钟前
吴恩达:从斯坦福到 Coursera,他的深度学习布道之路
人工智能·深度学习·机器学习·ai·coursera·吴恩达
一个热爱生活的普通人22 分钟前
如何开发一个可以在命令行执行的Coding Agent
人工智能·go·aigc
yzx99101328 分钟前
最具有实际意义价值的比赛项目
人工智能·深度学习·机器学习
cylat1 小时前
Day38 Dataset和Dataloader类
人工智能·python·深度学习·神经网络·机器学习
yuluo_YX1 小时前
AI Gateway 介绍
人工智能·gateway
HeartException1 小时前
Spring Boot + MyBatis Plus + SpringAI + Vue 毕设项目开发全解析(源码)
人工智能·spring boot·学习
VR最前沿1 小时前
Xsens动作捕捉技术用于研究机器人的运动控制、姿态调整以及人机交互
人工智能·机器人·人机交互
云卓SKYDROID1 小时前
无人机交互控制技术要点
人工智能·人机交互·无人机·遥控器·高科技·云卓科技