目标检测之YOLOV11自定义数据使用OBB训练与验证
一、前置条件与环境准备
在开始训练前,确保已完成以下准备《目标检测之YOLOV11自定义数据预处理——从原始标注到YOLO-OBB格式转换与验证》:
数据目录结构:
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
应包含以下内容:
# 数据集基础信息(根据实际路径调整)
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
)启动训练,命令示例:
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_loss
、cls_loss
、dfl_loss
)和验证指标(mAP50
、mAP50-95
),如日志所示:
2. TensorBoard可视化
训练完成后,日志文件(events.out.tfevents.*
)保存在runs/obb/train/shrimp_exp
目录。通过以下命令启动TensorBoard查看损失曲线和mAP趋势:
tensorboard --logdir runs/obb/train/shrimp_exp
浏览器访问http://localhost:6006
即可查看。
五、模型验证(Val)
训练完成后,使用验证集评估最佳模型(best.pt
)的泛化能力,命令如下:
yolo obb val \model=runs/obb/train/shrimp_exp/weights/best.pt \data=shrimp_obb.yaml \imgsz=640 \batch=128
输出指标与训练日志中的mAP50
、mAP50-95
一致(日志显示mAP50-95=0.937
)。
六、模型预测(Inference)
使用训练好的best.pt
对新图片/视频进行预测,命令示例(隐藏类别名和置信度):
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.py 中img.shape 是否正确获取宽高(shape[1] 是宽) |
八、总结
难以想象,一句像样的代码都没怎么写,就能完成了一个yolov11的训练和验证。
通过本文的步骤,已完成从数据格式转换→训练配置→模型训练→验证→预测的全流程。训练得到的best.pt
可直接用于实际场景(如虾类检测),后续可通过调整超参数(如学习率、数据增强)进一步优化模型性能。
不过对比之前用yolov5-obb和现在的yolov11-obb,现在的结果比之前的好很多,无论是训练过程还是结果都有提升。