YOLO Vision 2026:

旋转边界框Object Detection#

旋转目标检测比标准目标检测更进一步,它引入了一个额外的角度,以便更精确地定位图像中的物体。

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

提示

YOLO26 OBB 模型使用 -obb 后缀(即 yolo26n-obb.pt),并在 DOTAv1 上进行预训练。



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

可视化示例#

使用 OBB 进行船舶检测使用 OBB 进行车辆检测
Ships Detection using OBBVehicle Detection using 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 evaluation
  • 速度是通过使用 Amazon EC2 P4d 实例对 DOTAv1 验证集图像取平均计算得出的。
    通过 yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu 复现
  • **参数量(Params)**和 FLOPs 值适用于 model.fuse() 之后的融合模型,该模型合并了 Conv 和 BatchNorm 层,并且对于端到端模型,移除了辅助的一对多检测头。预训练检查点保留了完整的训练架构,可能会显示更高的数值。

训练#

在 DOTA8 数据集上以 640 图像大小训练 YOLO26n-obb 100 个epochs。有关可用参数的完整列表,请参阅Configuration页面。

注意

OBB 及其 180° 旋转是相同的,因此旋转定义为模 180°,且该边界框没有方向。训练标签被规范化为长边形式:边界框宽度 w 为较长的一侧,角度从正 x 轴顺时针测量到 w 边的方向,并以弧度存储在 [-π/4, 3π/4) ([-45°, 135°)) 中。预测不会被规范化,因此预测的边界框可能会将短边报告为 w;请参见Results Output[0°, 90°) 形式是规范化的 DOTA 风格惯例,在训练或推理时不会应用。

示例
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 数据集格式可以在Dataset Guide中找到详细说明。YOLO OBB 格式通过其四个角点指定边界框,其坐标在 0 和 1 之间归一化,遵循此结构。Ultralytics Platform annotation支持使用专用的旋转边界框绘制工具的 OBB 标签:

class_index x1 y1 x2 y2 x3 y3 x4 y4

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

验证#

在 DOTA8 数据集上验证已训练的 YOLO26n-obb 模型accuracy。由于 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

查看完整的 predict 模式详情,请访问 Predict 页面。

结果输出#

旋转边界框检测每张图像返回一个 Results 对象。主要的预测字段是 result.obb,其中包含每个检测到的对象的旋转边界框、类别 ID 和置信度分数。

属性类型形状描述
result.obbOBB(N)旋转边界框。
result.obb.datatorch.float32(N,7/8)包含置信度/类别的原始旋转框。
result.obb.xywhrtorch.float32(N,5)xywhr 旋转框。
result.obb.xyxyxyxytorch.float32(N,4,2)四个角点。
result.obb.conftorch.float32(N,)置信度得分。

标签被规范化为长边约定,但预测则没有,因此 result.obb.xywhr 可能会报告 w 小于 h,且旋转角度是从短边测量的。这两种形式描述的是同一个矩形,因此无论哪种方式 result.obb.xyxyxyxy 都是正确的。当下游代码需要长边形式时,请将角点转换回来,并记住重写边界框参数可能会循环移动角点顺序:

from ultralytics.utils.ops import xyxyxyxy2xywhr

xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy)  # w >= h, rotation in [-pi/4, 3pi/4)

有关所有任务特定于任务的 Results 字段,请参阅按任务划分的预测结果部分。

导出#

将 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, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-obb.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-obb_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-obb.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-obb.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-obb_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-obb.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-obb_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-obb_paddle_model/imgsz, batch, device
MNNmnnyolo26n-obb.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-obb_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-obb_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-obb_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-obb_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-obb_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-obb_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-obb_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-obb.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-obb_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-obb_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms

查看完整的 export 详情,请访问 Export 页面。

实际应用场景#

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

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

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

常见问题解答#

  • 旋转边界框 (OBB) 包含一个额外的角度,以提高图像中对象定位的准确性。与通常是对齐坐标轴的矩形的常规边界框不同,OBB 可以旋转以更好地适应对象的方向。这对于需要精确对象放置的应用(例如航空或卫星图像)特别有用(Dataset Guide)。

  • 要使用自定义数据集训练 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)

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

  • YOLO26-OBB 模型在诸如 DOTAv1 之类的数据集上进行预训练,但你可以使用任何为 OBB 格式化的数据集。关于 OBB 数据集格式的详细信息可以在Dataset Guide中找到。

  • 使用 Python 或 CLI 将 YOLO26-OBB 模型导出为 ONNX 格式非常简单:

    示例
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-obb.pt")
    
    # Export the model
    model.export(format="onnx")

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

  • 要验证 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")

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

评论