YOLOv8 OBB 旋转目标检测模型详解与实践

news2025/3/19 10:10:10

引言

在计算机视觉领域,目标检测是至关重要的任务之一。YOLO(You Only Look Once)系列算法因其高效性和准确性而广受欢迎。YOLOv8 作为稳定版本,在目标检测领域取得了显著成果,依旧能打。本文将深入探讨 YOLOv8 OBB(Oriented Bounding Box,定向边界框) 模型的结构、损失函数、关键代码以及如何进行自定义 OBB 对象检测的完整流程。


在开始之前,弥补上节YOLOV8不同精度模型解析:

旋转对象模型 OBB

1. 旋转对象检测模型结构拆解

YOLOv8 OBB 模型的结构主要分为两个部分:BackboneHead。其中:

以YOLOV8n为例

Backbone 部分
  • 使用 C2f(Cross Convolutional Layer)SPPF(Spatial Pyramid Pooling - Fast) 等模块来增强特征提取能力。
  • 通过多次卷积和下采样操作,逐步提取图像的高级特征。
Head 部分
  • 包含了上采样、Concat 操作以及 C2f 模块,用于融合不同层级的特征。
  • 最终通过 OBB 模块生成定向边界框的预测。

2. 旋转对象损失函数

YOLO OBB 模型使用了三种主要的损失函数:cls(分类)、box(边界框)和 df1(分布焦点损失)

Cls - BCE(Binary Cross Entropy)
  • 用于分类任务,衡量预测类别与真实类别之间的差异。
Box - ProbIOU
  • 衡量预测边界框与真实边界框之间的 IOU(Intersection over Union),并结合概率进行损失计算。

论文地址:https://arxiv.org/pdf/2106.06072v1.pdf

1. 数据准备

进行自定义 OBB 目标检测的第一步是准备数据集,数据集应包含图像文件和对应的标签文件。

OBB 数据集格式
  • YOLO OBB 格式通过 四个角点 指定边界框,其坐标在 0 和 1 之间归一化。
  • 标签文件格式如下:
class_index, x1, y1, x2, y2, x3, y3, x4, y4

2. 模型训练与测试

使用准备好的数据集,可以开始模型的训练过程。

训练命令
yolo obb train data=pen_dataset.yaml model=yolov8s-obbb.pt epochs=25 imgsz=640
测试命令
yolo obb predict model=yolov8n-obbb.pt source=plane_03.jpg

3. 模型导出与推理

训练完成后,可以将模型导出为 ONNX 格式,以便在其他平台进行部署。

导出命令
yolo export model=yolov8s-obbb.pt format=onnx
推理格式
  • 输入格式NCHW=1x3x640x640
  • 输出格式1x6x8400,包含 xywhcr(中心坐标、宽度、高度、旋转角度和置信度)信息。

数据标注与说明

1. 标注工具

为了生成符合 YOLO OBB 格式的标签文件,需要使用专门的标注工具,例如:

  • LabelImg
  • Roboflow
  • CVAT

2. 数据集生成

通过编写代码,可以将标注好的数据转换为 YOLO OBB 格式,包括:

  • 统一不同格式的标注数据。
  • 进行数据增强,如旋转、缩放、裁剪等。

3. 旋转矩阵

在处理旋转目标时,旋转矩阵 是必不可少的。通过旋转矩阵,可以将原始坐标转换为旋转后的坐标,从而准确表示目标的位置和方向。

不同旋转的标注格式:


模型推理与部署

1. 输入输出格式

进行模型推理时,需要明确输入和输出格式:

  • 输入格式1x3x640x640 的张量,NCHW=1x3x640x640
  • 输出格式:包含检测到目标的 边界框信息,1x6x8400。 
  • xywhcr 只有一个类别

2. 部署实践

模型部署到实际应用时,需要考虑性能优化兼容性,可以采用:

  • 量化(Quantization):减少计算量,提高推理速度。
  • 剪枝(Pruning):去除冗余权重,优化模型大小。

3.旋转中心-角度正负

•选择中心,角度 R 旋转 旋转矩阵

•得到四个点坐标


总结

本文详细介绍了 YOLOv8 OBB 模型的结构、损失函数、关键代码以及 自定义 OBB 目标检测 的完整流程。旨在深入理解 YOLOv8 OBB 的工作原理,并应用到实际旋转目标检测任务中。


未来展望

随着计算机视觉技术的发展,旋转目标检测在 无人机监测、遥感图像分析 等领域有广阔的应用前景。YOLOv8 OBB 作为高效检测工具,将在这些领域发挥重要作用。欢迎继续交流!😊🚀


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

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

相关文章

机器学习之支持向量机(SVM)算法详解

文章目录 引言一、 什么是支持向量机(SVM)二、 SVM的基本原理三、数学推导1.线性可分情况2. 非线性可分情况3. 核函数 四、SVM的优缺点优点:缺点: 五、 应用场景六、 Python实现示例七、 总结 引言 支持向量机(Suppor…

Linux系统移植篇(十一)Linux 内核启动流程

要分析 Linux 启动流程,同样需要先编译一下 Linux 源码,因为有很多文件是需要编译才 会生成的。首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds,通过链接脚本可以 找到 Linux 内核的第一行程序是从哪里执行的。vmlinux.lds …

功能强大的电脑硬件检测及驱动安装工具

今天给大家带来一款超实用的电脑硬件检测软件——入梦工具箱。它是开源的,全程无广告干扰,使用起来清爽又安心。 打开入梦工具箱,进入“硬件信息”选项,电脑各个配件的详细参数一目了然。 无论是CPU的型号、频率,还是…

【Altium Designer】设计技巧

目录 技巧一:铺铜连接方式 技巧二:铺铜连接方式 技巧一:铺铜连接方式 Design -> Rules -> PolygonConnect 三种选择: 1)Relief Connect:十字连接,可选择是45还是90 2)Direct…

