Link to this section旋转边框 目标检测#
旋转目标检测比标准目标检测更进一步,它引入了一个额外的角度,以便更精确地定位图像中的物体。
旋转目标检测器的输出是一组旋转的边框,它们能够精确地包围图像中的物体,并附带每个边框的类别标签和置信度分数。当物体以各种角度出现时(例如在航空影像中),旋转边框特别有用,因为传统的轴对齐边框可能会包含不必要的背景信息。
YOLO26 OBB 模型使用 -obb 后缀,例如 yolo26n-obb.pt,并已在 DOTAv1 上进行预训练。
Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢
Link to this section可视化示例#
| 使用 OBB 进行船舶检测 | 使用 OBB 进行车辆检测 |
|---|---|
![]() | ![]() |
Link to this section模型#
此处展示了 YOLO26 预训练 OBB 模型,这些模型均在 DOTAv1 数据集上进行了预训练。
模型在首次使用时会自动从最新的 Ultralytics 发布版本下载。
| 模型 | 尺寸 (像素) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | 速度 CPU ONNX (ms) | 速度 T4 TensorRT10 (ms) | 参数量 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-obb | 1024 | 52.4 | 78.9 | 97.7 ± 0.9 | 2.8 ± 0.0 | 2.5 | 14.0 |
| YOLO26s-obb | 1024 | 54.8 | 80.9 | 218.0 ± 1.4 | 4.9 ± 0.1 | 9.8 | 55.1 |
| YOLO26m-obb | 1024 | 55.3 | 81.0 | 579.2 ± 3.8 | 10.2 ± 0.3 | 21.2 | 183.3 |
| YOLO26l-obb | 1024 | 56.2 | 81.6 | 735.6 ± 3.1 | 13.0 ± 0.2 | 25.6 | 230.0 |
| YOLO26x-obb | 1024 | 56.7 | 81.7 | 1485.7 ± 11.5 | 30.5 ± 0.9 | 57.6 | 516.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 层,并且对于端到端模型,移除了辅助的一对多检测头。预训练检查点保留了完整的训练架构,因此可能会显示更高的数值。
Link to this section训练#
在 DOTA8 数据集上以 640 的图像尺寸训练 YOLO26n-obb 模型 100 个 epoch。有关可用参数的完整列表,请参阅 Configuration 页面。
由于一个 OBB 及其 180° 旋转是相同的,因此旋转定义为模 180°,且该框没有方向性。在内部,角度以弧度存储并归一化为 [-π/4, 3π/4) ([-45°, 135°)),边框宽度 w 被视为较长的一边,角度定义为从正 x 轴到 w 方向的顺时针角度。[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
Link to this section数据集格式#
OBB 数据集格式的详细信息可以在 Dataset Guide 中找到。YOLO OBB 格式通过其四个角点的坐标来指定边框,这些坐标按照此结构在 0 到 1 之间进行归一化。 Ultralytics Platform 支持使用专用的旋转边框绘图工具进行 OBB 标注:
class_index x1 y1 x2 y2 x3 y3 x4 y4
在内部,YOLO 以 xywhr 格式处理损失和输出,该格式表示 边界框 的中心点 (xy)、宽度、高度和旋转角度。
Link to this section验证#
在 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 FNLink to this section预测#
使用训练好的 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 boxWatch: How to Detect and Track Storage Tanks using Ultralytics YOLO-OBB | Oriented Bounding Boxes | DOTA
See full predict mode details in the Predict page.
Link to this section结果输出#
旋转边框检测为每张图像返回一个 Results 对象。主要的预测字段是 result.obb,其中包含每个检测到物体的旋转边框、类别 ID 和置信度分数。
| 属性 | 类型 | 形状 | 描述 |
|---|---|---|---|
result.obb | OBB | (N) | 旋转边界框。 |
result.obb.data | torch.float32 | (N,7/8) | 包含置信度/类别的原始旋转框。 |
result.obb.xywhr | torch.float32 | (N,5) | xywhr 旋转框。 |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | 四个角点。 |
result.obb.conf | torch.float32 | (N,) | 置信度得分。 |
关于各项任务中特定于任务的 Results 字段,请参阅按任务划分的预测结果 (Predict Results by Task) 部分。
Link to this section导出#
将 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 | ✅ | - |
| TorchScript | torchscript | yolo26n-obb.torchscript | ✅ | imgsz, quantize, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n-obb.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-obb_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-obb.engine | ✅ | imgsz, quantize, dynamic, simplify, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-obb.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-obb_saved_model/ | ✅ | imgsz, keras, quantize, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-obb.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n-obb.tflite | ✅ | imgsz, quantize, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n-obb_edgetpu.tflite | ✅ | imgsz, quantize, data, fraction, device |
| TF.js | tfjs | yolo26n-obb_web_model/ | ✅ | imgsz, quantize, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-obb_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-obb.mnn | ✅ | imgsz, batch, quantize, device |
| NCNN | ncnn | yolo26n-obb_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-obb_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-obb_rknn_model/ | ✅ | imgsz, batch, name, quantize, data, fraction, device |
| ExecuTorch | executorch | yolo26n-obb_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-obb_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-obb_deepx_model/ | ✅ | imgsz, quantize, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-obb_qnn.onnx | ✅ | imgsz, batch, name, quantize, data, fraction, device |
查看关于 export 的完整详细信息,请访问 Export 页面。
Link to this section实际应用场景#
YOLO26 的 OBB 检测在各行各业有着广泛的实际应用:
- 海事与港口管理:检测处于不同角度的船只和舰艇,用于 车队管理 和监控。
- 城市规划:从航空影像中分析建筑物和基础设施。
- 农业:通过无人机影像监控农作物和农业设备。
- 能源部门:检查不同朝向的太阳能电池板和风力涡轮机。
- 交通运输:从各种视角跟踪道路和停车场上的车辆。
这些应用受益于 OBB 能够精确贴合任何角度物体的能力,从而提供比传统边框更准确的检测结果。
Link to this section常见问题解答#
Link to this section什么是旋转边框 (OBB) 以及它们与普通边框有何不同?#
旋转边框 (OBB) 包含一个额外的角度,以提高图像中物体定位的准确性。与作为轴对齐矩形的普通边框不同,OBB 可以旋转以更好地适应物体的方向。这对于需要精确物体放置的应用(例如航空或卫星影像)特别有用 (Dataset Guide)。
Link to this section如何使用自定义数据集训练 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)更多训练参数,请查看 Configuration 部分。
Link to this section我可以将哪些数据集用于训练 YOLO26-OBB 模型?#
YOLO26-OBB 模型是在 DOTAv1 等数据集上预训练的,但你可以使用任何格式化为 OBB 的数据集。有关 OBB 数据集格式的详细信息,请参阅 Dataset Guide。
Link to this section如何将 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")有关更多导出格式和详细信息,请参阅 Export 页面。
Link to this section如何验证 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")在 Val 部分查看完整的验证详细信息。

