yolov8旋转目标检测从原理到模型训练、部署、验证、推理(附代码)

定向边界框目标检测

在这里插入图片描述

导言

定向目标检测是在传统目标检测的基础上更进一步的技术,它引入了一个额外的角度参数,以更精确地定位图像中的物体。传统的目标检测算法通常使用轴对齐的矩形包围框来框定物体,而定向目标检测则使用旋转的边界框,这些边界框能够更好地适应物体的实际方向和形状,从而提供更准确的定位信息。

输出

定向目标检测器的输出是一系列旋转的边界框,它们精确地包围着图像中的物体,并为每个边界框提供类别标签和置信度得分。当您需要识别场景中的物体,而且还需要了解物体的确切位置和方向时,定向目标检测就显得尤为重要。

Ultralytics YOLOv8-OBB

YOLOv8-OBB 是 Ultralytics 开发的面向定向目标检测的模型。它通过在 DOTAv1 数据集上进行预训练,能够处理具有特定方向的物体。这些模型的文件名后缀带有 -obb,例如 yolov8n-obb.pt

示例
  • 船舶检测使用 OBB:在航空或卫星图像中,船舶往往呈现出非正交的方向,使用定向边界框可以更准确地检测和定位这些船只。
  • 车辆检测使用 OBB:在复杂的城市环境中,车辆可能会出现各种倾斜角度,定向边界框能够更好地捕捉这些角度变化。
模型

YOLOv8 预训练的 OBB 模型是在 DOTAv1 数据集上进行训练的,它们自动从 Ultralytics 最新的发布版本中下载。

模型大小 (像素)mAPtest 50速度 CPU ONNX (ms)速度 A100 TensorRT (ms)参数 (M)FLOPs (B)
YOLOv8n-obb102478.0204.773.573.123.3
YOLOv8s-obb102479.5424.884.0711.476.3
YOLOv8m-obb102480.5763.487.6126.4208.6
YOLOv8l-obb102480.71278.4211.8344.5433.8
YOLOv8x-obb102481.361759.1013.2369.5676.7

mAPtest 值是基于 DOTAv1 测试数据集的单模型多尺度评估得出的。为了重现结果,可以使用 yolo val obb data=DOTAv1.yaml device=0 split=test 命令,并将合并的结果提交给 DOTA 评估系统。速度指标是在 Amazon EC2 P4d 实例上对 DOTAv1 验证图像的平均值。

训练

在 640 像素大小的图像上,使用 dota8.yaml 数据集训练 YOLOv8n-obb 模型 100 个周期。更多可用的训练参数请参见配置页面。

from ultralytics import YOLO

# 加载模型
model = YOLO("yolov8n-obb.yaml")  # 从 YAML 构建新模型
model = YOLO("yolov8n-obb.pt")  # 加载预训练模型(推荐用于训练)
model = YOLO("yolov8n-obb.yaml").load("yolov8n.pt")  # 从 YAML 构建并转移权重

# 训练模型
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)
数据集格式

OBB 数据集的详细格式可以在数据集指南中找到。

验证

验证训练好的 YOLOv8n-obb 模型在 DOTA8 数据集上的准确性。无需传递任何参数,因为模型会保留其训练数据和设置作为模型属性。

from ultralytics import YOLO

# 加载模型
model = YOLO("yolov8n-obb.pt")  # 加载官方模型
model = YOLO("path/to/best.pt")  # 加载自定义模型

# 验证模型
metrics = model.val(data="dota8.yaml")  # 不需要参数,数据集和设置被记住
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # 包含每个类别的 map50-95(B) 的列表
预测

使用训练好的 YOLOv8n-obb 模型对图像进行预测。

from ultralytics import YOLO

# 加载模型
model = YOLO("yolov8n-obb.pt")  # 加载官方模型
model = YOLO("path/to/best.pt")  # 加载自定义模型

# 使用模型进行预测
results = model("https://ultralytics.com/images/bus.jpg")  # 对图像进行预测

