Skip to content

定向边界框 目标检测

定向目标检测比目标检测更进一步,引入额外的角度以在图像中更准确地定位物体。

定向目标检测器的输出是一组旋转的边界框,这些边界框精确地包围图像中的物体,并附带每个框的类别标签和置信度分数。当你需要识别场景中的感兴趣物体,但不需要确切知道物体的位置或其精确形状时,目标检测是一个不错的选择。

Tip

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-obb 1024 78.4 117.6 ± 0.8 4.4 ± 0.0 2.7 17.2
YOLO11s-obb 1024 79.5 219.4 ± 4.0 5.1 ± 0.0 9.7 57.5
YOLO11m-obb 1024 80.9 562.8 ± 2.9 10.1 ± 0.4 20.9 183.5
YOLO11l-obb 1024 81.0 712.5 ± 5.0 13.5 ± 0.6 26.2 232.0
YOLO11x-obb 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评估
  • 速度Amazon EC2 P4d实例上对DOTAv1验证图像进行平均。
    通过yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu重现。

训练

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

Example

from ultralytics import YOLO

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

# 训练模型
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)
# 从YAML构建新模型并从头开始训练
yolo obb train data=dota8.yaml model=yolo11n-obb.yaml epochs=100 imgsz=640

# 从预训练的*.pt模型开始训练
yolo obb train data=dota8.yaml model=yolo11n-obb.pt epochs=100 imgsz=640

# 从YAML构建新模型,转移预训练权重并开始训练
yolo obb train data=dota8.yaml model=yolo11n-obb.yaml pretrained=yolo11n-obb.pt epochs=100 imgsz=640



观看:如何使用Ultralytics HUB在DOTA数据集上训练Ultralytics YOLO-OBB(定向边界框)模型

数据集格式

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

验证

在DOTA8数据集上验证训练好的YOLO11n-obb模型的准确性。不需要参数,因为model保留了训练时的data和参数作为模型属性。

示例

from ultralytics import YOLO

# 加载模型
model = YOLO("yolo11n-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)的列表
yolo obb val model=yolo11n-obb.pt data=dota8.yaml  # 验证官方模型
yolo obb val model=path/to/best.pt data=path/to/data.yaml  # 验证自定义模型

预测

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

示例

from ultralytics import YOLO

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

# 使用模型进行预测
results = model("https://ultralytics.com/images/bus.jpg")  # 对图像进行预测
yolo obb predict model=yolo11n-obb.pt source='https://ultralytics.com/images/bus.jpg'  # 使用官方模型进行预测
yolo obb predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg'  # 使用自定义模型进行预测



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

预测页面查看完整的predict模式详情。

导出

将YOLO11n-obb模型导出为不同的格式,如ONNX、CoreML等。

示例

from ultralytics import YOLO

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

# 导出模型
model.export(format="onnx")
yolo export model=yolo11n-obb.pt format=onnx  # 导出官方模型
yolo export model=path/to/best.pt format=onnx  # 导出自定义训练模型

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

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

导出页面查看完整的export详情。

常见问题

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

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

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

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

示例

from ultralytics import YOLO

# 加载预训练模型
model = YOLO("yolo11n-obb.pt")

# 训练模型
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格式非常简单:

Example

from ultralytics import YOLO

# 加载模型
model = YOLO("yolo11n-obb.pt")

# 导出模型
model.export(format="onnx")
yolo export model=yolo11n-obb.pt format=onnx

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

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

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

Example

from ultralytics import YOLO

# 加载模型
model = YOLO("yolo11n-obb.pt")

# 验证模型
metrics = model.val(data="dota8.yaml")
yolo obb val model=yolo11n-obb.pt data=dota8.yaml

有关完整的验证细节,请参阅验证部分。


📅 Created 9 months ago ✏️ Updated 3 days ago

Comments