当前位置: 首页 > article >正文

YOLOv11 OBB 任务介绍与数据集构建要求及训练脚本使用指南

YOLO(You Only Look Once)是一个高效且广泛应用于目标检测任务的深度学习框架。在目标检测任务中,传统的边界框(AABB)通过四个参数来定义目标的位置信息:中心坐标、宽度、高度以及目标的旋转角度。然而,这种方法在面对旋转物体时,往往无法准确描述目标的形状与位置,尤其是当物体被倾斜或旋转时。为了解决这一问题,YOLO引入了 定向边界框(OBB, Oriented Bounding Boxes),使得在旋转物体的检测中,能够更加精确地描述物体的位置和形状。

下面将详细介绍YOLO OBB任务的标注格式、数据集构建要求以及如何使用YOLOv11模型进行训练。我们将以YOLOv11 OBB模型为例,说明如何构建数据集并编写训练脚本,帮助您顺利完成定向目标检测任务。


YOLO OBB 任务简介

YOLOv11 OBB任务中文介绍页面:YOLOv11 OBB

OBB(定向边界框)与传统边界框的区别

传统的边界框(Axis-Aligned Bounding Box,简称AABB)是通过图像中的物体的中心坐标、宽度和高度来描述物体的位置。然而,这种方式不能很好地适应旋转物体的检测。尤其是当物体的姿态发生变化时,AABB会产生较大的误差,因为它仅仅是与坐标轴对齐的矩形。

YOLO OBB(定向边界框)则通过 四个角点 来定义物体的边界框,这样可以精确描述旋转或倾斜物体的边界。这使得YOLO OBB不仅可以检测普通物体,还能有效处理旋转的目标物体。

YOLO OBB 数据集标注格式

YOLO OBB 任务的标注格式与传统的 YOLO 边界框标注略有不同。YOLO OBB 使用四个角点的归一化坐标来描述目标物体的边界框。这些坐标是在 [0, 1] 范围内,相对于图像的宽度和高度进行归一化。

YOLO OBB 数据集标注格式:
class_index x1 y1 x2 y2 x3 y3 x4 y4
  • class_index:物体类别的索引。通常是整数,从 0 开始。
  • x1, y1, x2, y2, x3, y3, x4, y4:目标物体四个角点的坐标,范围为 [0, 1],根据图像的宽度和高度进行归一化。

这些四个角点按顺时针或逆时针顺序排列,通常与物体的边缘一致。标注的精度决定了模型在训练过程中的准确性,因此标注时要特别小心,确保角点准确。

示例:

在这里插入图片描述

假设我们有一张包含倾斜飞机的图像,飞机的类别编号为 0,其四个角点的归一化坐标分别为:

  • (x1, y1) = (0.1, 0.2)
  • (x2, y2) = (0.3, 0.2)
  • (x3, y3) = (0.3, 0.4)
  • (x4, y4) = (0.1, 0.4)

则该图像的标注行如下所示:

0 0.1 0.2 0.3 0.2 0.3 0.4 0.1 0.4

通过这种方式,YOLO OBB 能够在训练过程中有效地处理旋转物体,进而提高检测精度。

定向边框(OBB)数据集概述:定向边框(OBB)数据集概述


YOLO OBB 数据集构建要求

数据集格式

为了能够成功训练YOLO OBB模型,数据集必须符合特定的结构。通常,YOLO数据集包括两个部分:图像文件和对应的标签文件。对于YOLO OBB任务,标签文件应包含每个图像中目标物体的四个角点坐标。

数据集目录结构:
dataset/
├── images/
│   ├── image1.jpg
│   ├── image2.jpg
│   └── ...
└── labels/
    ├── image1.txt
    ├── image2.txt
    └── ...
  • images/ 目录包含所有的图像文件。
  • labels/ 目录包含与图像文件一一对应的文本标注文件,每个文件的命名与图像文件相同,扩展名为 .txt

每个标注文件(例如 image1.txt)的内容应按照YOLO OBB格式编写。每一行代表一个目标物体,格式如下:

class_index x1 y1 x2 y2 x3 y3 x4 y4

数据集的配置文件(YAML格式)

YOLO要求使用YAML格式的配置文件来描述数据集。数据集配置文件应包含图像路径、类别名称等信息。

示例配置文件 dota8.yaml