更多预测模式的详细信息可以在预测页面中查看。

导出

将 YOLOv8n-obb 模型导出到其他格式,如 ONNX、CoreML 等。

from ultralytics import YOLO

# 加载模型
model = YOLO("yolov8n-obb.pt")  # 加载官方模型
model = YOLO("path/to/best.pt")  # 加载自定义训练模型

# 导出模型
model.export(format="onnx")

YOLOv8-OBB 可用的导出格式如下表所示。您可以使用 format 参数导出到任何格式,例如 format='onnx'format='engine'。您可以在导出后的模型上直接进行预测或验证,例如 yolo predict model=yolov8n-obb.onnx。在导出完成之后,会显示您模型的使用示例。

格式format 参数模型元数据参数
PyTorch-yolov8n-obb.pt-
TorchScripttorchscriptyolov8n-obb.torchscriptimgsz, optimize, batch
ONNXonnxyolov8n-obb.onnximgsz, half, dynamic, simplify, opset, batch
OpenVINOopenvinoyolov8n-obb_openvino_model/imgsz, half, int8, batch
TensorRTengineyolov8n-obb.engineimgsz, half, dynamic, simplify, workspace, int8, batch
CoreMLcoremlyolov8n-obb.mlpackageimgsz, half, int8, nms, batch
TF SavedModelsaved_modelyolov8n-obb_saved_model/imgsz, keras, int8, batch
TF GraphDefpbyolov8n-obb.pbimgsz, batch
TF Litetfliteyolov8n-obb.tfliteimgsz, half, int8, batch
TF Edge TPUedgetpuyolov8n-obb_edgetpu.tfliteimgsz
TF.jstfjsyolov8n-obb_web_model/imgsz, half, int8, batch
PaddlePaddlepaddleyolov8n-obb_paddle_model/imgsz, batch
NCNNncnnyolov8n-obb_ncnn_model/imgsz, half, batch

更多导出详情请参阅导出页面。
在这里插入图片描述

常见问题解答
  • 什么是定向边界框 (OBB),它们与常规边界框有何不同?

    定向边界框 (OBB) 包括一个额外的角度参数,以提高图像中物体定位的准确性。与常规的轴对齐矩形包围框不同,OBB 可以旋转以更好地匹配物体的方向。这对于需要精确物体定位的应用尤其有用,例如航空或卫星影像中的物体检测。

  • 如何使用自定义数据集训练 YOLOv8n-obb 模型?

    要使用自定义数据集训练 YOLOv8n-obb 模型,您可以使用以下示例:

    from ultralytics import YOLO
    
    # 加载预训练模型
    model = YOLO("yolov8n-obb.pt")
    
    # 训练模型
    results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)
    

    更多训练参数,请查阅配置章节。

  • 我可以使用哪些数据集来训练 YOLOv8-OBB 模型?

    YOLOv8-OBB 模型是在 DOTAv1 数据集上进行预训练的,但您也可以使用任何适合 OBB 的数据集。关于 OBB 数据集格式的详细信息可以在数据集指南中找到。

  • 如何将 YOLOv8-OBB 模型导出为 ONNX 格式?

    将 YOLOv8-OBB 模型导出为 ONNX 格式非常简单,无论是使用 Python 还是 CLI 命令:

    from ultralytics import YOLO
    
    # 加载模型
    model = YOLO("yolov8n-obb.pt")
    
    # 导出模型
    model.export(format="onnx")
    

    更多导出格式和详情,请参阅导出页面。

  • 如何验证 YOLOv8n-obb 模型的准确性?

    要验证 YOLOv8n-obb 模型,您可以使用 Python 或 CLI 命令:

    from ultralytics import YOLO
    
    # 加载模型
    model = YOLO("yolov8n-obb.pt")
    
    # 验证模型
    metrics = model.val(data="dota8.yaml")
    

    更多验证详情,请参阅验证章节。

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿利同学

一角两角不嫌少

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值