Skip to content

Commit

Permalink
Fix ref seg (#10478)
Browse files Browse the repository at this point in the history
  • Loading branch information
hhaAndroid committed Jun 9, 2023
1 parent 6f5adf7 commit 88884b4
Show file tree
Hide file tree
Showing 21 changed files with 393 additions and 188 deletions.
2 changes: 1 addition & 1 deletion configs/_base_/datasets/coco_semantic.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# dataset settings
dataset_type = 'CocoSegDaset'
dataset_type = 'CocoSegDataset'
data_root = 'data/coco/'

# Example to use different file client
Expand Down
113 changes: 113 additions & 0 deletions docs/zh_cn/user_guides/dataset_prepare.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## 数据集准备

### 基础检测数据集准备

MMDetection 支持多个公共数据集,包括 [COCO](https://cocodataset.org/)[Pascal VOC](http://host.robots.ox.ac.uk/pascal/VOC)[Cityscapes](https://www.cityscapes-dataset.com/)[其他更多数据集](https://github.com/open-mmlab/mmdetection/tree/main/configs/_base_/datasets)

一些公共数据集,比如 Pascal VOC 及其镜像数据集,或者 COCO 等数据集都可以从官方网站或者镜像网站获取。注意:在检测任务中,Pascal VOC 2012 是 Pascal VOC 2007 的无交集扩展,我们通常将两者一起使用。 我们建议将数据集下载,然后解压到项目外部的某个文件夹内,然后通过符号链接的方式,将数据集根目录链接到 `$MMDETECTION/data` 文件夹下, 如果你的文件夹结构和下方不同的话,你需要在配置文件中改变对应的路径。
Expand Down Expand Up @@ -71,3 +73,114 @@ python tools/dataset_converters/cityscapes.py \
--nproc 8 \
--out-dir ./data/cityscapes/annotations
```

### COCO Caption 数据集准备

COCO Caption 采用的是 COCO2014 数据集作为图片,并且使用了 karpathy 的标注,

首先你需要下载 COCO2014 数据集

```shell
python tools/misc/download_dataset.py --dataset-name coco2014 --unzip
```

数据集会下载到当前路径的 `data/coco` 下。然后下载 karpathy 的标注

```shell
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
```

最终直接可用于训练和测试的数据集文件夹结构如下:

```text
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](http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/stuffthingmaps_trainval2017.zip),请下载后解压防止到 `data/coco` 文件夹下。

```text
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 转换为直接可以训练和评估的数据集,转换后的数据集文件夹结构如下:

```text
mmdetection
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
│ │ ├── stuffthingmaps
│ │ ├── stuffthingmaps_semseg
```

stuffthingmaps_semseg 即为新生成的可以直接训练和测试的 COCO 语义分割数据集。

**(2) 使用 panoptic 数据集**

通过 panoptic 标注生成的语义分割数据集类别数相比使用 stuffthingmaps 数据集生成的会少一些。首先你需要准备全景分割标注,然后使用如下脚本完成转换

```shell
python tools/dataset_converters/prepare_coco_semantic_annos_from_panoptic_annos.py data/coco
```

转换后的数据集文件夹结构如下:

```text
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 数据集准备

### ADE20K 数据集准备
4 changes: 2 additions & 2 deletions mmdet/datasets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from .coco import CocoDataset
from .coco_caption import COCOCaptionDataset
from .coco_panoptic import CocoPanopticDataset
from .coco_semantic import CocoSegDaset
from .coco_semantic import CocoSegDataset
from .crowdhuman import CrowdHumanDataset
from .dataset_wrappers import MultiImageMixDataset
from .deepfashion import DeepFashionDataset
Expand Down Expand Up @@ -38,5 +38,5 @@
'BaseVideoDataset', 'MOTChallengeDataset', 'TrackImgSampler',
'ReIDDataset', 'YouTubeVISDataset', 'TrackAspectRatioBatchSampler',
'ADE20KPanopticDataset', 'COCOCaptionDataset', 'RefCOCODataset',
'BaseSegDataset', 'ADE20KSegDataset', 'CocoSegDaset'
'BaseSegDataset', 'ADE20KSegDataset', 'CocoSegDataset'
]
Loading

0 comments on commit 88884b4

Please sign in to comment.