带旋转角度的边界框 目标检测

相比标准目标检测,带旋转角度的目标检测更进一步,它引入了一个额外的角度,从而能更精准地定位图像中的对象。

旋转目标检测器的输出是一组旋转的边界框,它们能精确地框选出图像中的对象,并提供每个框的类别标签和置信度分数。当对象以各种角度出现时(例如在航空影像中),旋转边界框特别有用,因为传统的轴对齐边界框可能会包含不必要的背景。

提示

YOLO26 OBB 模型使用 -obb 后缀,例如 yolo26n-obb.pt,并已在 DOTAv1 上完成预训练。



Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢

视觉示例

使用 OBB 进行船舶检测使用 OBB 进行车辆检测
使用 OBB 进行船舶检测使用 OBB 进行车辆检测

模型

此处展示了 YOLO26 预训练的 OBB 模型,它们是在 DOTAv1 数据集上预训练的。

模型在首次使用时会自动从最新的 Ultralytics 发布版本下载。

模型尺寸
(像素)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
速度
CPU ONNX
(ms)
速度
T4 TensorRT10
(ms)
参数
(M)
FLOPs
(B)
YOLO26n-obb102452.478.997.7 ± 0.92.8 ± 0.02.514.0
YOLO26s-obb102454.880.9218.0 ± 1.44.9 ± 0.19.855.1
YOLO26m-obb102455.381.0579.2 ± 3.810.2 ± 0.321.2183.3
YOLO26l-obb102456.281.6735.6 ± 3.113.0 ± 0.225.6230.0
YOLO26x-obb102456.781.71485.7 ± 11.530.5 ± 0.957.6516.5
  • mAPtest 数值基于 DOTAv1 数据集上的单模型多尺度测试结果。
    通过 yolo val obb data=DOTAv1.yaml device=0 split=test 进行复现,并将合并后的结果提交至 DOTA 评估
  • 速度 是基于 Amazon EC2 P4d 实例在 DOTAv1 验证集图像上平均得出的。
    通过 yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu 进行复现。
  • 参数量 (Params)FLOPs 数值是针对执行 model.fuse() 后的融合模型而言的,该操作合并了 Conv 和 BatchNorm 层,并移除了端到端模型的辅助一对多检测头。预训练检查点保留了完整的训练架构,因此可能显示更高的数值。

训练

在 DOTA8 数据集上训练 YOLO26n-obb,图像尺寸设为 640,进行 100 个 epoch。有关可用参数的完整列表,请参阅 配置 页面。

注意

OBB 角度限制在 0-90 度 范围内(不包含 90 度)。不支持 90 度或以上的角度。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.yaml")  # build a new model from YAML
model = YOLO("yolo26n-obb.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)


Watch: How to Train Ultralytics YOLO-OBB (Oriented Bounding Boxes) Models on DOTA Dataset using Ultralytics Platform

数据集格式

有关 OBB 数据集格式的详细信息,请参阅 数据集指南。YOLO OBB 格式通过坐标归一化到 0 和 1 之间的四个角点坐标来指定边界框,并遵循此结构。Ultralytics Platform 支持使用专用的旋转边界框绘制工具进行 OBB 标注:

class_index x1 y1 x2 y2 x3 y3 x4 y4

在内部,YOLO 以 xywhr 格式处理损失和输出,该格式表示 边界框 的中心点 (xy)、宽度、高度和旋转角度。

验证

在 DOTA8 数据集上验证训练好的 YOLO26n-obb 模型的 准确率。不需要额外的参数,因为 model 会保留其训练时的 data 和其他参数作为模型属性。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="dota8.yaml")  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # a list containing mAP50-95(B) for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

预测

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

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/boats.jpg")  # predict on an image

# Access the results
for result in results:
    xywhr = result.obb.xywhr  # center-x, center-y, width, height, angle (radians)
    xyxyxyxy = result.obb.xyxyxyxy  # polygon format with 4-points
    names = [result.names[cls.item()] for cls in result.obb.cls.int()]  # class name of each box
    confs = result.obb.conf  # confidence score of each box


Watch: How to Detect and Track Storage Tanks using Ultralytics YOLO-OBB | Oriented Bounding Boxes | DOTA

See full predict mode details in the Predict page.

导出

将 YOLO26n-obb 模型导出为 ONNX、CoreML 等其他格式。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

下表列出了可用的 YOLO26-obb 导出格式。你可以使用 format 参数导出为任何格式,例如 format='onnx'format='engine'。你可以在导出后的模型上直接进行预测或验证,例如 yolo predict model=yolo26n-obb.onnx。模型导出完成后,系统会为你展示用法示例。

格式format 参数模型元数据参数
PyTorch-yolo26n-obb.pt-
TorchScripttorchscriptyolo26n-obb.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-obb.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-obb_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-obb.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-obb.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-obb_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-obb.pbimgsz, batch, device
TF Litetfliteyolo26n-obb.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-obb_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-obb_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-obb_paddle_model/imgsz, batch, device
MNNmnnyolo26n-obb.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-obb_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-obb_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-obb_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-obb_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-obb_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-obb_deepx_model/imgsz, int8, data, optimize, device

See full export details in the Export page.

现实世界应用

YOLO26 的 OBB 检测在各行各业有着广泛的实际应用:

  • 海事与港口管理:检测处于不同角度的船舶和船只,用于 车队管理 和监控。
  • 城市规划:从航空影像中分析建筑物和基础设施。
  • 农业:通过无人机影像监测农作物和农业设备。
  • 能源行业:检查不同朝向的太阳能电池板和风力涡轮机。
  • 交通运输:从各种视角跟踪道路和停车场上的车辆。

这些应用受益于 OBB 能够精准贴合任意角度物体的能力,提供了比传统边界框更准确的检测效果。

常见问题 (FAQ)

什么是旋转边界框 (OBB)?它们与普通边界框有何不同?

旋转边界框 (OBB) 包含一个额外的角度,以提高图像中物体定位的准确性。与普通边界框(轴对齐矩形)不同,OBB 可以旋转以更好地适配对象的方向。这对于需要精确放置物体的应用(例如航空或卫星影像)特别有用(数据集指南)。

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

要使用自定义数据集训练 YOLO26n-obb 模型,请参考下方使用 Python 或 CLI 的示例:

示例
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n-obb.pt")

# Train the model
results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)

有关更多训练参数,请查看 配置 部分。

我可以为 YOLO26-OBB 模型训练使用哪些数据集?

YOLO26-OBB 模型是在 DOTAv1 等数据集上进行预训练的,但你可以使用任何格式正确的 OBB 数据集。有关 OBB 数据集格式的详细信息,请参阅 数据集指南

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

使用 Python 或 CLI 可以轻松地将 YOLO26-OBB 模型导出为 ONNX 格式:

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")

# Export the model
model.export(format="onnx")

有关更多导出格式和详细信息,请参阅 导出 页面。

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

要验证 YOLO26n-obb 模型,你可以使用如下所示的 Python 或 CLI 命令:

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")

# Validate the model
metrics = model.val(data="dota8.yaml")

验证 部分查看完整的验证详情。

评论