目标检测之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/trainruns/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趋势:

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

输出指标与训练日志中的mAP50mAP50-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/predictruns/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,现在的结果比之前的好很多,无论是训练过程还是结果都有提升。

### YOLO11 OBB 网络结构详解 YOLO11 是由 Ultralytics 团队开发的目标检测框架的最新版本,它继承并扩展了之前的 YOLO 版本的功能和特性[^1]。对于旋转目标检测任务(即 OBB, Oriented Bounding Box),YOLO11 的网络结构基于标准 YOLO11 进行了一些特定调整。 #### 一、基础架构 YOLO11 的基本网络结构相较于 YOLOv8 做出了显著改动,主要体现在以下几个方面: - **C3K2 替代 CF2 模块**:这是 YOLO11 中的一个重要更新,通过优化卷积操作的方式提升了模型效率。 - **新增 C2PSA 模块**:该模块位于 SPPF 后面,用于增强特征融合能力,从而提升对复杂场景的理解能力。 - **Head 部分采用深度可分离方法**:借鉴了 YOLOv10 的设计理念,减少了冗余计算,提高了运行速度和资源利用率[^2]。 这些改进不仅适用于常规矩形框检测任务,在处理旋转边界框时也具有重要意义。 #### 二、针对 OBB 的特殊设计 为了支持旋转对象检测,YOLO11 结合了类似于 YOLOv8 OBB 的技术路径[^3]: 1. **数据预处理阶段** 数据集需要经过专门标注以包含角度信息,并转换成适合输入神经网络的形式。此过程通常涉及将原始图片及其对应的标签文件转化为统一格式供后续训练使用。 2. **模型修改部分** - 在预测层增加额外维度用来表示物体的方向角θ值; - 调整损失函数以适应新的回归目标——除了中心坐标(x,y),宽高(w,h)外还需考虑方向参数θ; 以下是简化版伪代码展示如何构建这样一个带有方向感知能力的新颖头部组件: ```python class RotatedDetect(nn.Module): def __init__(self, nc=80): super().__init__() self.m = nn.Sequential( Conv(...), # Standard convolution layer DWConv(...) # Depth-wise separable convolutions reducing computations. ) def forward(self,x): ... return output_with_theta_info ``` 上述代码片段展示了如何利用深度可分离卷积(DWConv)降低运算量的同时保持较高的精度表现。 #### 总结 综上所述,YOLO11 对于 OBB 应用场景下的具体实现细节包含了从底层架构革新直至高层应用定制化的一系列措施。通过对传统 CNN 组件的选择性替换以及引入更高效的算法机制实现了性能上的飞跃;而在面向实际工业需求比如遥感影像分析等领域则展现了强大的适用潜力.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值