OBB旋转框检测配置与训练全流程(基于 DOTA8 数据集)
🚀 YOLO交通标志识别实战(五):OBB旋转框检测配置与训练全流程(基于 DOTA8 数据集)
在专栏前面四篇里,我们完成了:
✅ Kaggle交通标志数据集下载并重组标准YOLO格式
✅ 训练/验证集拆分脚本
✅ 大图裁剪成小图的增强预处理
✅ LabelImg手工标注教程
本篇是系列的第五篇,我们来进入高级检测任务:
⭐ OBB(Oriented Bounding Box)旋转框检测。
这里我们会用到的数据配置就是:
dota8.yaml
⚡ 本篇重点:
✅ 什么是OBB旋转框检测
✅ 数据格式和dota8.yaml配置
✅ YOLOv8 OBB模型的选择
✅ 训练命令(含Python和命令行)
✅ 推理与可视化结果
📌 1️⃣ 什么是OBB(Oriented Bounding Box)
普通YOLO检测框是水平矩形:
[x_center, y_center, width, height]
而**OBB(旋转框)**扩展为:
[x_center, y_center, width, height, angle]
角度通常是弧度制(-π ~ +π)。
✅ 适用场景:
- 斜拍的交通标志
- 无人机遥感建筑物检测
- 工业零件方向检测
✅ 2️⃣ YOLOv8对OBB任务的支持
Ultralytics YOLOv8 在 >=8.1 版本开始官方支持 OBB 任务。
其内置支持任务类型包括:
detect / segment / classify / obb
⚡ 只需要在数据配置里写明:
task: obb
即可自动切换到旋转框检测头。
✅ 3️⃣ 数据标签格式(YOLO OBB)
OBB 标签文件和普通YOLO不同,每一行是:
<class_id> <x_center> <y_center> <width> <height> <angle>
✅ 所有坐标都归一化到0~1
✅ 角度是弧度
例如:
0 0.5123 0.4785 0.2645 0.3821 0.7854
表示:
- 类别ID:0
- 中心点: (0.5123, 0.4785)
- 宽高: (0.2645, 0.3821)
- 角度: 0.7854 弧度(≈45°)
✅ 4️⃣ dota8.yaml 配置示例
这里,我们就用自己的配置文件名:dota8.yaml。
下面是一个标准格式示例:
path: ./traffic
train: images/train
val: images/valnc: 4
names: [prohibitory, danger, mandatory, other]task: obb
⚡ 重点是最后一行:
task: obb
这告诉 YOLOv8 这是「旋转框任务」。
✅ 5️⃣ 选择OBB专用模型
Ultralytics 提供了官方设计的 OBB 模型YAML和预训练权重,比如:
⭐ 结构文件(可定制):
- yolov8n-obb.yaml
- yolov8s-obb.yaml
- yolov8m-obb.yaml
⭐ 预训练权重(推荐起步):
- yolov8n-obb.pt
- yolov8s-obb.pt
- …
⚡ 这些模型文件专门支持旋转框检测头。
✅ 6️⃣ Python训练全流程(示例)
这里是你的真实代码版本,直接可以复用:
from ultralytics import YOLO# 方法1:从头构建
model = YOLO("yolov8n-obb.yaml")# 方法2:加载官方预训练权重(推荐)
model = YOLO("yolov8n-obb.pt")# 方法3:自定义结构 + 加载预训练权重(迁移学习)
model = YOLO("yolov8n-obb.yaml").load("yolov8n.pt")# 开始训练
results = model.train(data="dota8.yaml", # 这里就是真实用的epochs=100,imgsz=640,batch=16,device=0
)
✅ 7️⃣ 命令行训练示例
如果你喜欢命令行,也可以这样:
yolo detect train data=dota8.yaml model=yolov8n-obb.pt imgsz=640 epochs=100
⚡ YOLOv8会自动检测到:
task: obb
并启用旋转框检测头。
✅ 8️⃣ 训练结果文件结构
运行完成后,会在:
runs/obb/train/
里生成:
weights/best.ptlast.pt
results.png
confusion_matrix.png
P-R曲线、mAP曲线
✅ 9️⃣ 推理与可视化预测
训练好后,就可以加载模型来做推理:
Python接口
from ultralytics import YOLOmodel = YOLO("runs/obb/train/weights/best.pt")
results = model.predict(source="images/test",imgsz=640,conf=0.25,save=True
)
预测结果会自动保存在:
runs/obb/predict/
里。
命令行接口
yolo detect predict model=runs/obb/train/weights/best.pt source=images/test imgsz=640
结果会在输出图片上绘制带角度的旋转框。
✅ 10️⃣ 进阶技巧
⭐ 预训练权重迁移学习
官方的:
yolov8n-obb.pt
是在大型数据集上训练好的,可以加载后再继续在你的数据(dota8.yaml)上finetune。
⭐ 参数可调节
- imgsz
- batch
- optimizer
- lr0, lrf
- warmup_epochs
⭐ 多卡训练
yolo detect train data=dota8.yaml model=yolov8n-obb.pt device=0,1,2,3
❤️ 总结
本篇是专栏的第五篇,我们学习了:
✅ 什么是OBB旋转框检测
✅ YOLOv8对OBB任务的原生支持
✅ 你的真实项目配置文件:dota8.yaml
✅ 标签格式和类别管理
✅ Python与命令行的训练与推理
✅ 迁移学习与进阶参数
🔜 下一篇预告
✨ 第六篇:YOLOv8 关键点检测