Prepare datasets for AggDet

April 8, 2024 · View on GitHub

Following the Prepare Datasets of CoDet to prepare the COCO and LVIS datasets.

First, download COCO and LVIS data place them in the following way:

lvis/
    lvis_v1_train.json
    lvis_v1_val.json
coco/
    train2017/
    val2017/
    annotations/
        captions_train2017.json
        instances_train2017.json 
        instances_val2017.json

Then we follow OVR-CNN to create the open-vocabulary COCO split. The converted files should be like:

coco/
    zero-shot/
        instances_train2017_seen_2.json
        instances_val2017_all_2.json

We further follow Detic to pre-process the annotation format for easier evaluation:

python tools/get_coco_zeroshot_oriorder.py --data_path datasets/coco/zero-shot/instances_train2017_seen_2.json
python tools/get_coco_zeroshot_oriorder.py --data_path datasets/coco/zero-shot/instances_val2017_all_2.json

And process the category infomation:

python tools/get_lvis_cat_info.py --ann datasets/coco/zero-shot/instances_train2017_seen_2_oriorder.py

Next, prepare the open-vocabulary LVIS training set using

python tools/remove_lvis_rare.py --ann datasets/lvis/lvis_v1_train.json

This will generate datasets/lvis/lvis_v1_train_norare.json.

Then generate datasets/lvis/lvis_v1_train_norare_cat_info.json by running

python tools/get_lvis_cat_info.py --ann datasets/lvis/lvis_v1_train_norare.json --add_freq

After the preparation is complete, your directories should be organized as follows:

datasets/
├── coco
│   ├── annotations
│   ├── train2017
│   ├── val2017
│   └── zero-shot
├── lvis
│   ├── lvis_v1_train.json
│   ├── lvis_v1_train_norare_cat_info.json
│   ├── lvis_v1_train_norare.json
│   └── lvis_v1_val.json
├── metadata
│   ├── coco_categories_info.json
│   ├── codet_cc3m_clip_a+cname.npy
│   ├── codet_cococap_clip_a+cname.npy
│   ├── codet_coco_clip_a+cname.npy
│   ├── codet_lvis_v1_clip_a+cname.npy
│   ├── codet_o365_clip_a+cnamefix.npy
│   ├── detic_coco_clip_a+cname.npy
│   ├── detic_lvis_v1_clip_a+cname.npy
│   ├── lvis_categories_info.json
│   └── lvis_v1_train_cat_info.json
└── prototypes
    ├── CoDet_COCO_RN50.npy
    ├── CoDet_LVIS_EVA02.npy
    ├── CoDet_LVIS_RN50.npy
    ├── CoDet_LVIS_SWINB.npy
    ├── Detic_COCO_RN50.npy
    └── Detic_LVIS_SWINB.npy

where the prototypes directory contains pre-extracted visual prototypes, and you can use extract_training_set_features.py to generate them.

### For Detic with a ResNet50 backbone on the OV-COCO dataset.
python extract_training_set_features.py --dataset coco --detection-weight datasets/metadata/detic_coco_clip_a+cname.npy --config-file config/Detic_RN50_COCO.py