数据集可以从 DOTA 数据集的主页 DOTA 或 OpenDataLab 下载。
我们推荐使用 OpenDataLab 下载,其中的文件夹结构已经按照需要排列好了,只需要解压即可,不需要费心去调整文件夹结构。
下载后解压数据集,并按如下文件夹结构存放。
${DATA_ROOT}
├── train
│ ├── images
│ │ ├── P0000.png
│ │ ├── ...
│ ├── labelTxt-v1.0
│ │ ├── labelTxt
│ │ │ ├── P0000.txt
│ │ │ ├── ...
│ │ ├── trainset_reclabelTxt
│ │ │ ├── P0000.txt
│ │ │ ├── ...
├── val
│ ├── images
│ │ ├── P0003.png
│ │ ├── ...
│ ├── labelTxt-v1.0
│ │ ├── labelTxt
│ │ │ ├── P0003.txt
│ │ │ ├── ...
│ │ ├── valset_reclabelTxt
│ │ │ ├── P0003.txt
│ │ │ ├── ...
├── test
│ ├── images
│ │ ├── P0006.png
│ │ ├── ...
其中,以 reclabelTxt
为结尾的文件夹存放了水平检测框的标注,目前仅使用了 labelTxt-v1.0
中旋转框的标注。
我们提供了 tools/dataset_converters/dota/dota_split.py
脚本用于 DOTA 数据集的准备和切片。
python tools/dataset_converters/dota/dota_split.py \
[--splt-config ${SPLIT_CONFIG}] \
[--data-root ${DATA_ROOT}] \
[--out-dir ${OUT_DIR}] \
[--ann-subdir ${ANN_SUBDIR}] \
[--phase ${DATASET_PHASE}] \
[--nproc ${NPROC}] \
[--save-ext ${SAVE_EXT}] \
[--overwrite]
脚本依赖于 shapely 包,请先通过 pip install shapely
安装 shapely。
参数说明:
--splt-config
: 切片参数的配置文件。--data-root
: DOTA 数据集的存放位置。--out-dir
: 切片后的输出位置。--ann-subdir
: 标注文件夹的名字。 默认为labelTxt-v1.0
。--phase
: 数据集的阶段。默认为trainval test
。--nproc
: 进程数量。 默认为 8 。--save-ext
: 输出图像的扩展名,如置空则与原图保持一致。 默认为None
。--overwrite
: 如果目标文件夹已存在,是否允许覆盖。
基于 DOTA 数据集论文中提供的配置,我们提供了两种切片配置。
./split_config/single_scale.json
用于单尺度 single-scale
切片
./split_config/multi_scale.json
用于多尺度 multi-scale
切片
DOTA 数据集通常使用 trainval
集进行训练,然后使用 test
集进行在线验证,大多数论文提供的也是在线验证的精度。
如果你需要进行本地验证,可以准备 train
集和 val
集进行训练和测试。
示例:
使用单尺度切片配置准备 trainval
和 test
集
python tools/dataset_converters/dota/dota_split.py
--split-config 'tools/dataset_converters/dota/split_config/single_scale.json'
--data-root ${DATA_ROOT} \
--out-dir ${OUT_DIR}
准备 DOTA-v1.5 数据集,它的标注文件夹名字是 labelTxt-v1.5
python tools/dataset_converters/dota/dota_split.py
--split-config 'tools/dataset_converters/dota/split_config/single_scale.json'
--data-root ${DATA_ROOT} \
--out-dir ${OUT_DIR} \
--ann-subdir 'labelTxt-v1.5'
使用单尺度切片配置准备 train
和 val
集
python tools/dataset_converters/dota/dota_split.py
--split-config 'tools/dataset_converters/dota/split_config/single_scale.json'
--data-root ${DATA_ROOT} \
--phase train val \
--out-dir ${OUT_DIR}
使用多尺度切片配置准备 trainval
和 test
集
python tools/dataset_converters/dota/dota_split.py
--split-config 'tools/dataset_converters/dota/split_config/multi_scale.json'
--data-root ${DATA_ROOT} \
--out-dir ${OUT_DIR}
在运行完成后,输出的结构如下:
${OUT_DIR}
├── trainval
│ ├── images
│ │ ├── P0000__1024__0___0.png
│ │ ├── ...
│ ├── annfiles
│ │ ├── P0000__1024__0___0.txt
│ │ ├── ...
├── test
│ ├── images
│ │ ├── P0006__1024__0___0.png
│ │ ├── ...
│ ├── annfiles
│ │ ├── P0006__1024__0___0.txt
│ │ ├── ...
此时将配置文件中的 data_root
修改为 ${OUT_DIR} 即可开始使用 DOTA 数据集训练。