Ultralytics 中的 DOTA 数据集实战:面向航空影像的 OBB 旋转框检测、数据集切分与 YOLO26-obb 训练
2026/9/5 16:48:27 网站建设 项目流程

Ultralytics 中的 DOTA 数据集实战:面向航空影像的 OBB 旋转框检测、数据集切分与 YOLO26-obb 训练

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

本篇技术指南围绕 Ultralytics 仓库中维护的 DOTA(Dataset for Object deTectiOn in Aerial images)数据集文档展开,覆盖 DOTA v1.0 / v1.5 / v2.0 三个版本的规模与差异、官方数据集 YAML 配置、高分辨率影像切分(ultralytics.data.split_dota)的完整工作流,以及基于 YOLO OBB 模型的训练命令。读完本文后,你将能够独立完成 DOTA 数据的下载、切瓦片(tiling)、编写数据集 YAML、并启动一个面向航空影像的旋转边界框(Oriented Bounding Box, OBB)检测训练任务。

一、DOTA 数据集概览:18 类、170 万个旋转框的航空影像基准

DOTA 是面向航空影像目标检测的大规模基准数据集,由武汉大学团队发布,共有 v1.0、v1.5、v2.0 三个版本,累计提供最多约 170 万个 OBB 标注,覆盖 18 个常见类别,影像来自多种传感器与平台(Google Earth、GF-2 卫星等)。

其核心特性包括:

  • 多传感器、多平台采集:影像尺寸跨度极大,从 800 × 800 到 20,000 × 20,000 像素不等;
  • 大规模旋转标注:18 个类别共 170 万+ 个定向边界框(OBB);
  • 多尺度检测特性:单张影像中目标尺寸分布极广,天然覆盖多尺度检测场景;
  • 专家级任意四边形标注:实例由专家以 8 自由度(8 d.o.f.)任意四边形方式标注,能够捕获不同尺度、朝向与形状的目标。

OBB 以旋转矩形形式包裹目标(无论其朝向),因此特别契合航空影像中飞机、船舶、建筑物等具有明显方向性的目标,这也是 DOTA 与普通水平框(HBB)检测数据集最大的区别。

二、DOTA 三个版本的差异

DOTA-v1.0

  • 包含 15 个常见类别;
  • 共 2,806 张图像、188,282 个实例;
  • 划分比例约 1/2 训练(1,411 张)、1/6 验证(458 张)、1/3 测试(937 张)。

DOTA-v1.5

  • 图像与 DOTA-v1.0 完全相同;
  • 补充标注了极小实例(小于 10 像素的目标);
  • 新增一个类别:container crane(集装箱起重机);
  • 实例总数达到 403,318 个;
  • 最初为 DOAI 2019 航空影像目标检测挑战赛发布。

DOTA-v2.0

  • 在 v1 基础上引入 Google Earth、GF-2 卫星及其他航空影像;
  • 包含 18 个类别,新增 airport(机场)与 helipad(直升机坪)两个类别;
  • 共 11,268 张图像、1,793,658 个实例;
  • 图像划分为四个子集:
子集图像数实例数
Training1,830268,627
Validation59381,048
Test-dev2,792353,346
Test-challenge6,0531,090,637

三、数据集结构与标注形式

DOTA 的目录结构是为 OBB 检测任务量身设计的:

  • Images:大量高分辨率航空影像,覆盖多样的地形与地物;
  • 标注:以旋转矩形(OBB)包裹目标,不限制目标朝向,适合飞机、船舶、建筑物等具有方向特征的对象。

在 Ultralytics 工作流中,标注以 YOLO OBB 格式存储为.txt文件:每行一个目标,格式为class_id x1 y1 x2 y2 x3 y3 x4 y4(归一化坐标的四点四边形),与水平框格式相比多出一个顶点。切分工具ultralytics.data.split_dota输出的标签正是这一格式(见下文crop_and_save的写盘逻辑)。

四、数据集 YAML:Ultralytics 官方配置

数据集 YAML 用于指定图像/标签根目录、类别名等元数据。Ultralytics 在仓库中为最常用的两个发布版本维护了官方 YAML:

  • DOTAv1.yaml
  • DOTAv1.5.yaml

请以你实际下载的发布版本为准选择对应 YAML;如果使用的是 DOTA-v2 或派生数据,可自行编写一份自定义 YAML。这两个官方 YAML 均支持自动下载(约 2 GB),首次训练时会自动从 Ultralytics 资产仓库拉取。

DOTAv1.yaml 完整内容

# DOTA 1.0 dataset https://captain-whu.github.io/DOTA/index.html for object detection in aerial images by Wuhan University # Example usage: yolo train model=yolov8n-obb.pt data=DOTAv1.yaml # parent # ├── ultralytics # └── datasets # └── DOTAv1 ← 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

