跳转至内容

定向边界框 目标检测

定向对象检测通过引入一个额外的角度来更准确地定位图像中的对象,从而比标准对象检测更进一步。

定向目标检测器的输出是一组旋转的边界框,这些边界框精确地包围了图像中的目标,以及每个框的类别标签和置信度分数。当目标以各种角度出现时,定向边界框特别有用,例如在航空图像中,传统的轴对齐边界框可能包含不必要的背景。

提示

YOLO11 OBB 模型使用 -obb 后缀,例如 yolo11n-obb.pt 并且在以下数据集上进行了预训练 DOTAv1.



观看: 使用 Ultralytics YOLO 定向边界框 (YOLO-OBB) 进行对象检测

可视化示例

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

模型

此处显示了 YOLO11 预训练的 OBB 模型,这些模型在 DOTAv1 数据集上进行了预训练。

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

模型 尺寸
(像素)
mAP测试
50
速度
CPU ONNX
(毫秒)
速度
T4 TensorRT10
(毫秒)
参数
(M)
FLOPs
(B)
YOLO11n-旋转框检测 1024 78.4 117.6 ± 0.8 4.4 ± 0.0 2.7 17.2
YOLO11s-旋转框检测 1024 79.5 219.4 ± 4.0 5.1 ± 0.0 9.7 57.5
YOLO11m-旋转框检测 1024 80.9 562.8 ± 2.9 10.1 ± 0.4 20.9 183.5
YOLO11l-旋转框检测 1024 81.0 712.5 ± 5.0 13.5 ± 0.6 26.2 232.0
YOLO11x-旋转框检测 1024 81.3 1408.6 ± 7.7 28.6 ± 1.0 58.8 520.2
  • mAPtest 数值为在 DOTAv1 数据集上单模型多尺度测试的结果。
    如需重现结果,请通过 yolo val obb data=DOTAv1.yaml device=0 split=test 提交合并后的结果至 DOTA评估.
  • 速度 是在 DOTAv1 验证集图像上,使用 Amazon EC2 P4d 实例进行平均计算得出的。
    如需重现结果,请通过 yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu

训练

在图像大小为 640 的情况下,在 DOTA8 数据集上训练 YOLO11n-obb 100 个 epochs。有关可用参数的完整列表,请参见配置页面。

注意

旋转框检测角度限制在0-90 度范围内(不包括 90)。不支持 90 度或更大的角度。

示例

from ultralytics import YOLO

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

# Train the model
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo obb train data=dota8.yaml model=yolo11n-obb.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo obb train data=dota8.yaml model=yolo11n-obb.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo obb train data=dota8.yaml model=yolo11n-obb.yaml pretrained=yolo11n-obb.pt epochs=100 imgsz=640



观看: 如何在 Ultralytics HUB 上训练 Ultralytics YOLO-OBB(定向边界框)模型

数据集格式

有关 OBB 数据集格式的详细信息,请参见 数据集指南。YOLO OBB 格式通过四个角点及其坐标(在 0 和 1 之间归一化)来指定边界框,遵循以下结构:

class_index x1 y1 x2 y2 x3 y3 x4 y4

在内部,YOLO 处理损失和输出时采用 xywhr 格式,它代表 边界框的坐标的中心点 (xy)、宽度、高度和旋转。

验证

验证训练后的 YOLO11n-obb 模型 准确性 在 DOTA8 数据集上。由于模型 model 保留其训练 data 和参数作为模型属性,因此无需任何参数。

示例

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-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 contains map50-95(B) of each category
yolo obb val model=yolo11n-obb.pt data=dota8.yaml         # val official model
yolo obb val model=path/to/best.pt data=path/to/data.yaml # val custom model

预测

使用训练后的 YOLO11n-obb 模型来运行图像预测。

示例

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-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
yolo obb predict model=yolo11n-obb.pt source='https://ultralytics.com/images/boats.jpg'  # predict with official model
yolo obb predict model=path/to/best.pt source='https://ultralytics.com/images/boats.jpg' # predict with custom model



观看: 如何使用 Ultralytics YOLO-OBB | 定向边界框 | DOTA 检测和跟踪储罐

查看完整 predict 模式的详细信息,请参阅 预测 页面。

导出

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

示例

from ultralytics import YOLO

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

# Export the model
model.export(format="onnx")
yolo export model=yolo11n-obb.pt format=onnx  # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model

下表列出了可用的YOLO11-obb导出格式。您可以使用以下命令导出为任何格式: format 参数导出为任何格式,例如 format='onnx'format='engine'。您可以直接在导出的模型上进行预测或验证,例如 yolo predict model=yolo11n-obb.onnx。导出完成后,将显示您的模型的使用示例。

格式 format 参数 模型 元数据 参数
PyTorch - yolo11n-obb.pt -
TorchScript torchscript yolo11n-obb.torchscript imgsz, half, dynamic, optimize, nms, batch, device
ONNX onnx yolo11n-obb.onnx imgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINO openvino yolo11n-obb_openvino_model/ imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRT engine yolo11n-obb.engine imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreML coreml yolo11n-obb.mlpackage imgsz, half, int8, nms, batch, device
TF SavedModel saved_model yolo11n-obb_saved_model/ imgsz, keras, int8, nms, batch, device
TF GraphDef pb yolo11n-obb.pb imgsz, batch, device
TF Lite tflite yolo11n-obb.tflite imgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPU edgetpu yolo11n-obb_edgetpu.tflite imgsz, device
TF.js tfjs yolo11n-obb_web_model/ imgsz, half, int8, nms, batch, device
PaddlePaddle paddle yolo11n-obb_paddle_model/ imgsz, batch, device
MNN mnn yolo11n-obb.mnn imgsz, batch, int8, half, device
NCNN ncnn yolo11n-obb_ncnn_model/ imgsz, half, batch, device
IMX500 imx yolo11n-obb_imx_model/ imgsz, int8, data, fraction, device
RKNN rknn yolo11n-obb_rknn_model/ imgsz, batch, name, device

查看完整 export 详情请参见 导出 页面。

真实世界的应用

使用YOLO11进行旋转框检测在各个行业中都有许多实际应用:

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

这些应用受益于旋转框检测能够精确拟合任何角度的物体,从而提供比传统边界框更准确的检测。

常见问题

什么是定向边界框 (OBB),它们与常规边界框有何不同?

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

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

要使用自定义数据集训练YOLO11n-obb模型,请按照以下使用python或CLI的示例操作:

示例

from ultralytics import YOLO

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

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

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

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

YOLO11-OBB模型在DOTAv1等数据集上进行了预训练,但您可以使用任何为OBB格式化的数据集。有关OBB数据集格式的详细信息,请参见数据集指南

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

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

示例

from ultralytics import YOLO

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

# Export the model
model.export(format="onnx")
yolo export model=yolo11n-obb.pt format=onnx

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

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

要验证YOLO11n-obb模型,您可以使用python或CLI命令,如下所示:

示例

from ultralytics import YOLO

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

# Validate the model
metrics = model.val(data="dota8.yaml")
yolo obb val model=yolo11n-obb.pt data=dota8.yaml

有关完整的验证详细信息,请参阅Val部分。



📅 1 年前创建 ✏️ 5 天前更新

评论