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

yaml 复制代码
train: /path/to/train/images
val: /path/to/val/images

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

YOLO OBB 模型训练脚本

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

训练脚本说明

python 复制代码
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模型在自定义数据集上进行训练,从而实现高效、精确的定向目标检测。

相关推荐
小李学AI5 分钟前
基于YOLOv8的卫星图像中船只检测系统
人工智能·深度学习·神经网络·yolo·目标检测·机器学习·计算机视觉
刘争Stanley2 小时前
量子计算:从薛定谔的猫到你的生活
人工智能·yolo·搜索引擎·生活·scikit-learn·量子计算·dall·e 2
NiNg_1_2341 天前
YOLOv5训练长方形图像详解
人工智能·yolo·目标跟踪
烟波人长安吖~1 天前
【安全帽头盔检测】基于YOLOV11+pytorch+Flask+SpringBoot+Vue+MySQL的安全帽头盔检测识别系统
pytorch·spring boot·深度学习·yolo·vue·计算机毕业设计·头盔安全帽检测
青椒大仙KI111 天前
25/1/11 算法笔记 Yolov8物体识别
笔记·yolo
F80002 天前
基于YOLOv8的高空无人机小目标检测系统(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型
yolo·目标检测·无人机
云空3 天前
《使用 YOLOV8 和 KerasCV 进行高效目标检测》
人工智能·深度学习·神经网络·yolo·目标检测·计算机视觉
程序员阿龙3 天前
基于YOLOv8与CGNet的鸟类智能识别系统 深度学习图像分类 鸟类目标检测与分类 图像特征提取 模型优化与应用 数据可视化(源码+指导+定制)
yolo·yolov8改进·鸟类智能识别系统·深度学习图像分类·目标检测与分类·机器学习模型优化·鸟类目标检测
程序改变世界&3 天前
小白项目部署:anaconda环境+pycharm+yolov5(虚拟机环境)
ide·yolo·pycharm