对照 DOTAv1.5.yaml,两者差异仅有两点:类别表在第 15 号新增了container crane,以及pathdownload指向 v1.5 的数据根目录与压缩包。15 个 v1.0 类别为:plane、ship、storage tank、baseball diamond、tennis court、basketball court、ground track field、harbor、bridge、large vehicle、small vehicle、helicopter、roundabout、soccer ball field、swimming pool。

要点说明:

  • train/val/test支持三种写法:目录、imgs.txt文件、路径列表;DOTA 官方数据使用的是目录形式;
  • 末尾的download字段是关键——只要本地不存在path指定的数据目录,Ultralytics 会按该 URL 自动下载并解压;
  • 若使用自己切分(split)后的目录,需将train/val指向切分输出目录(见下节的输出布局约定)。

五、切分高分辨率 DOTA 影像:split_dota 源码级解析

DOTA 原始影像单边动辄超过 10,000 像素,无法直接喂给 YOLO,必须先切片(tiling)。仓库内置的 split_dota 模块可把原始影像切成 1024 × 1024 的重叠瓦片,并支持多尺度,同时保证标注同步切分。

5.1 官方调用示例

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, )

5.2 参数语义(结合源码)

对照 split_dota.py 中split_trainvalsplit_test的函数签名(默认值crop_size=1024, gap=200, rates=(1.0,)),各参数的实际含义为:

  • data_root:DOTA 数据根目录,需满足标准布局——images/trainimages/val(test 则只读images/test)以及对应的labels/trainlabels/val
  • save_dir:切分结果输出目录;
  • rates:多尺度比例。源码中对每个r执行crop_sizes.append(int(crop_size / r))gaps.append(int(gap / r)),即 r = 0.5 时瓦片放大到 2048,r = 1.5 时缩小到约 683——比例越大瓦片越小,从而让模型同时看到大目标与小目标;
  • gap:瓦片之间的重叠像素数(overlap),保证跨瓦片目标不被切断丢失。源码要求crop_size > gap,且以step = crop_size - gap作为滑窗步长;
  • crop_size:基础瓦片尺寸,默认 1024,对应文档推荐的 1024 × 1024 切块。

5.3 内部流水线

从源码结构看,split_trainval的处理链分为三步(split_images_and_labels→ 逐图执行):

  1. load_yolo_dota:读取每张图的尺寸(经exif_size处理 EXIF 旋转),并把对应.txt标签解析为float32数组;
  2. get_windows:按滑窗策略计算切块坐标,过滤掉图像内容占比低于im_rate_thr(默认 0.6)的边缘残窗;
  3. get_window_obj+crop_and_save:基于bbox_iof(Intersection over Foreground,依赖shapely>=2.0.0)计算目标四边形与瓦片的 IoF,默认阈值iof_thr=0.7——只有 70% 以上面积落入某瓦片的目标才会写入该瓦片标签;随后裁剪图像并写标签。

细节值得注意:

  • 输出瓦片的命名规则为{原图名}__{宽}__{x起点}___{y起点}(如P0000__1024__4896___0),其中宽高字段用于推理时反向定位大影像中的全局坐标;
  • 标签写入时执行了坐标平移(减去瓦片起点)与归一化(除以瓦片宽高),输出即为 YOLO OBB 格式;
  • allow_background_images(默认 True)控制是否保留不含目标的纯背景瓦片;
  • 输出目录遵循标准 YOLO 布局:save_dir/images/{train,val,test}save_dir/labels/{train,val},因此可直接被数据集 YAML 引用;
  • 模块底部的__main__入口给出了 DOTAv2 的默认用法:split_trainval(data_root="DOTAv2", save_dir="DOTAv2-split")split_test(...)

经验提示:保持输出目录为标准 YOLO 布局(images/trainlabels/train等),即可直接在自定义 YAML 中引用;split_test只输出图像(无标签),因为测试集标签不对外公布。

六、使用 DOTA 训练 OBB 模型

6.1 训练示例

在 DOTA v1 上从零训练一个 YOLO26n-OBB 模型:

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)

CLI 等价形式:

# Train a new YOLO26n-OBB model on the DOTAv1 dataset yolo obb train data=DOTAv1.yaml model=yolo26n-obb.pt epochs=100 imgsz=1024

注意两点:

  • 必须走obb任务(yolo obb train ...),OBB 头输出的正是旋转框参数;
  • OBB 模型结构 YAML 由仓库统一维护,例如 yolo26-obb.yaml(v8/v11/v12 系列亦有对应 OBB 结构文件)。yolo26n-obb.yaml这类"带尺寸后缀"的名字在调用时由模型注册机制解析到对应规模的结构。