train: /path/to/train/images
val: /path/to/val/images

nc: 1  # 类别数量
names: ['airplane']  # 类别名称

YOLO OBB 模型训练脚本

YOLO提供了一个简单的API来训练定向目标检测模型。以下是一个基于YOLOv11 OBB模型的训练脚本示例。该脚本使用了预训练的YOLOv11 OBB模型,并在自定义数据集上进行训练。

训练脚本说明

from ultralytics import YOLO

# 确保多进程只在主进程中启动
if __name__ == "__main__":

    # 加载预训练的 YOLOv11-OBB 模型
    model = YOLO("models/yolo11n-obb.pt")  # 使用 YOLOv11 预训练模型(OBB)

    # 训练模型
    results = model.train(
        data="ultralytics/cfg/datasets/airplane.yaml",   # 数据集 YAML 配置文件
        epochs=100,                                     # 训练的轮数
        imgsz=640,                                      # 输入图片的大小
        batch=16,                                       # 批量大小
        device=0,                                       # 使用的设备,0表示使用GPU0,-1表示使用CPU
        project='runs/train',                           # 训练结果保存路径
        name='yolo11n_obb_custom',                      # 保存的实验名称
        exist_ok=True,                                  # 如果目录已存在,是否覆盖
        augment=True,                                   # 数据增强
        rect=True,                                      # 按矩形裁剪(适用于非方形图像)
        workers=4,                                      # 数据加载工作线程数量
    )

    # 训练结果
    print(f"训练完成. 结果保存在: {results.save_dir}")

训练脚本说明:

  1. 加载模型:使用YOLOv11的预训练模型 yolo11n-obb.pt。该模型已经在DOTA数据集上进行了预训练,适用于OBB任务。

  2. 训练数据:通过 data="ultralytics/cfg/datasets/airplane.yaml" 指定训练数据集的路径和格式。

  3. 训练参数

    • epochs=100:训练轮数设置为100轮。
    • imgsz=640:输入图像的大小为640x640。
    • batch=16:每批次训练的图像数量为16。
    • device=0:指定使用GPU0进行训练,-1表示使用CPU。
  4. 训练设置

    • project='runs/train':训练结果将保存到 runs/train 路径下。
    • name='yolo11n_obb_custom':设置训练实验的名称。
    • exist_ok=True:如果保存路径已存在,允许覆盖。
    • augment=True:开启数据增强。
    • rect=True:采用矩形裁剪模式,以适应非方形图像。
    • workers=4:使用4个工作线程加载数据。

训练过程与结果

运行脚本后,训练过程将在命令行输出训练进度和结果。最终,训练好的模型会保存在指定的 results.save_dir 路径下。


YOLO OBB(定向边界框)任务通过四个角点来描述目标物体的边界框,相较于传统的AABB方法,能够更精确地处理旋转物体的检测任务。通过构建符合YOLO OBB格式的数据集并编写训练脚本,您可以使用YOLOv11模型在自定义数据集上进行训练,从而实现高效、精确的定向目标检测。


http://www.kler.cn/a/505530.html

相关文章:

  • Linux内核的启动
  • flutter 安卓端打包
  • 数据结构《MapSet哈希表》
  • 前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单
  • Vue.js前端框架教程16:Element UI的el-dialog组件
  • 3D目标检测数据集——Nusence数据集
  • Linux——进程信号
  • rust toml
  • 遥感图像滑坡分类数据集2773张2类别
  • mac下使用arthas分析工具报错
  • Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)
  • VSCode连接Github的重重困难及解决方案!
  • Python入门教程丨2.3 流程控制、算法效率分析及优化
  • MySQL(行结构)
  • 校园跑腿小程序---轮播图,导航栏开发
  • 深度学习-85-RAG技术之Faiss搭配合适的model和embedding函数应用示例
  • 【c++】【Linux】堆和栈的区别
  • 81_Redis经典面试问题
  • 大语言模型训练
  • Yantra:一个基于.Net跨平台JavaScript开源引擎
  • PyCharm文档管理
  • stable diffusion 量化学习笔记
  • 【北京迅为】iTOP-4412全能版使用手册-第七十三章 Qt信号和槽
  • 基于R计算皮尔逊相关系数
  • 电脑有两张网卡,如何实现同时访问外网和内网?
  • Android-目前最稳定和高效的UI适配方案