基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等

板卡简介: 本板为模拟量高速采样板(ADI),主要用于电机转速和相电流检测,以实现电机闭环控制。 性能规格: 电源:DC5V,DC3.3V,DC15V,DC24V FPGA:…

6. 顺序表和链表*****

目录 1. 顺序表 1.1 原理 1.2 常见的增删查改 1.3 顺序表的问题 2. 链表 2.1 原理 2.2 无头单向非循环的增删查改 2.3 链表面试题 1. 删除链表中等于给定值val的所有节点203. 移除链表元素 2. 链表逆置206. 反转链表(考的最多) 3.给你单链表的…

【AVRCP】蓝牙协议栈深度解析:AVCTP互操作性核心机制与实现细节

目录 一、事务标签(Transaction Label)机制 1.1 事务标签核心规则 1.2 事务标签作用域与并发性 1.3 实现建议与陷阱规避 1.4 协议设计思考 1.5 调试与验证 二、消息分片(Fragmentation)机制 2.1 分片触发条件 2.2 分片支…

【MySQL】基本查询(下)

文章目录 1.筛选分页结果2.Update3.Delete4.截断表5.插入查询结果6.聚合函数6.1什么是聚合函数6.2常见的聚合函数 7.group by7.1如何显示每个部门的平均工资和最高工资7.2显示每个部门的每种岗位的平均工资和最低工资7.3显示平均工资低于2000的部门和它的平均工资 8.总结 1.筛选…

Xpath Helper 替代 - XPath 测试器

Xpath Helper 最近开始(2025.03)无法使用了,选找了几款替代品,XPath 测试器 是目前看来最好的。 XPath 测试器 市场地址: https://chromewebstore.google.com/detail/xpath-测试器/cneomjecgakdfoeehmmmoiklncdiodmh …

C++学习之云盘项目nginx

1.复习 2.知识点概述 1. 一些基本概念 1.1 Nginx 初步认识 1.2 正向 / 反向代理 1.3 域名和 IP 2. Nginx 安装和配置 2.1 安装 2.2 配置 3. Nginx 的使用 3.1 部署静态网页 3.2 反向代理和负载均衡 课外知识导读 1. URL 和 URI 2. DNS 解析过程 1. 一些基…

JAVA学习*抽象类

抽象类 在Java中,被abstract关键字修饰的类被称为抽象类。 特点 1、当一个类继承了抽象类,一定要重写抽象方法!!! public abstract class Animal {public int age;public String name;//抽象方法public abstract v…

数据库管理-第303期 数据库相关硬件文章汇总(20250319)

数据库管理303期 2025-03-19 数据库管理-第303期 数据库相关硬件文章汇总(20250319)1 CPU & 内存2 SSD3 RDMA4 存储5 CXL6 硬件采购7 数据库一体机总结 数据库管理-第303期 数据库相关硬件文章汇总(20250319) 作者&#xff1…

OctoTools:一个具有复杂推理可扩展工具的智体框架

25年2月来自斯坦福大学的论文“OctoTools: An Agentic Framework with Extensible Tools for Complex Reasoning”。 解决复杂的推理任务可能涉及视觉理解、域知识检索、数值计算和多步骤推理。现有方法使用外部工具增强大语言模型 (LLM),但仅限于专业领域、有限的…

Canary

定义: Canary是一种用以防护栈溢出的保护机制。 原理: 是在一个函数的入口处,先从fs/gs寄存器中取出一个4字节(eax,四字节通常是32位的文件)或者8字节(rax,通常是64位的文件)的值…

c++领域展开第十七幕——STL(vector容器的模拟实现以及迭代器失效问题)超详细!!!!

文章目录 前言vector——基本模型vector——迭代器模拟实现vector——容量函数以及push_back、pop_backvector——默认成员函数vector——运算符重载vector——插入和删除函数vector——实现过程的问题迭代器失效memcpy的浅拷贝问题 总结 前言 上篇博客我们已经详细介绍了vecto…

BUUCTF Pwn babyheap_0ctf_2017 Unsorted bin attack部分

checksec exeinfo 开启了全保护 64位 查看函数: 堆题 增删查改齐了 可以在编辑堆的时候重新设置大小 存在堆溢出 delete函数的指针清零了 无UAF 想法是通过unsorted bin泄露libc基址: from pwn import *p process(./babyheap) #p remote("node…

【C++指南】内存管理完全手册:new/delete

🌟 各位看官好,我是egoist2023! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C内存管理的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享…

Vue3组合式函数(滚动监测 useScroll)

主要用于实时监测目标元素滚动位置及状态 工具函数源码 /*** 组合式函数* 实时监测目标元素滚动位置及状态** 自定义钩子用于处理滚动事件和状态* param target 滚动目标元素,可以是 Ref、HTMLElement、Window 或 Document,默认为 window* param throt…