6.2 快速验证管道:DOTA8

正式投入 DOTA 大训练前,建议先用 DOTA8 数据集 跑通流程。DOTA8 取自切分后 DOTAv1 的前 8 张图像(4 训练 / 4 验证),约 1 MB,首次训练会自动下载,继承 DOTAv1 的 15 个类别,其配置见 dota8.yaml。

from ultralytics import YOLO model = YOLO("yolo26n-obb.pt") # 加载预训练权重(推荐) results = model.train(data="dota8.yaml", epochs=100, imgsz=640)
yolo obb train data=dota8.yaml model=yolo26n-obb.pt epochs=100 imgsz=640

训练参数(epochsimgszbatch等)的完整清单请参考仓库中的训练模式文档与 default.yaml 默认值。

6.3 许可证注意事项

DOTAv1 的全部图像与标注仅可用于学术目的,禁止商业用途,请遵守数据创建方的授权约定。DOTA 各版本整体遵循 Research-Only 许可,商用前请自行核实官方许可条款。

七、应用场景

DOTA 是训练与评估"航空影像专用"模型的基准。OBB 标注带来的独特挑战,促使发展出针对航空影像特性的专用检测模型。典型落地方向包括:

  • 遥感监测(港口、机场、农田基础设施盘点);
  • 安防与区域监视(车辆、直升机、船只动向跟踪);
  • 环境监测与灾害管理(受灾区域目标普查)。

得益于 170 万级标注与 18 类覆盖,DOTA-v2.0 在遥感与航空监视项目中尤为常用。

八、样例数据与标注

DOTA 的样例影像直观体现了航空场景的复杂度与旋转框标注的必要性:目标以其自然朝向(任意角度)出现,用水平框会引入大量冗余背景;OBB 则精确贴合飞机、船舶、车辆的几何形状。这种标注方式是 DOTA 区别于通用检测数据集的核心价值。

九、引用信息

若在你的研究中使用了 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={2022}, volume={44}, number={11}, pages={7778-7796}, doi={10.1109/TPAMI.2021.3117983} }

致谢:感谢 DOTA 数据团队在数据整理上的贡献。关于数据集的完整说明(类别定义、划分、下载入口)可查阅 DOTA 官方网站(captain-whu.github.io/DOTA)。

十、常见问题(FAQ)

Q1:DOTA 数据集是什么?为什么对航空影像目标检测重要?DOTA 是专注于航空影像目标检测的专用数据集,使用 OBB 旋转框标注。其 170 万条标注与 18 个类别在目标朝向、尺度、形状上的多样性,使其成为开发和评估航空影像专用模型(监视、环境监测、灾害管理等场景)的理想基准。

Q2:DOTA 如何处理不同尺度和朝向的目标?标注采用 OBB,以旋转矩形包裹目标,与目标朝向无关,小目标与任意角度的目标都能被精确捕获;加上影像尺寸横跨 800 × 800 到 20,000 × 20,000 像素的多尺度场景,可同时对大小目标做出有效检测。配合split_dotarates多尺度切分,训练时还能显式覆盖不同瓦片尺度。

Q3:如何用 DOTA 训练模型?使用上文"六、使用 DOTA 训练 OBB 模型"中的 Python/CLI 示例:data=DOTAv1.yamlimgsz=1024(与切分瓦片尺寸一致),走obb任务。切分与预处理细节见本文第五节。

Q4:DOTA-v1.0、v1.5、v2.0 有何区别?

  • v1.0:15 类、2,806 张图、188,282 实例,按约 1/2、1/6、1/3 划分训练/验证/测试;
  • v1.5:图像不变,补充 <10 像素极小实例标注并新增 container crane 类,实例达 403,318;
  • v2.0:引入 Google Earth 与 GF-2 卫星影像,扩展至 18 类(新增 airport、helipad),11,268 张图、1,793,658 实例。

Q5:如何为训练准备高分辨率 DOTA 影像?使用 split_dota 中的split_trainval/split_test:以rates=[0.5, 1.0, 1.5]gap=500多尺度切出重叠瓦片,标签同步切分并归一化,输出为标准 YOLO 目录结构,再在数据集 YAML 中指向切分目录即可。

十一、延伸阅读(仓库内相关路径)

  • 切分工具源码:ultralytics/data/split_dota.py
  • 官方数据集 YAML:DOTAv1.yaml、DOTAv1.5.yaml、dota8.yaml
  • OBB 模型结构:yolo26-obb.yaml
  • DOTA8 快速验证数据集文档:docs/en/datasets/obb/dota8.md

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询