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 关键点检测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90693.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp制作一个视频播放页面

1.产品展示2.页面功能(1)点击上方按钮实现页面跳转&#xff1b;(2)点击相关视频实现视频播放。3.uniapp代码<template><view class"container"><!-- 顶部分类文字 --><view class"categories"><navigator class"category-…

8.卷积神经网络基础

8.1 卷积核计算 import torch from torch import nn import matplotlib.pyplot as plt def corr2d(X,k):#计算二维互相关运算h,wk.shape#卷积核的长和宽Ytorch.zeros((X.shape[0]-h1,X.shape[1]-w1))#创建(X-H1,X-W1)的全零矩阵for i in range(Y.shape[0]):for j in range(Y.s…

【每天一个知识点】子空间聚类(Subspace Clustering)

“子空间聚类&#xff08;Subspace Clustering&#xff09;”是一种面向高维数据分析的聚类方法&#xff0c;它通过在数据的低维子空间中寻找簇结构&#xff0c;解决传统聚类在高维空间中“维度诅咒”带来的问题。子空间聚类简介在高维数据分析任务中&#xff0c;如基因表达、图…

《汇编语言:基于X86处理器》第7章 整数运算(2)

本章将介绍汇编语言最大的优势之一:基本的二进制移位和循环移位技术。实际上&#xff0c;位操作是计算机图形学、数据加密和硬件控制的固有部分。实现位操作的指令是功能强大的工具&#xff0c;但是高级语言只能实现其中的一部分&#xff0c;并且由于高级语言要求与平台无关&am…

JVM故障处理与类加载全解析

1、故障处理工具基础故障处理工具jps&#xff1a;可以列出正在运行的虚拟机进程&#xff0c;并显示虚拟机执行主类&#xff08;Main Class&#xff0c;main()函数所在的类&#xff09;名称以及这些进程的本地虚拟机唯一ID&#xff08;LVMID&#xff0c;Local Virtual Machine I…

Python 第三方库的安装与卸载全指南

在 Python 开发中&#xff0c;第三方库是提升效率的重要工具。无论是数据分析、Web 开发还是人工智能领域&#xff0c;都离不开丰富的第三方资源。本文将详细介绍 Python 第三方库的安装与卸载方法&#xff0c;帮助开发者轻松管理依赖环境。 一、第三方库安装方法 1. pip 工具…

RabbitMQ 高级特性之消息分发

1. 为什么要消息分发当 broker 拥有多个消费者时&#xff0c;就会将消息分发给不同的消费者&#xff0c;消费者之间的消息不会重复&#xff0c;RabbitMQ 默认的消息分发机制是轮询&#xff0c;但会无论消费者是否发送了 ack&#xff0c;broker 都会继续发送消息至消费者&#x…

Linux操作系统从入门到实战:怎么查看,删除,更新本地的软件镜像源

Linux操作系统从入门到实战&#xff1a;怎么查看&#xff0c;删除&#xff0c;更新本地的软件镜像源前言一、 查看当前镜像源二、删除当前镜像源三、更新镜像源四、验证前言 我的Linux版本是CentOS 9 stream本篇博客我们来讲解怎么查看&#xff0c;删除&#xff0c;更新国内本…

两台电脑通过网线直连形成局域网,共享一台wifi网络实现上网

文章目录一、背景二、实现方式1、电脑A&#xff08;主&#xff09;2、电脑B3、防火墙4、验证三、踩坑1、有时候B上不了网一、背景 两台windows电脑A和B&#xff0c;想通过**微软无界鼠标&#xff08;Mouse without Borders&#xff09;**实现一套键盘鼠标控制两台电脑&#xf…

Java Reference类及其实现类深度解析:原理、源码与性能优化实践

1. 引言&#xff1a;Java引用机制的核心地位在JVM内存管理体系中&#xff0c;Java的四种引用类型&#xff08;强、软、弱、虚&#xff09;构成了一个精巧的内存控制工具箱。它们不仅决定了对象的生命周期&#xff0c;还为缓存设计、资源释放和内存泄漏排查提供了基础设施支持。…

