# 准备数据集

## 训练数据
请准备 [CC12M 数据集](https://github.com/google-research-datasets/conceptual-12m)。所有图像应存储在一个文件夹中。需要一个元文件（csv 或 tsv 文件），其中包含图像 ID 及其对应的标题。
```shell
image_id, caption
00001.jpg, a boy is running on the beach,
00002.jpg, The bride was wearing a chic lace.
...
```

- 重要更新：
我们提供了过滤 cc12m 子集并从头构建跨图像对的脚本：

1. 使用多进程（例如 32 个进程）过滤 cc12m 数据集，使用 Top-K 频繁出现的实体。可以自由修改 [data_process_cc12m.py](../datasets/filter_cc12m_subset.py) 中的实体。
```shell
cd datasets
python data_process_cc12m.py --mode filter --srcdir /path/to/your/cc12m.csv --processor 32
```
这将在 subset/ 目录中生成 32 个子文件。

2. 接下来，将这些子文件合并为单个元文件（并可选择通过传递 --remove_subfiles=True 删除子文件）。
```shell
python data_process_cc12m.py --mode merge --dstdir /path/to/your/cc12m/subsets/ --remove_subfiles True
```

3. 根据过滤后的数据构建跨图像对。
```shell
python data_process_cc12m.py --mode makepair --metafile /path/to/your/cc12m_filtered_subset.csv
```
生成的元文件将自动保存到 /path/to/your/cc12m_filtered_subset_pair.csv。此元文件可用于训练模型。

4. 修改 configs/ovsegmentor/ovsegmentor_pretrain_vit_bert_stage1.yml 中的根路径和元文件路径
```shell
data:
    train:
        root_dir: '/path/to/your/cc12m_images/'
        meta_file: '/path/to/your/cc12m_filtered_subset_pair.csv'
```

也可以尝试不同的 [图像-标题数据集](https://github.com/rom1504/img2dataset)（例如 YFCC、RedCaps），方法是提供图像及其对应的元文件。

## 评估
1. 按照官方网站准备 [PASCAL VOC](https://github.com/open-mmlab/mmsegmentation/blob/master/docs/en/dataset_prepare.md#pascal-voc)、[PASCAL Context](https://github.com/open-mmlab/mmsegmentation/blob/master/docs/en/dataset_prepare.md#pascal-context)、[COCO](https://github.com/open-mmlab/mmsegmentation/blob/master/docs/en/dataset_prepare.md#coco-stuff-164k) 和 [ADE20K](https://github.com/open-mmlab/mmsegmentation/blob/master/docs/en/dataset_prepare.md#ade20k)。
2. 对于 COCO 数据集，按照 [GroupViT](https://github.com/NVlabs/GroupViT) 将其转换为语义分割格式。
```shell
python convert_dataset/convert_coco_object.py /path/to/your/coco/ -o /path/to/output/coco/
```
3. 更改 segmentation/configs/_base_/datasets/*.py 中的图像目录。
- [PASCAL VOC](../segmentation/configs/_base_/datasets/pascal_voc12.py)
```shell
data_root = '/path/to/your/VOCdevkit/VOC2012'
```
- [PASCAL CONTEXT](../segmentation/configs/_base_/datasets/pascal_context.py)
```shell
data_root = '/path/to/your/pascal_context/VOCdevkit/VOC2010/'
```
- [COCO Object](../segmentation/configs/_base_/datasets/coco.py)
```shell
data_root = '/path/to/your/coco/'
```
- [COCO STUFF](../segmentation/configs/_base_/datasets/coco_stuff.py)
```shell
data_root = '/path/to/your/coco/'
```
- [ADE20K](../segmentation/configs/_base_/datasets/ade20k.py)
```shell
data_root = '/path/to/your/ADEChallengeData2016/'
```

4. 要启用零样本分类评估，请准备 [ImageNet](https://www.image-net.org/) 的验证集。验证集的元文件已经在[此处](../imagenet_info/val.csv)提供。修改 configs/ovsegmentor/ovsegmentor_pretrain_vit_bert_stage1.yml 中的图像路径
```shell
val:
    root_dir: '/path/to/your/cc12m_images/'
```