定向边框(OBB)数据集概述
使用定向边界框(OBB)训练精确的物体检测模型需要一个全面的数据集。本文解释了与Ultralytics YOLO 模型兼容的各种 OBB 数据集格式,深入介绍了这些格式的结构、应用和格式转换方法。数据集使用DOTA。
YOLO支持的 OBB 格式
在Ultralytics YOLO 模型中,OBB 由YOLO OBB 格式中的四个角点表示。这样可以更准确地检测到物体,因为边界框可以旋转以更好地适应物体。其坐标在 0 和 1 之间归一化:
class_index x1 y1 x2 y2 x3 y3 x4 y4
YOLO 在内部处理损失和输出是xywhr 格式,xy表示边界框的中心点、whr表示宽度、高度和旋转角度。
OBB 格式示例
例如:
0 0.780811 0.743961 0.782371 0.74686 0.777691 0.752174 0.776131 0.749758
YoloV8实现OBB训练、测试
YOLOv8 这里显示的是在DOTAv1数据集上预训练的 OBB 模型。
首次使用时,模型会自动从最新的Ultralytics 版本下载。
模型 | 尺寸 (像素) | mAPtest 50 | 速度 CPU ONNX (毫秒) | 速度 A100 TensorRT (毫秒) | params (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 |
训练
yolo已经有自己配置好的脚本文件,直接调用就可以实现,代码如下:
from ultralytics import YOLO
import os
if __name__ == '__main__':
model = YOLO(model="ultralytics/cfg/models/v8/yolov8l-obb.yaml") # 从头开始构建新模型
print(model)
# Use the model
results = model.train(data="DOTAv1.5.yaml", patience=0, epochs=300, device='0', batch=8, seed=42) # 训练模
如果想加载预训练模型,则使用:
model = YOLO("ultralytics/cfg/models/v8/yolov8l-obb.yaml").load("yolov8l-obb.pt") # build from YAML and transfer weights
或者直接加载预训练模型,如下:
model = YOLO("yolov8l-obb.pt") # load a pretrained model (recommended for training)
验证
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n-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
print(metrics.box.map) # map50-95(B)
print(metrics.box.map50) # map50(B)
print(metrics.box.map75) # map75(B)
print(metrics.box.maps) # a list contains map50-95(B) of each category