定向物体检测

定向物体检测#

面向对象的目标检测在普通目标检测的基础上更进一步,通过引入额外的角度来更精确地定位图像中的对象。YOLOv11 能够以高准确度和速度检测图像或视频帧中的旋转对象。

定向物体检测(Oriented Object Detection,简称 OBD):检测带有附加方向角的旋转物体,以提高准确性。

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

备注

定向边界框(OBB)引入了附加的角度参数,以提高图像中物体定位的精度。与常规的轴对齐矩形边界框不同,OBB 能够旋转以更好地适应物体的方向。

小技巧

YOLOv11 OBB模型使用-obb后缀,例如yolo11n-obb.pt,这些模型已在 DOTAv1 数据集上进行了预训练。

可视化的示例#

使用 OBB 进行船只检测

使用 OBB 进行车辆检测

使用 OBB 进行船只检测

使用 OBB 进行车辆检测

模型#

这里展示了预训练的YOLOv11 OBB模型,这些模型是在DOTAv1数据集上进行预训练的。

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

模型名称

尺寸 (像素)

mAPtest

CPU ONNX速度 (毫秒)

T4 TensorRT10速度 (毫秒)

参数量 (百万)

计算量 (十亿次)

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命令重现。

训练#

在DOTA8数据集上训练YOLOv11n-obb模型,进行100个epoch的训练,图像尺寸设定为640像素。

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)

验证#

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

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

预测#

使用经过训练的YOLOv11n-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