华为云对碳管理系统的全生命周期数据处理流程

碳管理系统的全生命周期数据处理流程包含完整的数据采集、处理、治理、分析和应用的流程架构,可以理解为是一个核心是围绕数据的“采集-传输-处理-存储-治理-分析-应用”链路展开。以下是对每个阶段的解释,以及它们与数据模型、算法等的关系: 1. 设备接入(IoTDA) 功能: …

大模型安全风险与防护产品综述 —— 以 Otter LLM Guard 为例

大模型安全风险与防护产品综述 —— 以 Otter LLM Guard 为例 一、背景与安全风险 近年来&#xff0c;随着大规模预训练语言模型&#xff08;LLM&#xff09;的广泛应用&#xff0c;人工智能已成为推动文档处理、代码辅助、内容审核等多领域创新的重要技术。然而&#xff0c;…

1.2.2 计算机网络分层结构(下)

继续来看计算机网络的分层结构&#xff0c;在之前的学习中&#xff0c;我们介绍了计算机网络的分层结构&#xff0c;以及各层之间的关系。我们把工作在某一层的软件和硬件模块称为这一层的实体&#xff0c;为了完成这一层的某些功能&#xff0c;同一层的实体和实体之间需要遵循…

实训八——路由器与交换机与网线

补充——基本功能路由器&#xff1a;用于不同逻辑网段通信的交换机&#xff1a;用于相同逻辑网段通信的1.网段逻辑网段&#xff08;IP地址网段&#xff09;&#xff1a;IP地址的前三组数字代表不同的逻辑网段&#xff08;有限条件下&#xff09;&#xff1b;IP地址的后一组数字…

C++——构造函数的补充:初始化列表

C中&#xff0c;构造函数为成员变量赋值的方法有两种&#xff1a;构造函数体赋值和初始化列表。构造函数体赋值是在构造函数里面为成员变量赋值&#xff0c;如&#xff1a;class Data { public://构造函数体赋值Data(int year,int month,int day){_year year;_month month;_d…

代码随想录|图论|12岛屿周长

leetcode:106. 岛屿的周长 题目 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;岛屿是被水包围&#xff0c;并且通过水平方向或垂直方向上相邻的陆地连接而成的。 你可以假设矩阵外均被水包围。在矩阵中恰好拥有…

开发制作模仿参考抄别人的小程序系统

很多老板看见别人公司的小程序系统界面好看&#xff0c;功能强大&#xff0c;使用人数多。就想要抄袭模仿参考别人家的小程序系统。想要了解一下有没有侵权风险&#xff0c;以及怎么开发制作开发制作模仿参考抄别人的小程序系统。首先回答第一个问题&#xff0c;只要你的小程序…

c语言中的数组IV

数组的集成初始化 集成初始化的定位 数组的大小 数组的赋值 不能直接将一个数组a赋值给数组b&#xff0c;只能通过遍历来实现 遍历数组 示例——检索元素在数组中的位置#include <stdio.h> int search(int key,int a[],int length); int main(void){int a[] {2,4,6,7,1,…

LDO选型

目录 一、最大输出电流 二、最大输入电压 三、最大功率&#xff1a;Pmax 四、负载动态调整率 五、输入电源纹波抑制比&#xff1a;PSRR 一、最大输出电流 参考TI LM1117IMPX-3.3/NOPB数据手册 由于LDO转换效率很低&#xff0c;LDO的标称最大电流 ≥ 实际最大负载电流 1…

飞算JavaAI:重构Java开发的“人机协同”新范式

目录一、从需求到架构&#xff1a;AI深度参与开发“顶层设计”1.1 需求结构化&#xff1a;自然语言到技术要素的准确转换1.2 架构方案生成&#xff1a;基于最佳实践的动态匹配二、编码全流程&#xff1a;从“手写代码”到“人机协同创作”2.1 复杂业务逻辑生成&#xff1a;以“…