带有 OBB 的 DOTA 数据集

DOTA 是一个专业的数据集,专注于目标检测在航拍图像中的应用。它源自 DOTA 系列数据集,通过旋转边界框 (OBB) 提供捕捉各种航拍场景的标注图像。

用于航拍检测的 DOTA 数据集对象类别

主要特性



Watch: How to Train Ultralytics YOLO26 on the DOTA Dataset for Oriented Bounding Boxes in Google Colab
  • 该数据集收集自各种传感器和平台,图像尺寸从 800 × 800 到 20,000 × 20,000 像素不等。
  • 包含 18 个类别中超过 170 万个旋转边界框。
  • 得益于每张图像中对象尺寸的广泛分布,它支持多尺度目标检测。
  • 实例由专家使用任意四边形(8 自由度)进行标注,捕捉不同尺度、方向和形状的对象。

数据集版本

DOTA-v1.0

  • 包含 15 个常见类别。
  • 包含 2,806 张图像,共有 188,282 个实例。
  • 分割比例:1/2 用于训练,1/6 用于验证,1/3 用于测试。

DOTA-v1.5

DOTA-v2.0

  • 收集自 Google Earth、GF-2 卫星以及其他航拍图像。
  • 包含 18 个常见类别。
  • 包含 11,268 张图像,拥有多达 1,793,658 个实例。
  • 引入了新类别:“机场 (airport)”和“直升机停机坪 (helipad)”。
  • 图像分割:
    • 训练集:1,830 张图像,包含 268,627 个实例。
    • 验证集:593 张图像,包含 81,048 个实例。
    • Test-dev:2,792 张图像,包含 353,346 个实例。
    • Test-challenge:6,053 张图像,包含 1,090,637 个实例。

数据集结构

DOTA 采用了专为 OBB 目标检测挑战而设计的结构化布局:

  • 图像:海量的高分辨率航拍图像,捕捉了多样的地形和结构。
  • 旋转边界框 (Oriented Bounding Boxes):以旋转矩形形式进行的标注,无论对象方向如何均能将其包裹,非常适合捕捉飞机、船舶和建筑物等对象。

应用场景

DOTA 是一个用于训练和评估专门针对航拍图像分析模型的基准。凭借 OBB 标注的加入,它带来了独特的挑战,使开发能够应对航拍图像细微差别的专业目标检测模型成为可能。该数据集在遥感、监控和环境监测等应用中极具价值。

数据集 YAML

数据集 YAML (Yet Another Markup Language) 文件指定了图像/标签根目录、类名以及其他重要的元数据。Ultralytics 为两个最常用的版本维护了官方 YAML 文件:

请使用与你下载的版本相匹配的 YAML,或者如果你正在使用 DOTA-v2 或其他衍生版本,请自行编写一个自定义 YAML。

DOTAv1.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# DOTA 1.0 dataset https://captain-whu.github.io/DOTA/index.html for object detection in aerial images by Wuhan University
# Documentation: https://docs.ultralytics.com/datasets/obb/dota-v2/
# Example usage: yolo train model=yolov8n-obb.pt data=DOTAv1.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── dota1 ← downloads here (2 GB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: DOTAv1 # dataset root dir
train: images/train # train images (relative to 'path') 1411 images
val: images/val # val images (relative to 'path') 458 images
test: images/test # test images (optional) 937 images

# Classes for DOTA 1.0
names:
  0: plane
  1: ship
  2: storage tank
  3: baseball diamond
  4: tennis court
  5: basketball court
  6: ground track field
  7: harbor
  8: bridge
  9: large vehicle
  10: small vehicle
  11: helicopter
  12: roundabout
  13: soccer ball field
  14: swimming pool

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/DOTAv1.zip

分割 DOTA 图像

原始图像通常单边超过 10,000 像素,因此在将数据输入 YOLO 之前需要进行分块处理。请使用下方的辅助工具,将源图像切片为多尺度、重叠的 1024 × 1024 裁剪图,同时保持标注同步。

分割图像
from ultralytics.data.split_dota import split_test, split_trainval

# Split train and val set, with labels.
split_trainval(
    data_root="path/to/DOTAv1.0/",
    save_dir="path/to/DOTAv1.0-split/",
    rates=[0.5, 1.0, 1.5],  # multiscale
    gap=500,
)
# Split test set, without labels.
split_test(
    data_root="path/to/DOTAv1.0/",
    save_dir="path/to/DOTAv1.0-split/",
    rates=[0.5, 1.0, 1.5],  # multiscale
    gap=500,
)
提示

保持输出目录为标准的 YOLO 布局(images/trainlabels/train 等),这样你就可以直接在数据集 YAML 中引用它。

使用方法

要训练 DOTA v1 数据集上的模型,你可以利用以下代码片段。请务必参阅你所用模型的文档,获取可用参数的详尽列表。如果你想先尝试较小的子集,可以考虑使用 DOTA8 数据集,它仅包含 8 张图像,适合快速测试。

