定向边界框目标检测
在这里插入图片描述
导言
定向目标检测是在传统目标检测的基础上更进一步的技术,它引入了一个额外的角度参数,以更精确地定位图像中的物体。传统的目标检测算法通常使用轴对齐的矩形包围框来框定物体,而定向目标检测则使用旋转的边界框,这些边界框能够更好地适应物体的实际方向和形状,从而提供更准确的定位信息。
输出
定向目标检测器的输出是一系列旋转的边界框,它们精确地包围着图像中的物体,并为每个边界框提供类别标签和置信度得分。当您需要识别场景中的物体,而且还需要了解物体的确切位置和方向时,定向目标检测就显得尤为重要。
Ultralytics YOLOv8-OBB
YOLOv8-OBB 是 Ultralytics 开发的面向定向目标检测的模型。它通过在 DOTAv1 数据集上进行预训练,能够处理具有特定方向的物体。这些模型的文件名后缀带有 -obb,例如 yolov8n-obb.pt。
示例
- 船舶检测使用 OBB:在航空或卫星图像中,船舶往往呈现出非正交的方向,使用定向边界框可以更准确地检测和定位这些船只。
- 车辆检测使用 OBB:在复杂的城市环境中,车辆可能会出现各种倾斜角度,定向边界框能够更好地捕捉这些角度变化。
模型
YOLOv8 预训练的 OBB 模型是在 DOTAv1 数据集上进行训练的,它们自动从 Ultralytics 最新的发布版本中下载。
模型 | 大小 (像素) | mAPtest 50 | 速度 CPU ONNX (ms) | 速度 A100 TensorRT (ms) | 参数 (M) | FLOPs (B) |
---|---|---|---|---|---|---|
YOLOv8n-obb | 1024 | 78.0 | 204.77 | 3.57 | 3.1 | 23.3 |
YOLOv8s-obb | 1024 | 79.5 | 424.88 | 4.07 | 11.4 | 76.3 |
YOLOv8m-obb | 1024 | 80.5 | 763.48 | 7.61 | 26.4 | 208.6 |
YOLOv8l-obb | 1024 | 80.7 | 1278.42 | 11.83 | 44.5 | 433.8 |
YOLOv8x-obb | 1024 | 81.36 | 1759.10 | 13.23 | 69.5 | 676.7 |
mAPtest 值是基于 DOTAv1 测试数据集的单模型多尺度评估得出的。为了重现结果,可以使用 yolo val obb data=DOTAv1.yaml device=0 split=test 命令,并将合并的结果提交给 DOTA 评估系统。速度指标是在 Amazon EC2 P4d 实例上对 DOTAv1 验证图像的平均值。
训练
在 640 像素大小的图像上,使用 dota8.yaml 数据集训练 YOLOv8n-obb 模型 100 个周期。更多可用的训练参数请参见配置页面。
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n-obb.yaml") # 从 YAML 构建新模型
model = YOLO("yolov8n-obb.pt") # 加载预训练模型(推荐用于训练)
model = YOLO("yolov8n-obb.yaml").load("yolov8n.pt") # 从 YAML 构建并转移权重
# 训练模型
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)
数据集格式
OBB 数据集的详细格式可以在数据集指南中找到。
验证
验证训练好的 YOLOv8n-obb 模型在 DOTA8 数据集上的准确性。无需传递任何参数,因为模型会保留其训练数据和设置作为模型属性。
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n-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) 的列表
预测
使用训练好的 YOLOv8n-obb 模型对图像进行预测。
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n-obb.pt") # 加载官方模型
model = YOLO("path/to/best.pt") # 加载自定义模型
# 使用模型进行预测
results = model("https://ultralytics.com/images/bus.jpg") # 对图像进行预测
更多预测模式的详细信息可以在预测页面中查看。
导出
将 YOLOv8n-obb 模型导出到其他格式,如 ONNX、CoreML 等。
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n-obb.pt") # 加载官方模型
model = YOLO("path/to/best.pt") # 加载自定义训练模型
# 导出模型
model.export(format="onnx")
YOLOv8-OBB 可用的导出格式如下表所示。您可以使用 format 参数导出到任何格式,例如 format=‘onnx’ 或 format=‘engine’。您可以在导出后的模型上直接进行预测或验证,例如 yolo predict model=yolov8n-obb.onnx。在导出完成之后,会显示您模型的使用示例。
格式 | format 参数 | 模型 | 元数据 | 参数 |
---|---|---|---|---|
PyTorch | - | yolov8n-obb.pt | ✅ | - |
TorchScript | torchscript | yolov8n-obb.torchscript | ✅ | imgsz, optimize, batch |
ONNX | onnx | yolov8n-obb.onnx | ✅ | imgsz, half, dynamic, simplify, opset, batch |
OpenVINO | openvino | yolov8n-obb_openvino_model/ | ✅ | imgsz, half, int8, batch |
TensorRT | engine | yolov8n-obb.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, batch |
CoreML | coreml | yolov8n-obb.mlpackage | ✅ | imgsz, half, int8, nms, batch |
TF SavedModel | saved_model | yolov8n-obb_saved_model/ | ✅ | imgsz, keras, int8, batch |
TF GraphDef | pb | yolov8n-obb.pb | ❌ | imgsz, batch |
TF Lite | tflite | yolov8n-obb.tflite | ✅ | imgsz, half, int8, batch |
TF Edge TPU | edgetpu | yolov8n-obb_edgetpu.tflite | ✅ | imgsz |
TF.js | tfjs | yolov8n-obb_web_model/ | ✅ | imgsz, half, int8, batch |
PaddlePaddle | paddle | yolov8n-obb_paddle_model/ | ✅ | imgsz, batch |
NCNN | ncnn | yolov8n-obb_ncnn_model/ | ✅ | imgsz, half, batch |
更多导出详情请参阅导出页面。
在这里插入图片描述
常见问题解答
- 什么是定向边界框 (OBB),它们与常规边界框有何不同?
定向边界框 (OBB) 包括一个额外的角度参数,以提高图像中物体定位的准确性。与常规的轴对齐矩形包围框不同,OBB 可以旋转以更好地匹配物体的方向。这对于需要精确物体定位的应用尤其有用,例如航空或卫星影像中的物体检测。
- 如何使用自定义数据集训练 YOLOv8n-obb 模型?
要使用自定义数据集训练 YOLOv8n-obb 模型,您可以使用以下示例:
```python from ultralytics import YOLO
# 加载预训练模型 model = YOLO(“yolov8n-obb.pt”)
# 训练模型 results = model.train(data=“path/to/custom_dataset.yaml”, epochs=100, imgsz=640) ```
更多训练参数,请查阅配置章节。
- 我可以使用哪些数据集来训练 YOLOv8-OBB 模型?
YOLOv8-OBB 模型是在 DOTAv1 数据集上进行预训练的,但您也可以使用任何适合 OBB 的数据集。关于 OBB 数据集格式的详细信息可以在数据集指南中找到。
- 如何将 YOLOv8-OBB 模型导出为 ONNX 格式?
将 YOLOv8-OBB 模型导出为 ONNX 格式非常简单,无论是使用 Python 还是 CLI 命令:
```python from ultralytics import YOLO
# 加载模型 model = YOLO(“yolov8n-obb.pt”)
# 导出模型 model.export(format=“onnx”) ```
更多导出格式和详情,请参阅导出页面。
- 如何验证 YOLOv8n-obb 模型的准确性?
要验证 YOLOv8n-obb 模型,您可以使用 Python 或 CLI 命令:
```python from ultralytics import YOLO
# 加载模型 model = YOLO(“yolov8n-obb.pt”)
# 验证模型 metrics = model.val(data=“dota8.yaml”) ```
Ov8n-obb 模型,您可以使用 Python 或 CLI 命令:
```python from ultralytics import YOLO
# 加载模型 model = YOLO(“yolov8n-obb.pt”)
# 验证模型 metrics = model.val(data=“dota8.yaml”) ```
更多验证详情,请参阅验证章节。
标签:验证,OBB,模型,YOLO,obb,yolov8,yolov8n,model,推理 From: https://blog.csdn.net/QQ_1309399183/article/details/143419798