Dataset prepare
数据集准备⚓︎
基础检测数据集准备⚓︎
MMDetection 支持多个公共数据集,包括 COCO, Pascal VOC, Cityscapes 和 其他更多数据集。
一些公共数据集,比如 Pascal VOC 及其镜像数据集,或者 COCO 等数据集都可以从官方网站或者镜像网站获取。注意:在检测任务中,Pascal VOC 2012 是 Pascal VOC 2007 的无交集扩展,我们通常将两者一起使用。 我们建议将数据集下载,然后解压到项目外部的某个文件夹内,然后通过符号链接的方式,将数据集根目录链接到 $MMDETECTION/data
文件夹下, 如果你的文件夹结构和下方不同的话,你需要在配置文件中改变对应的路径。
我们提供了下载 COCO 等数据集的脚本,你可以运行 python tools/misc/download_dataset.py --dataset-name coco2017
下载 COCO 数据集。 对于中国境内的用户,我们也推荐通过开源数据平台 OpenDataLab 来下载数据,以获得更好的下载体验。
更多用法请参考数据集下载
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
│ ├── cityscapes
│ │ ├── annotations
│ │ ├── leftImg8bit
│ │ │ ├── train
│ │ │ ├── val
│ │ ├── gtFine
│ │ │ ├── train
│ │ │ ├── val
│ ├── VOCdevkit
│ │ ├── VOC2007
│ │ ├── VOC2012
有些模型需要额外的 COCO-stuff 数据集,比如 HTC,DetectoRS 和 SCNet,你可以下载并解压它们到 coco
文件夹下。文件夹会是如下结构:
mmdetection
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
│ │ ├── stuffthingmaps
PanopticFPN 等全景分割模型需要额外的 COCO Panoptic 数据集,你可以下载并解压它们到 coco/annotations
文件夹下。文件夹会是如下结构:
mmdetection
├── data
│ ├── coco
│ │ ├── annotations
│ │ │ ├── panoptic_train2017.json
│ │ │ ├── panoptic_train2017
│ │ │ ├── panoptic_val2017.json
│ │ │ ├── panoptic_val2017
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
Cityscape 数据集的标注格式需要转换,以与 COCO 数据集标注格式保持一致,使用 tools/dataset_converters/cityscapes.py
来完成转换:
pip install cityscapesscripts
python tools/dataset_converters/cityscapes.py \
./data/cityscapes \
--nproc 8 \
--out-dir ./data/cityscapes/annotations
COCO Caption 数据集准备⚓︎
COCO Caption 采用的是 COCO2014 数据集作为图片,并且使用了 karpathy 的标注,
首先你需要下载 COCO2014 数据集
python tools/misc/download_dataset.py --dataset-name coco2014 --unzip
数据集会下载到当前路径的 data/coco
下。然后下载 karpathy 的标注
cd data/coco/annotations
wget https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_train.json
wget https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_val.json
wget https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_test.json
wget https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_val_gt.json
wget https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_test_gt.json
最终直接可用于训练和测试的数据集文件夹结构如下:
mmdetection
├── data
│ ├── coco
│ │ ├── annotations
│ │ │ ├── coco_karpathy_train.json
│ │ │ ├── coco_karpathy_test.json
│ │ │ ├── coco_karpathy_val.json
│ │ │ ├── coco_karpathy_val_gt.json
│ │ │ ├── coco_karpathy_test_gt.json
│ │ ├── train2014
│ │ ├── val2014
│ │ ├── test2014
COCO semantic 数据集准备⚓︎
COCO 语义分割有两种类型标注,主要差别在于类别名定义不一样,因此处理方式也有两种,第一种是直接使用 stuffthingmaps 数据集,第二种是使用 panoptic 数据集。
(1) 使用 stuffthingmaps 数据集
该数据集的下载地址为 stuffthingmaps_trainval2017,请下载后解压到 data/coco
文件夹下。
mmdetection
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
│ │ ├── stuffthingmaps
该数据集不同于标准的 COCO 类别标注,其包括 172 个类: 80 thing 类、91 stuff 类和 1 个 'unlabeled',其每个类别的说明见 https://github.com/nightrome/cocostuff/blob/master/labels.md
虽然只标注了 172 个类别,但是 stuffthingmaps
中最大标签 id 是 182,中间有些类别是没有标注的,并且第 0 类的 unlabeled
类别被移除。因此最终的 stuffthingmaps
图片中每个位置的值对应的类别关系见 https://github.com/kazuto1011/deeplab-pytorch/blob/master/data/datasets/cocostuff/labels.txt
考虑到训练高效和方便用户,在开启训练或者评估前,我们需要将没有标注的 12 个类移除,这 12 个类的名字为: street sign、hat、shoe、eye glasses、plate、mirror、window、desk、door、blender、hair brush
,最终可用于训练和评估的类别信息见 mmdet/datasets/coco_semantic.py
你可以使用 tools/dataset_converters/coco_stuff164k.py
来完成将下载的 stuffthingmaps
转换为直接可以训练和评估的数据集,转换后的数据集文件夹结构如下:
mmdetection
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
│ │ ├── stuffthingmaps
│ │ ├── stuffthingmaps_semseg
stuffthingmaps_semseg
即为新生成的可以直接训练和测试的 COCO 语义分割数据集。
(2) 使用 panoptic 数据集
通过 panoptic 标注生成的语义分割数据集类别数相比使用 stuffthingmaps
数据集生成的会少一些。首先你需要准备全景分割标注,然后使用如下脚本完成转换
python tools/dataset_converters/prepare_coco_semantic_annos_from_panoptic_annos.py data/coco
转换后的数据集文件夹结构如下:
mmdetection
├── data
│ ├── coco
│ │ ├── annotations
│ │ │ ├── panoptic_train2017.json
│ │ │ ├── panoptic_train2017
│ │ │ ├── panoptic_val2017.json
│ │ │ ├── panoptic_val2017
│ │ │ ├── panoptic_semseg_train2017
│ │ │ ├── panoptic_semseg_val2017
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
panoptic_semseg_train2017
和 panoptic_semseg_val2017
即为新生成的可以直接训练和测试的 COCO 语义分割数据集。注意其类别信息就是 COCO 全景分割的类别信息,包括 thing 和 stuff。
RefCOCO 数据集准备⚓︎
RefCOCO系列数据集的图像和注释可以通过运行 tools/misc/download_dataset.py
下载:
python tools/misc/download_dataset.py --dataset-name refcoco --save-dir data/coco --unzip
然后,目录应该是这样的:
data
├── coco
│ ├── refcoco
│ │ ├── instances.json
│ │ ├── refs(google).p
│ │ └── refs(unc).p
│ ├── refcoco+
│ │ ├── instances.json
│ │ └── refs(unc).p
│ ├── refcocog
│ │ ├── instances.json
│ │ ├── refs(google).p
│ │ └── refs(umd).p
| |── train2014
ADE20K 数据集准备⚓︎
ADE20K数据集的图像和注释可以通过运行 tools/misc/download_dataset.py
下载:
python tools/misc/download_dataset.py --dataset-name ade20k_2016 --save-dir data --unzip
然后将注释移至data/ADEChallengeData2016
目录,并运行预处理脚本以产生coco格式注释:
mv data/annotations_instance data/ADEChallengeData2016/
mv data/categoryMapping.txt data/ADEChallengeData2016/
mv data/imgCatIds.json data/ADEChallengeData2016/
python tools/dataset_converters/ade20k2coco.py data/ADEChallengeData2016 --task panoptic
python tools/dataset_converters/ade20k2coco.py data/ADEChallengeData2016 --task instance
然后,目录应该是这样的:
data
├── ADEChallengeData2016
│ ├── ade20k_instance_train.json
│ ├── ade20k_instance_val.json
│ ├── ade20k_panoptic_train
| | ├── ADE_train_00000001.png
| | ├── ADE_train_00000002.png
| | ├── ...
│ ├── ade20k_panoptic_train.json
│ ├── ade20k_panoptic_val
| | ├── ADE_val_00000001.png
| | ├── ADE_val_00000002.png
| | ├── ...
│ ├── ade20k_panoptic_val.json
│ ├── annotations
| | ├── training
| | | ├── ADE_train_00000001.png
| | | ├── ADE_train_00000002.png
| | | ├── ...
| | ├── validation
| | | ├── ADE_val_00000001.png
| | | ├── ADE_val_00000002.png
| | | ├── ...
│ ├── annotations_instance
| | ├── training
| | | ├── ADE_train_00000001.png
| | | ├── ADE_train_00000002.png
| | | ├── ...
| | ├── validation
| | | ├── ADE_val_00000001.png
| | | ├── ADE_val_00000002.png
| | | ├── ...
│ ├── categoryMapping.txt
│ ├── images
│ | ├── training
| | | ├── ADE_train_00000001.jpg
| | | ├── ADE_train_00000002.jpg
| | | ├── ...
| | ├── validation
| | | ├── ADE_val_00000001.jpg
| | | ├── ADE_val_00000002.jpg
| | | ├── ...
│ ├── imgCatIds.json
│ ├── objectInfo150.txt
| |── sceneCategories.txt
上述文件夹包括ADE20K的语义分割、实例分割和泛在分割的所有数据。
从 OpenDataLab 中下载⚓︎
OpenDataLab 为人工智能研究者提供免费开源的数据集,通过 OpenDataLab,研究者可以获得格式统一的各领域经典数据集。通过平台的搜索功能,研究者可以迅速便捷地找到自己所需数据集;通过平台的统一格式,研究者可以便捷地对跨数据集任务进行开发。
目前,MIM 支持使用一条命令行从 OpenDataLab 中下载 VOC 和 COCO 数据集,后续将支持更多数据集。你也可以直接访问 OpenDataLab 平台下载你所需的数据集,然后将其转化为 MMDetection 所要求的格式。
如果使用 MIM 下载,请确保版本大于 v0.3.8,你可以使用如下命令更新:
pip install -U openmim
# install OpenXLab CLI tools
pip install -U openxlab
# log in OpenXLab, registry
openxlab login
# download voc2007 and preprocess by MIM
mim download mmdet --dataset voc2007
# download voc2012 and preprocess by MIM
mim download mmdet --dataset voc2012
# download coco2017 and preprocess by MIM
mim download mmdet --dataset coco2017
创建日期: November 27, 2023