警告

请注意,DOTAv1 数据集中的所有图像及相关标注均可用于学术目的,但禁止商业用途。非常感谢你对数据集创建者意愿的理解与尊重!

训练示例
from ultralytics import YOLO

# Create a new YOLO26n-OBB model from scratch
model = YOLO("yolo26n-obb.yaml")

# Train the model on the DOTAv1 dataset
results = model.train(data="DOTAv1.yaml", epochs=100, imgsz=1024)

示例数据和标注

看一眼该数据集,你就能明白它的深度:

带有旋转边界框标注的 DOTA 数据集

  • DOTA 示例:这张快照突显了航拍场景的复杂性以及旋转边界框标注的重要性,它们能够捕捉到对象自然的方位。

该数据集的丰富性为航拍图像特有的目标检测挑战提供了宝贵的见解。DOTA-v2.0 数据集因其全面的标注和多样的对象类别,在遥感和航空监控项目中变得尤为受欢迎。

引文与致谢

如果你在工作中使用 DOTA,请引用相关的研究论文:

引用
@article{9560031,
  author={Ding, Jian and Xue, Nan and Xia, Gui-Song and Bai, Xiang and Yang, Wen and Yang, Michael and Belongie, Serge and Luo, Jiebo and Datcu, Mihai and Pelillo, Marcello and Zhang, Liangpei},
  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
  title={Object Detection in Aerial Images: A Large-Scale Benchmark and Challenges},
  year={2021},
  volume={},
  number={},
  pages={1-1},
  doi={10.1109/TPAMI.2021.3117983}
}

特别感谢 DOTA 数据集背后的团队在整理此数据集方面所做的卓越努力。要全面了解该数据集及其细微差别,请访问 DOTA 官方网站

常见问题 (FAQ)

什么是 DOTA 数据集,为什么它对于航拍图像中的目标检测如此重要?

DOTA 数据集是一个专注于航拍图像目标检测的专业数据集。它采用旋转边界框 (OBB),提供来自各种航拍场景的标注图像。DOTA 在 170 万个标注和 18 个类别中体现了对象方向、尺度和形状的多样性,使其非常适合开发和评估针对航拍图像分析的模型,例如用于监控、环境监测和灾难管理的模型。

DOTA 数据集如何处理图像中不同的尺度和方向?

DOTA 使用旋转边界框 (OBB) 进行标注,这些边界框表现为旋转的矩形,无论方向如何都能包裹住对象。这种方法确保了无论对象多小或处于何种角度,都能被准确捕捉。该数据集的多尺度图像(从 800 × 800 到 20,000 × 20,000 像素)进一步允许有效地检测大小对象。这种方法对于航拍图像尤为重要,因为对象会以各种角度和尺度出现。

如何使用 DOTA 数据集训练模型?

要训练 DOTA 数据集上的模型,你可以参考 Ultralytics YOLO 的以下示例:

训练示例
from ultralytics import YOLO

# Create a new YOLO26n-OBB model from scratch
model = YOLO("yolo26n-obb.yaml")

# Train the model on the DOTAv1 dataset
results = model.train(data="DOTAv1.yaml", epochs=100, imgsz=1024)

关于如何分割和预处理 DOTA 图像的更多详细信息,请参阅分割 DOTA 图像部分

DOTA-v1.0、DOTA-v1.5 和 DOTA-v2.0 之间有什么区别?

  • DOTA-v1.0:包含 15 个常见类别,覆盖 2,806 张图像,拥有 188,282 个实例。数据集分为训练集、验证集和测试集。
  • DOTA-v1.5:在 DOTA-v1.0 的基础上,标注了非常小的实例(小于 10 像素)并增加了“集装箱起重机”这一新类别,总计 403,318 个实例。
  • DOTA-v2.0:进一步扩展了来自 Google Earth 和 GF-2 卫星的标注,包含 11,268 张图像和 1,793,658 个实例。它引入了“机场”和“直升机停机坪”等新类别。

如需详细对比和更多说明,请查看数据集版本部分

我该如何准备高分辨率 DOTA 图像以进行训练?

DOTA 图像通常非常大,需要分割成更小的分辨率以便进行可控的训练。以下是一个分割图像的 Python 代码片段:

示例
from ultralytics.data.split_dota import split_test, split_trainval

# split train and val set, with labels.
split_trainval(
    data_root="path/to/DOTAv1.0/",
    save_dir="path/to/DOTAv1.0-split/",
    rates=[0.5, 1.0, 1.5],  # multiscale
    gap=500,
)
# split test set, without labels.
split_test(
    data_root="path/to/DOTAv1.0/",
    save_dir="path/to/DOTAv1.0-split/",
    rates=[0.5, 1.0, 1.5],  # multiscale
    gap=500,
)

此过程有助于提高训练效率和模型性能。有关详细说明,请访问分割 DOTA 图像部分

评论