From 3508afca93a3dce852aedbfc82734829c1f98bf6 Mon Sep 17 00:00:00 2001 From: Linyiqi Date: Mon, 1 Nov 2021 23:27:01 +0800 Subject: [PATCH] Reformat config files (#46) * fix init * fix test api fix test api bug * add metarcnn fsdetview config * update pr * update meta file * fix CI --- .github/workflows/build.yml | 5 - .pre-commit-config.yaml | 5 + README.md | 122 ++++++++ configs/classification/README.md | 11 + ...t_84x84.py => cub_meta-test_5way-1shot.py} | 6 +- ...t_84x84.py => cub_meta-test_5way-5shot.py} | 6 +- ... => mini-imagenet_meta-test_5way-1shot.py} | 6 +- ... => mini-imagenet_meta-test_5way-5shot.py} | 6 +- ...> tiered-imagenet_meta-test_5way-1shot.py} | 6 +- ...> tiered-imagenet_meta-test_5way-5shot.py} | 6 +- .../_base_/runtime/epoch_based_runtime.py | 2 +- .../_base_/runtime/iter_based_runtime.py | 2 +- .../{adam_100000iter.py => adam_100k_iter.py} | 0 .../_base_/schedules/adam_200epoch.py | 4 - .../{sgd_60000iter.py => sgd_100k_iter.py} | 2 +- configs/classification/baseline/README.md | 69 +++++ .../baseline_conv4_1xb64_cub_5way-1shot.py} | 10 +- .../baseline_conv4_1xb64_cub_5way-5shot.py} | 10 +- .../cub/baseline_conv4_cub_5way_1shot.py | 7 - .../cub/baseline_conv4_cub_5way_5shot.py | 7 - ...baseline_resnet12_1xb64_cub_5way-1shot.py} | 10 +- ...baseline_resnet12_1xb64_cub_5way-5shot.py} | 10 +- .../cub/baseline_resnet12_cub_5way_1shot.py | 6 - .../cub/baseline_resnet12_cub_5way_5shot.py | 6 - .../classification/baseline/cub/metafile.yml | 64 +++++ ...e_conv4_1xb64_mini-imagenet_5way-1shot.py} | 10 +- ...e_conv4_1xb64_mini-imagenet_5way-5shot.py} | 10 +- ...baseline_conv4_mini_imagenet_5way_1shot.py | 6 - ...baseline_conv4_mini_imagenet_5way_5shot.py | 6 - ...esnet12_1xb64_mini-imagenet_5way-1shot.py} | 10 +- ...esnet12_1xb64_mini-imagenet_5way-5shot.py} | 10 +- ...eline_resnet12_mini_imagenet_5way_1shot.py | 6 - ...eline_resnet12_mini_imagenet_5way_5shot.py | 6 - .../baseline/mini_imagenet/metafile.yml | 64 +++++ ...conv4_1xb64_tiered-imagenet_5way-1shot.py} | 11 +- ...conv4_1xb64_tiered-imagenet_5way-5shot.py} | 11 +- ...seline_conv4_tiered_imagenet_5way_1shot.py | 7 - ...seline_conv4_tiered_imagenet_5way_5shot.py | 7 - ...snet12_1xb64_tiered-imagenet_5way-1shot.py | 47 ++++ ...snet12_1xb64_tiered-imagenet_5way-5shot.py | 47 ++++ ...ine_resnet12_tiered_imagenet_5way_1shot.py | 7 - ...ine_resnet12_tiered_imagenet_5way_5shot.py | 7 - .../baseline/tiered_imagenet/metafile.yml | 64 +++++ .../classification/baseline_plus/README.md | 67 +++++ ...aseline-plus_conv4_1xb64_cub_5way-1shot.py | 48 ++++ ...aseline-plus_conv4_1xb64_cub_5way-5shot.py | 48 ++++ ...line-plus_resnet12_1xb64_cub_5way-1shot.py | 55 ++++ ...line-plus_resnet12_1xb64_cub_5way-5shot.py | 55 ++++ .../cub/baseline_plus_conv4_cub_5way_1shot.py | 8 - .../cub/baseline_plus_conv4_cub_5way_5shot.py | 8 - .../baseline_plus_resnet12_cub_5way_1shot.py | 15 - .../baseline_plus_resnet12_cub_5way_5shot.py | 15 - .../baseline_plus/cub/metafile.yml | 64 +++++ ...us_conv4_1xb64_mini-imagenet_5way-1shot.py | 48 ++++ ...us_conv4_1xb64_mini-imagenet_5way-5shot.py | 48 ++++ ...resnet12_1xb64_mini-imagenet_5way-1shot.py | 55 ++++ ...resnet12_1xb64_mini-imagenet_5way-5shot.py | 55 ++++ ...ine_plus_conv4_mini_imagenet_5way_1shot.py | 8 - ...ine_plus_conv4_mini_imagenet_5way_5shot.py | 8 - ..._plus_resnet12_mini_imagenet_5way_1shot.py | 15 - ..._plus_resnet12_mini_imagenet_5way_5shot.py | 15 - .../baseline_plus/mini_imagenet/metafile.yml | 64 +++++ ...conv4_1xb64_tiered-imagenet_5way-1shot.py} | 12 +- ...conv4_1xb64_tiered-imagenet_5way-5shot.py} | 12 +- ...snet12_1xb64_tiered-imagenet_5way-1shot.py | 55 ++++ ...snet12_1xb64_tiered-imagenet_5way-5shot.py | 55 ++++ ...e_plus_conv4_tiered_imagenet_5way_1shot.py | 8 - ...e_plus_conv4_tiered_imagenet_5way_5shot.py | 8 - ...lus_resnet12_tiered_imagenet_5way_1shot.py | 15 - ...lus_resnet12_tiered_imagenet_5way_5shot.py | 15 - .../tiered_imagenet/metafile.yml | 64 +++++ configs/classification/maml/README.md | 66 +++++ ...py => maml_conv4_1xb105_cub_5way-1shot.py} | 14 +- ...py => maml_conv4_1xb105_cub_5way-5shot.py} | 14 +- .../maml/cub/maml_conv4_cub_5way_1shot.py | 10 - .../maml/cub/maml_conv4_cub_5way_5shot.py | 10 - .../maml_resnet12_1xb105_cub_5way-1shot.py | 52 ++++ .../maml_resnet12_1xb105_cub_5way-5shot.py | 52 ++++ .../maml/cub/maml_resnet12_cub_5way_1shot.py | 10 - .../maml/cub/maml_resnet12_cub_5way_5shot.py | 10 - configs/classification/maml/cub/metafile.yml | 59 ++++ ..._conv4_1xb105_mini-imagenet_5way-1shot.py} | 14 +- ..._conv4_1xb105_mini-imagenet_5way-5shot.py} | 14 +- .../maml_conv4_mini_imagenet_5way_1shot.py | 10 - .../maml_conv4_mini_imagenet_5way_5shot.py | 10 - ...esnet12_1xb105_mini-imagenet_5way-1shot.py | 52 ++++ ...esnet12_1xb105_mini-imagenet_5way-5shot.py | 52 ++++ .../maml_resnet12_mini_imagenet_5way_1shot.py | 10 - .../maml_resnet12_mini_imagenet_5way_5shot.py | 10 - .../maml/mini_imagenet/metafile.yml | 59 ++++ ...onv4_1xb105_tiered-imagenet_5way-1shot.py} | 15 +- ...onv4_1xb105_tiered-imagenet_5way-5shot.py} | 15 +- .../maml_conv4_tiered_imagenet_5way_1shot.py | 10 - .../maml_conv4_tiered_imagenet_5way_5shot.py | 10 - ...net12_1xb105_tiered-imagenet_5way-1shot.py | 52 ++++ ...net12_1xb105_tiered-imagenet_5way-5shot.py | 52 ++++ ...aml_resnet12_tiered_imagenet_5way_1shot.py | 10 - ...aml_resnet12_tiered_imagenet_5way_5shot.py | 10 - .../maml/tiered_imagenet/metafile.yml | 59 ++++ configs/classification/matching_net/README.md | 68 +++++ ...tching-net_conv4_1xb105_cub_5way-1shot.py} | 11 +- ...tching-net_conv4_1xb105_cub_5way-5shot.py} | 11 +- ...hing-net_resnet12_1xb105_cub_5way-1shot.py | 39 +++ ...hing-net_resnet12_1xb105_cub_5way-5shot.py | 39 +++ .../cub/matching_net_conv4_cub_5way_1shot.py | 5 - .../cub/matching_net_conv4_cub_5way_5shot.py | 5 - .../matching_net_resnet12_cub_5way_1shot.py | 5 - .../matching_net_resnet12_cub_5way_5shot.py | 5 - .../matching_net/cub/metafile.yml | 59 ++++ ..._conv4_1xb105_mini-imagenet_5way-1shot.py} | 11 +- ..._conv4_1xb105_mini-imagenet_5way-5shot.py} | 11 +- ...esnet12_1xb105_mini-imagenet_5way-1shot.py | 39 +++ ...esnet12_1xb105_mini-imagenet_5way-5shot.py | 39 +++ ...hing_net_conv4_mini_imagenet_5way_1shot.py | 5 - ...hing_net_conv4_mini_imagenet_5way_5shot.py | 5 - ...g_net_resnet12_mini_imagenet_5way_1shot.py | 5 - ...g_net_resnet12_mini_imagenet_5way_5shot.py | 5 - .../matching_net/mini_imagenet/metafile.yml | 59 ++++ ...conv4_1xb105_tiered-imagenet_5way-1shot.py | 39 +++ ...onv4_1xb105_tiered-imagenet_5way-5shot.py} | 12 +- ...net12_1xb105_tiered-imagenet_5way-1shot.py | 39 +++ ...et12_1xb105_tiered-imagenet_5way-5shot.py} | 12 +- ...ng_net_conv4_tiered_imagenet_5way_1shot.py | 5 - ...ng_net_conv4_tiered_imagenet_5way_5shot.py | 5 - ...net_resnet12_tiered_imagenet_5way_1shot.py | 5 - ...net_resnet12_tiered_imagenet_5way_5shot.py | 5 - .../matching_net/tiered_imagenet/metafile.yml | 59 ++++ .../classification/meta_baseline/README.md | 75 +++++ ...ta-baseline_conv4_1xb100_cub_5way-1shot.py | 42 +++ ...ta-baseline_conv4_1xb100_cub_5way-5shot.py | 42 +++ ...baseline_resnet12_1xb100_cub_5way-1shot.py | 42 +++ ...baseline_resnet12_1xb100_cub_5way-5shot.py | 42 +++ .../cub/meta_baseline_conv4_cub_5way_1shot.py | 7 - .../cub/meta_baseline_conv4_cub_5way_5shot.py | 7 - .../meta_baseline_resnet12_cub_5way_1shot.py | 7 - .../meta_baseline_resnet12_cub_5way_5shot.py | 7 - .../meta_baseline/cub/metafile.yml | 59 ++++ ..._conv4_1xb100_mini-imagenet_5way-1shot.py} | 13 +- ..._conv4_1xb100_mini-imagenet_5way-5shot.py} | 13 +- ...esnet12_1xb100_mini-imagenet_5way-1shot.py | 41 +++ ...esnet12_1xb100_mini-imagenet_5way-5shot.py | 41 +++ ...baseline_conv4_mini_imagenet_5way_1shot.py | 7 - ...baseline_conv4_mini_imagenet_5way_5shot.py | 7 - ...eline_resnet12_mini_imagenet_5way_1shot.py | 7 - ...eline_resnet12_mini_imagenet_5way_5shot.py | 7 - .../meta_baseline/mini_imagenet/metafile.yml | 59 ++++ ...conv4_1xb100_tiered-imagenet_5way-1shot.py | 42 +++ ...onv4_1xb100_tiered-imagenet_5way-5shot.py} | 13 +- ...net12_1xb100_tiered-imagenet_5way-1shot.py | 42 +++ ...et12_1xb100_tiered-imagenet_5way-5shot.py} | 13 +- ...seline_conv4_tiered_imagenet_5way_1shot.py | 8 - ...seline_conv4_tiered_imagenet_5way_5shot.py | 8 - ...ine_resnet12_tiered_imagenet_5way_1shot.py | 8 - ...ine_resnet12_tiered_imagenet_5way_5shot.py | 8 - .../tiered_imagenet/metafile.yml | 59 ++++ configs/classification/neg_margin/README.md | 68 +++++ .../neg_margin/cub/metafile.yml | 64 +++++ ...rgin_cosine_conv4_1xb64_cub_5way-1shot.py} | 22 +- ...rgin_cosine_conv4_1xb64_cub_5way-5shot.py} | 22 +- ...in_cosine_resnet12_1xb64_cub_5way-1shot.py | 57 ++++ ...in_cosine_resnet12_1xb64_cub_5way-5shot.py | 57 ++++ .../cub/neg_cosine_conv4_cub_5way_1shot.py | 19 -- .../cub/neg_cosine_conv4_cub_5way_5shot.py | 19 -- .../cub/neg_cosine_resnet12_cub_5way_1shot.py | 19 -- .../cub/neg_cosine_resnet12_cub_5way_5shot.py | 19 -- .../neg_margin/mini_imagenet/metafile.yml | 64 +++++ ...e_conv4_1xb64_mini-imagenet_5way-1shot.py} | 22 +- ...e_conv4_1xb64_mini-imagenet_5way-5shot.py} | 22 +- ...resnet12_1xb64_mini-imagenet_5way-1shot.py | 57 ++++ ...resnet12_1xb64_mini-imagenet_5way-5shot.py | 57 ++++ ...g_cosine_conv4_mini_imagenet_5way_1shot.py | 19 -- ...g_cosine_conv4_mini_imagenet_5way_5shot.py | 19 -- ...osine_resnet12_mini_imagenet_5way_1shot.py | 19 -- ...osine_resnet12_mini_imagenet_5way_5shot.py | 19 -- .../neg_margin/tiered_imagenet/metafile.yml | 64 +++++ ...conv4_1xb64_tiered-imagenet_5way-1shot.py} | 23 +- ...conv4_1xb64_tiered-imagenet_5way-5shot.py} | 23 +- ...snet12_1xb64_tiered-imagenet_5way-1shot.py | 57 ++++ ...snet12_1xb64_tiered-imagenet_5way-5shot.py | 57 ++++ ...cosine_conv4_tiered_imagenet_5way_1shot.py | 19 -- ...cosine_conv4_tiered_imagenet_5way_5shot.py | 19 -- ...ine_resnet12_tiered_imagenet_5way_1shot.py | 19 -- ...ine_resnet12_tiered_imagenet_5way_5shot.py | 19 -- configs/classification/proto_net/README.md | 67 +++++ .../classification/proto_net/cub/metafile.yml | 59 ++++ .../proto-net_conv4_1xb105_cub_5way-1shot.py} | 11 +- .../proto-net_conv4_1xb105_cub_5way-5shot.py} | 11 +- ...roto-net_resnet12_1xb105_cub_5way-1shot.py | 39 +++ ...roto-net_resnet12_1xb105_cub_5way-5shot.py | 39 +++ .../cub/proto_net_conv4_cub_5way_1shot.py | 6 - .../cub/proto_net_conv4_cub_5way_5shot.py | 5 - .../cub/proto_net_cub_5way_1shot_84x84_aug.py | 34 --- .../cub/proto_net_cub_5way_5shot_84x84_aug.py | 34 --- .../cub/proto_net_resnet12_cub_5way_1shot.py | 6 - .../cub/proto_net_resnet12_cub_5way_5shot.py | 6 - .../proto_net/mini_imagenet/metafile.yml | 59 ++++ ..._conv4_1xb105_mini-imagenet_5way-1shot.py} | 11 +- ..._conv4_1xb105_mini-imagenet_5way-5shot.py} | 11 +- ...esnet12_1xb105_mini-imagenet_5way-1shot.py | 39 +++ ...esnet12_1xb105_mini-imagenet_5way-5shot.py | 39 +++ ...roto_net_conv4_mini_imagenet_5way_1shot.py | 6 - ...roto_net_conv4_mini_imagenet_5way_5shot.py | 5 - ...o_net_resnet12_mini_imagenet_5way_1shot.py | 6 - ...o_net_resnet12_mini_imagenet_5way_5shot.py | 6 - .../proto_net/tiered_imagenet/metafile.yml | 59 ++++ ...conv4_1xb105_tiered-imagenet_5way-1shot.py | 39 +++ ...onv4_1xb105_tiered-imagenet_5way-5shot.py} | 12 +- ...net12_1xb105_tiered-imagenet_5way-1shot.py | 39 +++ ...et12_1xb105_tiered-imagenet_5way-5shot.py} | 12 +- ...to_net_conv4_tiered_imagenet_5way_1shot.py | 6 - ...to_net_conv4_tiered_imagenet_5way_5shot.py | 5 - ...net_resnet12_tiered_imagenet_5way_1shot.py | 6 - ...net_resnet12_tiered_imagenet_5way_5shot.py | 6 - configs/classification/relation_net/README.md | 68 +++++ .../relation_net/cub/metafile.yml | 59 ++++ ...elation-net_conv4_1xb105_cub_5way-1shot.py | 39 +++ ...elation-net_conv4_1xb105_cub_5way-5shot.py | 39 +++ ...tion-net_resnet12_1xb105_cub_5way-1shot.py | 39 +++ ...tion-net_resnet12_1xb105_cub_5way-5shot.py | 39 +++ .../cub/relation_net_conv4_cub_5way_1shot.py | 5 - .../cub/relation_net_conv4_cub_5way_5shot.py | 5 - .../relation_net_cub_5way_1shot_84x84_aug.py | 34 --- .../relation_net_cub_5way_5shot_84x84_aug.py | 34 --- .../relation_net_resnet12_cub_5way_1shot.py | 5 - .../relation_net_resnet12_cub_5way_5shot.py | 5 - .../relation_net/mini_imagenet/metafile.yml | 59 ++++ ...t_conv4_1xb105_mini-imagenet_5way-1shot.py | 39 +++ ...t_conv4_1xb105_mini-imagenet_5way-5shot.py | 39 +++ ...esnet12_1xb105_mini-imagenet_5way-1shot.py | 39 +++ ...esnet12_1xb105_mini-imagenet_5way-5shot.py | 39 +++ ...tion_net_conv4_mini_imagenet_5way_1shot.py | 5 - ...tion_net_conv4_mini_imagenet_5way_5shot.py | 5 - ..._net_mini_imagenet_5way_1shot_84x84_aug.py | 34 --- ..._net_mini_imagenet_5way_5shot_84x84_aug.py | 34 --- ...n_net_resnet12_mini_imagenet_5way_1shot.py | 5 - ...n_net_resnet12_mini_imagenet_5way_5shot.py | 5 - .../relation_net/tiered_imagenet/metafile.yml | 59 ++++ ...onv4_1xb105_tiered-imagenet_5way-1shot.py} | 11 +- ...onv4_1xb105_tiered-imagenet_5way-5shot.py} | 11 +- ...net12_1xb105_tiered-imagenet_5way-1shot.py | 41 +++ ...net12_1xb105_tiered-imagenet_5way-5shot.py | 41 +++ ...on_net_conv4_tiered_imagenet_5way_1shot.py | 5 - ...on_net_conv4_tiered_imagenet_5way_5shot.py | 5 - ...net_resnet12_tiered_imagenet_5way_1shot.py | 5 - ...net_resnet12_tiered_imagenet_5way_5shot.py | 5 - configs/detection/README.md | 10 + .../base_coco.py | 7 +- .../base_voc.py | 0 .../few_shot_coco.py | 7 +- .../few_shot_voc.py | 0 .../_base_/datasets/nway_kshot/base_coco.py | 7 +- .../datasets/nway_kshot/few_shot_coco.py | 7 +- .../_base_/datasets/query_aware/base_coco.py | 10 +- .../datasets/query_aware/few_shot_coco.py | 7 +- .../_base_/datasets/two_branch/base_coco.py | 11 +- .../_base_/datasets/two_branch/base_voc.py | 10 +- .../datasets/two_branch/few_shot_coco.py | 11 +- .../datasets/two_branch/few_shot_voc.py | 10 +- configs/detection/_base_/default_runtime.py | 4 +- .../models/faster_rcnn_r50_caffe_fpn.py | 5 +- .../_base_/models/faster_rcnn_r50_fpn.py | 108 ------- configs/detection/attention_rpn/README.md | 110 ++++++++ ...rcnn_r50_c4.py => attention-rpn_r50_c4.py} | 0 ...pn_r50_c4_4xb2_coco_10shot-fine-tuning.py} | 8 +- ...pn_r50_c4_4xb2_coco_30shot-fine-tuning.py} | 9 +- ...ion-rpn_r50_c4_4xb2_coco_base-training.py} | 4 +- ..._4xb2_coco_official-10shot-fine-tuning.py} | 8 +- ...50_c4_4xb2_coco_official-base-training.py} | 4 +- .../detection/attention_rpn/coco/metafile.yml | 70 +++++ ...n_r50_c4_voc-split1_10shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split1_1shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split1_2shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split1_3shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split1_5shot-fine-tuning.py} | 8 +- ...on-rpn_r50_c4_voc-split1_base-training.py} | 3 +- .../attention_rpn/voc/split1/metafile.yml | 81 ++++++ ...n_r50_c4_voc-split2_10shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split2_1shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split2_2shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split2_3shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split2_5shot-fine-tuning.py} | 8 +- ...on-rpn_r50_c4_voc-split2_base-training.py} | 3 +- .../attention_rpn/voc/split2/metafile.yml | 81 ++++++ ...n_r50_c4_voc-split3_10shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split3_1shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split3_2shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split3_3shot-fine-tuning.py} | 8 +- ...pn_r50_c4_voc-split3_5shot-fine-tuning.py} | 8 +- ...on-rpn_r50_c4_voc-split3_base-training.py} | 3 +- .../attention_rpn/voc/split3/metafile.yml | 81 ++++++ configs/detection/fsce/README.md | 137 +++++++++ ... fsce_r101_fpn_coco_10shot-fine-tuning.py} | 15 +- ... fsce_r101_fpn_coco_30shot-fine-tuning.py} | 15 +- ...py => fsce_r101_fpn_coco_base-training.py} | 2 +- configs/detection/fsce/coco/metafile.yml | 51 ++++ ...ster_rcnn_r101_fpn.py => fsce_r101_fpn.py} | 0 ...l.py => fsce_r101_fpn_contrastive_loss.py} | 0 ...ive-loss_voc-split1_10shot-fine-tuning.py} | 14 +- ...tive-loss_voc-split1_3shot-fine-tuning.py} | 14 +- ...tive-loss_voc-split1_5shot-fine-tuning.py} | 14 +- ...r101_fpn_voc-split1_10shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split1_1shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split1_2shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split1_3shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split1_5shot-fine-tuning.py} | 16 +- ...fsce_r101_fpn_voc-split1_base-training.py} | 5 +- .../detection/fsce/voc/split1/metafile.yml | 123 ++++++++ ...ive-loss_voc-split2_10shot-fine-tuning.py} | 14 +- ...tive-loss_voc-split2_3shot-fine-tuning.py} | 14 +- ...tive-loss_voc-split2_5shot-fine-tuning.py} | 14 +- ...r101_fpn_voc-split2_10shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split2_1shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split2_2shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split2_3shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split2_5shot-fine-tuning.py} | 16 +- ...fsce_r101_fpn_voc-split2_base-training.py} | 4 +- .../detection/fsce/voc/split2/metafile.yml | 123 ++++++++ ...ive-loss_voc-split3_10shot-fine-tuning.py} | 14 +- ...tive-loss_voc-split3_3shot-fine-tuning.py} | 14 +- ...tive-loss_voc-split3_5shot-fine-tuning.py} | 14 +- ...r101_fpn_voc-split3_10shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split3_1shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split3_2shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split3_3shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split3_5shot-fine-tuning.py} | 16 +- ...fsce_r101_fpn_voc-split3_base-training.py} | 4 +- .../detection/fsce/voc/split3/metafile.yml | 123 ++++++++ configs/detection/fsdetview/README.md | 100 +++++++ ...ew_r50_c4_8xb4_coco_10shot-fine-tuning.py} | 6 +- ...ew_r50_c4_8xb4_coco_30shot-fine-tuning.py} | 6 +- ...detview_r50_c4_8xb4_coco_base-training.py} | 5 +- configs/detection/fsdetview/coco/metafile.yml | 51 ++++ .../fsdetview_r101_c4.py} | 2 +- ...ter_rcnn_r50_c4.py => fsdetview_r50_c4.py} | 0 ..._c4_8xb4_voc-split1_10shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split1_1shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split1_2shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split1_3shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split1_5shot-fine-tuning.py} | 7 +- ..._r101_c4_8xb4_voc-split1_base-training.py} | 3 +- .../fsdetview/voc/split1/metafile.yml | 87 ++++++ ..._c4_8xb4_voc-split2_10shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split2_1shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split2_2shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split2_3shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split2_5shot-fine-tuning.py} | 7 +- ..._r101_c4_8xb4_voc-split2_base-training.py} | 3 +- .../fsdetview/voc/split2/metafile.yml | 87 ++++++ ..._c4_8xb4_voc-split3_10shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split3_1shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split3_2shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split3_3shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split3_5shot-fine-tuning.py} | 7 +- ..._r101_c4_8xb4_voc-split3_base-training.py} | 3 +- .../fsdetview/voc/split3/metafile.yml | 87 ++++++ configs/detection/meta_rcnn/README.md | 90 ++++++ ...nn_r50_c4_8xb4_coco_10shot-fine-tuning.py} | 6 +- ...nn_r50_c4_8xb4_coco_30shot-fine-tuning.py} | 6 +- ...ta-rcnn_r50_c4_8xb4_coco_base-training.py} | 2 +- configs/detection/meta_rcnn/coco/metafile.yml | 51 ++++ .../meta-rcnn_r101_c4.py} | 2 +- ...ter_rcnn_r50_c4.py => meta-rcnn_r50_c4.py} | 0 ..._c4_8xb4_voc-split1_10shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split1_1shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split1_2shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split1_3shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split1_5shot-fine-tuning.py} | 7 +- ..._r101_c4_8xb4_voc-split1_base-training.py} | 3 +- .../meta_rcnn/voc/split1/metafile.yml | 87 ++++++ ..._c4_8xb4_voc-split2_10shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split2_1shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split2_2shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split2_3shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split2_5shot-fine-tuning.py} | 7 +- ..._r101_c4_8xb4_voc-split2_base-training.py} | 3 +- .../meta_rcnn/voc/split2/metafile.yml | 87 ++++++ ..._c4_8xb4_voc-split3_10shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split3_1shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split3_2shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split3_3shot-fine-tuning.py} | 7 +- ...1_c4_8xb4_voc-split3_5shot-fine-tuning.py} | 7 +- ..._r101_c4_8xb4_voc-split3_base-training.py} | 3 +- .../meta_rcnn/voc/split3/metafile.yml | 87 ++++++ configs/detection/mpsr/README.md | 88 ++++++ configs/detection/mpsr/coco/metafile.yml | 52 ++++ ..._r101_fpn_2xb2_coco_10shot-fine-tuning.py} | 6 +- ..._r101_fpn_2xb2_coco_30shot-fine-tuning.py} | 6 +- ... mpsr_r101_fpn_2xb2_coco_base-training.py} | 2 +- ...ster_rcnn_r101_fpn.py => mpsr_r101_fpn.py} | 0 .../detection/mpsr/voc/split1/metafile.yml | 88 ++++++ ...fpn_2xb2_voc-split1_10shot-fine-tuning.py} | 17 +- ..._fpn_2xb2_voc-split1_1shot-fine-tuning.py} | 21 +- ..._fpn_2xb2_voc-split1_2shot-fine-tuning.py} | 18 +- ..._fpn_2xb2_voc-split1_3shot-fine-tuning.py} | 18 +- ..._fpn_2xb2_voc-split1_5shot-fine-tuning.py} | 17 +- ...r101_fpn_2xb2_voc-split1_base-training.py} | 14 +- .../detection/mpsr/voc/split2/metafile.yml | 88 ++++++ ...fpn_2xb2_voc-split2_10shot-fine-tuning.py} | 16 +- ..._fpn_2xb2_voc-split2_1shot-fine-tuning.py} | 18 +- ..._fpn_2xb2_voc-split2_2shot-fine-tuning.py} | 18 +- ..._fpn_2xb2_voc-split2_3shot-fine-tuning.py} | 18 +- ..._fpn_2xb2_voc-split2_5shot-fine-tuning.py} | 17 +- ...r101_fpn_2xb2_voc-split2_base-training.py} | 9 +- .../detection/mpsr/voc/split3/metafile.yml | 88 ++++++ ...fpn_2xb2_voc-split3_10shot-fine-tuning.py} | 17 +- ..._fpn_2xb2_voc-split3_1shot-fine-tuning.py} | 18 +- ..._fpn_2xb2_voc-split3_2shot-fine-tuning.py} | 18 +- ..._fpn_2xb2_voc-split3_3shot-fine-tuning.py} | 18 +- ..._fpn_2xb2_voc-split3_5shot-fine-tuning.py} | 17 +- ...r101_fpn_2xb2_voc-split3_base-training.py} | 9 +- configs/detection/tfa/README.md | 116 ++++++++ configs/detection/tfa/coco/metafile.yml | 51 ++++ ...> tfa_r101_fpn_coco_10shot-fine-tuning.py} | 14 +- ...> tfa_r101_fpn_coco_30shot-fine-tuning.py} | 14 +- ....py => tfa_r101_fpn_coco_base-training.py} | 2 +- ...aster_rcnn_r101_fpn.py => tfa_r101_fpn.py} | 0 configs/detection/tfa/voc/split1/metafile.yml | 87 ++++++ ...r101_fpn_voc-split1_10shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split1_1shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split1_2shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split1_3shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split1_5shot-fine-tuning.py} | 16 +- .../tfa_r101_fpn_voc-split1_base-training.py} | 4 +- configs/detection/tfa/voc/split2/metafile.yml | 87 ++++++ ...r101_fpn_voc-split2_10shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split2_1shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split2_2shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split2_3shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split2_5shot-fine-tuning.py} | 16 +- ... tfa_r101_fpn_voc-split2_base-training.py} | 5 +- configs/detection/tfa/voc/split3/metafile.yml | 87 ++++++ ...r101_fpn_voc-split3_10shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split3_1shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split3_2shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split3_3shot-fine-tuning.py} | 16 +- ..._r101_fpn_voc-split3_5shot-fine-tuning.py} | 16 +- ... tfa_r101_fpn_voc-split3_base-training.py} | 7 +- mmfewshot/__init__.py | 4 +- .../utils/meta_test_parallel.py | 2 +- .../detection/core/evaluation/mean_ap.py | 2 +- mmfewshot/detection/datasets/builder.py | 2 +- mmfewshot/detection/datasets/few_shot_base.py | 2 +- .../detection/datasets/pipelines/__init__.py | 2 +- .../pipelines/{formating.py => formatting.py} | 0 mmfewshot/detection/datasets/voc.py | 4 +- .../models/dense_heads/attention_rpn_head.py | 2 +- .../models/dense_heads/two_branch_rpn_head.py | 4 +- mmfewshot/detection/models/detectors/mpsr.py | 2 +- model-index.yml | 49 ++++ model_zoo.yml | 49 ++++ requirements/readthedocs.txt | 2 +- ...mating.py => test_detection_formatting.py} | 2 +- .../test_attention_rpn_detector.py | 106 ++++++- .../test_detectors/test_meta_rcnn_detector.py | 106 ++++++- .../test_detectors/test_mpsr_detector.py | 109 +++++++- .../detection/misc/visualize_saved_dataset.py | 3 +- tools/detection/multi_dist_test.sh | 10 - tools/detection/multi_test.py | 264 ------------------ tools/misc/print_config.py | 55 ++++ 459 files changed, 8904 insertions(+), 2416 deletions(-) create mode 100644 configs/classification/README.md rename configs/classification/_base_/meta_test/{cub_meta_test_5way_1shot_84x84.py => cub_meta-test_5way-1shot.py} (91%) rename configs/classification/_base_/meta_test/{cub_meta_test_5way_5shot_84x84.py => cub_meta-test_5way-5shot.py} (91%) rename configs/classification/_base_/meta_test/{mini_imagenet_meta_test_5way_1shot_84x84.py => mini-imagenet_meta-test_5way-1shot.py} (91%) rename configs/classification/_base_/meta_test/{mini_imagenet_meta_test_5way_5shot_84x84.py => mini-imagenet_meta-test_5way-5shot.py} (91%) rename configs/classification/_base_/meta_test/{tiered_imagenet_meta_test_5way_1shot_84x84.py => tiered-imagenet_meta-test_5way-1shot.py} (91%) rename configs/classification/_base_/meta_test/{tiered_imagenet_meta_test_5way_5shot_84x84.py => tiered-imagenet_meta-test_5way-5shot.py} (91%) rename configs/classification/_base_/schedules/{adam_100000iter.py => adam_100k_iter.py} (100%) delete mode 100644 configs/classification/_base_/schedules/adam_200epoch.py rename configs/classification/_base_/schedules/{sgd_60000iter.py => sgd_100k_iter.py} (82%) create mode 100644 configs/classification/baseline/README.md rename configs/classification/{baseline_plus/cub/baseline_plus_cub_5way_1shot_84x84_aug.py => baseline/cub/baseline_conv4_1xb64_cub_5way-1shot.py} (80%) rename configs/classification/{baseline_plus/cub/baseline_plus_cub_5way_5shot_84x84_aug.py => baseline/cub/baseline_conv4_1xb64_cub_5way-5shot.py} (80%) delete mode 100644 configs/classification/baseline/cub/baseline_conv4_cub_5way_1shot.py delete mode 100644 configs/classification/baseline/cub/baseline_conv4_cub_5way_5shot.py rename configs/classification/baseline/cub/{baseline_cub_5way_1shot_84x84_aug.py => baseline_resnet12_1xb64_cub_5way-1shot.py} (80%) rename configs/classification/baseline/cub/{baseline_cub_5way_5shot_84x84_aug.py => baseline_resnet12_1xb64_cub_5way-5shot.py} (80%) delete mode 100644 configs/classification/baseline/cub/baseline_resnet12_cub_5way_1shot.py delete mode 100644 configs/classification/baseline/cub/baseline_resnet12_cub_5way_5shot.py create mode 100644 configs/classification/baseline/cub/metafile.yml rename configs/classification/baseline/mini_imagenet/{baseline_mini_imagenet_5way_1shot_84x84_aug.py => baseline_conv4_1xb64_mini-imagenet_5way-1shot.py} (80%) rename configs/classification/baseline/mini_imagenet/{baseline_mini_imagenet_5way_5shot_84x84_aug.py => baseline_conv4_1xb64_mini-imagenet_5way-5shot.py} (80%) delete mode 100644 configs/classification/baseline/mini_imagenet/baseline_conv4_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/baseline/mini_imagenet/baseline_conv4_mini_imagenet_5way_5shot.py rename configs/classification/{baseline_plus/mini_imagenet/baseline_plus_mini_imagenet_5way_1shot_84x84_aug.py => baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-1shot.py} (80%) rename configs/classification/{baseline_plus/mini_imagenet/baseline_plus_mini_imagenet_5way_5shot_84x84_aug.py => baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-5shot.py} (80%) delete mode 100644 configs/classification/baseline/mini_imagenet/baseline_resnet12_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/baseline/mini_imagenet/baseline_resnet12_mini_imagenet_5way_5shot.py create mode 100644 configs/classification/baseline/mini_imagenet/metafile.yml rename configs/classification/baseline/tiered_imagenet/{baseline_tiered_imagenet_5way_1shot_84x84_aug.py => baseline_conv4_1xb64_tiered-imagenet_5way-1shot.py} (80%) rename configs/classification/baseline/tiered_imagenet/{baseline_tiered_imagenet_5way_5shot_84x84_aug.py => baseline_conv4_1xb64_tiered-imagenet_5way-5shot.py} (80%) delete mode 100644 configs/classification/baseline/tiered_imagenet/baseline_conv4_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/baseline/tiered_imagenet/baseline_conv4_tiered_imagenet_5way_5shot.py create mode 100644 configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-1shot.py create mode 100644 configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-5shot.py delete mode 100644 configs/classification/baseline/tiered_imagenet/baseline_resnet12_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/baseline/tiered_imagenet/baseline_resnet12_tiered_imagenet_5way_5shot.py create mode 100644 configs/classification/baseline/tiered_imagenet/metafile.yml create mode 100644 configs/classification/baseline_plus/README.md create mode 100644 configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-1shot.py create mode 100644 configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-5shot.py create mode 100644 configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-1shot.py create mode 100644 configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-5shot.py delete mode 100644 configs/classification/baseline_plus/cub/baseline_plus_conv4_cub_5way_1shot.py delete mode 100644 configs/classification/baseline_plus/cub/baseline_plus_conv4_cub_5way_5shot.py delete mode 100644 configs/classification/baseline_plus/cub/baseline_plus_resnet12_cub_5way_1shot.py delete mode 100644 configs/classification/baseline_plus/cub/baseline_plus_resnet12_cub_5way_5shot.py create mode 100644 configs/classification/baseline_plus/cub/metafile.yml create mode 100644 configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-1shot.py create mode 100644 configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-5shot.py create mode 100644 configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-1shot.py create mode 100644 configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-5shot.py delete mode 100644 configs/classification/baseline_plus/mini_imagenet/baseline_plus_conv4_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/baseline_plus/mini_imagenet/baseline_plus_conv4_mini_imagenet_5way_5shot.py delete mode 100644 configs/classification/baseline_plus/mini_imagenet/baseline_plus_resnet12_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/baseline_plus/mini_imagenet/baseline_plus_resnet12_mini_imagenet_5way_5shot.py create mode 100644 configs/classification/baseline_plus/mini_imagenet/metafile.yml rename configs/classification/baseline_plus/tiered_imagenet/{baseline_plus_tiered_imagenet_5way_1shot_84x84_aug.py => baseline-plus_conv4_1xb64_tiered-imagenet_5way-1shot.py} (78%) rename configs/classification/baseline_plus/tiered_imagenet/{baseline_plus_tiered_imagenet_5way_5shot_84x84_aug.py => baseline-plus_conv4_1xb64_tiered-imagenet_5way-5shot.py} (79%) create mode 100644 configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-1shot.py create mode 100644 configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-5shot.py delete mode 100644 configs/classification/baseline_plus/tiered_imagenet/baseline_plus_conv4_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/baseline_plus/tiered_imagenet/baseline_plus_conv4_tiered_imagenet_5way_5shot.py delete mode 100644 configs/classification/baseline_plus/tiered_imagenet/baseline_plus_resnet12_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/baseline_plus/tiered_imagenet/baseline_plus_resnet12_tiered_imagenet_5way_5shot.py create mode 100644 configs/classification/baseline_plus/tiered_imagenet/metafile.yml create mode 100644 configs/classification/maml/README.md rename configs/classification/maml/cub/{maml_cub_5way_1shot_84x84_aug.py => maml_conv4_1xb105_cub_5way-1shot.py} (80%) rename configs/classification/maml/cub/{maml_cub_5way_5shot_84x84_aug.py => maml_conv4_1xb105_cub_5way-5shot.py} (80%) delete mode 100644 configs/classification/maml/cub/maml_conv4_cub_5way_1shot.py delete mode 100644 configs/classification/maml/cub/maml_conv4_cub_5way_5shot.py create mode 100644 configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-1shot.py create mode 100644 configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-5shot.py delete mode 100644 configs/classification/maml/cub/maml_resnet12_cub_5way_1shot.py delete mode 100644 configs/classification/maml/cub/maml_resnet12_cub_5way_5shot.py create mode 100644 configs/classification/maml/cub/metafile.yml rename configs/classification/maml/mini_imagenet/{maml_mini_imagenet_5way_1shot_84x84_aug.py => maml_conv4_1xb105_mini-imagenet_5way-1shot.py} (79%) rename configs/classification/maml/mini_imagenet/{maml_mini_imagenet_5way_5shot_84x84_aug.py => maml_conv4_1xb105_mini-imagenet_5way-5shot.py} (79%) delete mode 100644 configs/classification/maml/mini_imagenet/maml_conv4_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/maml/mini_imagenet/maml_conv4_mini_imagenet_5way_5shot.py create mode 100644 configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-1shot.py create mode 100644 configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-5shot.py delete mode 100644 configs/classification/maml/mini_imagenet/maml_resnet12_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/maml/mini_imagenet/maml_resnet12_mini_imagenet_5way_5shot.py create mode 100644 configs/classification/maml/mini_imagenet/metafile.yml rename configs/classification/maml/tiered_imagenet/{maml_tiered_imagenet_5way_1shot_84x84_aug.py => maml_conv4_1xb105_tiered-imagenet_5way-1shot.py} (79%) rename configs/classification/maml/tiered_imagenet/{maml_tiered_imagenet_5way_5shot_84x84_aug.py => maml_conv4_1xb105_tiered-imagenet_5way-5shot.py} (80%) delete mode 100644 configs/classification/maml/tiered_imagenet/maml_conv4_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/maml/tiered_imagenet/maml_conv4_tiered_imagenet_5way_5shot.py create mode 100644 configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-1shot.py create mode 100644 configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-5shot.py delete mode 100644 configs/classification/maml/tiered_imagenet/maml_resnet12_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/maml/tiered_imagenet/maml_resnet12_tiered_imagenet_5way_5shot.py create mode 100644 configs/classification/maml/tiered_imagenet/metafile.yml create mode 100644 configs/classification/matching_net/README.md rename configs/classification/matching_net/cub/{matching_net_cub_5way_5shot_84x84_aug.py => matching-net_conv4_1xb105_cub_5way-1shot.py} (79%) rename configs/classification/matching_net/cub/{matching_net_cub_5way_1shot_84x84_aug.py => matching-net_conv4_1xb105_cub_5way-5shot.py} (79%) create mode 100644 configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-1shot.py create mode 100644 configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-5shot.py delete mode 100644 configs/classification/matching_net/cub/matching_net_conv4_cub_5way_1shot.py delete mode 100644 configs/classification/matching_net/cub/matching_net_conv4_cub_5way_5shot.py delete mode 100644 configs/classification/matching_net/cub/matching_net_resnet12_cub_5way_1shot.py delete mode 100644 configs/classification/matching_net/cub/matching_net_resnet12_cub_5way_5shot.py create mode 100644 configs/classification/matching_net/cub/metafile.yml rename configs/classification/matching_net/mini_imagenet/{matching_net_mini_imagenet_5way_5shot_84x84_aug.py => matching-net_conv4_1xb105_mini-imagenet_5way-1shot.py} (79%) rename configs/classification/matching_net/mini_imagenet/{matching_net_mini_imagenet_5way_1shot_84x84_aug.py => matching-net_conv4_1xb105_mini-imagenet_5way-5shot.py} (79%) create mode 100644 configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-1shot.py create mode 100644 configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-5shot.py delete mode 100644 configs/classification/matching_net/mini_imagenet/matching_net_conv4_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/matching_net/mini_imagenet/matching_net_conv4_mini_imagenet_5way_5shot.py delete mode 100644 configs/classification/matching_net/mini_imagenet/matching_net_resnet12_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/matching_net/mini_imagenet/matching_net_resnet12_mini_imagenet_5way_5shot.py create mode 100644 configs/classification/matching_net/mini_imagenet/metafile.yml create mode 100644 configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-1shot.py rename configs/classification/matching_net/tiered_imagenet/{matching_net_tiered_imagenet_5way_5shot_84x84_aug.py => matching-net_conv4_1xb105_tiered-imagenet_5way-5shot.py} (80%) create mode 100644 configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py rename configs/classification/{proto_net/tiered_imagenet/proto_net_tiered_imagenet_5way_5shot_84x84_aug.py => matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py} (79%) delete mode 100644 configs/classification/matching_net/tiered_imagenet/matching_net_conv4_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/matching_net/tiered_imagenet/matching_net_conv4_tiered_imagenet_5way_5shot.py delete mode 100644 configs/classification/matching_net/tiered_imagenet/matching_net_resnet12_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/matching_net/tiered_imagenet/matching_net_resnet12_tiered_imagenet_5way_5shot.py create mode 100644 configs/classification/matching_net/tiered_imagenet/metafile.yml create mode 100644 configs/classification/meta_baseline/README.md create mode 100644 configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-1shot.py create mode 100644 configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-5shot.py create mode 100644 configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-1shot.py create mode 100644 configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-5shot.py delete mode 100644 configs/classification/meta_baseline/cub/meta_baseline_conv4_cub_5way_1shot.py delete mode 100644 configs/classification/meta_baseline/cub/meta_baseline_conv4_cub_5way_5shot.py delete mode 100644 configs/classification/meta_baseline/cub/meta_baseline_resnet12_cub_5way_1shot.py delete mode 100644 configs/classification/meta_baseline/cub/meta_baseline_resnet12_cub_5way_5shot.py create mode 100644 configs/classification/meta_baseline/cub/metafile.yml rename configs/classification/meta_baseline/mini_imagenet/{meta_baseline_mini_imagenet_5way_1shot_84x84_aug.py => meta-baseline_conv4_1xb100_mini-imagenet_5way-1shot.py} (72%) rename configs/classification/meta_baseline/mini_imagenet/{meta_baseline_mini_imagenet_5way_5shot_84x84_aug.py => meta-baseline_conv4_1xb100_mini-imagenet_5way-5shot.py} (72%) create mode 100644 configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-1shot.py create mode 100644 configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-5shot.py delete mode 100644 configs/classification/meta_baseline/mini_imagenet/meta_baseline_conv4_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/meta_baseline/mini_imagenet/meta_baseline_conv4_mini_imagenet_5way_5shot.py delete mode 100644 configs/classification/meta_baseline/mini_imagenet/meta_baseline_resnet12_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/meta_baseline/mini_imagenet/meta_baseline_resnet12_mini_imagenet_5way_5shot.py create mode 100644 configs/classification/meta_baseline/mini_imagenet/metafile.yml create mode 100644 configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-1shot.py rename configs/classification/meta_baseline/tiered_imagenet/{meta_baseline_tiered_imagenet_5way_1shot_84x84_aug.py => meta-baseline_conv4_1xb100_tiered-imagenet_5way-5shot.py} (74%) create mode 100644 configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-1shot.py rename configs/classification/meta_baseline/tiered_imagenet/{meta_baseline_tiered_imagenet_5way_5shot_84x84_aug.py => meta-baseline_resnet12_1xb100_tiered-imagenet_5way-5shot.py} (74%) delete mode 100644 configs/classification/meta_baseline/tiered_imagenet/meta_baseline_conv4_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/meta_baseline/tiered_imagenet/meta_baseline_conv4_tiered_imagenet_5way_5shot.py delete mode 100644 configs/classification/meta_baseline/tiered_imagenet/meta_baseline_resnet12_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/meta_baseline/tiered_imagenet/meta_baseline_resnet12_tiered_imagenet_5way_5shot.py create mode 100644 configs/classification/meta_baseline/tiered_imagenet/metafile.yml create mode 100644 configs/classification/neg_margin/README.md create mode 100644 configs/classification/neg_margin/cub/metafile.yml rename configs/classification/neg_margin/cub/{neg_margin_cub_5way_1shot_84x84_aug.py => neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py} (70%) rename configs/classification/neg_margin/cub/{neg_margin_cub_5way_5shot_84x84_aug.py => neg-margin_cosine_conv4_1xb64_cub_5way-5shot.py} (70%) create mode 100644 configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-1shot.py create mode 100644 configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-5shot.py delete mode 100644 configs/classification/neg_margin/cub/neg_cosine_conv4_cub_5way_1shot.py delete mode 100644 configs/classification/neg_margin/cub/neg_cosine_conv4_cub_5way_5shot.py delete mode 100644 configs/classification/neg_margin/cub/neg_cosine_resnet12_cub_5way_1shot.py delete mode 100644 configs/classification/neg_margin/cub/neg_cosine_resnet12_cub_5way_5shot.py create mode 100644 configs/classification/neg_margin/mini_imagenet/metafile.yml rename configs/classification/neg_margin/mini_imagenet/{neg_margin_mini_imagenet_5way_1shot_84x84_aug.py => neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-1shot.py} (69%) rename configs/classification/neg_margin/mini_imagenet/{neg_margin_mini_imagenet_5way_5shot_84x84_aug.py => neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-5shot.py} (69%) create mode 100644 configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-1shot.py create mode 100644 configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-5shot.py delete mode 100644 configs/classification/neg_margin/mini_imagenet/neg_cosine_conv4_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/neg_margin/mini_imagenet/neg_cosine_conv4_mini_imagenet_5way_5shot.py delete mode 100644 configs/classification/neg_margin/mini_imagenet/neg_cosine_resnet12_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/neg_margin/mini_imagenet/neg_cosine_resnet12_mini_imagenet_5way_5shot.py create mode 100644 configs/classification/neg_margin/tiered_imagenet/metafile.yml rename configs/classification/neg_margin/tiered_imagenet/{neg_margin_tiered_imagenet_5way_1shot_84x84_aug.py => neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-1shot.py} (69%) rename configs/classification/neg_margin/tiered_imagenet/{neg_margin_tiered_imagenet_5way_5shot_84x84_aug.py => neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-5shot.py} (70%) create mode 100644 configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-1shot.py create mode 100644 configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-5shot.py delete mode 100644 configs/classification/neg_margin/tiered_imagenet/neg_cosine_conv4_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/neg_margin/tiered_imagenet/neg_cosine_conv4_tiered_imagenet_5way_5shot.py delete mode 100644 configs/classification/neg_margin/tiered_imagenet/neg_cosine_resnet12_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/neg_margin/tiered_imagenet/neg_cosine_resnet12_tiered_imagenet_5way_5shot.py create mode 100644 configs/classification/proto_net/README.md create mode 100644 configs/classification/proto_net/cub/metafile.yml rename configs/classification/{meta_baseline/cub/meta_baseline_cub_5way_1shot_84x84_aug.py => proto_net/cub/proto-net_conv4_1xb105_cub_5way-1shot.py} (79%) rename configs/classification/{meta_baseline/cub/meta_baseline_cub_5way_5shot_84x84_aug.py => proto_net/cub/proto-net_conv4_1xb105_cub_5way-5shot.py} (79%) create mode 100644 configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-1shot.py create mode 100644 configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-5shot.py delete mode 100644 configs/classification/proto_net/cub/proto_net_conv4_cub_5way_1shot.py delete mode 100644 configs/classification/proto_net/cub/proto_net_conv4_cub_5way_5shot.py delete mode 100644 configs/classification/proto_net/cub/proto_net_cub_5way_1shot_84x84_aug.py delete mode 100644 configs/classification/proto_net/cub/proto_net_cub_5way_5shot_84x84_aug.py delete mode 100644 configs/classification/proto_net/cub/proto_net_resnet12_cub_5way_1shot.py delete mode 100644 configs/classification/proto_net/cub/proto_net_resnet12_cub_5way_5shot.py create mode 100644 configs/classification/proto_net/mini_imagenet/metafile.yml rename configs/classification/proto_net/mini_imagenet/{proto_net_mini_imagenet_5way_1shot_84x84_aug.py => proto-net_conv4_1xb105_mini-imagenet_5way-1shot.py} (79%) rename configs/classification/proto_net/mini_imagenet/{proto_net_mini_imagenet_5way_5shot_84x84_aug.py => proto-net_conv4_1xb105_mini-imagenet_5way-5shot.py} (79%) create mode 100644 configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-1shot.py create mode 100644 configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-5shot.py delete mode 100644 configs/classification/proto_net/mini_imagenet/proto_net_conv4_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/proto_net/mini_imagenet/proto_net_conv4_mini_imagenet_5way_5shot.py delete mode 100644 configs/classification/proto_net/mini_imagenet/proto_net_resnet12_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/proto_net/mini_imagenet/proto_net_resnet12_mini_imagenet_5way_5shot.py create mode 100644 configs/classification/proto_net/tiered_imagenet/metafile.yml create mode 100644 configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-1shot.py rename configs/classification/{matching_net/tiered_imagenet/matching_net_tiered_imagenet_5way_1shot_84x84_aug.py => proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-5shot.py} (80%) create mode 100644 configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py rename configs/classification/proto_net/tiered_imagenet/{proto_net_tiered_imagenet_5way_1shot_84x84_aug.py => proto-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py} (79%) delete mode 100644 configs/classification/proto_net/tiered_imagenet/proto_net_conv4_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/proto_net/tiered_imagenet/proto_net_conv4_tiered_imagenet_5way_5shot.py delete mode 100644 configs/classification/proto_net/tiered_imagenet/proto_net_resnet12_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/proto_net/tiered_imagenet/proto_net_resnet12_tiered_imagenet_5way_5shot.py create mode 100644 configs/classification/relation_net/README.md create mode 100644 configs/classification/relation_net/cub/metafile.yml create mode 100644 configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-1shot.py create mode 100644 configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-5shot.py create mode 100644 configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-1shot.py create mode 100644 configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-5shot.py delete mode 100644 configs/classification/relation_net/cub/relation_net_conv4_cub_5way_1shot.py delete mode 100644 configs/classification/relation_net/cub/relation_net_conv4_cub_5way_5shot.py delete mode 100644 configs/classification/relation_net/cub/relation_net_cub_5way_1shot_84x84_aug.py delete mode 100644 configs/classification/relation_net/cub/relation_net_cub_5way_5shot_84x84_aug.py delete mode 100644 configs/classification/relation_net/cub/relation_net_resnet12_cub_5way_1shot.py delete mode 100644 configs/classification/relation_net/cub/relation_net_resnet12_cub_5way_5shot.py create mode 100644 configs/classification/relation_net/mini_imagenet/metafile.yml create mode 100644 configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-1shot.py create mode 100644 configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-5shot.py create mode 100644 configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-1shot.py create mode 100644 configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-5shot.py delete mode 100644 configs/classification/relation_net/mini_imagenet/relation_net_conv4_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/relation_net/mini_imagenet/relation_net_conv4_mini_imagenet_5way_5shot.py delete mode 100644 configs/classification/relation_net/mini_imagenet/relation_net_mini_imagenet_5way_1shot_84x84_aug.py delete mode 100644 configs/classification/relation_net/mini_imagenet/relation_net_mini_imagenet_5way_5shot_84x84_aug.py delete mode 100644 configs/classification/relation_net/mini_imagenet/relation_net_resnet12_mini_imagenet_5way_1shot.py delete mode 100644 configs/classification/relation_net/mini_imagenet/relation_net_resnet12_mini_imagenet_5way_5shot.py create mode 100644 configs/classification/relation_net/tiered_imagenet/metafile.yml rename configs/classification/relation_net/tiered_imagenet/{relation_net_tiered_imagenet_5way_5shot_84x84_aug.py => relation-net_conv4_1xb105_tiered-imagenet_5way-1shot.py} (78%) rename configs/classification/relation_net/tiered_imagenet/{relation_net_tiered_imagenet_5way_1shot_84x84_aug.py => relation-net_conv4_1xb105_tiered-imagenet_5way-5shot.py} (78%) create mode 100644 configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py create mode 100644 configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py delete mode 100644 configs/classification/relation_net/tiered_imagenet/relation_net_conv4_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/relation_net/tiered_imagenet/relation_net_conv4_tiered_imagenet_5way_5shot.py delete mode 100644 configs/classification/relation_net/tiered_imagenet/relation_net_resnet12_tiered_imagenet_5way_1shot.py delete mode 100644 configs/classification/relation_net/tiered_imagenet/relation_net_resnet12_tiered_imagenet_5way_5shot.py create mode 100644 configs/detection/README.md rename configs/detection/_base_/datasets/{finetune_based => fine_tune_based}/base_coco.py (89%) rename configs/detection/_base_/datasets/{finetune_based => fine_tune_based}/base_voc.py (100%) rename configs/detection/_base_/datasets/{finetune_based => fine_tune_based}/few_shot_coco.py (89%) rename configs/detection/_base_/datasets/{finetune_based => fine_tune_based}/few_shot_voc.py (100%) delete mode 100644 configs/detection/_base_/models/faster_rcnn_r50_fpn.py create mode 100644 configs/detection/attention_rpn/README.md rename configs/detection/attention_rpn/{attention_rpn_faster_rcnn_r50_c4.py => attention-rpn_r50_c4.py} (100%) rename configs/detection/attention_rpn/coco/{attention_rpn_faster_rcnn_r50_c4_coco_10shot_ft.py => attention-rpn_r50_c4_4xb2_coco_10shot-fine-tuning.py} (86%) rename configs/detection/attention_rpn/coco/{attention_rpn_faster_rcnn_r50_c4_coco_30shot_ft.py => attention-rpn_r50_c4_4xb2_coco_30shot-fine-tuning.py} (86%) rename configs/detection/attention_rpn/coco/{attention_rpn_faster_rcnn_r50_c4_coco_base_training.py => attention-rpn_r50_c4_4xb2_coco_base-training.py} (87%) rename configs/detection/attention_rpn/coco/{attention_rpn_faster_rcnn_r50_c4_coco17_10shot_ft.py => attention-rpn_r50_c4_4xb2_coco_official-10shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/coco/{attention_rpn_faster_rcnn_r50_c4_coco17_base_training.py => attention-rpn_r50_c4_4xb2_coco_official-base-training.py} (92%) create mode 100644 configs/detection/attention_rpn/coco/metafile.yml rename configs/detection/attention_rpn/voc/split1/{attention_rpn_faster_rcnn_r50_c4_voc_split1_10shot_ft.py => attention-rpn_r50_c4_voc-split1_10shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split1/{attention_rpn_faster_rcnn_r50_c4_voc_split1_1shot_ft.py => attention-rpn_r50_c4_voc-split1_1shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split1/{attention_rpn_faster_rcnn_r50_c4_voc_split1_2shot_ft.py => attention-rpn_r50_c4_voc-split1_2shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split1/{attention_rpn_faster_rcnn_r50_c4_voc_split1_3shot_ft.py => attention-rpn_r50_c4_voc-split1_3shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split1/{attention_rpn_faster_rcnn_r50_c4_voc_split1_5shot_ft.py => attention-rpn_r50_c4_voc-split1_5shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split1/{attention_rpn_faster_rcnn_r50_c4_voc_split1_base_training.py => attention-rpn_r50_c4_voc-split1_base-training.py} (91%) create mode 100644 configs/detection/attention_rpn/voc/split1/metafile.yml rename configs/detection/attention_rpn/voc/split2/{attention_rpn_faster_rcnn_r50_c4_voc_split2_10shot_ft.py => attention-rpn_r50_c4_voc-split2_10shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split2/{attention_rpn_faster_rcnn_r50_c4_voc_split2_1shot_ft.py => attention-rpn_r50_c4_voc-split2_1shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split2/{attention_rpn_faster_rcnn_r50_c4_voc_split2_2shot_ft.py => attention-rpn_r50_c4_voc-split2_2shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split2/{attention_rpn_faster_rcnn_r50_c4_voc_split2_3shot_ft.py => attention-rpn_r50_c4_voc-split2_3shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split2/{attention_rpn_faster_rcnn_r50_c4_voc_split2_5shot_ft.py => attention-rpn_r50_c4_voc-split2_5shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split2/{attention_rpn_faster_rcnn_r50_c4_voc_split2_base_training.py => attention-rpn_r50_c4_voc-split2_base-training.py} (91%) create mode 100644 configs/detection/attention_rpn/voc/split2/metafile.yml rename configs/detection/attention_rpn/voc/split3/{attention_rpn_faster_rcnn_r50_c4_voc_split3_10shot_ft.py => attention-rpn_r50_c4_voc-split3_10shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split3/{attention_rpn_faster_rcnn_r50_c4_voc_split3_1shot_ft.py => attention-rpn_r50_c4_voc-split3_1shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split3/{attention_rpn_faster_rcnn_r50_c4_voc_split3_2shot_ft.py => attention-rpn_r50_c4_voc-split3_2shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split3/{attention_rpn_faster_rcnn_r50_c4_voc_split3_3shot_ft.py => attention-rpn_r50_c4_voc-split3_3shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split3/{attention_rpn_faster_rcnn_r50_c4_voc_split3_5shot_ft.py => attention-rpn_r50_c4_voc-split3_5shot-fine-tuning.py} (87%) rename configs/detection/attention_rpn/voc/split3/{attention_rpn_faster_rcnn_r50_c4_voc_split3_base_training.py => attention-rpn_r50_c4_voc-split3_base-training.py} (91%) create mode 100644 configs/detection/attention_rpn/voc/split3/metafile.yml create mode 100644 configs/detection/fsce/README.md rename configs/detection/fsce/coco/{fsce_faster_rcnn_r101_fpn_coco_10shot_ft.py => fsce_r101_fpn_coco_10shot-fine-tuning.py} (65%) rename configs/detection/fsce/coco/{fsce_faster_rcnn_r101_fpn_coco_30shot_ft.py => fsce_r101_fpn_coco_30shot-fine-tuning.py} (65%) rename configs/detection/fsce/coco/{fsce_faster_rcnn_r101_fpn_coco_base_training.py => fsce_r101_fpn_coco_base-training.py} (87%) create mode 100644 configs/detection/fsce/coco/metafile.yml rename configs/detection/fsce/{fsce_faster_rcnn_r101_fpn.py => fsce_r101_fpn.py} (100%) rename configs/detection/fsce/{fsce_faster_rcnn_r101_fpn_cl.py => fsce_r101_fpn_contrastive_loss.py} (100%) rename configs/detection/fsce/voc/split1/{fsce_faster_rcnn_r101_fpn_voc_split1_10shot_ft_cl.py => fsce_r101_fpn_contrastive-loss_voc-split1_10shot-fine-tuning.py} (73%) rename configs/detection/fsce/voc/split1/{fsce_faster_rcnn_r101_fpn_voc_split1_3shot_ft_cl.py => fsce_r101_fpn_contrastive-loss_voc-split1_3shot-fine-tuning.py} (72%) rename configs/detection/fsce/voc/split1/{fsce_faster_rcnn_r101_fpn_voc_split1_5shot_ft_cl.py => fsce_r101_fpn_contrastive-loss_voc-split1_5shot-fine-tuning.py} (72%) rename configs/detection/fsce/voc/split1/{fsce_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py => fsce_r101_fpn_voc-split1_10shot-fine-tuning.py} (60%) rename configs/detection/fsce/voc/split1/{fsce_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py => fsce_r101_fpn_voc-split1_1shot-fine-tuning.py} (63%) rename configs/detection/fsce/voc/split1/{fsce_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py => fsce_r101_fpn_voc-split1_2shot-fine-tuning.py} (63%) rename configs/detection/fsce/voc/split1/{fsce_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py => fsce_r101_fpn_voc-split1_3shot-fine-tuning.py} (60%) rename configs/detection/fsce/voc/split1/{fsce_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py => fsce_r101_fpn_voc-split1_5shot-fine-tuning.py} (60%) rename configs/detection/{tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_base_training.py => fsce/voc/split1/fsce_r101_fpn_voc-split1_base-training.py} (81%) create mode 100644 configs/detection/fsce/voc/split1/metafile.yml rename configs/detection/fsce/voc/split2/{fsce_faster_rcnn_r101_fpn_voc_split2_10shot_ft_cl.py => fsce_r101_fpn_contrastive-loss_voc-split2_10shot-fine-tuning.py} (72%) rename configs/detection/fsce/voc/split2/{fsce_faster_rcnn_r101_fpn_voc_split2_3shot_ft_cl.py => fsce_r101_fpn_contrastive-loss_voc-split2_3shot-fine-tuning.py} (72%) rename configs/detection/fsce/voc/split2/{fsce_faster_rcnn_r101_fpn_voc_split2_5shot_ft_cl.py => fsce_r101_fpn_contrastive-loss_voc-split2_5shot-fine-tuning.py} (72%) rename configs/detection/fsce/voc/split2/{fsce_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py => fsce_r101_fpn_voc-split2_10shot-fine-tuning.py} (60%) rename configs/detection/fsce/voc/split2/{fsce_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py => fsce_r101_fpn_voc-split2_1shot-fine-tuning.py} (63%) rename configs/detection/fsce/voc/split2/{fsce_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py => fsce_r101_fpn_voc-split2_2shot-fine-tuning.py} (63%) rename configs/detection/fsce/voc/split2/{fsce_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py => fsce_r101_fpn_voc-split2_3shot-fine-tuning.py} (60%) rename configs/detection/fsce/voc/split2/{fsce_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py => fsce_r101_fpn_voc-split2_5shot-fine-tuning.py} (60%) rename configs/detection/fsce/voc/split2/{fsce_faster_rcnn_r101_fpn_voc_split2_base_training.py => fsce_r101_fpn_voc-split2_base-training.py} (81%) create mode 100644 configs/detection/fsce/voc/split2/metafile.yml rename configs/detection/fsce/voc/split3/{fsce_faster_rcnn_r101_fpn_voc_split3_10shot_ft_cl.py => fsce_r101_fpn_contrastive-loss_voc-split3_10shot-fine-tuning.py} (73%) rename configs/detection/fsce/voc/split3/{fsce_faster_rcnn_r101_fpn_voc_split3_3shot_ft_cl.py => fsce_r101_fpn_contrastive-loss_voc-split3_3shot-fine-tuning.py} (72%) rename configs/detection/fsce/voc/split3/{fsce_faster_rcnn_r101_fpn_voc_split3_5shot_ft_cl.py => fsce_r101_fpn_contrastive-loss_voc-split3_5shot-fine-tuning.py} (72%) rename configs/detection/fsce/voc/split3/{fsce_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py => fsce_r101_fpn_voc-split3_10shot-fine-tuning.py} (60%) rename configs/detection/fsce/voc/split3/{fsce_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py => fsce_r101_fpn_voc-split3_1shot-fine-tuning.py} (63%) rename configs/detection/fsce/voc/split3/{fsce_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py => fsce_r101_fpn_voc-split3_2shot-fine-tuning.py} (63%) rename configs/detection/fsce/voc/split3/{fsce_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py => fsce_r101_fpn_voc-split3_3shot-fine-tuning.py} (60%) rename configs/detection/fsce/voc/split3/{fsce_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py => fsce_r101_fpn_voc-split3_5shot-fine-tuning.py} (60%) rename configs/detection/fsce/voc/split3/{fsce_faster_rcnn_r101_fpn_voc_split3_base_training.py => fsce_r101_fpn_voc-split3_base-training.py} (81%) create mode 100644 configs/detection/fsce/voc/split3/metafile.yml create mode 100644 configs/detection/fsdetview/README.md rename configs/detection/fsdetview/coco/{fsdetview_faster_rcnn_r50_c4_coco_10shot_ft.py => fsdetview_r50_c4_8xb4_coco_10shot-fine-tuning.py} (83%) rename configs/detection/fsdetview/coco/{fsdetview_faster_rcnn_r50_c4_coco_30shot_ft.py => fsdetview_r50_c4_8xb4_coco_30shot-fine-tuning.py} (83%) rename configs/detection/fsdetview/coco/{fsdetview_faster_rcnn_r50_c4_coco_base_training.py => fsdetview_r50_c4_8xb4_coco_base-training.py} (69%) create mode 100644 configs/detection/fsdetview/coco/metafile.yml rename configs/detection/{meta_rcnn/meta_rcnn_faster_rcnn_r101_c4.py => fsdetview/fsdetview_r101_c4.py} (87%) rename configs/detection/fsdetview/{fsdetview_faster_rcnn_r50_c4.py => fsdetview_r50_c4.py} (100%) rename configs/detection/fsdetview/voc/split1/{fsdetview_faster_rcnn_r101_c4_voc_split1_10shot_ft.py => fsdetview_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split1/{fsdetview_faster_rcnn_r101_c4_voc_split1_1shot_ft.py => fsdetview_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split1/{fsdetview_faster_rcnn_r101_c4_voc_split1_2shot_ft.py => fsdetview_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split1/{fsdetview_faster_rcnn_r101_c4_voc_split1_3shot_ft.py => fsdetview_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split1/{fsdetview_faster_rcnn_r101_c4_voc_split1_5shot_ft.py => fsdetview_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split1/{fsdetview_faster_rcnn_r101_c4_voc_split1_base_training.py => fsdetview_r101_c4_8xb4_voc-split1_base-training.py} (89%) create mode 100644 configs/detection/fsdetview/voc/split1/metafile.yml rename configs/detection/fsdetview/voc/split2/{fsdetview_faster_rcnn_r101_c4_voc_split2_10shot_ft.py => fsdetview_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split2/{fsdetview_faster_rcnn_r101_c4_voc_split2_1shot_ft.py => fsdetview_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split2/{fsdetview_faster_rcnn_r101_c4_voc_split2_2shot_ft.py => fsdetview_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split2/{fsdetview_faster_rcnn_r101_c4_voc_split2_3shot_ft.py => fsdetview_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split2/{fsdetview_faster_rcnn_r101_c4_voc_split2_5shot_ft.py => fsdetview_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split2/{fsdetview_faster_rcnn_r101_c4_voc_split2_base_training.py => fsdetview_r101_c4_8xb4_voc-split2_base-training.py} (89%) create mode 100644 configs/detection/fsdetview/voc/split2/metafile.yml rename configs/detection/fsdetview/voc/split3/{fsdetview_faster_rcnn_r101_c4_voc_split3_10shot_ft.py => fsdetview_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split3/{fsdetview_faster_rcnn_r101_c4_voc_split3_1shot_ft.py => fsdetview_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split3/{fsdetview_faster_rcnn_r101_c4_voc_split3_2shot_ft.py => fsdetview_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split3/{fsdetview_faster_rcnn_r101_c4_voc_split3_3shot_ft.py => fsdetview_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split3/{fsdetview_faster_rcnn_r101_c4_voc_split3_5shot_ft.py => fsdetview_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py} (84%) rename configs/detection/fsdetview/voc/split3/{fsdetview_faster_rcnn_r101_c4_voc_split3_base_training.py => fsdetview_r101_c4_8xb4_voc-split3_base-training.py} (89%) create mode 100644 configs/detection/fsdetview/voc/split3/metafile.yml create mode 100644 configs/detection/meta_rcnn/README.md rename configs/detection/meta_rcnn/coco/{meta_rcnn_faster_rcnn_r50_c4_coco_10shot_ft.py => meta-rcnn_r50_c4_8xb4_coco_10shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/coco/{meta_rcnn_faster_rcnn_r50_c4_coco_30shot_ft.py => meta-rcnn_r50_c4_8xb4_coco_30shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/coco/{meta_rcnn_faster_rcnn_r50_c4_coco_base_training.py => meta-rcnn_r50_c4_8xb4_coco_base-training.py} (81%) create mode 100644 configs/detection/meta_rcnn/coco/metafile.yml rename configs/detection/{fsdetview/fsdetview_faster_rcnn_r101_c4.py => meta_rcnn/meta-rcnn_r101_c4.py} (87%) rename configs/detection/meta_rcnn/{meta_rcnn_faster_rcnn_r50_c4.py => meta-rcnn_r50_c4.py} (100%) rename configs/detection/meta_rcnn/voc/split1/{meta_rcnn_faster_rcnn_r101_c4_voc_split1_10shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split1/{meta_rcnn_faster_rcnn_r101_c4_voc_split1_1shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split1/{meta_rcnn_faster_rcnn_r101_c4_voc_split1_2shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split1/{meta_rcnn_faster_rcnn_r101_c4_voc_split1_3shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split1/{meta_rcnn_faster_rcnn_r101_c4_voc_split1_5shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split1/{meta_rcnn_faster_rcnn_r101_c4_voc_split1_base_training.py => meta-rcnn_r101_c4_8xb4_voc-split1_base-training.py} (90%) create mode 100644 configs/detection/meta_rcnn/voc/split1/metafile.yml rename configs/detection/meta_rcnn/voc/split2/{meta_rcnn_faster_rcnn_r101_c4_voc_split2_10shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split2/{meta_rcnn_faster_rcnn_r101_c4_voc_split2_1shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split2/{meta_rcnn_faster_rcnn_r101_c4_voc_split2_2shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split2/{meta_rcnn_faster_rcnn_r101_c4_voc_split2_3shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split2/{meta_rcnn_faster_rcnn_r101_c4_voc_split2_5shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split2/{meta_rcnn_faster_rcnn_r101_c4_voc_split2_base_training.py => meta-rcnn_r101_c4_8xb4_voc-split2_base-training.py} (90%) create mode 100644 configs/detection/meta_rcnn/voc/split2/metafile.yml rename configs/detection/meta_rcnn/voc/split3/{meta_rcnn_faster_rcnn_r101_c4_voc_split3_10shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split3/{meta_rcnn_faster_rcnn_r101_c4_voc_split3_1shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split3/{meta_rcnn_faster_rcnn_r101_c4_voc_split3_2shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split3/{meta_rcnn_faster_rcnn_r101_c4_voc_split3_3shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split3/{meta_rcnn_faster_rcnn_r101_c4_voc_split3_5shot_ft.py => meta-rcnn_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py} (84%) rename configs/detection/meta_rcnn/voc/split3/{meta_rcnn_faster_rcnn_r101_c4_voc_split3_base_training.py => meta-rcnn_r101_c4_8xb4_voc-split3_base-training.py} (90%) create mode 100644 configs/detection/meta_rcnn/voc/split3/metafile.yml create mode 100644 configs/detection/mpsr/README.md create mode 100644 configs/detection/mpsr/coco/metafile.yml rename configs/detection/mpsr/coco/{mpsr_faster_rcnn_r101_fpn_coco_10shot_ft.py => mpsr_r101_fpn_2xb2_coco_10shot-fine-tuning.py} (85%) rename configs/detection/mpsr/coco/{mpsr_faster_rcnn_r101_fpn_coco_30shot_ft.py => mpsr_r101_fpn_2xb2_coco_30shot-fine-tuning.py} (85%) rename configs/detection/mpsr/coco/{mpsr_faster_rcnn_r101_fpn_coco_base_training.py => mpsr_r101_fpn_2xb2_coco_base-training.py} (83%) rename configs/detection/mpsr/{mpsr_faster_rcnn_r101_fpn.py => mpsr_r101_fpn.py} (100%) create mode 100644 configs/detection/mpsr/voc/split1/metafile.yml rename configs/detection/mpsr/voc/split1/{mpsr_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py => mpsr_r101_fpn_2xb2_voc-split1_10shot-fine-tuning.py} (75%) rename configs/detection/mpsr/voc/split1/{mpsr_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py => mpsr_r101_fpn_2xb2_voc-split1_1shot-fine-tuning.py} (71%) rename configs/detection/mpsr/voc/split1/{mpsr_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py => mpsr_r101_fpn_2xb2_voc-split1_2shot-fine-tuning.py} (73%) rename configs/detection/mpsr/voc/split1/{mpsr_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py => mpsr_r101_fpn_2xb2_voc-split1_3shot-fine-tuning.py} (73%) rename configs/detection/mpsr/voc/split1/{mpsr_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py => mpsr_r101_fpn_2xb2_voc-split1_5shot-fine-tuning.py} (74%) rename configs/detection/mpsr/voc/split1/{mpsr_faster_rcnn_r101_fpn_voc_split1_base_training.py => mpsr_r101_fpn_2xb2_voc-split1_base-training.py} (55%) create mode 100644 configs/detection/mpsr/voc/split2/metafile.yml rename configs/detection/mpsr/voc/split2/{mpsr_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py => mpsr_r101_fpn_2xb2_voc-split2_10shot-fine-tuning.py} (75%) rename configs/detection/mpsr/voc/split2/{mpsr_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py => mpsr_r101_fpn_2xb2_voc-split2_1shot-fine-tuning.py} (73%) rename configs/detection/mpsr/voc/split2/{mpsr_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py => mpsr_r101_fpn_2xb2_voc-split2_2shot-fine-tuning.py} (73%) rename configs/detection/mpsr/voc/split2/{mpsr_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py => mpsr_r101_fpn_2xb2_voc-split2_3shot-fine-tuning.py} (73%) rename configs/detection/mpsr/voc/split2/{mpsr_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py => mpsr_r101_fpn_2xb2_voc-split2_5shot-fine-tuning.py} (74%) rename configs/detection/mpsr/voc/split2/{mpsr_faster_rcnn_r101_fpn_voc_split2_base_training.py => mpsr_r101_fpn_2xb2_voc-split2_base-training.py} (68%) create mode 100644 configs/detection/mpsr/voc/split3/metafile.yml rename configs/detection/mpsr/voc/split3/{mpsr_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py => mpsr_r101_fpn_2xb2_voc-split3_10shot-fine-tuning.py} (75%) rename configs/detection/mpsr/voc/split3/{mpsr_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py => mpsr_r101_fpn_2xb2_voc-split3_1shot-fine-tuning.py} (73%) rename configs/detection/mpsr/voc/split3/{mpsr_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py => mpsr_r101_fpn_2xb2_voc-split3_2shot-fine-tuning.py} (73%) rename configs/detection/mpsr/voc/split3/{mpsr_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py => mpsr_r101_fpn_2xb2_voc-split3_3shot-fine-tuning.py} (73%) rename configs/detection/mpsr/voc/split3/{mpsr_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py => mpsr_r101_fpn_2xb2_voc-split3_5shot-fine-tuning.py} (74%) rename configs/detection/mpsr/voc/split3/{mpsr_faster_rcnn_r101_fpn_voc_split3_base_training.py => mpsr_r101_fpn_2xb2_voc-split3_base-training.py} (68%) create mode 100644 configs/detection/tfa/README.md create mode 100644 configs/detection/tfa/coco/metafile.yml rename configs/detection/tfa/coco/{tfa_faster_rcnn_r101_fpn_coco_10shot_ft.py => tfa_r101_fpn_coco_10shot-fine-tuning.py} (59%) rename configs/detection/tfa/coco/{tfa_faster_rcnn_r101_fpn_coco_30shot_ft.py => tfa_r101_fpn_coco_30shot-fine-tuning.py} (60%) rename configs/detection/tfa/coco/{tfa_faster_rcnn_r101_fpn_coco_base_training.py => tfa_r101_fpn_coco_base-training.py} (87%) rename configs/detection/tfa/{tfa_faster_rcnn_r101_fpn.py => tfa_r101_fpn.py} (100%) create mode 100644 configs/detection/tfa/voc/split1/metafile.yml rename configs/detection/tfa/voc/split1/{tfa_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py => tfa_r101_fpn_voc-split1_10shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split1/{tfa_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py => tfa_r101_fpn_voc-split1_1shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split1/{tfa_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py => tfa_r101_fpn_voc-split1_2shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split1/{tfa_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py => tfa_r101_fpn_voc-split1_3shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split1/{tfa_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py => tfa_r101_fpn_voc-split1_5shot-fine-tuning.py} (60%) rename configs/detection/{fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_base_training.py => tfa/voc/split1/tfa_r101_fpn_voc-split1_base-training.py} (81%) create mode 100644 configs/detection/tfa/voc/split2/metafile.yml rename configs/detection/tfa/voc/split2/{tfa_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py => tfa_r101_fpn_voc-split2_10shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split2/{tfa_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py => tfa_r101_fpn_voc-split2_1shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split2/{tfa_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py => tfa_r101_fpn_voc-split2_2shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split2/{tfa_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py => tfa_r101_fpn_voc-split2_3shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split2/{tfa_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py => tfa_r101_fpn_voc-split2_5shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split2/{tfa_faster_rcnn_r101_fpn_voc_split2_base_training.py => tfa_r101_fpn_voc-split2_base-training.py} (81%) create mode 100644 configs/detection/tfa/voc/split3/metafile.yml rename configs/detection/tfa/voc/split3/{tfa_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py => tfa_r101_fpn_voc-split3_10shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split3/{tfa_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py => tfa_r101_fpn_voc-split3_1shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split3/{tfa_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py => tfa_r101_fpn_voc-split3_2shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split3/{tfa_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py => tfa_r101_fpn_voc-split3_3shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split3/{tfa_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py => tfa_r101_fpn_voc-split3_5shot-fine-tuning.py} (60%) rename configs/detection/tfa/voc/split3/{tfa_faster_rcnn_r101_fpn_voc_split3_base_training.py => tfa_r101_fpn_voc-split3_base-training.py} (77%) rename mmfewshot/detection/datasets/pipelines/{formating.py => formatting.py} (100%) create mode 100644 model-index.yml create mode 100644 model_zoo.yml rename tests/test_detection_data/test_pipelines/{test_detection_formating.py => test_detection_formatting.py} (94%) delete mode 100644 tools/detection/multi_dist_test.sh delete mode 100644 tools/detection/multi_test.py create mode 100644 tools/misc/print_config.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 190e45b..763ea78 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -93,11 +93,6 @@ jobs: torch_version: torch1.6.0 torchvision: 0.7.0+cu101 mmcv: "latest+torch1.6.0+cu101" - - torch: 1.6.0+cu101 - torch_version: torch1.6.0 - torchvision: 0.7.0+cu101 - mmcv: "latest+torch1.6.0+cu101" - python-version: 3.6 - torch: 1.6.0+cu101 torch_version: torch1.6.0 torchvision: 0.7.0+cu101 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 64b4898..b66d46e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -38,3 +38,8 @@ repos: hooks: - id: docformatter args: ["--in-place", "--wrap-descriptions", "79"] + - repo: https://github.com/codespell-project/codespell + rev: v2.1.0 + hooks: + - id: codespell + args: [ "--skip", "*.ipynb", "-L", "confectionary"] diff --git a/README.md b/README.md index e69de29..0ae9931 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,122 @@ +[comment]: <> (
) + +[comment]: <> ( ) + +[comment]: <> (
) + +## Introduction + +[comment]: <> (English | [简体中文](/README_zh-CN.md)) + +[comment]: <> ([![Documentation](https://readthedocs.org/projects/mmfewshot/badge/?version=latest)](https://mmfewshot.readthedocs.io/en/latest/?badge=latest)) + +[comment]: <> ([![actions](https://github.com/open-mmlab/mmfewshot/workflows/build/badge.svg)](https://github.com/open-mmlab/mmfewshot/actions)) + +[comment]: <> ([![codecov](https://codecov.io/gh/open-mmlab/mmfewshot/branch/master/graph/badge.svg)](https://codecov.io/gh/open-mmlab/mmfewshot)) + +[comment]: <> ([![PyPI](https://badge.fury.io/py/mmedit.svg)](https://pypi.org/project/mmedit/)) + +[comment]: <> ([![LICENSE](https://img.shields.io/github/license/open-mmlab/mmfewshot.svg)](https://github.com/open-mmlab/mmfewshot/blob/master/LICENSE)) + +[comment]: <> ([![Average time to resolve an issue](https://isitmaintained.com/badge/resolution/open-mmlab/mmfewshot.svg)](https://github.com/open-mmlab/mmfewshot/issues)) + +[comment]: <> ([![Percentage of issues still open](https://isitmaintained.com/badge/open/open-mmlab/mmfewshot.svg)](https://github.com/open-mmlab/mmfewshot/issues)) + + +mmfewshot is an open source few shot learning toolbox based on PyTorch. It is a part of the [OpenMMLab](https://open-mmlab.github.io/) project. + +The master branch works with **PyTorch 1.7+**. +The compatibility to earlier versions of PyTorch is not fully tested. + +Documentation: https://mmfewshot.readthedocs.io/en/latest/. + + +### Major features + + +## Model Zoo + +Supported algorithms: + +
+classification + +- [x] [Baseline](configs/classification/baseline/README.md) (ICLR'2019) +- [x] [Baseline++](configs/classification/baseline_plus/README.md) (ICLR'2019) +- [x] [NegMargin](configs/classification/neg_margin/README.md) (ECCV'2020) +- [x] [MatchingNet](configs/classification/matching_net/README.md) (NeurIPS'2016) +- [x] [ProtoNet](configs/classification/proto_net/README.md) (NeurIPS'2017) +- [x] [RelationNet](configs/classification/relation_net/README.md) (CVPR'2018) +- [x] [MetaBaseline](configs/classification/meta_baseline/README.md) (ICCV'2021) +- [x] [MAML](configs/classification/maml/README.md) (ICML'2017) + +
+ +
+Detection + +- [x] [TFA](configs/detection/tfa/README.md) (ICML'2020) +- [x] [FSCE](configs/detection/fsce/README.md) (CVPR'2021) +- [x] [AttentionRPN](configs/detection/attention_rpn/README.md) (CVPR'2020) +- [x] [MetaRCNN](configs/detection/meta_rcnn/README.md) (ICCV'2019) +- [x] [FSDetView](configs/detection/fsdetview/README.md) (ECCV'2020) +- [x] [MPSR](configs/detection/mpsr/README.md) (ECCV'2020) + +
+ + +Please refer to [model_zoo](https://mmfewshot.readthedocs.io/en/latest/modelzoo.html) for more details. + +## License + +This project is released under the [Apache 2.0 license](LICENSE). + +## Changelog + + +## Installation + +Please refer to [install.md](docs/get_started.md) for installation. + +## Get Started + +Please see [getting_started.md](docs/get_started.md) for the basic usage of mmfewshot. + + + +## Citation + +If you find this project useful in your research, please consider cite: + +```bibtex +@misc{mmfewshot2020, + title={OpenMMLab Few Shot Learning Toolbox and Benchmark}, + author={mmfewshot Contributors}, + howpublished = {\url{https://github.com/open-mmlab/mmfewshot}}, + year={2021} +} +``` + + +## Contributing + +We appreciate all contributions to improve mmfewshot. Please refer to [CONTRIBUTING.md in MMFewShot](https://github.com/open-mmlab/mmcv/blob/master/.github/CONTRIBUTING.md) for the contributing guideline. + +## Acknowledgement + +mmfewshot is an open source project that is contributed by researchers and engineers from various colleges and companies. We appreciate all the contributors who implement their methods or add new features, as well as users who give valuable feedbacks. We wish that the toolbox and benchmark could serve the growing research community by providing a flexible toolkit to reimplement existing methods and develop their own new methods. + +## Projects in OpenMMLab + +- [MMCV](https://github.com/open-mmlab/mmcv): OpenMMLab foundational library for computer vision. +- [MIM](https://github.com/open-mmlab/mim): MIM Installs OpenMMLab Packages. +- [MMClassification](https://github.com/open-mmlab/mmclassification): OpenMMLab image classification toolbox and benchmark. +- [MMDetection](https://github.com/open-mmlab/mmdetection): OpenMMLab detection toolbox and benchmark. +- [MMDetection3D](https://github.com/open-mmlab/mmdetection3d): OpenMMLab's next-generation platform for general 3D object detection. +- [MMSegmentation](https://github.com/open-mmlab/mmsegmentation): OpenMMLab semantic segmentation toolbox and benchmark. +- [MMAction2](https://github.com/open-mmlab/mmaction2): OpenMMLab's next-generation action understanding toolbox and benchmark. +- [MMTracking](https://github.com/open-mmlab/mmtracking): OpenMMLab video perception toolbox and benchmark. +- [MMPose](https://github.com/open-mmlab/mmpose): OpenMMLab pose estimation toolbox and benchmark. +- [MMEditing](https://github.com/open-mmlab/mmfewshot): OpenMMLab image and video editing toolbox. +- [MMOCR](https://github.com/open-mmlab/mmocr): A Comprehensive Toolbox for Text Detection, Recognition and Understanding. +- [MMGeneration](https://github.com/open-mmlab/mmgeneration): A powerful toolkit for generative models. diff --git a/configs/classification/README.md b/configs/classification/README.md new file mode 100644 index 0000000..2162f6f --- /dev/null +++ b/configs/classification/README.md @@ -0,0 +1,11 @@ +# Few Shot Classification + + +## Get Started +To be done. + +## Data Preparation +To be done. + +## Model Zoo +To be done. diff --git a/configs/classification/_base_/meta_test/cub_meta_test_5way_1shot_84x84.py b/configs/classification/_base_/meta_test/cub_meta-test_5way-1shot.py similarity index 91% rename from configs/classification/_base_/meta_test/cub_meta_test_5way_1shot_84x84.py rename to configs/classification/_base_/meta_test/cub_meta-test_5way-1shot.py index b5ea19d..ed2c575 100644 --- a/configs/classification/_base_/meta_test/cub_meta_test_5way_1shot_84x84.py +++ b/configs/classification/_base_/meta_test/cub_meta-test_5way-1shot.py @@ -31,7 +31,7 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0))), test=dict( @@ -42,7 +42,7 @@ data = dict( data_prefix='data/CUB_200_2011', pipeline=test_pipeline), meta_test_cfg=dict( - num_episodes=1000, + num_episodes=2000, num_ways=num_ways, num_shots=num_shots, num_queries=num_queries, @@ -50,6 +50,6 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0)))) diff --git a/configs/classification/_base_/meta_test/cub_meta_test_5way_5shot_84x84.py b/configs/classification/_base_/meta_test/cub_meta-test_5way-5shot.py similarity index 91% rename from configs/classification/_base_/meta_test/cub_meta_test_5way_5shot_84x84.py rename to configs/classification/_base_/meta_test/cub_meta-test_5way-5shot.py index a3ba604..91be394 100644 --- a/configs/classification/_base_/meta_test/cub_meta_test_5way_5shot_84x84.py +++ b/configs/classification/_base_/meta_test/cub_meta-test_5way-5shot.py @@ -31,7 +31,7 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0))), test=dict( @@ -42,7 +42,7 @@ data = dict( data_prefix='data/CUB_200_2011', pipeline=test_pipeline), meta_test_cfg=dict( - num_episodes=1000, + num_episodes=2000, num_ways=num_ways, num_shots=num_shots, num_queries=num_queries, @@ -50,6 +50,6 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0)))) diff --git a/configs/classification/_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py b/configs/classification/_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py similarity index 91% rename from configs/classification/_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py rename to configs/classification/_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py index ef192f0..4f1a8a6 100644 --- a/configs/classification/_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py +++ b/configs/classification/_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py @@ -31,7 +31,7 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0))), test=dict( @@ -42,7 +42,7 @@ data = dict( data_prefix='data/mini_imagenet', pipeline=test_pipeline), meta_test_cfg=dict( - num_episodes=1000, + num_episodes=2000, num_ways=num_ways, num_shots=num_shots, num_queries=num_queries, @@ -50,6 +50,6 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0)))) diff --git a/configs/classification/_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py b/configs/classification/_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py similarity index 91% rename from configs/classification/_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py rename to configs/classification/_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py index 23ea65e..2a2863d 100644 --- a/configs/classification/_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py +++ b/configs/classification/_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py @@ -31,7 +31,7 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0))), test=dict( @@ -42,7 +42,7 @@ data = dict( data_prefix='data/mini_imagenet', pipeline=test_pipeline), meta_test_cfg=dict( - num_episodes=1000, + num_episodes=2000, num_ways=num_ways, num_shots=num_shots, num_queries=num_queries, @@ -50,6 +50,6 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0)))) diff --git a/configs/classification/_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py b/configs/classification/_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py similarity index 91% rename from configs/classification/_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py rename to configs/classification/_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py index 7298c29..b2896f3 100644 --- a/configs/classification/_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py +++ b/configs/classification/_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py @@ -31,7 +31,7 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0))), test=dict( @@ -42,7 +42,7 @@ data = dict( data_prefix='data/tiered_imagenet', pipeline=test_pipeline), meta_test_cfg=dict( - num_episodes=1000, + num_episodes=2000, num_ways=num_ways, num_shots=num_shots, num_queries=num_queries, @@ -50,6 +50,6 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0)))) diff --git a/configs/classification/_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py b/configs/classification/_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py similarity index 91% rename from configs/classification/_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py rename to configs/classification/_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py index eb67887..3b622a4 100644 --- a/configs/classification/_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py +++ b/configs/classification/_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py @@ -31,7 +31,7 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0))), test=dict( @@ -42,7 +42,7 @@ data = dict( data_prefix='data/tiered_imagenet', pipeline=test_pipeline), meta_test_cfg=dict( - num_episodes=1000, + num_episodes=2000, num_ways=num_ways, num_shots=num_shots, num_queries=num_queries, @@ -50,6 +50,6 @@ data = dict( # testing acceleration. fast_test=True, test_set=dict(batch_size=16, num_workers=2), - # initialize worker is a time consuming operation + # worker initialization is a time consuming operation support=dict(batch_size=num_ways * num_shots, num_workers=0), query=dict(batch_size=num_ways * num_queries, num_workers=0)))) diff --git a/configs/classification/_base_/runtime/epoch_based_runtime.py b/configs/classification/_base_/runtime/epoch_based_runtime.py index 4202986..d23851c 100644 --- a/configs/classification/_base_/runtime/epoch_based_runtime.py +++ b/configs/classification/_base_/runtime/epoch_based_runtime.py @@ -3,7 +3,6 @@ log_config = dict( interval=50, hooks=[ dict(type='TextLoggerHook'), - # dict(type='TensorboardLoggerHook') ]) # yapf:enable checkpoint_config = dict(interval=50) @@ -15,3 +14,4 @@ resume_from = None workflow = [('train', 1)] pin_memory = True use_infinite_sampler = True +seed = 0 diff --git a/configs/classification/_base_/runtime/iter_based_runtime.py b/configs/classification/_base_/runtime/iter_based_runtime.py index bd6b758..4eacfd4 100644 --- a/configs/classification/_base_/runtime/iter_based_runtime.py +++ b/configs/classification/_base_/runtime/iter_based_runtime.py @@ -3,7 +3,6 @@ log_config = dict( interval=50, hooks=[ dict(type='TextLoggerHook'), - # dict(type='TensorboardLoggerHook') ]) # yapf:enable checkpoint_config = dict(interval=4000) @@ -15,3 +14,4 @@ resume_from = None workflow = [('train', 1)] pin_memory = True use_infinite_sampler = True +seed = 0 diff --git a/configs/classification/_base_/schedules/adam_100000iter.py b/configs/classification/_base_/schedules/adam_100k_iter.py similarity index 100% rename from configs/classification/_base_/schedules/adam_100000iter.py rename to configs/classification/_base_/schedules/adam_100k_iter.py diff --git a/configs/classification/_base_/schedules/adam_200epoch.py b/configs/classification/_base_/schedules/adam_200epoch.py deleted file mode 100644 index 19fb5d0..0000000 --- a/configs/classification/_base_/schedules/adam_200epoch.py +++ /dev/null @@ -1,4 +0,0 @@ -runner = dict(type='EpochBasedRunner', max_epochs=200) -optimizer = dict(type='Adam', lr=0.001) -optimizer_config = dict(grad_clip=None) -lr_config = dict(policy='fixed', warmup=None) diff --git a/configs/classification/_base_/schedules/sgd_60000iter.py b/configs/classification/_base_/schedules/sgd_100k_iter.py similarity index 82% rename from configs/classification/_base_/schedules/sgd_60000iter.py rename to configs/classification/_base_/schedules/sgd_100k_iter.py index b879ace..4fcc3f4 100644 --- a/configs/classification/_base_/schedules/sgd_60000iter.py +++ b/configs/classification/_base_/schedules/sgd_100k_iter.py @@ -1,4 +1,4 @@ -runner = dict(type='IterBasedRunner', max_iters=60000) +runner = dict(type='IterBasedRunner', max_iters=100000) optimizer = dict(type='SGD', lr=0.001, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=None) # learning policy diff --git a/configs/classification/baseline/README.md b/configs/classification/baseline/README.md new file mode 100644 index 0000000..9c49369 --- /dev/null +++ b/configs/classification/baseline/README.md @@ -0,0 +1,69 @@ + + +# Baseline (ICLR'2019) + +```bibtex +@inproceedings{chen2019closerfewshot, + title={A Closer Look at Few-shot Classification}, + author={Chen, Wei-Yu and Liu, Yen-Cheng and Kira, Zsolt and Wang, Yu-Chiang and Huang, Jia-Bin}, + booktitle={International Conference on Learning Representations}, + year={2019} +} +``` + +## How to Reproduce Baseline + +It consists of two steps: +- **Step1: Base training** + - use all the images of base classes to train a base model. + - use validation set to select the best model. + +- **Step2: Meta Testing**: + - use best model from step1. + + +### An example of CUB dataset with Conv4 +```bash +# base training +python ./tools/classification/train.py \ + configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-1shot.py + +# meta testing +python ./tools/classification/test.py \ + configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-1shot.py \ + work_dir/baseline_conv4_1xb64_cub_5way-1shot/best_accuracy_mean.pth +``` + +**Note**: +- All the result are trained with single gpu. +- The base training of 1 shot and 5 shot use same training setting, + but different validation setting. + + + +## Results on CUB dataset of 2000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Mini-ImageNet dataset of 2000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Tiered-ImageNet of 2000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | diff --git a/configs/classification/baseline_plus/cub/baseline_plus_cub_5way_1shot_84x84_aug.py b/configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-1shot.py similarity index 80% rename from configs/classification/baseline_plus/cub/baseline_plus_cub_5way_1shot_84x84_aug.py rename to configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-1shot.py index ca8cca9..16bcbc0 100644 --- a/configs/classification/baseline_plus/cub/baseline_plus_cub_5way_1shot_84x84_aug.py +++ b/configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-1shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='CUBDataset', data_prefix='data/CUB_200_2011', @@ -39,3 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=100, in_channels=1600), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/cub/baseline_plus_cub_5way_5shot_84x84_aug.py b/configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-5shot.py similarity index 80% rename from configs/classification/baseline_plus/cub/baseline_plus_cub_5way_5shot_84x84_aug.py rename to configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-5shot.py index c678fc7..4cdae83 100644 --- a/configs/classification/baseline_plus/cub/baseline_plus_cub_5way_5shot_84x84_aug.py +++ b/configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-5shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='CUBDataset', data_prefix='data/CUB_200_2011', @@ -39,3 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=100, in_channels=1600), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/cub/baseline_conv4_cub_5way_1shot.py b/configs/classification/baseline/cub/baseline_conv4_cub_5way_1shot.py deleted file mode 100644 index 43ba09c..0000000 --- a/configs/classification/baseline/cub/baseline_conv4_cub_5way_1shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['baseline_cub_5way_1shot_84x84_aug.py'] - -model = dict( - type='BaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=100, in_channels=1600), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/cub/baseline_conv4_cub_5way_5shot.py b/configs/classification/baseline/cub/baseline_conv4_cub_5way_5shot.py deleted file mode 100644 index ef2717d..0000000 --- a/configs/classification/baseline/cub/baseline_conv4_cub_5way_5shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['baseline_cub_5way_5shot_84x84_aug.py'] - -model = dict( - type='BaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=100, in_channels=1600), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/cub/baseline_cub_5way_1shot_84x84_aug.py b/configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-1shot.py similarity index 80% rename from configs/classification/baseline/cub/baseline_cub_5way_1shot_84x84_aug.py rename to configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-1shot.py index ca8cca9..51a1d0a 100644 --- a/configs/classification/baseline/cub/baseline_cub_5way_1shot_84x84_aug.py +++ b/configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-1shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='CUBDataset', data_prefix='data/CUB_200_2011', @@ -39,3 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=100, in_channels=640), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/cub/baseline_cub_5way_5shot_84x84_aug.py b/configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-5shot.py similarity index 80% rename from configs/classification/baseline/cub/baseline_cub_5way_5shot_84x84_aug.py rename to configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-5shot.py index c678fc7..e65e0a7 100644 --- a/configs/classification/baseline/cub/baseline_cub_5way_5shot_84x84_aug.py +++ b/configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-5shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='CUBDataset', data_prefix='data/CUB_200_2011', @@ -39,3 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=100, in_channels=640), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/cub/baseline_resnet12_cub_5way_1shot.py b/configs/classification/baseline/cub/baseline_resnet12_cub_5way_1shot.py deleted file mode 100644 index 1fe56d6..0000000 --- a/configs/classification/baseline/cub/baseline_resnet12_cub_5way_1shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['baseline_cub_5way_1shot_84x84_aug.py'] -model = dict( - type='BaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=100, in_channels=640), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/cub/baseline_resnet12_cub_5way_5shot.py b/configs/classification/baseline/cub/baseline_resnet12_cub_5way_5shot.py deleted file mode 100644 index 0ad7f3b..0000000 --- a/configs/classification/baseline/cub/baseline_resnet12_cub_5way_5shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['baseline_cub_5way_5shot_84x84_aug.py'] -model = dict( - type='BaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=100, in_channels=640), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/cub/metafile.yml b/configs/classification/baseline/cub/metafile.yml new file mode 100644 index 0000000..be415bd --- /dev/null +++ b/configs/classification/baseline/cub/metafile.yml @@ -0,0 +1,64 @@ +Collections: + - Name: Baseline + Metadata: + Training Data: CUB + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1904.04232 + README: configs/classification/baseline/README.md + +Models: + - Name: baseline_conv4_1xb64_cub_5way-1shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-1shot.py + - Name: baseline_conv4_1xb64_cub_5way-5shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-5shot.py + - Name: baseline_resnet12_1xb64_cub_5way-1shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-1shot.py + - Name: baseline_resnet12_1xb64_cub_5way-5shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/cub/baseline_resnet12_1xb64_cub_5way-5shot.py diff --git a/configs/classification/baseline/mini_imagenet/baseline_mini_imagenet_5way_1shot_84x84_aug.py b/configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-1shot.py similarity index 80% rename from configs/classification/baseline/mini_imagenet/baseline_mini_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-1shot.py index 2a5d0d2..25e9964 100644 --- a/configs/classification/baseline/mini_imagenet/baseline_mini_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-1shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='MiniImageNetDataset', data_prefix='data/mini_imagenet', @@ -39,3 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=64, in_channels=1600), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/mini_imagenet/baseline_mini_imagenet_5way_5shot_84x84_aug.py b/configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-5shot.py similarity index 80% rename from configs/classification/baseline/mini_imagenet/baseline_mini_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-5shot.py index 7b12c98..45d1784 100644 --- a/configs/classification/baseline/mini_imagenet/baseline_mini_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-5shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='MiniImageNetDataset', data_prefix='data/mini_imagenet', @@ -39,3 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=64, in_channels=1600), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/mini_imagenet/baseline_conv4_mini_imagenet_5way_1shot.py b/configs/classification/baseline/mini_imagenet/baseline_conv4_mini_imagenet_5way_1shot.py deleted file mode 100644 index 8cb1763..0000000 --- a/configs/classification/baseline/mini_imagenet/baseline_conv4_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['baseline_mini_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='BaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=64, in_channels=1600), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/mini_imagenet/baseline_conv4_mini_imagenet_5way_5shot.py b/configs/classification/baseline/mini_imagenet/baseline_conv4_mini_imagenet_5way_5shot.py deleted file mode 100644 index 9cce9b8..0000000 --- a/configs/classification/baseline/mini_imagenet/baseline_conv4_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['baseline_mini_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='BaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=64, in_channels=1600), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_mini_imagenet_5way_1shot_84x84_aug.py b/configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-1shot.py similarity index 80% rename from configs/classification/baseline_plus/mini_imagenet/baseline_plus_mini_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-1shot.py index 2a5d0d2..e050928 100644 --- a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_mini_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-1shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='MiniImageNetDataset', data_prefix='data/mini_imagenet', @@ -39,3 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=64, in_channels=640), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_mini_imagenet_5way_5shot_84x84_aug.py b/configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-5shot.py similarity index 80% rename from configs/classification/baseline_plus/mini_imagenet/baseline_plus_mini_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-5shot.py index 7b12c98..027ca60 100644 --- a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_mini_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-5shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='MiniImageNetDataset', data_prefix='data/mini_imagenet', @@ -39,3 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=64, in_channels=640), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/mini_imagenet/baseline_resnet12_mini_imagenet_5way_1shot.py b/configs/classification/baseline/mini_imagenet/baseline_resnet12_mini_imagenet_5way_1shot.py deleted file mode 100644 index 1f9dd10..0000000 --- a/configs/classification/baseline/mini_imagenet/baseline_resnet12_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['baseline_mini_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='BaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=64, in_channels=640), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/mini_imagenet/baseline_resnet12_mini_imagenet_5way_5shot.py b/configs/classification/baseline/mini_imagenet/baseline_resnet12_mini_imagenet_5way_5shot.py deleted file mode 100644 index afbe277..0000000 --- a/configs/classification/baseline/mini_imagenet/baseline_resnet12_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['baseline_mini_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='BaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=64, in_channels=640), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/mini_imagenet/metafile.yml b/configs/classification/baseline/mini_imagenet/metafile.yml new file mode 100644 index 0000000..33fa226 --- /dev/null +++ b/configs/classification/baseline/mini_imagenet/metafile.yml @@ -0,0 +1,64 @@ +Collections: + - Name: Baseline + Metadata: + Training Data: Mini-ImageNet + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1904.04232 + README: configs/classification/baseline/README.md + +Models: + - Name: baseline_conv4_1xb64_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-1shot.py + - Name: baseline_conv4_1xb64_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/mini_imagenet/baseline_conv4_1xb64_mini-imagenet_5way-5shot.py + - Name: baseline_resnet12_1xb64_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-1shot.py + - Name: baseline_resnet12_1xb64_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/mini_imagenet/baseline_resnet12_1xb64_mini-imagenet_5way-5shot.py diff --git a/configs/classification/baseline/tiered_imagenet/baseline_tiered_imagenet_5way_1shot_84x84_aug.py b/configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-1shot.py similarity index 80% rename from configs/classification/baseline/tiered_imagenet/baseline_tiered_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-1shot.py index cbf48be..24535ef 100644 --- a/configs/classification/baseline/tiered_imagenet/baseline_tiered_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-1shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_100epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=8, + workers_per_gpu=4, train=dict( type='TieredImageNetDataset', data_prefix='data/tiered_imagenet', @@ -39,4 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) -pin_memory = True + +model = dict( + type='BaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=351, in_channels=1600), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/tiered_imagenet/baseline_tiered_imagenet_5way_5shot_84x84_aug.py b/configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-5shot.py similarity index 80% rename from configs/classification/baseline/tiered_imagenet/baseline_tiered_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-5shot.py index ea3970f..bf8a2aa 100644 --- a/configs/classification/baseline/tiered_imagenet/baseline_tiered_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-5shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_100epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=8, + workers_per_gpu=4, train=dict( type='TieredImageNetDataset', data_prefix='data/tiered_imagenet', @@ -39,4 +39,9 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) -pin_memory = True + +model = dict( + type='BaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=351, in_channels=1600), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/tiered_imagenet/baseline_conv4_tiered_imagenet_5way_1shot.py b/configs/classification/baseline/tiered_imagenet/baseline_conv4_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 6c750dc..0000000 --- a/configs/classification/baseline/tiered_imagenet/baseline_conv4_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['baseline_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='BaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=351, in_channels=1600), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/tiered_imagenet/baseline_conv4_tiered_imagenet_5way_5shot.py b/configs/classification/baseline/tiered_imagenet/baseline_conv4_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 185560e..0000000 --- a/configs/classification/baseline/tiered_imagenet/baseline_conv4_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['baseline_tiered_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='BaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=351, in_channels=1600), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-1shot.py b/configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..5ca5fb2 --- /dev/null +++ b/configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-1shot.py @@ -0,0 +1,47 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_100epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=150, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=351, in_channels=640), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-5shot.py b/configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-5shot.py new file mode 100644 index 0000000..d564b9a --- /dev/null +++ b/configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-5shot.py @@ -0,0 +1,47 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_100epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=600, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=351, in_channels=640), + meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/tiered_imagenet/baseline_resnet12_tiered_imagenet_5way_1shot.py b/configs/classification/baseline/tiered_imagenet/baseline_resnet12_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 88e8652..0000000 --- a/configs/classification/baseline/tiered_imagenet/baseline_resnet12_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['baseline_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='BaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=351, in_channels=640), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/tiered_imagenet/baseline_resnet12_tiered_imagenet_5way_5shot.py b/configs/classification/baseline/tiered_imagenet/baseline_resnet12_tiered_imagenet_5way_5shot.py deleted file mode 100644 index d0b0992..0000000 --- a/configs/classification/baseline/tiered_imagenet/baseline_resnet12_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['baseline_tiered_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='BaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=351, in_channels=640), - meta_test_head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/baseline/tiered_imagenet/metafile.yml b/configs/classification/baseline/tiered_imagenet/metafile.yml new file mode 100644 index 0000000..89e19a0 --- /dev/null +++ b/configs/classification/baseline/tiered_imagenet/metafile.yml @@ -0,0 +1,64 @@ +Collections: + - Name: Baseline + Metadata: + Training Data: Tiered-ImageNet + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1904.04232 + README: configs/classification/baseline/README.md + +Models: + - Name: baseline_conv4_1xb64_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-1shot.py + - Name: baseline_conv4_1xb64_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/tiered_imagenet/baseline_conv4_1xb64_tiered-imagenet_5way-5shot.py + - Name: baseline_resnet12_1xb64_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-1shot.py + - Name: baseline_resnet12_1xb64_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline/tiered_imagenet/baseline_resnet12_1xb64_tiered-imagenet_5way-5shot.py diff --git a/configs/classification/baseline_plus/README.md b/configs/classification/baseline_plus/README.md new file mode 100644 index 0000000..e32c101 --- /dev/null +++ b/configs/classification/baseline_plus/README.md @@ -0,0 +1,67 @@ + + +# Baseline++ (ICLR'2019) + +```bibtex +@inproceedings{chen2019closerfewshot, + title={A Closer Look at Few-shot Classification}, + author={Chen, Wei-Yu and Liu, Yen-Cheng and Kira, Zsolt and Wang, Yu-Chiang and Huang, Jia-Bin}, + booktitle={International Conference on Learning Representations}, + year={2019} +} +``` + +## How to Reproduce Baseline++ + +It consists of two steps: +- **Step1: Base training** + - use all the images of base classes to train a base model. + - use validation set to select the best model. + +- **Step2: Meta Testing**: + - use best model from step1. + + +### An example of CUB dataset with Conv4 +```bash +# base training +python ./tools/classification/train.py \ + configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-1shot.py + +# meta testing +python ./tools/classification/test.py \ + configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-1shot.py \ + work_dir/baseline-plus_conv4_1xb64_cub_5way-1shot/best_accuracy_mean.pth +``` + +**Note**: +- All the result are trained with single gpu. +- The base training of 1 shot and 5 shot use same training setting, + but different validation setting. + +## Results on CUB dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Mini-ImageNet dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Tiered-ImageNet of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | diff --git a/configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-1shot.py b/configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-1shot.py new file mode 100644 index 0000000..2ba22b1 --- /dev/null +++ b/configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-1shot.py @@ -0,0 +1,48 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=150, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='Conv4'), + head=dict(type='CosineDistanceHead', num_classes=100, in_channels=1600), + meta_test_head=dict( + type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-5shot.py b/configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-5shot.py new file mode 100644 index 0000000..761b4e9 --- /dev/null +++ b/configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-5shot.py @@ -0,0 +1,48 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=600, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='Conv4'), + head=dict(type='CosineDistanceHead', num_classes=100, in_channels=1600), + meta_test_head=dict( + type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-1shot.py b/configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-1shot.py new file mode 100644 index 0000000..71291b6 --- /dev/null +++ b/configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-1shot.py @@ -0,0 +1,55 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=150, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='CosineDistanceHead', + num_classes=100, + in_channels=640, + temperature=10.0), + meta_test_head=dict( + type='CosineDistanceHead', + num_classes=5, + in_channels=640, + temperature=5.0)) diff --git a/configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-5shot.py b/configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-5shot.py new file mode 100644 index 0000000..5dd65f6 --- /dev/null +++ b/configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-5shot.py @@ -0,0 +1,55 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=600, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='CosineDistanceHead', + num_classes=100, + in_channels=640, + temperature=10.0), + meta_test_head=dict( + type='CosineDistanceHead', + num_classes=5, + in_channels=640, + temperature=5.0)) diff --git a/configs/classification/baseline_plus/cub/baseline_plus_conv4_cub_5way_1shot.py b/configs/classification/baseline_plus/cub/baseline_plus_conv4_cub_5way_1shot.py deleted file mode 100644 index dff5838..0000000 --- a/configs/classification/baseline_plus/cub/baseline_plus_conv4_cub_5way_1shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['baseline_pp_cub_5way_1shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='Conv4'), - head=dict(type='CosineDistanceHead', num_classes=100, in_channels=1600), - meta_test_head=dict( - type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/cub/baseline_plus_conv4_cub_5way_5shot.py b/configs/classification/baseline_plus/cub/baseline_plus_conv4_cub_5way_5shot.py deleted file mode 100644 index c060d39..0000000 --- a/configs/classification/baseline_plus/cub/baseline_plus_conv4_cub_5way_5shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['baseline_pp_cub_5way_5shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='Conv4'), - head=dict(type='CosineDistanceHead', num_classes=100, in_channels=1600), - meta_test_head=dict( - type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/cub/baseline_plus_resnet12_cub_5way_1shot.py b/configs/classification/baseline_plus/cub/baseline_plus_resnet12_cub_5way_1shot.py deleted file mode 100644 index 8559b67..0000000 --- a/configs/classification/baseline_plus/cub/baseline_plus_resnet12_cub_5way_1shot.py +++ /dev/null @@ -1,15 +0,0 @@ -_base_ = ['baseline_pp_cub_5way_1shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='CosineDistanceHead', - num_classes=100, - in_channels=640, - temperature=10.0), - meta_test_head=dict( - type='CosineDistanceHead', - num_classes=5, - in_channels=640, - temperature=5.0)) diff --git a/configs/classification/baseline_plus/cub/baseline_plus_resnet12_cub_5way_5shot.py b/configs/classification/baseline_plus/cub/baseline_plus_resnet12_cub_5way_5shot.py deleted file mode 100644 index 93727f8..0000000 --- a/configs/classification/baseline_plus/cub/baseline_plus_resnet12_cub_5way_5shot.py +++ /dev/null @@ -1,15 +0,0 @@ -_base_ = ['baseline_pp_cub_5way_5shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='CosineDistanceHead', - num_classes=100, - in_channels=640, - temperature=10.0), - meta_test_head=dict( - type='CosineDistanceHead', - num_classes=5, - in_channels=640, - temperature=5.0)) diff --git a/configs/classification/baseline_plus/cub/metafile.yml b/configs/classification/baseline_plus/cub/metafile.yml new file mode 100644 index 0000000..ed5c9db --- /dev/null +++ b/configs/classification/baseline_plus/cub/metafile.yml @@ -0,0 +1,64 @@ +Collections: + - Name: Baseline_Plus + Metadata: + Training Data: CUB + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1904.04232 + README: configs/classification/baseline_plus/README.md + +Models: + - Name: baseline-plus_conv4_1xb64_cub_5way-1shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-1shot.py + - Name: baseline-plus_conv4_1xb64_cub_5way-5shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/cub/baseline-plus_conv4_1xb64_cub_5way-5shot.py + - Name: baseline-plus_resnet12_1xb64_cub_5way-1shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-1shot.py + - Name: baseline-plus_resnet12_1xb64_cub_5way-5shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/cub/baseline-plus_resnet12_1xb64_cub_5way-5shot.py diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-1shot.py b/configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-1shot.py new file mode 100644 index 0000000..d714393 --- /dev/null +++ b/configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-1shot.py @@ -0,0 +1,48 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=150, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='Conv4'), + head=dict(type='CosineDistanceHead', num_classes=100, in_channels=1600), + meta_test_head=dict( + type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-5shot.py b/configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-5shot.py new file mode 100644 index 0000000..45d447a --- /dev/null +++ b/configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-5shot.py @@ -0,0 +1,48 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=600, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='Conv4'), + head=dict(type='CosineDistanceHead', num_classes=100, in_channels=1600), + meta_test_head=dict( + type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-1shot.py b/configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-1shot.py new file mode 100644 index 0000000..5e1820e --- /dev/null +++ b/configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-1shot.py @@ -0,0 +1,55 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=150, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='CosineDistanceHead', + num_classes=100, + in_channels=640, + temperature=10.0), + meta_test_head=dict( + type='CosineDistanceHead', + num_classes=5, + in_channels=640, + temperature=5.0)) diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-5shot.py b/configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-5shot.py new file mode 100644 index 0000000..3790c08 --- /dev/null +++ b/configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-5shot.py @@ -0,0 +1,55 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=600, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='CosineDistanceHead', + num_classes=100, + in_channels=640, + temperature=10.0), + meta_test_head=dict( + type='CosineDistanceHead', + num_classes=5, + in_channels=640, + temperature=5.0)) diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_conv4_mini_imagenet_5way_1shot.py b/configs/classification/baseline_plus/mini_imagenet/baseline_plus_conv4_mini_imagenet_5way_1shot.py deleted file mode 100644 index 50c90c9..0000000 --- a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_conv4_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['baseline_pp_mini_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='Conv4'), - head=dict(type='CosineDistanceHead', num_classes=100, in_channels=1600), - meta_test_head=dict( - type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_conv4_mini_imagenet_5way_5shot.py b/configs/classification/baseline_plus/mini_imagenet/baseline_plus_conv4_mini_imagenet_5way_5shot.py deleted file mode 100644 index 785e109..0000000 --- a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_conv4_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['baseline_pp_mini_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='Conv4'), - head=dict(type='CosineDistanceHead', num_classes=100, in_channels=1600), - meta_test_head=dict( - type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_resnet12_mini_imagenet_5way_1shot.py b/configs/classification/baseline_plus/mini_imagenet/baseline_plus_resnet12_mini_imagenet_5way_1shot.py deleted file mode 100644 index 4251570..0000000 --- a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_resnet12_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,15 +0,0 @@ -_base_ = ['baseline_pp_mini_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='CosineDistanceHead', - num_classes=100, - in_channels=640, - temperature=10.0), - meta_test_head=dict( - type='CosineDistanceHead', - num_classes=5, - in_channels=640, - temperature=5.0)) diff --git a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_resnet12_mini_imagenet_5way_5shot.py b/configs/classification/baseline_plus/mini_imagenet/baseline_plus_resnet12_mini_imagenet_5way_5shot.py deleted file mode 100644 index 56beccb..0000000 --- a/configs/classification/baseline_plus/mini_imagenet/baseline_plus_resnet12_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,15 +0,0 @@ -_base_ = ['baseline_pp_mini_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='CosineDistanceHead', - num_classes=100, - in_channels=640, - temperature=10.0), - meta_test_head=dict( - type='CosineDistanceHead', - num_classes=5, - in_channels=640, - temperature=5.0)) diff --git a/configs/classification/baseline_plus/mini_imagenet/metafile.yml b/configs/classification/baseline_plus/mini_imagenet/metafile.yml new file mode 100644 index 0000000..345bb05 --- /dev/null +++ b/configs/classification/baseline_plus/mini_imagenet/metafile.yml @@ -0,0 +1,64 @@ +Collections: + - Name: Baseline_Plus + Metadata: + Training Data: Mini-ImageNet + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1904.04232 + README: configs/classification/baseline_plus/README.md + +Models: + - Name: baseline-plus_conv4_1xb64_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-1shot.py + - Name: baseline-plus_conv4_1xb64_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/mini_imagenet/baseline-plus_conv4_1xb64_mini-imagenet_5way-5shot.py + - Name: baseline-plus_resnet12_1xb64_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-1shot.py + - Name: baseline-plus_resnet12_1xb64_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/mini_imagenet/baseline-plus_resnet12_1xb64_mini-imagenet_5way-5shot.py diff --git a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_tiered_imagenet_5way_1shot_84x84_aug.py b/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-1shot.py similarity index 78% rename from configs/classification/baseline_plus/tiered_imagenet/baseline_plus_tiered_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-1shot.py index 7ac3e37..fd6601c 100644 --- a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_tiered_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-1shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_100epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=8, + workers_per_gpu=4, train=dict( type='TieredImageNetDataset', data_prefix='data/tiered_imagenet', @@ -39,4 +39,10 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) -pin_memory = True + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='Conv4'), + head=dict(type='CosineDistanceHead', num_classes=351, in_channels=1600), + meta_test_head=dict( + type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_tiered_imagenet_5way_5shot_84x84_aug.py b/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-5shot.py similarity index 79% rename from configs/classification/baseline_plus/tiered_imagenet/baseline_plus_tiered_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-5shot.py index 7a779a5..3788cc5 100644 --- a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_tiered_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-5shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=8, + workers_per_gpu=4, train=dict( type='TieredImageNetDataset', data_prefix='data/tiered_imagenet', @@ -39,4 +39,10 @@ data = dict( meta_test_cfg=dict( support=dict( batch_size=4, drop_last=True, train=meta_finetune_cfg)))) -pin_memory = True + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='Conv4'), + head=dict(type='CosineDistanceHead', num_classes=351, in_channels=1600), + meta_test_head=dict( + type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-1shot.py b/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..317e1ba --- /dev/null +++ b/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-1shot.py @@ -0,0 +1,55 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_100epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=150, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='CosineDistanceHead', + num_classes=351, + in_channels=640, + temperature=10.0), + meta_test_head=dict( + type='CosineDistanceHead', + num_classes=5, + in_channels=640, + temperature=5.0)) diff --git a/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-5shot.py b/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-5shot.py new file mode 100644 index 0000000..172f9b9 --- /dev/null +++ b/configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-5shot.py @@ -0,0 +1,55 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=600, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict( + batch_size=4, drop_last=True, train=meta_finetune_cfg)))) + +model = dict( + type='BaselinePlusClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='CosineDistanceHead', + num_classes=351, + in_channels=640, + temperature=10.0), + meta_test_head=dict( + type='CosineDistanceHead', + num_classes=5, + in_channels=640, + temperature=5.0)) diff --git a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_conv4_tiered_imagenet_5way_1shot.py b/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_conv4_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 1d9c551..0000000 --- a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_conv4_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['baseline_pp_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='Conv4'), - head=dict(type='CosineDistanceHead', num_classes=351, in_channels=1600), - meta_test_head=dict( - type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_conv4_tiered_imagenet_5way_5shot.py b/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_conv4_tiered_imagenet_5way_5shot.py deleted file mode 100644 index e7ea3d0..0000000 --- a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_conv4_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['baseline_pp_tiered_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='Conv4'), - head=dict(type='CosineDistanceHead', num_classes=351, in_channels=1600), - meta_test_head=dict( - type='CosineDistanceHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_resnet12_tiered_imagenet_5way_1shot.py b/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_resnet12_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 2fda16d..0000000 --- a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_resnet12_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,15 +0,0 @@ -_base_ = ['baseline_pp_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='CosineDistanceHead', - num_classes=351, - in_channels=640, - temperature=10.0), - meta_test_head=dict( - type='CosineDistanceHead', - num_classes=5, - in_channels=640, - temperature=5.0)) diff --git a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_resnet12_tiered_imagenet_5way_5shot.py b/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_resnet12_tiered_imagenet_5way_5shot.py deleted file mode 100644 index cc881bf..0000000 --- a/configs/classification/baseline_plus/tiered_imagenet/baseline_plus_resnet12_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,15 +0,0 @@ -_base_ = ['baseline_pp_tiered_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='BaselinePlusClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='CosineDistanceHead', - num_classes=351, - in_channels=640, - temperature=10.0), - meta_test_head=dict( - type='CosineDistanceHead', - num_classes=5, - in_channels=640, - temperature=5.0)) diff --git a/configs/classification/baseline_plus/tiered_imagenet/metafile.yml b/configs/classification/baseline_plus/tiered_imagenet/metafile.yml new file mode 100644 index 0000000..88020e8 --- /dev/null +++ b/configs/classification/baseline_plus/tiered_imagenet/metafile.yml @@ -0,0 +1,64 @@ +Collections: + - Name: Baseline_Plus + Metadata: + Training Data: Tiered-ImageNet + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1904.04232 + README: configs/classification/baseline_plus/README.md + +Models: + - Name: baseline-plus_conv4_1xb64_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-1shot.py + - Name: baseline-plus_conv4_1xb64_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/tiered_imagenet/baseline-plus_conv4_1xb64_tiered-imagenet_5way-5shot.py + - Name: baseline-plus_resnet12_1xb64_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-1shot.py + - Name: baseline-plus_resnet12_1xb64_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Baseline_Plus + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/baseline_plus/tiered_imagenet/baseline-plus_resnet12_1xb64_tiered-imagenet_5way-5shot.py diff --git a/configs/classification/maml/README.md b/configs/classification/maml/README.md new file mode 100644 index 0000000..ca2efe2 --- /dev/null +++ b/configs/classification/maml/README.md @@ -0,0 +1,66 @@ + + +# MAML (ICML'2017) + +```bibtex +@inproceedings{FinnAL17, + title={Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks}, + author={Chelsea Finn and Pieter Abbeel and Sergey Levine}, + booktitle={Proceedings of the 34th International Conference on Machine Learning}, + year={2017} +} +``` +## How to Reproduce MAML + +It consists of two steps: +- **Step1: Base training** + - use all the images of base classes to train a base model. + - use validation set to select the best model. + +- **Step2: Meta Testing**: + - use best model from step1. + + +### An example of CUB dataset with Conv4 +```bash +# base training +python ./tools/classification/train.py \ + configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-1shot.py + +# meta testing +python ./tools/classification/test.py \ + configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-1shot.py \ + work_dir/maml_conv4_1xb105_cub_5way-1shot/best_accuracy_mean.pth +``` + +**Note**: +- All the result are trained with single gpu. +- The base training of 1 shot and 5 shot use same training setting, + but different validation setting. + +## Results on CUB dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Mini-ImageNet dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Tiered-ImageNet of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | diff --git a/configs/classification/maml/cub/maml_cub_5way_1shot_84x84_aug.py b/configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-1shot.py similarity index 80% rename from configs/classification/maml/cub/maml_cub_5way_1shot_84x84_aug.py rename to configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-1shot.py index 9111a2f..a70311c 100644 --- a/configs/classification/maml/cub/maml_cub_5way_1shot_84x84_aug.py +++ b/configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-1shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -39,6 +39,14 @@ data = dict( meta_test_cfg=dict( fast_test=False, support=dict(batch_size=5, num_inner_steps=5)))) +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=5, in_channels=1600)) + optimizer_config = dict( type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) optimizer = dict(type='Adam', lr=0.001) diff --git a/configs/classification/maml/cub/maml_cub_5way_5shot_84x84_aug.py b/configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-5shot.py similarity index 80% rename from configs/classification/maml/cub/maml_cub_5way_5shot_84x84_aug.py rename to configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-5shot.py index 74e882f..f8a7555 100644 --- a/configs/classification/maml/cub/maml_cub_5way_5shot_84x84_aug.py +++ b/configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -39,6 +39,14 @@ data = dict( meta_test_cfg=dict( fast_test=False, support=dict(batch_size=25, num_inner_steps=5)))) +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=5, in_channels=1600)) + optimizer_config = dict( type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) optimizer = dict(type='Adam', lr=0.001) diff --git a/configs/classification/maml/cub/maml_conv4_cub_5way_1shot.py b/configs/classification/maml/cub/maml_conv4_cub_5way_1shot.py deleted file mode 100644 index b6d7097..0000000 --- a/configs/classification/maml/cub/maml_conv4_cub_5way_1shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_cub_5way_1shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/maml/cub/maml_conv4_cub_5way_5shot.py b/configs/classification/maml/cub/maml_conv4_cub_5way_5shot.py deleted file mode 100644 index b63b525..0000000 --- a/configs/classification/maml/cub/maml_conv4_cub_5way_5shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_cub_5way_5shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-1shot.py b/configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-1shot.py new file mode 100644 index 0000000..0d2b51a --- /dev/null +++ b/configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-1shot.py @@ -0,0 +1,52 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline)), + val=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=5, num_inner_steps=5))), + test=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=5, num_inner_steps=5)))) + +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=5, in_channels=640)) + +optimizer_config = dict( + type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) +optimizer = dict(type='Adam', lr=0.001) diff --git a/configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-5shot.py b/configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-5shot.py new file mode 100644 index 0000000..83d0995 --- /dev/null +++ b/configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-5shot.py @@ -0,0 +1,52 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline)), + val=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=25, num_inner_steps=5))), + test=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=25, num_inner_steps=5)))) + +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=5, in_channels=640)) + +optimizer_config = dict( + type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) +optimizer = dict(type='Adam', lr=0.001) diff --git a/configs/classification/maml/cub/maml_resnet12_cub_5way_1shot.py b/configs/classification/maml/cub/maml_resnet12_cub_5way_1shot.py deleted file mode 100644 index d6c6b54..0000000 --- a/configs/classification/maml/cub/maml_resnet12_cub_5way_1shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_cub_5way_1shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/maml/cub/maml_resnet12_cub_5way_5shot.py b/configs/classification/maml/cub/maml_resnet12_cub_5way_5shot.py deleted file mode 100644 index 2cc3fef..0000000 --- a/configs/classification/maml/cub/maml_resnet12_cub_5way_5shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_cub_5way_5shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/maml/cub/metafile.yml b/configs/classification/maml/cub/metafile.yml new file mode 100644 index 0000000..685ae06 --- /dev/null +++ b/configs/classification/maml/cub/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: MAML + Metadata: + Training Data: CUB + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1703.03400 + README: configs/classification/maml/README.md + +Models: + - Name: maml_conv4_1xb105_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-1shot.py + - Name: maml_conv4_1xb105_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/cub/maml_conv4_1xb105_cub_5way-5shot.py + - Name: maml_resnet12_1xb105_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-1shot.py + - Name: maml_resnet12_1xb105_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/cub/maml_resnet12_1xb105_cub_5way-5shot.py diff --git a/configs/classification/maml/mini_imagenet/maml_mini_imagenet_5way_1shot_84x84_aug.py b/configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-1shot.py similarity index 79% rename from configs/classification/maml/mini_imagenet/maml_mini_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-1shot.py index 193ba8f..9033e2c 100644 --- a/configs/classification/maml/mini_imagenet/maml_mini_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-1shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -39,6 +39,14 @@ data = dict( meta_test_cfg=dict( fast_test=False, support=dict(batch_size=5, num_inner_steps=5)))) +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=5, in_channels=1600)) + optimizer_config = dict( type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) optimizer = dict(type='Adam', lr=0.001) diff --git a/configs/classification/maml/mini_imagenet/maml_mini_imagenet_5way_5shot_84x84_aug.py b/configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-5shot.py similarity index 79% rename from configs/classification/maml/mini_imagenet/maml_mini_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-5shot.py index a54abfe..af74381 100644 --- a/configs/classification/maml/mini_imagenet/maml_mini_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -39,6 +39,14 @@ data = dict( meta_test_cfg=dict( fast_test=False, support=dict(batch_size=25, num_inner_steps=5)))) +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=5, in_channels=1600)) + optimizer_config = dict( type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) optimizer = dict(type='Adam', lr=0.001) diff --git a/configs/classification/maml/mini_imagenet/maml_conv4_mini_imagenet_5way_1shot.py b/configs/classification/maml/mini_imagenet/maml_conv4_mini_imagenet_5way_1shot.py deleted file mode 100644 index d5e806a..0000000 --- a/configs/classification/maml/mini_imagenet/maml_conv4_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_mini_imagenet_5way_1shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/maml/mini_imagenet/maml_conv4_mini_imagenet_5way_5shot.py b/configs/classification/maml/mini_imagenet/maml_conv4_mini_imagenet_5way_5shot.py deleted file mode 100644 index de9ffc9..0000000 --- a/configs/classification/maml/mini_imagenet/maml_conv4_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_mini_imagenet_5way_5shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-1shot.py b/configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-1shot.py new file mode 100644 index 0000000..80a3949 --- /dev/null +++ b/configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-1shot.py @@ -0,0 +1,52 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline)), + val=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=5, num_inner_steps=5))), + test=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=5, num_inner_steps=5)))) + +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=5, in_channels=640)) + +optimizer = dict(type='Adam', lr=0.001) +optimizer_config = dict( + type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) diff --git a/configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-5shot.py b/configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-5shot.py new file mode 100644 index 0000000..cd4cac7 --- /dev/null +++ b/configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-5shot.py @@ -0,0 +1,52 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline)), + val=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=25, num_inner_steps=5))), + test=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=25, num_inner_steps=5)))) + +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=5, in_channels=640)) + +optimizer_config = dict( + type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) +optimizer = dict(type='Adam', lr=0.001) diff --git a/configs/classification/maml/mini_imagenet/maml_resnet12_mini_imagenet_5way_1shot.py b/configs/classification/maml/mini_imagenet/maml_resnet12_mini_imagenet_5way_1shot.py deleted file mode 100644 index ecebdb5..0000000 --- a/configs/classification/maml/mini_imagenet/maml_resnet12_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_mini_imagenet_5way_1shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/maml/mini_imagenet/maml_resnet12_mini_imagenet_5way_5shot.py b/configs/classification/maml/mini_imagenet/maml_resnet12_mini_imagenet_5way_5shot.py deleted file mode 100644 index 4677597..0000000 --- a/configs/classification/maml/mini_imagenet/maml_resnet12_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_mini_imagenet_5way_5shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/maml/mini_imagenet/metafile.yml b/configs/classification/maml/mini_imagenet/metafile.yml new file mode 100644 index 0000000..6b0ba6c --- /dev/null +++ b/configs/classification/maml/mini_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: MAML + Metadata: + Training Data: Mini-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1703.03400 + README: configs/classification/maml/README.md + +Models: + - Name: maml_conv4_1xb105_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-1shot.py + - Name: maml_conv4_1xb105_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/mini_imagenet/maml_conv4_1xb105_mini-imagenet_5way-5shot.py + - Name: maml_resnet12_1xb105_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-1shot.py + - Name: maml_resnet12_1xb105_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/mini_imagenet/maml_resnet12_1xb105_mini-imagenet_5way-5shot.py diff --git a/configs/classification/maml/tiered_imagenet/maml_tiered_imagenet_5way_1shot_84x84_aug.py b/configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-1shot.py similarity index 79% rename from configs/classification/maml/tiered_imagenet/maml_tiered_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-1shot.py index affb510..12a34c7 100644 --- a/configs/classification/maml/tiered_imagenet/maml_tiered_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-1shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -39,7 +39,14 @@ data = dict( meta_test_cfg=dict( fast_test=False, support=dict(batch_size=5, num_inner_steps=5)))) +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=5, in_channels=1600)) + optimizer_config = dict( type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) optimizer = dict(type='Adam', lr=0.001) -pin_memory = True diff --git a/configs/classification/maml/tiered_imagenet/maml_tiered_imagenet_5way_5shot_84x84_aug.py b/configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-5shot.py similarity index 80% rename from configs/classification/maml/tiered_imagenet/maml_tiered_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-5shot.py index 1b64a93..15df9c4 100644 --- a/configs/classification/maml/tiered_imagenet/maml_tiered_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -39,7 +39,14 @@ data = dict( meta_test_cfg=dict( fast_test=False, support=dict(batch_size=25, num_inner_steps=5)))) +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='Conv4'), + head=dict(type='LinearHead', num_classes=5, in_channels=1600)) + optimizer_config = dict( type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) optimizer = dict(type='Adam', lr=0.001) -pin_memory = True diff --git a/configs/classification/maml/tiered_imagenet/maml_conv4_tiered_imagenet_5way_1shot.py b/configs/classification/maml/tiered_imagenet/maml_conv4_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 859d12e..0000000 --- a/configs/classification/maml/tiered_imagenet/maml_conv4_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_tiered_imagenet_5way_1shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/maml/tiered_imagenet/maml_conv4_tiered_imagenet_5way_5shot.py b/configs/classification/maml/tiered_imagenet/maml_conv4_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 75971b0..0000000 --- a/configs/classification/maml/tiered_imagenet/maml_conv4_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_tiered_imagenet_5way_5shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='Conv4'), - head=dict(type='LinearHead', num_classes=5, in_channels=1600)) diff --git a/configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-1shot.py b/configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..69c2b71 --- /dev/null +++ b/configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-1shot.py @@ -0,0 +1,52 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline)), + val=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=5, num_inner_steps=5))), + test=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=5, num_inner_steps=5)))) + +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=5, in_channels=640)) + +optimizer_config = dict( + type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) +optimizer = dict(type='Adam', lr=0.001) diff --git a/configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-5shot.py b/configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-5shot.py new file mode 100644 index 0000000..9e25f75 --- /dev/null +++ b/configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-5shot.py @@ -0,0 +1,52 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline)), + val=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=25, num_inner_steps=5))), + test=dict( + meta_test_cfg=dict( + fast_test=False, support=dict(batch_size=25, num_inner_steps=5)))) + +model = dict( + type='MAMLClassifier', + num_inner_steps=2, + inner_lr=0.01, + first_order=False, + backbone=dict(type='ResNet12'), + head=dict(type='LinearHead', num_classes=5, in_channels=640)) + +optimizer_config = dict( + type='GradientCumulativeOptimizerHook', cumulative_iters=8, grad_clip=None) +optimizer = dict(type='Adam', lr=0.001) diff --git a/configs/classification/maml/tiered_imagenet/maml_resnet12_tiered_imagenet_5way_1shot.py b/configs/classification/maml/tiered_imagenet/maml_resnet12_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 1091839..0000000 --- a/configs/classification/maml/tiered_imagenet/maml_resnet12_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_tiered_imagenet_5way_1shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/maml/tiered_imagenet/maml_resnet12_tiered_imagenet_5way_5shot.py b/configs/classification/maml/tiered_imagenet/maml_resnet12_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 1283726..0000000 --- a/configs/classification/maml/tiered_imagenet/maml_resnet12_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,10 +0,0 @@ -_base_ = [ - 'maml_tiered_imagenet_5way_5shot_84x84_aug.py', -] -model = dict( - type='MAMLClassifier', - num_inner_steps=2, - inner_lr=0.01, - first_order=False, - backbone=dict(type='ResNet12'), - head=dict(type='LinearHead', num_classes=5, in_channels=640)) diff --git a/configs/classification/maml/tiered_imagenet/metafile.yml b/configs/classification/maml/tiered_imagenet/metafile.yml new file mode 100644 index 0000000..e7a595c --- /dev/null +++ b/configs/classification/maml/tiered_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: MAML + Metadata: + Training Data: Tiered-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1703.03400 + README: configs/classification/maml/README.md + +Models: + - Name: maml_conv4_1xb105_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-1shot.py + - Name: maml_conv4_1xb105_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/tiered_imagenet/maml_conv4_1xb105_tiered-imagenet_5way-5shot.py + - Name: maml_resnet12_1xb105_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-1shot.py + - Name: maml_resnet12_1xb105_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: MAML + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/maml/tiered_imagenet/maml_resnet12_1xb105_tiered-imagenet_5way-5shot.py diff --git a/configs/classification/matching_net/README.md b/configs/classification/matching_net/README.md new file mode 100644 index 0000000..e99396b --- /dev/null +++ b/configs/classification/matching_net/README.md @@ -0,0 +1,68 @@ + + +# MatchingNet (NeurIPS'2016) + +```bibtex +@inproceedings{vinyals2016matching, + title={Matching networks for one shot learning}, + author={Vinyals, Oriol and Blundell, Charles and Lillicrap, Tim and Wierstra, Daan and others}, + booktitle={Advances in Neural Information Processing Systems}, + pages={3630--3638}, + year={2016} +} +``` +## How to Reproduce MatchingNet + +It consists of two steps: +- **Step1: Base training** + - use all the images of base classes to train a base model. + - use validation set to select the best model. + +- **Step2: Meta Testing**: + - use best model from step1. + + +### An example of CUB dataset with Conv4 +```bash +# base training +python ./tools/classification/train.py \ + configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-1shot.py + +# meta testing +python ./tools/classification/test.py \ + configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-1shot.py \ + work_dir/matching-net_conv4_1xb105_cub_5way-1shot/best_accuracy_mean.pth +``` + +**Note**: +- All the result are trained with single gpu. +- The base training of 1 shot and 5 shot use same training setting, + but different validation setting. + + +## Results on CUB dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Mini-ImageNet dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Tiered-ImageNet of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | diff --git a/configs/classification/matching_net/cub/matching_net_cub_5way_5shot_84x84_aug.py b/configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-1shot.py similarity index 79% rename from configs/classification/matching_net/cub/matching_net_cub_5way_5shot_84x84_aug.py rename to configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-1shot.py index 7ba91cf..bd52b42 100644 --- a/configs/classification/matching_net/cub/matching_net_cub_5way_5shot_84x84_aug.py +++ b/configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-1shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,8 @@ data = dict( data_prefix='data/CUB_200_2011', subset='train', pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/cub/matching_net_cub_5way_1shot_84x84_aug.py b/configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-5shot.py similarity index 79% rename from configs/classification/matching_net/cub/matching_net_cub_5way_1shot_84x84_aug.py rename to configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-5shot.py index a131cff..8d1fa45 100644 --- a/configs/classification/matching_net/cub/matching_net_cub_5way_1shot_84x84_aug.py +++ b/configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,8 @@ data = dict( data_prefix='data/CUB_200_2011', subset='train', pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-1shot.py b/configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-1shot.py new file mode 100644 index 0000000..e90dca1 --- /dev/null +++ b/configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-5shot.py b/configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-5shot.py new file mode 100644 index 0000000..bcdb345 --- /dev/null +++ b/configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-5shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/cub/matching_net_conv4_cub_5way_1shot.py b/configs/classification/matching_net/cub/matching_net_conv4_cub_5way_1shot.py deleted file mode 100644 index 1cba74d..0000000 --- a/configs/classification/matching_net/cub/matching_net_conv4_cub_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_cub_5way_1shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/cub/matching_net_conv4_cub_5way_5shot.py b/configs/classification/matching_net/cub/matching_net_conv4_cub_5way_5shot.py deleted file mode 100644 index 58cd121..0000000 --- a/configs/classification/matching_net/cub/matching_net_conv4_cub_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_cub_5way_5shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/cub/matching_net_resnet12_cub_5way_1shot.py b/configs/classification/matching_net/cub/matching_net_resnet12_cub_5way_1shot.py deleted file mode 100644 index a4beb13..0000000 --- a/configs/classification/matching_net/cub/matching_net_resnet12_cub_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_cub_5way_1shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/cub/matching_net_resnet12_cub_5way_5shot.py b/configs/classification/matching_net/cub/matching_net_resnet12_cub_5way_5shot.py deleted file mode 100644 index e369290..0000000 --- a/configs/classification/matching_net/cub/matching_net_resnet12_cub_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_cub_5way_5shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/cub/metafile.yml b/configs/classification/matching_net/cub/metafile.yml new file mode 100644 index 0000000..da9dec5 --- /dev/null +++ b/configs/classification/matching_net/cub/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Matching-Net + Metadata: + Training Data: CUB + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1606.04080 + README: configs/classification/matching_net/README.md + +Models: + - Name: matching-net_conv4_1xb105_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-1shot.py + - Name: matching-net_conv4_1xb105_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/cub/matching-net_conv4_1xb105_cub_5way-5shot.py + - Name: matching-net_resnet12_1xb105_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-1shot.py + - Name: matching-net_resnet12_1xb105_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/cub/matching-net_resnet12_1xb105_cub_5way-5shot.py diff --git a/configs/classification/matching_net/mini_imagenet/matching_net_mini_imagenet_5way_5shot_84x84_aug.py b/configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-1shot.py similarity index 79% rename from configs/classification/matching_net/mini_imagenet/matching_net_mini_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-1shot.py index 07f2866..113c493 100644 --- a/configs/classification/matching_net/mini_imagenet/matching_net_mini_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-1shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,8 @@ data = dict( data_prefix='data/mini_imagenet', subset='train', pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/mini_imagenet/matching_net_mini_imagenet_5way_1shot_84x84_aug.py b/configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-5shot.py similarity index 79% rename from configs/classification/matching_net/mini_imagenet/matching_net_mini_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-5shot.py index 95d4f96..99e47a9 100644 --- a/configs/classification/matching_net/mini_imagenet/matching_net_mini_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,8 @@ data = dict( data_prefix='data/mini_imagenet', subset='train', pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-1shot.py b/configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-1shot.py new file mode 100644 index 0000000..e8330f1 --- /dev/null +++ b/configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-5shot.py b/configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-5shot.py new file mode 100644 index 0000000..19dd797 --- /dev/null +++ b/configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-5shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/mini_imagenet/matching_net_conv4_mini_imagenet_5way_1shot.py b/configs/classification/matching_net/mini_imagenet/matching_net_conv4_mini_imagenet_5way_1shot.py deleted file mode 100644 index 2ff6d07..0000000 --- a/configs/classification/matching_net/mini_imagenet/matching_net_conv4_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_mini_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/mini_imagenet/matching_net_conv4_mini_imagenet_5way_5shot.py b/configs/classification/matching_net/mini_imagenet/matching_net_conv4_mini_imagenet_5way_5shot.py deleted file mode 100644 index 7d23a9d..0000000 --- a/configs/classification/matching_net/mini_imagenet/matching_net_conv4_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_mini_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/mini_imagenet/matching_net_resnet12_mini_imagenet_5way_1shot.py b/configs/classification/matching_net/mini_imagenet/matching_net_resnet12_mini_imagenet_5way_1shot.py deleted file mode 100644 index e6ff1aa..0000000 --- a/configs/classification/matching_net/mini_imagenet/matching_net_resnet12_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_mini_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/mini_imagenet/matching_net_resnet12_mini_imagenet_5way_5shot.py b/configs/classification/matching_net/mini_imagenet/matching_net_resnet12_mini_imagenet_5way_5shot.py deleted file mode 100644 index ba9e446..0000000 --- a/configs/classification/matching_net/mini_imagenet/matching_net_resnet12_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_mini_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/mini_imagenet/metafile.yml b/configs/classification/matching_net/mini_imagenet/metafile.yml new file mode 100644 index 0000000..deaf226 --- /dev/null +++ b/configs/classification/matching_net/mini_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Matching-Net + Metadata: + Training Data: Mini-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1606.04080 + README: configs/classification/matching_net/README.md + +Models: + - Name: matching-net_conv4_1xb105_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-1shot.py + - Name: matching-net_conv4_1xb105_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/mini_imagenet/matching-net_conv4_1xb105_mini-imagenet_5way-5shot.py + - Name: matching-net_resnet12_1xb105_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-1shot.py + - Name: matching-net_resnet12_1xb105_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/mini_imagenet/matching-net_resnet12_1xb105_mini-imagenet_5way-5shot.py diff --git a/configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-1shot.py b/configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..19a2538 --- /dev/null +++ b/configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/tiered_imagenet/matching_net_tiered_imagenet_5way_5shot_84x84_aug.py b/configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-5shot.py similarity index 80% rename from configs/classification/matching_net/tiered_imagenet/matching_net_tiered_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-5shot.py index b44d96d..57bb5e9 100644 --- a/configs/classification/matching_net/tiered_imagenet/matching_net_tiered_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,4 +32,8 @@ data = dict( data_prefix='data/tiered_imagenet', subset='train', pipeline=train_pipeline))) -pin_memory = True + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py b/configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..a710291 --- /dev/null +++ b/configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/proto_net/tiered_imagenet/proto_net_tiered_imagenet_5way_5shot_84x84_aug.py b/configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py similarity index 79% rename from configs/classification/proto_net/tiered_imagenet/proto_net_tiered_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py index b44d96d..1a93321 100644 --- a/configs/classification/proto_net/tiered_imagenet/proto_net_tiered_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,4 +32,8 @@ data = dict( data_prefix='data/tiered_imagenet', subset='train', pipeline=train_pipeline))) -pin_memory = True + +model = dict( + type='MatchingNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/tiered_imagenet/matching_net_conv4_tiered_imagenet_5way_1shot.py b/configs/classification/matching_net/tiered_imagenet/matching_net_conv4_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 4c2d248..0000000 --- a/configs/classification/matching_net/tiered_imagenet/matching_net_conv4_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_tiered_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/tiered_imagenet/matching_net_conv4_tiered_imagenet_5way_5shot.py b/configs/classification/matching_net/tiered_imagenet/matching_net_conv4_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 866e957..0000000 --- a/configs/classification/matching_net/tiered_imagenet/matching_net_conv4_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_tiered_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/tiered_imagenet/matching_net_resnet12_tiered_imagenet_5way_1shot.py b/configs/classification/matching_net/tiered_imagenet/matching_net_resnet12_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 00ba806..0000000 --- a/configs/classification/matching_net/tiered_imagenet/matching_net_resnet12_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_tiered_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/tiered_imagenet/matching_net_resnet12_tiered_imagenet_5way_5shot.py b/configs/classification/matching_net/tiered_imagenet/matching_net_resnet12_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 3d553c3..0000000 --- a/configs/classification/matching_net/tiered_imagenet/matching_net_resnet12_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['matching_net_tiered_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='MatchingNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MatchingHead')) diff --git a/configs/classification/matching_net/tiered_imagenet/metafile.yml b/configs/classification/matching_net/tiered_imagenet/metafile.yml new file mode 100644 index 0000000..7ab06a4 --- /dev/null +++ b/configs/classification/matching_net/tiered_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Matching-Net + Metadata: + Training Data: Tiered-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1606.04080 + README: configs/classification/matching_net/README.md + +Models: + - Name: matching-net_conv4_1xb105_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-1shot.py + - Name: matching-net_conv4_1xb105_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/tiered_imagenet/matching-net_conv4_1xb105_tiered-imagenet_5way-5shot.py + - Name: matching-net_resnet12_1xb105_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py + - Name: matching-net_resnet12_1xb105_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Matching-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/matching_net/tiered_imagenet/matching-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py diff --git a/configs/classification/meta_baseline/README.md b/configs/classification/meta_baseline/README.md new file mode 100644 index 0000000..092bdc5 --- /dev/null +++ b/configs/classification/meta_baseline/README.md @@ -0,0 +1,75 @@ + + +# Meta Baseline (ICCV'2021) + +```bibtex +@inproceedings{chen2021meta, + title={Meta-Baseline: Exploring Simple Meta-Learning for Few-Shot Learning}, + author={Chen, Yinbo and Liu, Zhuang and Xu, Huijuan and Darrell, Trevor and Wang, Xiaolong}, + booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision}, + pages={9062--9071}, + year={2021} +} +``` + +## How to Reproduce Meta Baseline + +It consists of three steps: +- **Step1: Baseline Base training** + - use all the images of base classes to train a base model. + - use validation set to select the best model. +- **Step2: Meta Baseline Base training** + - use all the images of base classes to train a base model with meta metric. + - use validation set to select the best model. +- **Step3: Meta Testing**: + - use best model from step1. + + +### An example of CUB dataset with Conv4 +```bash +# baseline base training +python ./tools/classification/train.py \ + configs/classification/baseline/cub/baseline_conv4_1xb64_cub_5way-1shot.py + +# Meta Baseline base training +python ./tools/classification/train.py \ + configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-1shot.py \ + --options "load_from=work_dir/baseline_conv4_1xb64_cub_5way-1shot/best_accuracy_mean.pth" + +# meta testing +python ./tools/classification/test.py \ + configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-1shot.py \ + work_dir/meta-baseline_conv4_1xb100_cub_5way-1shot/best_accuracy_mean.pth +``` + +**Note**: +- All the result are trained with single gpu. +- The base training of 1 shot and 5 shot use same training setting, + but different validation setting. + +## Results on CUB dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Mini-ImageNet dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Tiered-ImageNet of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | diff --git a/configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-1shot.py b/configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-1shot.py new file mode 100644 index 0000000..c51f6b1 --- /dev/null +++ b/configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-1shot.py @@ -0,0 +1,42 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/sgd_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=10, + num_shots=5, + num_queries=5, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MetaBaselineHead')) + +load_from = ('./work_dirs/baseline_conv4_1xb64_cub_5way-1shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-5shot.py b/configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-5shot.py new file mode 100644 index 0000000..65142eb --- /dev/null +++ b/configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-5shot.py @@ -0,0 +1,42 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/sgd_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=10, + num_shots=5, + num_queries=5, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MetaBaselineHead')) + +load_from = ('./work_dirs/baseline_conv4_1xb64_cub_5way-5shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-1shot.py b/configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-1shot.py new file mode 100644 index 0000000..61798e3 --- /dev/null +++ b/configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-1shot.py @@ -0,0 +1,42 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/sgd_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=10, + num_shots=5, + num_queries=5, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MetaBaselineHead')) + +load_from = ('./work_dirs/baseline_resnet12_1xb64_cub_5way-1shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-5shot.py b/configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-5shot.py new file mode 100644 index 0000000..bd92494 --- /dev/null +++ b/configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-5shot.py @@ -0,0 +1,42 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/sgd_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=10, + num_shots=5, + num_queries=5, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MetaBaselineHead')) + +load_from = ('./work_dirs/baseline_resnet12_1xb64_cub_5way-5shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/cub/meta_baseline_conv4_cub_5way_1shot.py b/configs/classification/meta_baseline/cub/meta_baseline_conv4_cub_5way_1shot.py deleted file mode 100644 index 5528f4e..0000000 --- a/configs/classification/meta_baseline/cub/meta_baseline_conv4_cub_5way_1shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['meta_baseline_cub_5way_1shot_84x84_aug.py'] - -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_conv4_cub_5way_1shot/best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/cub/meta_baseline_conv4_cub_5way_5shot.py b/configs/classification/meta_baseline/cub/meta_baseline_conv4_cub_5way_5shot.py deleted file mode 100644 index 5284475..0000000 --- a/configs/classification/meta_baseline/cub/meta_baseline_conv4_cub_5way_5shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['meta_baseline_cub_5way_5shot_84x84_aug.py'] - -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_conv4_cub_5way_1shot/best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/cub/meta_baseline_resnet12_cub_5way_1shot.py b/configs/classification/meta_baseline/cub/meta_baseline_resnet12_cub_5way_1shot.py deleted file mode 100644 index b5c8e48..0000000 --- a/configs/classification/meta_baseline/cub/meta_baseline_resnet12_cub_5way_1shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['meta_baseline_cub_5way_1shot_84x84_aug.py'] -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MetaBaselineHead')) -load_from = \ - './work_dirs/baseline_resnet12_cub_5way_1shot/best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/cub/meta_baseline_resnet12_cub_5way_5shot.py b/configs/classification/meta_baseline/cub/meta_baseline_resnet12_cub_5way_5shot.py deleted file mode 100644 index 1645ea3..0000000 --- a/configs/classification/meta_baseline/cub/meta_baseline_resnet12_cub_5way_5shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['meta_baseline_cub_5way_5shot_84x84_aug.py'] -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MetaBaselineHead')) -load_from = \ - './work_dirs/baseline_resnet12_cub_5way_1shot/best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/cub/metafile.yml b/configs/classification/meta_baseline/cub/metafile.yml new file mode 100644 index 0000000..0367e1d --- /dev/null +++ b/configs/classification/meta_baseline/cub/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Meta-Baseline + Metadata: + Training Data: CUB + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/2003.04390 + README: configs/classification/meta_baseline/README.md + +Models: + - Name: meta-baseline_conv4_1xb100_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-1shot.py + - Name: meta-baseline_conv4_1xb100_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/cub/meta-baseline_conv4_1xb100_cub_5way-5shot.py + - Name: meta-baseline_resnet12_1xb100_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-1shot.py + - Name: meta-baseline_resnet12_1xb100_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/cub/meta-baseline_resnet12_1xb100_cub_5way-5shot.py diff --git a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_mini_imagenet_5way_1shot_84x84_aug.py b/configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-1shot.py similarity index 72% rename from configs/classification/meta_baseline/mini_imagenet/meta_baseline_mini_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-1shot.py index 6e6a617..0bcf254 100644 --- a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_mini_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-1shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/sgd_60000iter.py' + '../../_base_/schedules/sgd_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,10 @@ data = dict( data_prefix='data/mini_imagenet', subset='train', pipeline=train_pipeline))) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MetaBaselineHead')) +load_from = ('./work_dirs/baseline_conv4_1xb64_mini-imagenet_5way-1shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_mini_imagenet_5way_5shot_84x84_aug.py b/configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-5shot.py similarity index 72% rename from configs/classification/meta_baseline/mini_imagenet/meta_baseline_mini_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-5shot.py index 9954e1c..1be97cf 100644 --- a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_mini_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/sgd_60000iter.py' + '../../_base_/schedules/sgd_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,10 @@ data = dict( data_prefix='data/mini_imagenet', subset='train', pipeline=train_pipeline))) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MetaBaselineHead')) +load_from = ('./work_dirs/baseline_conv4_1xb64_mini-imagenet_5way-5shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-1shot.py b/configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-1shot.py new file mode 100644 index 0000000..7ab91af --- /dev/null +++ b/configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-1shot.py @@ -0,0 +1,41 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/sgd_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=10, + num_shots=5, + num_queries=5, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MetaBaselineHead')) +load_from = ('./work_dirs/baseline_resnet12_1xb64_mini-imagenet_5way-1shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-5shot.py b/configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-5shot.py new file mode 100644 index 0000000..7d78492 --- /dev/null +++ b/configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-5shot.py @@ -0,0 +1,41 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/sgd_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=10, + num_shots=5, + num_queries=5, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MetaBaselineHead')) +load_from = ('./work_dirs/baseline_resnet12_1xb64_mini-imagenet_5way-5shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_conv4_mini_imagenet_5way_1shot.py b/configs/classification/meta_baseline/mini_imagenet/meta_baseline_conv4_mini_imagenet_5way_1shot.py deleted file mode 100644 index 59af837..0000000 --- a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_conv4_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['meta_baseline_mini_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_conv4_mini_imagenet_5way_1shot/' \ - 'best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_conv4_mini_imagenet_5way_5shot.py b/configs/classification/meta_baseline/mini_imagenet/meta_baseline_conv4_mini_imagenet_5way_5shot.py deleted file mode 100644 index fd53d71..0000000 --- a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_conv4_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['meta_baseline_mini_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_conv4_mini_imagenet_5way_1shot/' \ - 'best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_resnet12_mini_imagenet_5way_1shot.py b/configs/classification/meta_baseline/mini_imagenet/meta_baseline_resnet12_mini_imagenet_5way_1shot.py deleted file mode 100644 index 9e3ac36..0000000 --- a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_resnet12_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['meta_baseline_mini_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_resnet12_mini_imagenet_5way_1shot/' \ - 'best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_resnet12_mini_imagenet_5way_5shot.py b/configs/classification/meta_baseline/mini_imagenet/meta_baseline_resnet12_mini_imagenet_5way_5shot.py deleted file mode 100644 index 57da758..0000000 --- a/configs/classification/meta_baseline/mini_imagenet/meta_baseline_resnet12_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,7 +0,0 @@ -_base_ = ['meta_baseline_mini_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_resnet12_mini_imagenet_5way_1shot/' \ - 'best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/mini_imagenet/metafile.yml b/configs/classification/meta_baseline/mini_imagenet/metafile.yml new file mode 100644 index 0000000..dd981cf --- /dev/null +++ b/configs/classification/meta_baseline/mini_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Meta-Baseline + Metadata: + Training Data: Mini-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/2003.04390 + README: configs/classification/meta_baseline/README.md + +Models: + - Name: meta-baseline_conv4_1xb100_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-1shot.py + - Name: meta-baseline_conv4_1xb100_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/mini_imagenet/meta-baseline_conv4_1xb100_mini-imagenet_5way-5shot.py + - Name: meta-baseline_resnet12_1xb100_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-1shot.py + - Name: meta-baseline_resnet12_1xb100_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/mini_imagenet/meta-baseline_resnet12_1xb100_mini-imagenet_5way-5shot.py diff --git a/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-1shot.py b/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..3e430a2 --- /dev/null +++ b/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-1shot.py @@ -0,0 +1,42 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/sgd_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=10, + num_shots=5, + num_queries=5, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MetaBaselineHead')) +load_from = ('./work_dirs/baseline_conv4_1xb64_tiered-imagenet_5way-1shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_tiered_imagenet_5way_1shot_84x84_aug.py b/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-5shot.py similarity index 74% rename from configs/classification/meta_baseline/tiered_imagenet/meta_baseline_tiered_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-5shot.py index f418bbb..3cb22d0 100644 --- a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_tiered_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/sgd_60000iter.py' + '../../_base_/schedules/sgd_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -33,3 +33,10 @@ data = dict( subset='train', pipeline=train_pipeline))) optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='Conv4'), + head=dict(type='MetaBaselineHead')) +load_from = ('./work_dirs/baseline_conv4_1xb64_tiered-imagenet_5way-5shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-1shot.py b/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..513b3d8 --- /dev/null +++ b/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-1shot.py @@ -0,0 +1,42 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/sgd_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=10, + num_shots=5, + num_queries=5, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MetaBaselineHead')) +load_from = ('./work_dirs/baseline_resnet12_1xb64_tiered-imagenet_5way-1shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_tiered_imagenet_5way_5shot_84x84_aug.py b/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-5shot.py similarity index 74% rename from configs/classification/meta_baseline/tiered_imagenet/meta_baseline_tiered_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-5shot.py index cc110de..fa90925 100644 --- a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_tiered_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/sgd_60000iter.py' + '../../_base_/schedules/sgd_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -33,3 +33,10 @@ data = dict( subset='train', pipeline=train_pipeline))) optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) + +model = dict( + type='MetaBaselineClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='MetaBaselineHead')) +load_from = ('./work_dirs/baseline_resnet12_1xb64_tiered-imagenet_5way-5shot/' + 'best_accuracy_mean.pth') diff --git a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_conv4_tiered_imagenet_5way_1shot.py b/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_conv4_tiered_imagenet_5way_1shot.py deleted file mode 100644 index e2c0fba..0000000 --- a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_conv4_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['meta_baseline_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_conv4_tiered_imagenet_5way_1shot/' \ - 'best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_conv4_tiered_imagenet_5way_5shot.py b/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_conv4_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 80c152b..0000000 --- a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_conv4_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['meta_baseline_tiered_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='Conv4'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_conv4_tiered_imagenet_5way_1shot/' \ - 'best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_resnet12_tiered_imagenet_5way_1shot.py b/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_resnet12_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 393a5be..0000000 --- a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_resnet12_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['meta_baseline_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_resnet12_tiered_imagenet_5way_1shot/' \ - 'best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_resnet12_tiered_imagenet_5way_5shot.py b/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_resnet12_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 8da152e..0000000 --- a/configs/classification/meta_baseline/tiered_imagenet/meta_baseline_resnet12_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,8 +0,0 @@ -_base_ = ['meta_baseline_tiered_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='MetaBaselineClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='MetaBaselineHead')) -load_from = './work_dirs/baseline_resnet12_tiered_imagenet_5way_1shot/' \ - 'best_accuracy_mean.pth' diff --git a/configs/classification/meta_baseline/tiered_imagenet/metafile.yml b/configs/classification/meta_baseline/tiered_imagenet/metafile.yml new file mode 100644 index 0000000..e976e25 --- /dev/null +++ b/configs/classification/meta_baseline/tiered_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Meta-Baseline + Metadata: + Training Data: Tiered-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/2003.04390 + README: configs/classification/meta_baseline/README.md + +Models: + - Name: meta-baseline_conv4_1xb100_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-1shot.py + - Name: meta-baseline_conv4_1xb100_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/tiered_imagenet/meta-baseline_conv4_1xb100_tiered-imagenet_5way-5shot.py + - Name: meta-baseline_resnet12_1xb100_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-1shot.py + - Name: meta-baseline_resnet12_1xb100_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 100 + In Collection: Meta-Baseline + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/meta_baseline/tiered_imagenet/meta-baseline_resnet12_1xb100_tiered-imagenet_5way-5shot.py diff --git a/configs/classification/neg_margin/README.md b/configs/classification/neg_margin/README.md new file mode 100644 index 0000000..10d1fd4 --- /dev/null +++ b/configs/classification/neg_margin/README.md @@ -0,0 +1,68 @@ + + +# NegMargin (ECCV'2020) + +```bibtex +@inproceedings{liu2020negative, + title={Negative margin matters: Understanding margin in few-shot classification}, + author={Liu, Bin and Cao, Yue and Lin, Yutong and Li, Qi and Zhang, Zheng and Long, Mingsheng and Hu, Han}, + booktitle={European Conference on Computer Vision}, + pages={438--455}, + year={2020} +} +``` + +## How to Reproduce Neg-Margin + +It consists of two steps: +- **Step1: Base training** + - use all the images of base classes to train a base model. + - use validation set to select the best model. + +- **Step2: Meta Testing**: + - use best model from step1. + + +### An example of CUB dataset with Conv4 +```bash +# base training +python ./tools/classification/train.py \ + configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py + +# meta testing +python ./tools/classification/test.py \ + configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py \ + work_dir/neg-margin_cosine_conv4_1xb64_cub_5way-1shot/best_accuracy_mean.pth +``` + +**Note**: +- All the result are trained with single gpu. +- The base training of 1 shot and 5 shot use same training setting, + but different validation setting. + +## Results on CUB dataset with 15 queries and 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Mini ImageNet dataset with 15 queries and 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Tiered ImageNet with 15 queries and 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | diff --git a/configs/classification/neg_margin/cub/metafile.yml b/configs/classification/neg_margin/cub/metafile.yml new file mode 100644 index 0000000..1f15c51 --- /dev/null +++ b/configs/classification/neg_margin/cub/metafile.yml @@ -0,0 +1,64 @@ +Collections: + - Name: Neg-Margin + Metadata: + Training Data: CUB + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/2003.12060 + README: configs/classification/neg_margin/README.md + +Models: + - Name: neg-margin_cosine_conv4_1xb64_cub_5way-1shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py + - Name: neg-margin_cosine_conv4_1xb64_cub_5way-5shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-5shot.py + - Name: neg-margin_cosine_resnet12_1xb64_cub_5way-1shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-1shot.py + - Name: neg-margin_cosine_resnet12_1xb64_cub_5way-5shot + Metadata: + Training Data: CUB + Epochs: 200 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-5shot.py diff --git a/configs/classification/neg_margin/cub/neg_margin_cub_5way_1shot_84x84_aug.py b/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py similarity index 70% rename from configs/classification/neg_margin/cub/neg_margin_cub_5way_1shot_84x84_aug.py rename to configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py index 7700d23..c9cf740 100644 --- a/configs/classification/neg_margin/cub/neg_margin_cub_5way_1shot_84x84_aug.py +++ b/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-1shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='CUBDataset', data_prefix='data/CUB_200_2011', @@ -37,3 +37,21 @@ data = dict( test=dict( meta_test_cfg=dict( support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='Conv4'), + head=dict( + type='NegMarginHead', + num_classes=100, + in_channels=1600, + metric_type='cosine', + margin=-0.01, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=1600, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/cub/neg_margin_cub_5way_5shot_84x84_aug.py b/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-5shot.py similarity index 70% rename from configs/classification/neg_margin/cub/neg_margin_cub_5way_5shot_84x84_aug.py rename to configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-5shot.py index 61fe02c..3ef4372 100644 --- a/configs/classification/neg_margin/cub/neg_margin_cub_5way_5shot_84x84_aug.py +++ b/configs/classification/neg_margin/cub/neg-margin_cosine_conv4_1xb64_cub_5way-5shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='CUBDataset', data_prefix='data/CUB_200_2011', @@ -37,3 +37,21 @@ data = dict( test=dict( meta_test_cfg=dict( support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='Conv4'), + head=dict( + type='NegMarginHead', + num_classes=100, + in_channels=1600, + metric_type='cosine', + margin=-0.01, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=1600, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-1shot.py b/configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-1shot.py new file mode 100644 index 0000000..5bc72c3 --- /dev/null +++ b/configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-1shot.py @@ -0,0 +1,57 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=150, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='NegMarginHead', + num_classes=100, + in_channels=640, + metric_type='cosine', + margin=-0.01, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=640, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-5shot.py b/configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-5shot.py new file mode 100644 index 0000000..cbe0fcc --- /dev/null +++ b/configs/classification/neg_margin/cub/neg-margin_cosine_resnet12_1xb64_cub_5way-5shot.py @@ -0,0 +1,57 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=600, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='NegMarginHead', + num_classes=100, + in_channels=640, + metric_type='cosine', + margin=-0.01, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=640, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/cub/neg_cosine_conv4_cub_5way_1shot.py b/configs/classification/neg_margin/cub/neg_cosine_conv4_cub_5way_1shot.py deleted file mode 100644 index a91577c..0000000 --- a/configs/classification/neg_margin/cub/neg_cosine_conv4_cub_5way_1shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_cub_5way_1shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='Conv4'), - head=dict( - type='NegMarginHead', - num_classes=100, - in_channels=1600, - metric_type='cosine', - margin=-0.01, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=1600, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/cub/neg_cosine_conv4_cub_5way_5shot.py b/configs/classification/neg_margin/cub/neg_cosine_conv4_cub_5way_5shot.py deleted file mode 100644 index 4cc82db..0000000 --- a/configs/classification/neg_margin/cub/neg_cosine_conv4_cub_5way_5shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_cub_5way_5shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='Conv4'), - head=dict( - type='NegMarginHead', - num_classes=100, - in_channels=1600, - metric_type='cosine', - margin=-0.01, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=1600, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/cub/neg_cosine_resnet12_cub_5way_1shot.py b/configs/classification/neg_margin/cub/neg_cosine_resnet12_cub_5way_1shot.py deleted file mode 100644 index 4a88eb2..0000000 --- a/configs/classification/neg_margin/cub/neg_cosine_resnet12_cub_5way_1shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_cub_5way_1shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='NegMarginHead', - num_classes=100, - in_channels=640, - metric_type='cosine', - margin=-0.01, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=640, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/cub/neg_cosine_resnet12_cub_5way_5shot.py b/configs/classification/neg_margin/cub/neg_cosine_resnet12_cub_5way_5shot.py deleted file mode 100644 index 1c72dd6..0000000 --- a/configs/classification/neg_margin/cub/neg_cosine_resnet12_cub_5way_5shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_cub_5way_5shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='NegMarginHead', - num_classes=100, - in_channels=640, - metric_type='cosine', - margin=-0.01, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=640, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/mini_imagenet/metafile.yml b/configs/classification/neg_margin/mini_imagenet/metafile.yml new file mode 100644 index 0000000..1b069ff --- /dev/null +++ b/configs/classification/neg_margin/mini_imagenet/metafile.yml @@ -0,0 +1,64 @@ +Collections: + - Name: Neg-Margin + Metadata: + Training Data: Mini-ImageNet + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/2003.12060 + README: configs/classification/neg_margin/README.md + +Models: + - Name: neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-1shot.py + - Name: neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-5shot.py + - Name: neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-1shot.py + - Name: neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Epochs: 200 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-5shot.py diff --git a/configs/classification/neg_margin/mini_imagenet/neg_margin_mini_imagenet_5way_1shot_84x84_aug.py b/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-1shot.py similarity index 69% rename from configs/classification/neg_margin/mini_imagenet/neg_margin_mini_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-1shot.py index 1595f71..d7a57c7 100644 --- a/configs/classification/neg_margin/mini_imagenet/neg_margin_mini_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-1shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='MiniImageNetDataset', data_prefix='data/mini_imagenet', @@ -37,3 +37,21 @@ data = dict( test=dict( meta_test_cfg=dict( support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='Conv4'), + head=dict( + type='NegMarginHead', + num_classes=100, + in_channels=1600, + metric_type='cosine', + margin=-0.005, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=1600, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/mini_imagenet/neg_margin_mini_imagenet_5way_5shot_84x84_aug.py b/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-5shot.py similarity index 69% rename from configs/classification/neg_margin/mini_imagenet/neg_margin_mini_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-5shot.py index a87aa44..95f7aee 100644 --- a/configs/classification/neg_margin/mini_imagenet/neg_margin_mini_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_conv4_1xb64_mini-imagenet_5way-5shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_200epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='MiniImageNetDataset', data_prefix='data/mini_imagenet', @@ -37,3 +37,21 @@ data = dict( test=dict( meta_test_cfg=dict( support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='Conv4'), + head=dict( + type='NegMarginHead', + num_classes=100, + in_channels=1600, + metric_type='cosine', + margin=-0.005, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=1600, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-1shot.py b/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-1shot.py new file mode 100644 index 0000000..8cc1d86 --- /dev/null +++ b/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-1shot.py @@ -0,0 +1,57 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +img_size = 84 +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=150, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='NegMarginHead', + num_classes=100, + in_channels=640, + metric_type='cosine', + margin=-0.005, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=640, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-5shot.py b/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-5shot.py new file mode 100644 index 0000000..ede5897 --- /dev/null +++ b/configs/classification/neg_margin/mini_imagenet/neg-margin_cosine_resnet12_1xb64_mini-imagenet_5way-5shot.py @@ -0,0 +1,57 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_200epoch.py' +] + +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +img_size = 84 +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=600, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='NegMarginHead', + num_classes=100, + in_channels=640, + metric_type='cosine', + margin=-0.005, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=640, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/mini_imagenet/neg_cosine_conv4_mini_imagenet_5way_1shot.py b/configs/classification/neg_margin/mini_imagenet/neg_cosine_conv4_mini_imagenet_5way_1shot.py deleted file mode 100644 index 65af56d..0000000 --- a/configs/classification/neg_margin/mini_imagenet/neg_cosine_conv4_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_mini_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='Conv4'), - head=dict( - type='NegMarginHead', - num_classes=100, - in_channels=1600, - metric_type='cosine', - margin=-0.005, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=1600, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/mini_imagenet/neg_cosine_conv4_mini_imagenet_5way_5shot.py b/configs/classification/neg_margin/mini_imagenet/neg_cosine_conv4_mini_imagenet_5way_5shot.py deleted file mode 100644 index a58f128..0000000 --- a/configs/classification/neg_margin/mini_imagenet/neg_cosine_conv4_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_mini_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='Conv4'), - head=dict( - type='NegMarginHead', - num_classes=100, - in_channels=1600, - metric_type='cosine', - margin=-0.005, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=1600, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/mini_imagenet/neg_cosine_resnet12_mini_imagenet_5way_1shot.py b/configs/classification/neg_margin/mini_imagenet/neg_cosine_resnet12_mini_imagenet_5way_1shot.py deleted file mode 100644 index d303f19..0000000 --- a/configs/classification/neg_margin/mini_imagenet/neg_cosine_resnet12_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_mini_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='NegMarginHead', - num_classes=100, - in_channels=640, - metric_type='cosine', - margin=-0.005, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=640, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/mini_imagenet/neg_cosine_resnet12_mini_imagenet_5way_5shot.py b/configs/classification/neg_margin/mini_imagenet/neg_cosine_resnet12_mini_imagenet_5way_5shot.py deleted file mode 100644 index 539c2ce..0000000 --- a/configs/classification/neg_margin/mini_imagenet/neg_cosine_resnet12_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_mini_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='NegMarginHead', - num_classes=100, - in_channels=640, - metric_type='cosine', - margin=-0.005, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=640, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/tiered_imagenet/metafile.yml b/configs/classification/neg_margin/tiered_imagenet/metafile.yml new file mode 100644 index 0000000..e66d685 --- /dev/null +++ b/configs/classification/neg_margin/tiered_imagenet/metafile.yml @@ -0,0 +1,64 @@ +Collections: + - Name: Neg-Margin + Metadata: + Training Data: Tiered-ImageNet + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1003.12060 + README: configs/classification/neg_margin/README.md + +Models: + - Name: neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-1shot.py + - Name: neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-5shot.py + - Name: neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-1shot.py + - Name: neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Epochs: 100 + Batch Size: 64 + In Collection: Neg-Margin + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-5shot.py diff --git a/configs/classification/neg_margin/tiered_imagenet/neg_margin_tiered_imagenet_5way_1shot_84x84_aug.py b/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-1shot.py similarity index 69% rename from configs/classification/neg_margin/tiered_imagenet/neg_margin_tiered_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-1shot.py index 9f259c0..7c082ed 100644 --- a/configs/classification/neg_margin/tiered_imagenet/neg_margin_tiered_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-1shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_100epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=8, + workers_per_gpu=4, train=dict( type='TieredImageNetDataset', data_prefix='data/tiered_imagenet', @@ -37,4 +37,21 @@ data = dict( test=dict( meta_test_cfg=dict( support=dict(batch_size=4, train=meta_finetune_cfg)))) -pin_memory = True + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='Conv4'), + head=dict( + type='NegMarginHead', + num_classes=351, + in_channels=1600, + metric_type='cosine', + margin=-0.02, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=1600, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/tiered_imagenet/neg_margin_tiered_imagenet_5way_5shot_84x84_aug.py b/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-5shot.py similarity index 70% rename from configs/classification/neg_margin/tiered_imagenet/neg_margin_tiered_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-5shot.py index 1cd31fd..a3af46f 100644 --- a/configs/classification/neg_margin/tiered_imagenet/neg_margin_tiered_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_conv4_1xb64_tiered-imagenet_5way-5shot.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/epoch_based_runtime.py', '../../_base_/schedules/sgd_100epoch.py' ] @@ -25,7 +25,7 @@ meta_finetune_cfg = dict( data = dict( samples_per_gpu=64, - workers_per_gpu=8, + workers_per_gpu=4, train=dict( type='TieredImageNetDataset', data_prefix='data/tiered_imagenet', @@ -37,4 +37,21 @@ data = dict( test=dict( meta_test_cfg=dict( support=dict(batch_size=4, train=meta_finetune_cfg)))) -pin_memory = True + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='Conv4'), + head=dict( + type='NegMarginHead', + num_classes=351, + in_channels=1600, + metric_type='cosine', + margin=-0.02, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=1600, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-1shot.py b/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..86a15c5 --- /dev/null +++ b/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-1shot.py @@ -0,0 +1,57 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_100epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=150, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='NegMarginHead', + num_classes=351, + in_channels=640, + metric_type='cosine', + margin=-0.01, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=640, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-5shot.py b/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-5shot.py new file mode 100644 index 0000000..4937bf3 --- /dev/null +++ b/configs/classification/neg_margin/tiered_imagenet/neg-margin_cosine_resnet12_1xb64_tiered-imagenet_5way-5shot.py @@ -0,0 +1,57 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/epoch_based_runtime.py', + '../../_base_/schedules/sgd_100epoch.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +meta_finetune_cfg = dict( + num_steps=600, + optimizer=dict( + type='SGD', lr=0.01, momentum=0.9, dampening=0.9, weight_decay=0.001)) + +data = dict( + samples_per_gpu=64, + workers_per_gpu=4, + train=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline), + val=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg))), + test=dict( + meta_test_cfg=dict( + support=dict(batch_size=4, train=meta_finetune_cfg)))) + +model = dict( + type='NegMarginClassifier', + backbone=dict(type='ResNet12'), + head=dict( + type='NegMarginHead', + num_classes=351, + in_channels=640, + metric_type='cosine', + margin=-0.01, + temperature=10.0), + meta_test_head=dict( + type='NegMarginHead', + num_classes=5, + in_channels=640, + metric_type='cosine', + margin=0.0, + temperature=5.0)) diff --git a/configs/classification/neg_margin/tiered_imagenet/neg_cosine_conv4_tiered_imagenet_5way_1shot.py b/configs/classification/neg_margin/tiered_imagenet/neg_cosine_conv4_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 47362d8..0000000 --- a/configs/classification/neg_margin/tiered_imagenet/neg_cosine_conv4_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='Conv4'), - head=dict( - type='NegMarginHead', - num_classes=351, - in_channels=1600, - metric_type='cosine', - margin=-0.02, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=1600, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/tiered_imagenet/neg_cosine_conv4_tiered_imagenet_5way_5shot.py b/configs/classification/neg_margin/tiered_imagenet/neg_cosine_conv4_tiered_imagenet_5way_5shot.py deleted file mode 100644 index f6a4e9c..0000000 --- a/configs/classification/neg_margin/tiered_imagenet/neg_cosine_conv4_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_tiered_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='Conv4'), - head=dict( - type='NegMarginHead', - num_classes=351, - in_channels=1600, - metric_type='cosine', - margin=-0.02, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=1600, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/tiered_imagenet/neg_cosine_resnet12_tiered_imagenet_5way_1shot.py b/configs/classification/neg_margin/tiered_imagenet/neg_cosine_resnet12_tiered_imagenet_5way_1shot.py deleted file mode 100644 index f239e5c..0000000 --- a/configs/classification/neg_margin/tiered_imagenet/neg_cosine_resnet12_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='NegMarginHead', - num_classes=351, - in_channels=640, - metric_type='cosine', - margin=-0.01, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=640, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/neg_margin/tiered_imagenet/neg_cosine_resnet12_tiered_imagenet_5way_5shot.py b/configs/classification/neg_margin/tiered_imagenet/neg_cosine_resnet12_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 4248e09..0000000 --- a/configs/classification/neg_margin/tiered_imagenet/neg_cosine_resnet12_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,19 +0,0 @@ -_base_ = ['neg_margin_tiered_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='NegMarginClassifier', - backbone=dict(type='ResNet12'), - head=dict( - type='NegMarginHead', - num_classes=351, - in_channels=640, - metric_type='cosine', - margin=-0.01, - temperature=10.0), - meta_test_head=dict( - type='NegMarginHead', - num_classes=5, - in_channels=640, - metric_type='cosine', - margin=0.0, - temperature=5.0)) diff --git a/configs/classification/proto_net/README.md b/configs/classification/proto_net/README.md new file mode 100644 index 0000000..80885d5 --- /dev/null +++ b/configs/classification/proto_net/README.md @@ -0,0 +1,67 @@ + + +# ProtoNet (NeurIPS'2017) + +```bibtex +@inproceedings{snell2017prototypical, + title={Prototypical networks for few-shot learning}, + author={Snell, Jake and Swersky, Kevin and Zemel, Richard}, + booktitle={Proceedings of the 31st International Conference on Neural Information Processing Systems}, + pages={4080--4090}, + year={2017} +} +``` +## How to Reproduce ProtoNet + +It consists of two steps: +- **Step1: Base training** + - use all the images of base classes to train a base model. + - use validation set to select the best model. + +- **Step2: Meta Testing**: + - use best model from step1. + + +### An example of CUB dataset with Conv4 +```bash +# base training +python ./tools/classification/train.py \ + configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-1shot.py + +# meta testing +python ./tools/classification/test.py \ + configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-1shot.py \ + work_dir/proto-net_conv4_1xb105_cub_5way-1shot/best_accuracy_mean.pth +``` + +**Note**: +- All the result are trained with single gpu. +- The base training of 1 shot and 5 shot use same training setting, + but different validation setting. + +## Results on CUB dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Mini-ImageNet dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Tiered-ImageNet of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | diff --git a/configs/classification/proto_net/cub/metafile.yml b/configs/classification/proto_net/cub/metafile.yml new file mode 100644 index 0000000..d978f29 --- /dev/null +++ b/configs/classification/proto_net/cub/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Proto-Net + Metadata: + Training Data: CUB + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1703.05175 + README: configs/classification/proto_net/README.md + +Models: + - Name: proto-net_conv4_1xb105_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-1shot.py + - Name: proto-net_conv4_1xb105_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-5shot.py + - Name: proto-net_resnet12_1xb105_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-1shot.py + - Name: proto-net_resnet12_1xb105_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-5shot.py diff --git a/configs/classification/meta_baseline/cub/meta_baseline_cub_5way_1shot_84x84_aug.py b/configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-1shot.py similarity index 79% rename from configs/classification/meta_baseline/cub/meta_baseline_cub_5way_1shot_84x84_aug.py rename to configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-1shot.py index 08cd0b0..4ac1144 100644 --- a/configs/classification/meta_baseline/cub/meta_baseline_cub_5way_1shot_84x84_aug.py +++ b/configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-1shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/sgd_60000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,8 @@ data = dict( data_prefix='data/CUB_200_2011', subset='train', pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/meta_baseline/cub/meta_baseline_cub_5way_5shot_84x84_aug.py b/configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-5shot.py similarity index 79% rename from configs/classification/meta_baseline/cub/meta_baseline_cub_5way_5shot_84x84_aug.py rename to configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-5shot.py index d3c5beb..7f4dc7f 100644 --- a/configs/classification/meta_baseline/cub/meta_baseline_cub_5way_5shot_84x84_aug.py +++ b/configs/classification/proto_net/cub/proto-net_conv4_1xb105_cub_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/sgd_60000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,8 @@ data = dict( data_prefix='data/CUB_200_2011', subset='train', pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-1shot.py b/configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-1shot.py new file mode 100644 index 0000000..c34b32b --- /dev/null +++ b/configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-5shot.py b/configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-5shot.py new file mode 100644 index 0000000..0b04d6b --- /dev/null +++ b/configs/classification/proto_net/cub/proto-net_resnet12_1xb105_cub_5way-5shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/cub/proto_net_conv4_cub_5way_1shot.py b/configs/classification/proto_net/cub/proto_net_conv4_cub_5way_1shot.py deleted file mode 100644 index 49701c2..0000000 --- a/configs/classification/proto_net/cub/proto_net_conv4_cub_5way_1shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['proto_net_cub_5way_1shot_84x84_aug.py'] - -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/cub/proto_net_conv4_cub_5way_5shot.py b/configs/classification/proto_net/cub/proto_net_conv4_cub_5way_5shot.py deleted file mode 100644 index 4b180c6..0000000 --- a/configs/classification/proto_net/cub/proto_net_conv4_cub_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['proto_net_cub_5way_5shot_84x84_aug.py'] -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/cub/proto_net_cub_5way_1shot_84x84_aug.py b/configs/classification/proto_net/cub/proto_net_cub_5way_1shot_84x84_aug.py deleted file mode 100644 index a131cff..0000000 --- a/configs/classification/proto_net/cub/proto_net_cub_5way_1shot_84x84_aug.py +++ /dev/null @@ -1,34 +0,0 @@ -_base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_1shot_84x84.py', - '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' -] - -img_size = 84 -img_norm_cfg = dict( - mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) -train_pipeline = [ - dict(type='LoadImageFromFile'), - dict(type='RandomResizedCrop', size=img_size), - dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), - dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), - dict(type='Normalize', **img_norm_cfg), - dict(type='ImageToTensor', keys=['img']), - dict(type='ToTensor', keys=['gt_label']), - dict(type='Collect', keys=['img', 'gt_label']) -] - -data = dict( - samples_per_gpu=1, - workers_per_gpu=6, - train=dict( - type='EpisodicDataset', - num_episodes=100000, - num_ways=5, - num_shots=5, - num_queries=16, - dataset=dict( - type='CUBDataset', - data_prefix='data/CUB_200_2011', - subset='train', - pipeline=train_pipeline))) diff --git a/configs/classification/proto_net/cub/proto_net_cub_5way_5shot_84x84_aug.py b/configs/classification/proto_net/cub/proto_net_cub_5way_5shot_84x84_aug.py deleted file mode 100644 index 7ba91cf..0000000 --- a/configs/classification/proto_net/cub/proto_net_cub_5way_5shot_84x84_aug.py +++ /dev/null @@ -1,34 +0,0 @@ -_base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_5shot_84x84.py', - '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' -] - -img_size = 84 -img_norm_cfg = dict( - mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) -train_pipeline = [ - dict(type='LoadImageFromFile'), - dict(type='RandomResizedCrop', size=img_size), - dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), - dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), - dict(type='Normalize', **img_norm_cfg), - dict(type='ImageToTensor', keys=['img']), - dict(type='ToTensor', keys=['gt_label']), - dict(type='Collect', keys=['img', 'gt_label']) -] - -data = dict( - samples_per_gpu=1, - workers_per_gpu=6, - train=dict( - type='EpisodicDataset', - num_episodes=100000, - num_ways=5, - num_shots=5, - num_queries=16, - dataset=dict( - type='CUBDataset', - data_prefix='data/CUB_200_2011', - subset='train', - pipeline=train_pipeline))) diff --git a/configs/classification/proto_net/cub/proto_net_resnet12_cub_5way_1shot.py b/configs/classification/proto_net/cub/proto_net_resnet12_cub_5way_1shot.py deleted file mode 100644 index f8bf26e..0000000 --- a/configs/classification/proto_net/cub/proto_net_resnet12_cub_5way_1shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['proto_net_cub_5way_1shot_84x84_aug.py'] - -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/cub/proto_net_resnet12_cub_5way_5shot.py b/configs/classification/proto_net/cub/proto_net_resnet12_cub_5way_5shot.py deleted file mode 100644 index b179d95..0000000 --- a/configs/classification/proto_net/cub/proto_net_resnet12_cub_5way_5shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['proto_net_cub_5way_5shot_84x84_aug.py'] - -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/mini_imagenet/metafile.yml b/configs/classification/proto_net/mini_imagenet/metafile.yml new file mode 100644 index 0000000..7dcad75 --- /dev/null +++ b/configs/classification/proto_net/mini_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Proto-Net + Metadata: + Training Data: Mini-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1703.05175 + README: configs/classification/proto_net/README.md + +Models: + - Name: proto-net_conv4_1xb105_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-1shot.py + - Name: proto-net_conv4_1xb105_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-5shot.py + - Name: proto-net_resnet12_1xb105_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-1shot.py + - Name: proto-net_resnet12_1xb105_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-5shot.py diff --git a/configs/classification/proto_net/mini_imagenet/proto_net_mini_imagenet_5way_1shot_84x84_aug.py b/configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-1shot.py similarity index 79% rename from configs/classification/proto_net/mini_imagenet/proto_net_mini_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-1shot.py index 95d4f96..f7334f9 100644 --- a/configs/classification/proto_net/mini_imagenet/proto_net_mini_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-1shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,8 @@ data = dict( data_prefix='data/mini_imagenet', subset='train', pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/mini_imagenet/proto_net_mini_imagenet_5way_5shot_84x84_aug.py b/configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-5shot.py similarity index 79% rename from configs/classification/proto_net/mini_imagenet/proto_net_mini_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-5shot.py index 07f2866..515feb9 100644 --- a/configs/classification/proto_net/mini_imagenet/proto_net_mini_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/proto_net/mini_imagenet/proto-net_conv4_1xb105_mini-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,3 +32,8 @@ data = dict( data_prefix='data/mini_imagenet', subset='train', pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-1shot.py b/configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-1shot.py new file mode 100644 index 0000000..ac9f1d8 --- /dev/null +++ b/configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-5shot.py b/configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-5shot.py new file mode 100644 index 0000000..69cc110 --- /dev/null +++ b/configs/classification/proto_net/mini_imagenet/proto-net_resnet12_1xb105_mini-imagenet_5way-5shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/mini_imagenet/proto_net_conv4_mini_imagenet_5way_1shot.py b/configs/classification/proto_net/mini_imagenet/proto_net_conv4_mini_imagenet_5way_1shot.py deleted file mode 100644 index e98473d..0000000 --- a/configs/classification/proto_net/mini_imagenet/proto_net_conv4_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['proto_net_mini_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/mini_imagenet/proto_net_conv4_mini_imagenet_5way_5shot.py b/configs/classification/proto_net/mini_imagenet/proto_net_conv4_mini_imagenet_5way_5shot.py deleted file mode 100644 index e4171b5..0000000 --- a/configs/classification/proto_net/mini_imagenet/proto_net_conv4_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['proto_net_mini_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/mini_imagenet/proto_net_resnet12_mini_imagenet_5way_1shot.py b/configs/classification/proto_net/mini_imagenet/proto_net_resnet12_mini_imagenet_5way_1shot.py deleted file mode 100644 index c31f24d..0000000 --- a/configs/classification/proto_net/mini_imagenet/proto_net_resnet12_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['proto_net_mini_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/mini_imagenet/proto_net_resnet12_mini_imagenet_5way_5shot.py b/configs/classification/proto_net/mini_imagenet/proto_net_resnet12_mini_imagenet_5way_5shot.py deleted file mode 100644 index 8768e89..0000000 --- a/configs/classification/proto_net/mini_imagenet/proto_net_resnet12_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['proto_net_mini_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/tiered_imagenet/metafile.yml b/configs/classification/proto_net/tiered_imagenet/metafile.yml new file mode 100644 index 0000000..9ead3ee --- /dev/null +++ b/configs/classification/proto_net/tiered_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Proto-Net + Metadata: + Training Data: Tiered-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1703.05175 + README: configs/classification/proto_net/README.md + +Models: + - Name: proto-net_conv4_1xb105_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-1shot.py + - Name: proto-net_conv4_1xb105_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-5shot.py + - Name: proto-net_resnet12_1xb105_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py + - Name: proto-net_resnet12_1xb105_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Proto-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py diff --git a/configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-1shot.py b/configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..6274ab1 --- /dev/null +++ b/configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/matching_net/tiered_imagenet/matching_net_tiered_imagenet_5way_1shot_84x84_aug.py b/configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-5shot.py similarity index 80% rename from configs/classification/matching_net/tiered_imagenet/matching_net_tiered_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-5shot.py index 28faa2c..b949df4 100644 --- a/configs/classification/matching_net/tiered_imagenet/matching_net_tiered_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/proto_net/tiered_imagenet/proto-net_conv4_1xb105_tiered-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,4 +32,8 @@ data = dict( data_prefix='data/tiered_imagenet', subset='train', pipeline=train_pipeline))) -pin_memory = True + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='Conv4'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py b/configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..4e63ba1 --- /dev/null +++ b/configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/tiered_imagenet/proto_net_tiered_imagenet_5way_1shot_84x84_aug.py b/configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py similarity index 79% rename from configs/classification/proto_net/tiered_imagenet/proto_net_tiered_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py index 28faa2c..b0f39c0 100644 --- a/configs/classification/proto_net/tiered_imagenet/proto_net_tiered_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/proto_net/tiered_imagenet/proto-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -32,4 +32,8 @@ data = dict( data_prefix='data/tiered_imagenet', subset='train', pipeline=train_pipeline))) -pin_memory = True + +model = dict( + type='ProtoNetClassifier', + backbone=dict(type='ResNet12'), + head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/tiered_imagenet/proto_net_conv4_tiered_imagenet_5way_1shot.py b/configs/classification/proto_net/tiered_imagenet/proto_net_conv4_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 52afb90..0000000 --- a/configs/classification/proto_net/tiered_imagenet/proto_net_conv4_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['proto_net_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/tiered_imagenet/proto_net_conv4_tiered_imagenet_5way_5shot.py b/configs/classification/proto_net/tiered_imagenet/proto_net_conv4_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 168e32a..0000000 --- a/configs/classification/proto_net/tiered_imagenet/proto_net_conv4_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['proto_net_tiered_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='Conv4'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/tiered_imagenet/proto_net_resnet12_tiered_imagenet_5way_1shot.py b/configs/classification/proto_net/tiered_imagenet/proto_net_resnet12_tiered_imagenet_5way_1shot.py deleted file mode 100644 index d0a9f12..0000000 --- a/configs/classification/proto_net/tiered_imagenet/proto_net_resnet12_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['proto_net_tiered_imagenet_5way_1shot_84x84_aug.py'] - -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/proto_net/tiered_imagenet/proto_net_resnet12_tiered_imagenet_5way_5shot.py b/configs/classification/proto_net/tiered_imagenet/proto_net_resnet12_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 465ff6d..0000000 --- a/configs/classification/proto_net/tiered_imagenet/proto_net_resnet12_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,6 +0,0 @@ -_base_ = ['proto_net_tiered_imagenet_5way_5shot_84x84_aug.py'] - -model = dict( - type='ProtoNetClassifier', - backbone=dict(type='ResNet12'), - head=dict(type='PrototypeHead')) diff --git a/configs/classification/relation_net/README.md b/configs/classification/relation_net/README.md new file mode 100644 index 0000000..dba6b02 --- /dev/null +++ b/configs/classification/relation_net/README.md @@ -0,0 +1,68 @@ + + +# RelationNet (CVPR'2018) + +```bibtex +@inproceedings{sung2018learning, + title={Learning to compare: Relation network for few-shot learning}, + author={Sung, Flood and Yang, Yongxin and Zhang, Li and Xiang, Tao and Torr, Philip HS and Hospedales, Timothy M}, + booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition}, + pages={1199--1208}, + year={2018} +} +``` + +## How to Reproduce RelationNet + +It consists of two steps: +- **Step1: Base training** + - use all the images of base classes to train a base model. + - use validation set to select the best model. + +- **Step2: Meta Testing**: + - use best model from step1. + + +### An example of CUB dataset with Conv4 +```bash +# base training +python ./tools/classification/train.py \ + configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-1shot.py + +# meta testing +python ./tools/classification/test.py \ + configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-1shot.py \ + work_dir/relation-net_conv4_1xb105_cub_5way-1shot/best_accuracy_mean.pth +``` + +**Note**: +- All the result are trained with single gpu. +- The base training of 1 shot and 5 shot use same training setting, + but different validation setting. + +## Results on CUB dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Mini-ImageNet dataset of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | + +## Results on Tiered-ImageNet of 1000 episodes + +| Arch | Input Size | Batch Size | way | shot | mean Acc | std | ckpt | log | +| :-------------- | :-----------: | :------: | :------: | :------: | :------: | :------: |:------: |:------: | +| [conv4](/configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [conv4](/configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py) | 84x84 | 64 | 5 | 1 | - | - | [ckpt]() | [log]() | +| [resnet12](/configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py) | 84x84 | 64 | 5 | 5 | - | - | [ckpt]() | [log]() | diff --git a/configs/classification/relation_net/cub/metafile.yml b/configs/classification/relation_net/cub/metafile.yml new file mode 100644 index 0000000..24abc19 --- /dev/null +++ b/configs/classification/relation_net/cub/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Relation-Net + Metadata: + Training Data: CUB + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1711.06025 + README: configs/classification/relation_net/README.md + +Models: + - Name: relation-net_conv4_1xb105_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-1shot.py + - Name: relation-net_conv4_1xb105_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-5shot.py + - Name: relation-net_resnet12_1xb105_cub_5way-1shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-1shot.py + - Name: relation-net_resnet12_1xb105_cub_5way-5shot + Metadata: + Training Data: CUB + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: CUB + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-5shot.py diff --git a/configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-1shot.py b/configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-1shot.py new file mode 100644 index 0000000..e289bfb --- /dev/null +++ b/configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='Conv4NoPool'), + head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-5shot.py b/configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-5shot.py new file mode 100644 index 0000000..0016349 --- /dev/null +++ b/configs/classification/relation_net/cub/relation-net_conv4_1xb105_cub_5way-5shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='Conv4NoPool'), + head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-1shot.py b/configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-1shot.py new file mode 100644 index 0000000..371e653 --- /dev/null +++ b/configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), + head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-5shot.py b/configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-5shot.py new file mode 100644 index 0000000..e5136db --- /dev/null +++ b/configs/classification/relation_net/cub/relation-net_resnet12_1xb105_cub_5way-5shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/cub_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='CUBDataset', + data_prefix='data/CUB_200_2011', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), + head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/cub/relation_net_conv4_cub_5way_1shot.py b/configs/classification/relation_net/cub/relation_net_conv4_cub_5way_1shot.py deleted file mode 100644 index e93a03f..0000000 --- a/configs/classification/relation_net/cub/relation_net_conv4_cub_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_cub_5way_1shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='Conv4NoPool'), - head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/cub/relation_net_conv4_cub_5way_5shot.py b/configs/classification/relation_net/cub/relation_net_conv4_cub_5way_5shot.py deleted file mode 100644 index 46ded3a..0000000 --- a/configs/classification/relation_net/cub/relation_net_conv4_cub_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_cub_5way_5shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='Conv4NoPool'), - head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/cub/relation_net_cub_5way_1shot_84x84_aug.py b/configs/classification/relation_net/cub/relation_net_cub_5way_1shot_84x84_aug.py deleted file mode 100644 index a131cff..0000000 --- a/configs/classification/relation_net/cub/relation_net_cub_5way_1shot_84x84_aug.py +++ /dev/null @@ -1,34 +0,0 @@ -_base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_1shot_84x84.py', - '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' -] - -img_size = 84 -img_norm_cfg = dict( - mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) -train_pipeline = [ - dict(type='LoadImageFromFile'), - dict(type='RandomResizedCrop', size=img_size), - dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), - dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), - dict(type='Normalize', **img_norm_cfg), - dict(type='ImageToTensor', keys=['img']), - dict(type='ToTensor', keys=['gt_label']), - dict(type='Collect', keys=['img', 'gt_label']) -] - -data = dict( - samples_per_gpu=1, - workers_per_gpu=6, - train=dict( - type='EpisodicDataset', - num_episodes=100000, - num_ways=5, - num_shots=5, - num_queries=16, - dataset=dict( - type='CUBDataset', - data_prefix='data/CUB_200_2011', - subset='train', - pipeline=train_pipeline))) diff --git a/configs/classification/relation_net/cub/relation_net_cub_5way_5shot_84x84_aug.py b/configs/classification/relation_net/cub/relation_net_cub_5way_5shot_84x84_aug.py deleted file mode 100644 index 7ba91cf..0000000 --- a/configs/classification/relation_net/cub/relation_net_cub_5way_5shot_84x84_aug.py +++ /dev/null @@ -1,34 +0,0 @@ -_base_ = [ - '../../_base_/meta_test/cub_meta_test_5way_5shot_84x84.py', - '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' -] - -img_size = 84 -img_norm_cfg = dict( - mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) -train_pipeline = [ - dict(type='LoadImageFromFile'), - dict(type='RandomResizedCrop', size=img_size), - dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), - dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), - dict(type='Normalize', **img_norm_cfg), - dict(type='ImageToTensor', keys=['img']), - dict(type='ToTensor', keys=['gt_label']), - dict(type='Collect', keys=['img', 'gt_label']) -] - -data = dict( - samples_per_gpu=1, - workers_per_gpu=6, - train=dict( - type='EpisodicDataset', - num_episodes=100000, - num_ways=5, - num_shots=5, - num_queries=16, - dataset=dict( - type='CUBDataset', - data_prefix='data/CUB_200_2011', - subset='train', - pipeline=train_pipeline))) diff --git a/configs/classification/relation_net/cub/relation_net_resnet12_cub_5way_1shot.py b/configs/classification/relation_net/cub/relation_net_resnet12_cub_5way_1shot.py deleted file mode 100644 index 61b43b3..0000000 --- a/configs/classification/relation_net/cub/relation_net_resnet12_cub_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_cub_5way_1shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), - head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/cub/relation_net_resnet12_cub_5way_5shot.py b/configs/classification/relation_net/cub/relation_net_resnet12_cub_5way_5shot.py deleted file mode 100644 index ccfad51..0000000 --- a/configs/classification/relation_net/cub/relation_net_resnet12_cub_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_cub_5way_5shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), - head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/mini_imagenet/metafile.yml b/configs/classification/relation_net/mini_imagenet/metafile.yml new file mode 100644 index 0000000..7a985c2 --- /dev/null +++ b/configs/classification/relation_net/mini_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Relation-Net + Metadata: + Training Data: Mini-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1711.06025 + README: configs/classification/relation_net/README.md + +Models: + - Name: relation-net_conv4_1xb105_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-1shot.py + - Name: relation-net_conv4_1xb105_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-5shot.py + - Name: relation-net_resnet12_1xb105_mini-imagenet_5way-1shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-1shot.py + - Name: relation-net_resnet12_1xb105_mini-imagenet_5way-5shot + Metadata: + Training Data: Mini-ImageNet + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: Mini-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-5shot.py diff --git a/configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-1shot.py b/configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-1shot.py new file mode 100644 index 0000000..e172902 --- /dev/null +++ b/configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='Conv4NoPool'), + head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-5shot.py b/configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-5shot.py new file mode 100644 index 0000000..e3bf557 --- /dev/null +++ b/configs/classification/relation_net/mini_imagenet/relation-net_conv4_1xb105_mini-imagenet_5way-5shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='Conv4NoPool'), + head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-1shot.py b/configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-1shot.py new file mode 100644 index 0000000..a9a94b5 --- /dev/null +++ b/configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-1shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), + head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-5shot.py b/configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-5shot.py new file mode 100644 index 0000000..b7f08fa --- /dev/null +++ b/configs/classification/relation_net/mini_imagenet/relation-net_resnet12_1xb105_mini-imagenet_5way-5shot.py @@ -0,0 +1,39 @@ +_base_ = [ + '../../_base_/meta_test/mini-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='MiniImageNetDataset', + data_prefix='data/mini_imagenet', + subset='train', + pipeline=train_pipeline))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), + head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/mini_imagenet/relation_net_conv4_mini_imagenet_5way_1shot.py b/configs/classification/relation_net/mini_imagenet/relation_net_conv4_mini_imagenet_5way_1shot.py deleted file mode 100644 index fc3388f..0000000 --- a/configs/classification/relation_net/mini_imagenet/relation_net_conv4_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_mini_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='Conv4NoPool'), - head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/mini_imagenet/relation_net_conv4_mini_imagenet_5way_5shot.py b/configs/classification/relation_net/mini_imagenet/relation_net_conv4_mini_imagenet_5way_5shot.py deleted file mode 100644 index 97707e9..0000000 --- a/configs/classification/relation_net/mini_imagenet/relation_net_conv4_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_mini_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='Conv4NoPool'), - head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/mini_imagenet/relation_net_mini_imagenet_5way_1shot_84x84_aug.py b/configs/classification/relation_net/mini_imagenet/relation_net_mini_imagenet_5way_1shot_84x84_aug.py deleted file mode 100644 index 95d4f96..0000000 --- a/configs/classification/relation_net/mini_imagenet/relation_net_mini_imagenet_5way_1shot_84x84_aug.py +++ /dev/null @@ -1,34 +0,0 @@ -_base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_1shot_84x84.py', - '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' -] - -img_size = 84 -img_norm_cfg = dict( - mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) -train_pipeline = [ - dict(type='LoadImageFromFile'), - dict(type='RandomResizedCrop', size=img_size), - dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), - dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), - dict(type='Normalize', **img_norm_cfg), - dict(type='ImageToTensor', keys=['img']), - dict(type='ToTensor', keys=['gt_label']), - dict(type='Collect', keys=['img', 'gt_label']) -] - -data = dict( - samples_per_gpu=1, - workers_per_gpu=6, - train=dict( - type='EpisodicDataset', - num_episodes=100000, - num_ways=5, - num_shots=5, - num_queries=16, - dataset=dict( - type='MiniImageNetDataset', - data_prefix='data/mini_imagenet', - subset='train', - pipeline=train_pipeline))) diff --git a/configs/classification/relation_net/mini_imagenet/relation_net_mini_imagenet_5way_5shot_84x84_aug.py b/configs/classification/relation_net/mini_imagenet/relation_net_mini_imagenet_5way_5shot_84x84_aug.py deleted file mode 100644 index 07f2866..0000000 --- a/configs/classification/relation_net/mini_imagenet/relation_net_mini_imagenet_5way_5shot_84x84_aug.py +++ /dev/null @@ -1,34 +0,0 @@ -_base_ = [ - '../../_base_/meta_test/mini_imagenet_meta_test_5way_5shot_84x84.py', - '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' -] - -img_size = 84 -img_norm_cfg = dict( - mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) -train_pipeline = [ - dict(type='LoadImageFromFile'), - dict(type='RandomResizedCrop', size=img_size), - dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), - dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), - dict(type='Normalize', **img_norm_cfg), - dict(type='ImageToTensor', keys=['img']), - dict(type='ToTensor', keys=['gt_label']), - dict(type='Collect', keys=['img', 'gt_label']) -] - -data = dict( - samples_per_gpu=1, - workers_per_gpu=6, - train=dict( - type='EpisodicDataset', - num_episodes=100000, - num_ways=5, - num_shots=5, - num_queries=16, - dataset=dict( - type='MiniImageNetDataset', - data_prefix='data/mini_imagenet', - subset='train', - pipeline=train_pipeline))) diff --git a/configs/classification/relation_net/mini_imagenet/relation_net_resnet12_mini_imagenet_5way_1shot.py b/configs/classification/relation_net/mini_imagenet/relation_net_resnet12_mini_imagenet_5way_1shot.py deleted file mode 100644 index ca24314..0000000 --- a/configs/classification/relation_net/mini_imagenet/relation_net_resnet12_mini_imagenet_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_mini_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), - head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/mini_imagenet/relation_net_resnet12_mini_imagenet_5way_5shot.py b/configs/classification/relation_net/mini_imagenet/relation_net_resnet12_mini_imagenet_5way_5shot.py deleted file mode 100644 index bd1ba4f..0000000 --- a/configs/classification/relation_net/mini_imagenet/relation_net_resnet12_mini_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_mini_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), - head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/tiered_imagenet/metafile.yml b/configs/classification/relation_net/tiered_imagenet/metafile.yml new file mode 100644 index 0000000..c65d356 --- /dev/null +++ b/configs/classification/relation_net/tiered_imagenet/metafile.yml @@ -0,0 +1,59 @@ +Collections: + - Name: Relation-Net + Metadata: + Training Data: Tiered-ImageNet + Training Techniques: + - Adam + Training Resources: 1x V100 GPUs + Paper: https://arxiv.org/abs/1711.06025 + README: configs/classification/relation_net/README.md + +Models: + - Name: relation-net_conv4_1xb105_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-1shot.py + - Name: relation-net_conv4_1xb105_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-5shot.py + - Name: relation-net_resnet12_1xb105_tiered-imagenet_5way-1shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py + - Name: relation-net_resnet12_1xb105_tiered-imagenet_5way-5shot + Metadata: + Training Data: Tiered-ImageNet + Batch Size: 105 + In Collection: Relation-Net + Results: + - Task: Few Shot Image Classification + Dataset: Tiered-ImageNet + Metrics: + Accuracy: none + Weights: none + Config: configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py diff --git a/configs/classification/relation_net/tiered_imagenet/relation_net_tiered_imagenet_5way_5shot_84x84_aug.py b/configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-1shot.py similarity index 78% rename from configs/classification/relation_net/tiered_imagenet/relation_net_tiered_imagenet_5way_5shot_84x84_aug.py rename to configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-1shot.py index 60996b8..5ece0a5 100644 --- a/configs/classification/relation_net/tiered_imagenet/relation_net_tiered_imagenet_5way_5shot_84x84_aug.py +++ b/configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-1shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_5shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -34,3 +34,8 @@ data = dict( pipeline=train_pipeline)), val=dict(meta_test_cfg=dict(fast_test=False)), test=dict(meta_test_cfg=dict(fast_test=False))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='Conv4NoPool'), + head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/tiered_imagenet/relation_net_tiered_imagenet_5way_1shot_84x84_aug.py b/configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-5shot.py similarity index 78% rename from configs/classification/relation_net/tiered_imagenet/relation_net_tiered_imagenet_5way_1shot_84x84_aug.py rename to configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-5shot.py index af88b91..2fc24a0 100644 --- a/configs/classification/relation_net/tiered_imagenet/relation_net_tiered_imagenet_5way_1shot_84x84_aug.py +++ b/configs/classification/relation_net/tiered_imagenet/relation-net_conv4_1xb105_tiered-imagenet_5way-5shot.py @@ -1,7 +1,7 @@ _base_ = [ - '../../_base_/meta_test/tiered_imagenet_meta_test_5way_1shot_84x84.py', + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', '../../_base_/runtime/iter_based_runtime.py', - '../../_base_/schedules/adam_100000iter.py' + '../../_base_/schedules/adam_100k_iter.py' ] img_size = 84 @@ -20,7 +20,7 @@ train_pipeline = [ data = dict( samples_per_gpu=1, - workers_per_gpu=6, + workers_per_gpu=4, train=dict( type='EpisodicDataset', num_episodes=100000, @@ -34,3 +34,8 @@ data = dict( pipeline=train_pipeline)), val=dict(meta_test_cfg=dict(fast_test=False)), test=dict(meta_test_cfg=dict(fast_test=False))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='Conv4NoPool'), + head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py b/configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py new file mode 100644 index 0000000..3ac1309 --- /dev/null +++ b/configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-1shot.py @@ -0,0 +1,41 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-1shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline)), + val=dict(meta_test_cfg=dict(fast_test=False)), + test=dict(meta_test_cfg=dict(fast_test=False))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), + head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py b/configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py new file mode 100644 index 0000000..1714c6b --- /dev/null +++ b/configs/classification/relation_net/tiered_imagenet/relation-net_resnet12_1xb105_tiered-imagenet_5way-5shot.py @@ -0,0 +1,41 @@ +_base_ = [ + '../../_base_/meta_test/tiered-imagenet_meta-test_5way-5shot.py', + '../../_base_/runtime/iter_based_runtime.py', + '../../_base_/schedules/adam_100k_iter.py' +] + +img_size = 84 +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromBytes'), + dict(type='RandomResizedCrop', size=img_size), + dict(type='RandomFlip', flip_prob=0.5, direction='horizontal'), + dict(type='ColorJitter', brightness=0.4, contrast=0.4, saturation=0.4), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='ToTensor', keys=['gt_label']), + dict(type='Collect', keys=['img', 'gt_label']) +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=4, + train=dict( + type='EpisodicDataset', + num_episodes=100000, + num_ways=5, + num_shots=5, + num_queries=16, + dataset=dict( + type='TieredImageNetDataset', + data_prefix='data/tiered_imagenet', + subset='train', + pipeline=train_pipeline)), + val=dict(meta_test_cfg=dict(fast_test=False)), + test=dict(meta_test_cfg=dict(fast_test=False))) + +model = dict( + type='RelationNetClassifier', + backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), + head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/tiered_imagenet/relation_net_conv4_tiered_imagenet_5way_1shot.py b/configs/classification/relation_net/tiered_imagenet/relation_net_conv4_tiered_imagenet_5way_1shot.py deleted file mode 100644 index c3a907f..0000000 --- a/configs/classification/relation_net/tiered_imagenet/relation_net_conv4_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_tiered_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='Conv4NoPool'), - head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/tiered_imagenet/relation_net_conv4_tiered_imagenet_5way_5shot.py b/configs/classification/relation_net/tiered_imagenet/relation_net_conv4_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 8b72394..0000000 --- a/configs/classification/relation_net/tiered_imagenet/relation_net_conv4_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_tiered_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='Conv4NoPool'), - head=dict(type='RelationHead', in_channels=64, feature_size=(19, 19))) diff --git a/configs/classification/relation_net/tiered_imagenet/relation_net_resnet12_tiered_imagenet_5way_1shot.py b/configs/classification/relation_net/tiered_imagenet/relation_net_resnet12_tiered_imagenet_5way_1shot.py deleted file mode 100644 index 21b2bf6..0000000 --- a/configs/classification/relation_net/tiered_imagenet/relation_net_resnet12_tiered_imagenet_5way_1shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_tiered_imagenet_5way_1shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), - head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/classification/relation_net/tiered_imagenet/relation_net_resnet12_tiered_imagenet_5way_5shot.py b/configs/classification/relation_net/tiered_imagenet/relation_net_resnet12_tiered_imagenet_5way_5shot.py deleted file mode 100644 index 00d2c0a..0000000 --- a/configs/classification/relation_net/tiered_imagenet/relation_net_resnet12_tiered_imagenet_5way_5shot.py +++ /dev/null @@ -1,5 +0,0 @@ -_base_ = ['relation_net_tiered_imagenet_5way_5shot_84x84_aug.py'] -model = dict( - type='RelationNetClassifier', - backbone=dict(type='ResNet12', with_avgpool=False, flatten=False), - head=dict(type='RelationHead', in_channels=640, feature_size=(5, 5))) diff --git a/configs/detection/README.md b/configs/detection/README.md new file mode 100644 index 0000000..32211d7 --- /dev/null +++ b/configs/detection/README.md @@ -0,0 +1,10 @@ +# Few Shot Detection + +## Get Started +To be done. + +## Data Preparation +To be done. + +## Model Zoo +To be done. diff --git a/configs/detection/_base_/datasets/finetune_based/base_coco.py b/configs/detection/_base_/datasets/fine_tune_based/base_coco.py similarity index 89% rename from configs/detection/_base_/datasets/finetune_based/base_coco.py rename to configs/detection/_base_/datasets/fine_tune_based/base_coco.py index 3a1d33f..90ac2ca 100644 --- a/configs/detection/_base_/datasets/finetune_based/base_coco.py +++ b/configs/detection/_base_/datasets/fine_tune_based/base_coco.py @@ -42,8 +42,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/' - 'annotations/trainvalno5k.json') + ann_file='data/few_shot_ann/coco/annotations/train.json') ], img_prefix=data_root, pipeline=train_pipeline, @@ -53,7 +52,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, @@ -63,7 +62,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, diff --git a/configs/detection/_base_/datasets/finetune_based/base_voc.py b/configs/detection/_base_/datasets/fine_tune_based/base_voc.py similarity index 100% rename from configs/detection/_base_/datasets/finetune_based/base_voc.py rename to configs/detection/_base_/datasets/fine_tune_based/base_voc.py diff --git a/configs/detection/_base_/datasets/finetune_based/few_shot_coco.py b/configs/detection/_base_/datasets/fine_tune_based/few_shot_coco.py similarity index 89% rename from configs/detection/_base_/datasets/finetune_based/few_shot_coco.py rename to configs/detection/_base_/datasets/fine_tune_based/few_shot_coco.py index 3ee5c82..aa6e459 100644 --- a/configs/detection/_base_/datasets/finetune_based/few_shot_coco.py +++ b/configs/detection/_base_/datasets/fine_tune_based/few_shot_coco.py @@ -42,8 +42,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/' - 'annotations/trainvalno5k.json') + ann_file='data/few_shot_ann/coco/annotations/train.json') ], img_prefix=data_root, num_novel_shots=None, @@ -56,7 +55,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, @@ -66,7 +65,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, diff --git a/configs/detection/_base_/datasets/finetune_based/few_shot_voc.py b/configs/detection/_base_/datasets/fine_tune_based/few_shot_voc.py similarity index 100% rename from configs/detection/_base_/datasets/finetune_based/few_shot_voc.py rename to configs/detection/_base_/datasets/fine_tune_based/few_shot_voc.py diff --git a/configs/detection/_base_/datasets/nway_kshot/base_coco.py b/configs/detection/_base_/datasets/nway_kshot/base_coco.py index 6729eb5..431faf4 100644 --- a/configs/detection/_base_/datasets/nway_kshot/base_coco.py +++ b/configs/detection/_base_/datasets/nway_kshot/base_coco.py @@ -51,8 +51,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/' - 'annotations/trainvalno5k.json') + ann_file='data/few_shot_ann/coco/annotations/train.json') ], img_prefix=data_root, multi_pipelines=train_multi_pipelines, @@ -64,7 +63,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, @@ -74,7 +73,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, diff --git a/configs/detection/_base_/datasets/nway_kshot/few_shot_coco.py b/configs/detection/_base_/datasets/nway_kshot/few_shot_coco.py index c11b60e..ea5c363 100644 --- a/configs/detection/_base_/datasets/nway_kshot/few_shot_coco.py +++ b/configs/detection/_base_/datasets/nway_kshot/few_shot_coco.py @@ -52,8 +52,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/' - 'annotations/trainvalno5k.json') + ann_file='data/few_shot_ann/coco/annotations/train.json') ], img_prefix=data_root, multi_pipelines=train_multi_pipelines, @@ -65,7 +64,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, @@ -75,7 +74,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, diff --git a/configs/detection/_base_/datasets/query_aware/base_coco.py b/configs/detection/_base_/datasets/query_aware/base_coco.py index c246d99..709dd18 100644 --- a/configs/detection/_base_/datasets/query_aware/base_coco.py +++ b/configs/detection/_base_/datasets/query_aware/base_coco.py @@ -57,8 +57,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/' - 'annotations/trainvalno5k.json') + ann_file='data/few_shot_ann/coco/annotations/train.json') ], img_prefix=data_root, multi_pipelines=train_multi_pipelines, @@ -71,7 +70,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, @@ -81,7 +80,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, @@ -96,8 +95,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/' - 'annotations/trainvalno5k.json') + ann_file='data/few_shot_ann/coco/annotations/train.json') ], img_prefix=data_root, pipeline=train_multi_pipelines['support'], diff --git a/configs/detection/_base_/datasets/query_aware/few_shot_coco.py b/configs/detection/_base_/datasets/query_aware/few_shot_coco.py index 2faba2b..5eaa8f0 100644 --- a/configs/detection/_base_/datasets/query_aware/few_shot_coco.py +++ b/configs/detection/_base_/datasets/query_aware/few_shot_coco.py @@ -57,8 +57,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/' - 'annotations/trainvalno5k.json') + ann_file='data/few_shot_ann/coco/annotations/train.json') ], img_prefix=data_root, num_novel_shots=None, @@ -73,7 +72,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, @@ -83,7 +82,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, diff --git a/configs/detection/_base_/datasets/two_branch/base_coco.py b/configs/detection/_base_/datasets/two_branch/base_coco.py index e8e7454..02d86dd 100644 --- a/configs/detection/_base_/datasets/two_branch/base_coco.py +++ b/configs/detection/_base_/datasets/two_branch/base_coco.py @@ -30,8 +30,8 @@ train_multi_pipelines = dict( dict(type='MultiImageNormalize', **img_norm_cfg), dict(type='MultiImageRandomFlip', flip_ratio=0.5), dict(type='MultiImagePad', size_divisor=32), - dict(type='MultiScaleFormatBundle'), - dict(type='MultiScaleCollect', keys=['img', 'gt_labels']) + dict(type='MultiImageFormatBundle'), + dict(type='MultiImageCollect', keys=['img', 'gt_labels']) ]) test_pipeline = [ dict(type='LoadImageFromFile'), @@ -63,8 +63,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/' - 'annotations/trainvalno5k.json') + ann_file='data/few_shot_ann/coco/annotations/train.json') ], img_prefix=data_root, multi_pipelines=train_multi_pipelines, @@ -81,7 +80,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, @@ -91,7 +90,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, diff --git a/configs/detection/_base_/datasets/two_branch/base_voc.py b/configs/detection/_base_/datasets/two_branch/base_voc.py index b316702..ffe2c7a 100644 --- a/configs/detection/_base_/datasets/two_branch/base_voc.py +++ b/configs/detection/_base_/datasets/two_branch/base_voc.py @@ -30,8 +30,8 @@ train_multi_pipelines = dict( dict(type='MultiImageNormalize', **img_norm_cfg), dict(type='MultiImageRandomFlip', flip_ratio=0.5), dict(type='MultiImagePad', size_divisor=32), - dict(type='MultiScaleFormatBundle'), - dict(type='MultiScaleCollect', keys=['img', 'gt_labels']) + dict(type='MultiImageFormatBundle'), + dict(type='MultiImageCollect', keys=['img', 'gt_labels']) ]) test_pipeline = [ dict(type='LoadImageFromFile'), @@ -74,7 +74,7 @@ data = dict( classes=None, use_difficult=False, instance_wise=False, - # coordinate_offset=[-1, -1, -1, -1], + coordinate_offset=[-1, -1, -1, -1], dataset_name='main_dataset'), auxiliary_dataset=dict( copy_from_main_dataset=True, @@ -89,7 +89,7 @@ data = dict( ], img_prefix=data_root, pipeline=test_pipeline, - # coordinate_offset=[-1, -1, -1, -1], + coordinate_offset=[-1, -1, -1, -1], classes=None), test=dict( type='FewShotVOCDataset', @@ -101,6 +101,6 @@ data = dict( img_prefix=data_root, pipeline=test_pipeline, test_mode=True, - # coordinate_offset=[-1, -1, -1, -1], + coordinate_offset=[-1, -1, -1, -1], classes=None)) evaluation = dict(interval=5000, metric='mAP') diff --git a/configs/detection/_base_/datasets/two_branch/few_shot_coco.py b/configs/detection/_base_/datasets/two_branch/few_shot_coco.py index d2d988b..3f35fe9 100644 --- a/configs/detection/_base_/datasets/two_branch/few_shot_coco.py +++ b/configs/detection/_base_/datasets/two_branch/few_shot_coco.py @@ -30,8 +30,8 @@ train_multi_pipelines = dict( dict(type='MultiImageNormalize', **img_norm_cfg), dict(type='MultiImageRandomFlip', flip_ratio=0.5), dict(type='MultiImagePad', size_divisor=32), - dict(type='MultiScaleFormatBundle'), - dict(type='MultiScaleCollect', keys=['img', 'gt_labels']) + dict(type='MultiImageFormatBundle'), + dict(type='MultiImageCollect', keys=['img', 'gt_labels']) ]) test_pipeline = [ dict(type='LoadImageFromFile'), @@ -63,8 +63,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/' - 'annotations/trainvalno5k.json') + ann_file='data/few_shot_ann/coco/annotations/train.json') ], img_prefix=data_root, multi_pipelines=train_multi_pipelines, @@ -81,7 +80,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, @@ -91,7 +90,7 @@ data = dict( ann_cfg=[ dict( type='ann_file', - ann_file='data/few_shot_coco_split/annotations/5k.json') + ann_file='data/few_shot_ann/coco/annotations/val.json') ], img_prefix=data_root, pipeline=test_pipeline, diff --git a/configs/detection/_base_/datasets/two_branch/few_shot_voc.py b/configs/detection/_base_/datasets/two_branch/few_shot_voc.py index de2a7be..6a38120 100644 --- a/configs/detection/_base_/datasets/two_branch/few_shot_voc.py +++ b/configs/detection/_base_/datasets/two_branch/few_shot_voc.py @@ -30,8 +30,8 @@ train_multi_pipelines = dict( dict(type='MultiImageNormalize', **img_norm_cfg), dict(type='MultiImageRandomFlip', flip_ratio=0.5), dict(type='MultiImagePad', size_divisor=32), - dict(type='MultiScaleFormatBundle'), - dict(type='MultiScaleCollect', keys=['img', 'gt_labels']) + dict(type='MultiImageFormatBundle'), + dict(type='MultiImageCollect', keys=['img', 'gt_labels']) ]) test_pipeline = [ dict(type='LoadImageFromFile'), @@ -74,7 +74,7 @@ data = dict( classes=None, use_difficult=False, instance_wise=False, - # coordinate_offset=[-1, -1, -1, -1], + coordinate_offset=[-1, -1, -1, -1], dataset_name='main_dataset'), auxiliary_dataset=dict( copy_from_main_dataset=True, @@ -89,7 +89,7 @@ data = dict( ], img_prefix=data_root, pipeline=test_pipeline, - # coordinate_offset=[-1, -1, -1, -1], + coordinate_offset=[-1, -1, -1, -1], classes=None), test=dict( type='FewShotVOCDataset', @@ -101,6 +101,6 @@ data = dict( img_prefix=data_root, pipeline=test_pipeline, test_mode=True, - # coordinate_offset=[-1, -1, -1, -1], + coordinate_offset=[-1, -1, -1, -1], classes=None)) evaluation = dict(interval=3000, metric='mAP', class_splits=None) diff --git a/configs/detection/_base_/default_runtime.py b/configs/detection/_base_/default_runtime.py index 2b5623d..d1dac2d 100644 --- a/configs/detection/_base_/default_runtime.py +++ b/configs/detection/_base_/default_runtime.py @@ -14,5 +14,7 @@ log_level = 'INFO' load_from = None resume_from = None workflow = [('train', 1)] -seed = 0 use_infinite_sampler = True +# a magical seed works well in most cases for this repo!!! +# using different seeds might raise some issues about reproducibility +seed = 42 diff --git a/configs/detection/_base_/models/faster_rcnn_r50_caffe_fpn.py b/configs/detection/_base_/models/faster_rcnn_r50_caffe_fpn.py index fca58fa..1eef57f 100644 --- a/configs/detection/_base_/models/faster_rcnn_r50_caffe_fpn.py +++ b/configs/detection/_base_/models/faster_rcnn_r50_caffe_fpn.py @@ -122,7 +122,4 @@ model = dict( rcnn=dict( score_thr=0.05, nms=dict(type='nms', iou_threshold=0.5), - max_per_img=100) - # soft-nms is also supported for rcnn testing - # e.g., nms=dict(type='soft_nms', iou_threshold=0.5, min_score=0.05) - )) + max_per_img=100))) diff --git a/configs/detection/_base_/models/faster_rcnn_r50_fpn.py b/configs/detection/_base_/models/faster_rcnn_r50_fpn.py deleted file mode 100644 index be4c7b2..0000000 --- a/configs/detection/_base_/models/faster_rcnn_r50_fpn.py +++ /dev/null @@ -1,108 +0,0 @@ -# model settings -model = dict( - type='FasterRCNN', - pretrained='torchvision://resnet50', - backbone=dict( - type='ResNet', - depth=50, - num_stages=4, - out_indices=(0, 1, 2, 3), - frozen_stages=1, - norm_cfg=dict(type='BN', requires_grad=True), - norm_eval=True, - ), - neck=dict( - type='FPN', - in_channels=[256, 512, 1024, 2048], - out_channels=256, - num_outs=5), - rpn_head=dict( - type='RPNHead', - in_channels=256, - feat_channels=256, - anchor_generator=dict( - type='AnchorGenerator', - scales=[8], - ratios=[0.5, 1.0, 2.0], - strides=[4, 8, 16, 32, 64]), - bbox_coder=dict( - type='DeltaXYWHBBoxCoder', - target_means=[.0, .0, .0, .0], - target_stds=[1.0, 1.0, 1.0, 1.0]), - loss_cls=dict( - type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), - loss_bbox=dict(type='L1Loss', loss_weight=1.0)), - roi_head=dict( - type='StandardRoIHead', - bbox_roi_extractor=dict( - type='SingleRoIExtractor', - roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), - out_channels=256, - featmap_strides=[4, 8, 16, 32]), - bbox_head=dict( - type='Shared2FCBBoxHead', - in_channels=256, - fc_out_channels=1024, - roi_feat_size=7, - num_classes=80, - bbox_coder=dict( - type='DeltaXYWHBBoxCoder', - target_means=[0., 0., 0., 0.], - target_stds=[0.1, 0.1, 0.2, 0.2]), - reg_class_agnostic=False, - loss_cls=dict( - type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), - loss_bbox=dict(type='L1Loss', loss_weight=1.0))), - # model training and testing settings - train_cfg=dict( - rpn=dict( - assigner=dict( - type='MaxIoUAssigner', - pos_iou_thr=0.7, - neg_iou_thr=0.3, - min_pos_iou=0.3, - match_low_quality=True, - ignore_iof_thr=-1), - sampler=dict( - type='RandomSampler', - num=256, - pos_fraction=0.5, - neg_pos_ub=-1, - add_gt_as_proposals=False), - allowed_border=-1, - pos_weight=-1, - debug=False), - rpn_proposal=dict( - nms_pre=2000, - max_per_img=1000, - nms=dict(type='nms', iou_threshold=0.7), - min_bbox_size=0), - rcnn=dict( - assigner=dict( - type='MaxIoUAssigner', - pos_iou_thr=0.5, - neg_iou_thr=0.5, - min_pos_iou=0.5, - match_low_quality=False, - ignore_iof_thr=-1), - sampler=dict( - type='RandomSampler', - num=512, - pos_fraction=0.25, - neg_pos_ub=-1, - add_gt_as_proposals=True), - pos_weight=-1, - debug=False)), - test_cfg=dict( - rpn=dict( - nms_pre=1000, - max_per_img=1000, - nms=dict(type='nms', iou_threshold=0.7), - min_bbox_size=0), - rcnn=dict( - score_thr=0.05, - nms=dict(type='nms', iou_threshold=0.5), - max_per_img=100) - # soft-nms is also supported for rcnn testing - # e.g., nms=dict(type='soft_nms', iou_threshold=0.5, min_score=0.05) - )) diff --git a/configs/detection/attention_rpn/README.md b/configs/detection/attention_rpn/README.md new file mode 100644 index 0000000..564b3b7 --- /dev/null +++ b/configs/detection/attention_rpn/README.md @@ -0,0 +1,110 @@ + + +# Attention RPN (CVPR'2020) + +```bibtex +@inproceedings{fan2020fsod, + title={Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector}, + author={Fan, Qi and Zhuo, Wei and Tang, Chi-Keung and Tai, Yu-Wing}, + booktitle={CVPR}, + year={2020} +} +``` + +**Note**: ALL the reported results use the data split released from [TFA](https://github.com/ucbdrive/few-shot-object-detection/blob/master/datasets/README.md) official repo. +Currently, each setting is only evaluated with one fixed few shot dataset. +Please refer to [here]() to get more details about the dataset and data preparation. + + +## How to reproduce Attention RPN + + +Following the original implementation, it consists of 2 steps: +- **Step1: Base training** + - use all the images and annotations of base classes to train a base model. + +- **Step2: Few shot fine-tuning**: + - use the base model from step1 as model initialization and further fine tune the model with few shot datasets. + + +### An example of VOC split1 1 shot setting with 8 gpus + +```bash +# step1: base training for voc split1 +bash ./tools/detection/dist_train.sh \ + configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_base-training.py 8 + +# step2: few shot fine-tuning +bash ./tools/detection/dist_train.sh \ + configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_1shot-fine-tuning.py 8 +``` + +**Note**: +- The default output path of base model in step1 is set to `work_dirs/{BASE TRAINING CONFIG}/latest.pth`. + When the model is saved to different path, please update the argument `load-from` in step2 few shot fine-tune configs instead + of using `resume_from`. + + + + +## Results on VOC dataset + +**Note**: +- The paper doesn't conduct experiments of VOC dataset. + Therefore, we use the VOC setting of [TFA]() to evaluate the method. +- Something should be noticed: + - The training batch size are 8x2 for all the VOC experiments. + - Only the roi head will be trained during few shot fine-tuning. + - The iterations or training strategy may not be the optimal. + +### Base Training + +| Arch | Split | Base AP50 | ckpt | log | +| :------: | :-----------: | :------: | :------: |:------: | +| [r50 c4](/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_base-training.py) | 1 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_base-training.py) | 2 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_base-training.py) | 3 | - | [ckpt]() | [log]() | + +### Few Shot Finetuning + +| Arch | Split | Shot | Novel AP50 | ckpt | log | +| :--------------: | :-----------: | :------: | :------: |:------: |:------: | +| [r50 c4](/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_1shot-fine-tuning.py) | 1 | 1 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_2shot-fine-tuning.py) | 1 | 2 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_3shot-fine-tuning.py) | 1 | 3 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_5shot-fine-tuning.py) | 1 | 5 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_10shot-fine-tuning.py) | 1 | 10 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_1shot-fine-tuning.py) | 2 | 1 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_2shot-fine-tuning.py) | 2 | 2 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_3shot-fine-tuning.py) | 2 | 3 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_5shot-fine-tuning.py) | 2 | 5 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_10shot-fine-tuning.py) | 2 | 10 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_1shot-fine-tuning.py) | 3 | 1 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_2shot-fine-tuning.py) | 3 | 2 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_3shot-fine-tuning.py) | 3 | 3 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_5shot-fine-tuning.py) | 3 | 5 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_10shot-fine-tuning.py) | 3 | 10 | - | [ckpt]() | [log]() | + + +## Results on COCO dataset + +**Note**: +- Following the original implementation, the training batch size are 4x2 for all the COCO experiments. +- The official implementation use different COCO data split from TFA. + Thus, we report the results of both setting. +- To reproduce the result following official data split, please refer to [here]() to get more details about data preparation. + +### Base Training + +| Arch | data source| Base mAP | ckpt | log | +| :------: | :-----------: | :------: | :------: |:------: | +| [r50 c4](/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_base-training.py) | [TFA](https://github.com/ucbdrive/few-shot-object-detection/blob/master/datasets/README.md) | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_official-base-training.py) | [official repo](https://github.com/fanq15/FewX/tree/master/datasets) | - | [ckpt]() | [log]() | + +### Few Shot Finetuning + +| Arch | data source| Shot | Novel mAP | ckpt | log | +| :--------------: | :--------------: | :-----------: | :------: |:------: |:------: | +| [r50 c4](/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_10shot-fine-tuning.py) | [TFA](https://github.com/ucbdrive/few-shot-object-detection/blob/master/datasets/README.md) | 10 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_30shot-fine-tuning.py) | [TFA](https://github.com/ucbdrive/few-shot-object-detection/blob/master/datasets/README.md) | 30 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_10shot-fine-tuning.py) | [official repo](https://github.com/fanq15/FewX/tree/master/datasets) | 10 | - | [ckpt]() | [log]() | diff --git a/configs/detection/attention_rpn/attention_rpn_faster_rcnn_r50_c4.py b/configs/detection/attention_rpn/attention-rpn_r50_c4.py similarity index 100% rename from configs/detection/attention_rpn/attention_rpn_faster_rcnn_r50_c4.py rename to configs/detection/attention_rpn/attention-rpn_r50_c4.py diff --git a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco_10shot_ft.py b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_10shot-fine-tuning.py similarity index 86% rename from configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco_10shot_ft.py rename to configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_10shot-fine-tuning.py index c7a2999..e4868d3 100644 --- a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco_10shot_ft.py +++ b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ '../../_base_/datasets/query_aware/few_shot_coco.py', - '../../_base_/schedules/schedule.py', - '../attention_rpn_faster_rcnn_r50_c4.py', '../../_base_/default_runtime.py' + '../../_base_/schedules/schedule.py', '../attention-rpn_r50_c4.py', + '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotCocoDefaultDataset predefine ann_cfg for model reproducibility @@ -40,9 +40,7 @@ lr_config = dict( log_config = dict(interval=10) runner = dict(max_iters=3000) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_coco_base_training_14/' \ - 'latest.pth' +load_from = 'work_dirs/attention_rpn_r50_c4_coco_base-training/latest.pth' model = dict( frozen_parameters=['backbone'], rpn_head=dict( diff --git a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco_30shot_ft.py b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_30shot-fine-tuning.py similarity index 86% rename from configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco_30shot_ft.py rename to configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_30shot-fine-tuning.py index f45b33e..2d0301d 100644 --- a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco_30shot_ft.py +++ b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_30shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ '../../_base_/datasets/query_aware/few_shot_coco.py', - '../../_base_/schedules/schedule.py', - '../attention_rpn_faster_rcnn_r50_c4.py', '../../_base_/default_runtime.py' + '../../_base_/schedules/schedule.py', '../attention-rpn_r50_c4.py', + '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotCocoDefaultDataset predefine ann_cfg for model reproducibility @@ -40,10 +40,7 @@ lr_config = dict( log_config = dict(interval=10) runner = dict(max_iters=6000) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_coco_base_training_14/' \ - 'latest.pth' - +load_from = 'work_dirs/attention_rpn_r50_c4_coco_base-training/latest.pth' model = dict( frozen_parameters=['backbone'], rpn_head=dict( diff --git a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco_base_training.py b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_base-training.py similarity index 87% rename from configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco_base_training.py rename to configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_base-training.py index 44d930f..64bf37c 100644 --- a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco_base_training.py +++ b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_base-training.py @@ -1,7 +1,7 @@ _base_ = [ '../../_base_/datasets/query_aware/base_coco.py', - '../../_base_/schedules/schedule.py', - '../attention_rpn_faster_rcnn_r50_c4.py', '../../_base_/default_runtime.py' + '../../_base_/schedules/schedule.py', '../attention-rpn_r50_c4.py', + '../../_base_/default_runtime.py' ] num_support_ways = 2 num_support_shots = 10 diff --git a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco17_10shot_ft.py b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_official-10shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco17_10shot_ft.py rename to configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_official-10shot-fine-tuning.py index dc618c7..0e44110 100644 --- a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco17_10shot_ft.py +++ b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_official-10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ '../../_base_/datasets/query_aware/few_shot_coco.py', - '../../_base_/schedules/schedule.py', - '../attention_rpn_faster_rcnn_r50_c4.py', '../../_base_/default_runtime.py' + '../../_base_/schedules/schedule.py', '../attention-rpn_r50_c4.py', + '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotCocoDefaultDataset predefine ann_cfg for model reproducibility @@ -14,7 +14,7 @@ data = dict( repeat_times=50, dataset=dict( type='FewShotCocoDefaultDataset', - ann_cfg=[dict(method='Attention_RPN', setting='10SHOT17')], + ann_cfg=[dict(method='Attention_RPN', setting='Official_10SHOT')], num_novel_shots=10, classes='NOVEL_CLASSES', instance_wise=False)), @@ -52,7 +52,7 @@ log_config = dict(interval=10) runner = dict(max_iters=3000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/attention_rpn_faster_rcnn_r50_c4_coco_base_training/latest.pth' + 'work_dirs/attention_rpn_r50_c4_coco_official-base-training/latest.pth' model = dict( frozen_parameters=['backbone'], diff --git a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco17_base_training.py b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_official-base-training.py similarity index 92% rename from configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco17_base_training.py rename to configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_official-base-training.py index 358273d..aedc69f 100644 --- a/configs/detection/attention_rpn/coco/attention_rpn_faster_rcnn_r50_c4_coco17_base_training.py +++ b/configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_official-base-training.py @@ -1,7 +1,7 @@ _base_ = [ '../../_base_/datasets/query_aware/base_coco.py', - '../../_base_/schedules/schedule.py', - '../attention_rpn_faster_rcnn_r50_c4.py', '../../_base_/default_runtime.py' + '../../_base_/schedules/schedule.py', '../attention-rpn_r50_c4.py', + '../../_base_/default_runtime.py' ] num_support_ways = 2 num_support_shots = 10 diff --git a/configs/detection/attention_rpn/coco/metafile.yml b/configs/detection/attention_rpn/coco/metafile.yml new file mode 100644 index 0000000..60e110c --- /dev/null +++ b/configs/detection/attention_rpn/coco/metafile.yml @@ -0,0 +1,70 @@ +Collections: + - Name: Attention RPN + Metadata: + Training Data: COCO + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 4x V100 GPUs + Architecture: + - Attention RPN + - ResNet + Paper: https://arxiv.org/abs/1908.01998 + README: configs/detection/attention_rpn/README.md + +Models: + - Name: attention_rpn_r50_c4_coco_10shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_10shot-fine-tuning.py + Metadata: + Training Data: COCO 10shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + novel box AP: none + Weights: none + - Name: attention_rpn_r50_c4_coco_30shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_30shot-fine-tuning.py + Metadata: + Training Data: COCO 30shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + novel box AP: none + Weights: none + - Name: attention_rpn_r50_c4_coco_base-training + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_base-training.py + Metadata: + Training Data: COCO Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + Weights: none + - Name: attention_rpn_r50_c4_coco_official-10shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_official-10shot-fine-tuning.py + Metadata: + Training Data: COCO 10shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + novel box AP: none + Weights: none + - Name: attention_rpn_r50_c4_coco_official-base-training + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_4xb2_coco_official-base-training.py + Metadata: + Training Data: COCO Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + Weights: none diff --git a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_10shot_ft.py b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_10shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_10shot_ft.py rename to configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_10shot-fine-tuning.py index 401c8b9..d343e1a 100644 --- a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_10shot_ft.py +++ b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_10shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[1500]) log_config = dict(interval=10) runner = dict(max_iters=1500) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split1_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split1_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_1shot_ft.py b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_1shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_1shot_ft.py rename to configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_1shot-fine-tuning.py index e90017d..1c52f2a 100644 --- a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_1shot_ft.py +++ b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_1shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[300]) log_config = dict(interval=10) runner = dict(max_iters=300) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split1_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split1_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_2shot_ft.py b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_2shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_2shot_ft.py rename to configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_2shot-fine-tuning.py index 8751f7d..469b438 100644 --- a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_2shot_ft.py +++ b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_2shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[600]) log_config = dict(interval=10) runner = dict(max_iters=600) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split1_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split1_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_3shot_ft.py b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_3shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_3shot_ft.py rename to configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_3shot-fine-tuning.py index 3e5d323..646f0c7 100644 --- a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_3shot_ft.py +++ b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_3shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[900]) log_config = dict(interval=10) runner = dict(max_iters=900) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split1_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split1_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_5shot_ft.py b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_5shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_5shot_ft.py rename to configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_5shot-fine-tuning.py index 53b2156..b1b960e 100644 --- a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_5shot_ft.py +++ b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_5shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[1200]) log_config = dict(interval=10) runner = dict(max_iters=1200) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split1_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split1_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_base_training.py b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_base-training.py similarity index 91% rename from configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_base_training.py rename to configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_base-training.py index 0161abe..fac7ea1 100644 --- a/configs/detection/attention_rpn/voc/split1/attention_rpn_faster_rcnn_r50_c4_voc_split1_base_training.py +++ b/configs/detection/attention_rpn/voc/split1/attention-rpn_r50_c4_voc-split1_base-training.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset diff --git a/configs/detection/attention_rpn/voc/split1/metafile.yml b/configs/detection/attention_rpn/voc/split1/metafile.yml new file mode 100644 index 0000000..14a807e --- /dev/null +++ b/configs/detection/attention_rpn/voc/split1/metafile.yml @@ -0,0 +1,81 @@ +Collections: + - Name: Attention RPN + Metadata: + Training Data: VOC Split1 + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - Attention RPN + - ResNet + Paper: https://arxiv.org/abs/1908.01998 + README: configs/detection/attention_rpn/README.md + +Models: + - Name: attention_rpn_r50_c4_voc-split1_base-training + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split1_base-training.py + Metadata: + Training Data: VOC Split1 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + base box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split1_1shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split1_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split1_2shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split1_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split1_3shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split1_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split1_5shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split1_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split1_10shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split1_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none diff --git a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_10shot_ft.py b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_10shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_10shot_ft.py rename to configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_10shot-fine-tuning.py index f163743..75d7b16 100644 --- a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_10shot_ft.py +++ b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_10shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[1500]) log_config = dict(interval=10) runner = dict(max_iters=1500) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split2_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split2_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_1shot_ft.py b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_1shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_1shot_ft.py rename to configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_1shot-fine-tuning.py index fb65c58..ca032a2 100644 --- a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_1shot_ft.py +++ b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_1shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[300]) log_config = dict(interval=10) runner = dict(max_iters=300) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split2_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split2_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_2shot_ft.py b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_2shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_2shot_ft.py rename to configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_2shot-fine-tuning.py index a655111..75dec0d 100644 --- a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_2shot_ft.py +++ b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_2shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[600]) log_config = dict(interval=10) runner = dict(max_iters=600) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split2_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split2_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_3shot_ft.py b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_3shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_3shot_ft.py rename to configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_3shot-fine-tuning.py index 818069d..68bbc0a 100644 --- a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_3shot_ft.py +++ b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_3shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[900]) log_config = dict(interval=10) runner = dict(max_iters=900) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split2_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split2_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_5shot_ft.py b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_5shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_5shot_ft.py rename to configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_5shot-fine-tuning.py index e1d142f..955aeb8 100644 --- a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_5shot_ft.py +++ b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_5shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[1200]) log_config = dict(interval=10) runner = dict(max_iters=1200) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split2_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split2_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_base_training.py b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_base-training.py similarity index 91% rename from configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_base_training.py rename to configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_base-training.py index 73d64d2..8551ac5 100644 --- a/configs/detection/attention_rpn/voc/split2/attention_rpn_faster_rcnn_r50_c4_voc_split2_base_training.py +++ b/configs/detection/attention_rpn/voc/split2/attention-rpn_r50_c4_voc-split2_base-training.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset diff --git a/configs/detection/attention_rpn/voc/split2/metafile.yml b/configs/detection/attention_rpn/voc/split2/metafile.yml new file mode 100644 index 0000000..1230b9c --- /dev/null +++ b/configs/detection/attention_rpn/voc/split2/metafile.yml @@ -0,0 +1,81 @@ +Collections: + - Name: Attention RPN + Metadata: + Training Data: VOC Split2 + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - Attention RPN + - ResNet + Paper: https://arxiv.org/abs/1908.01998 + README: configs/detection/attention_rpn/README.md + +Models: + - Name: attention_rpn_r50_c4_voc-split2_base-training + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split2_base-training.py + Metadata: + Training Data: VOC Split2 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + base box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split2_1shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split2_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split2_2shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split2_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split2_3shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split2_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split2_5shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split2_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split2_10shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split2_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none diff --git a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_10shot_ft.py b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_10shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_10shot_ft.py rename to configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_10shot-fine-tuning.py index a0b8d67..4a9f715 100644 --- a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_10shot_ft.py +++ b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_10shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[1500]) log_config = dict(interval=10) runner = dict(max_iters=1500) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split3_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split3_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_1shot_ft.py b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_1shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_1shot_ft.py rename to configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_1shot-fine-tuning.py index 562cda3..d682b07 100644 --- a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_1shot_ft.py +++ b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_1shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[300]) log_config = dict(interval=10) runner = dict(max_iters=300) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split3_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split3_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_2shot_ft.py b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_2shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_2shot_ft.py rename to configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_2shot-fine-tuning.py index 4779757..d7e83c2 100644 --- a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_2shot_ft.py +++ b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_2shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[600]) log_config = dict(interval=10) runner = dict(max_iters=600) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split3_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split3_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_3shot_ft.py b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_3shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_3shot_ft.py rename to configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_3shot-fine-tuning.py index 17f4d01..78c9da4 100644 --- a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_3shot_ft.py +++ b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_3shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[900]) log_config = dict(interval=10) runner = dict(max_iters=900) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split3_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split3_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_5shot_ft.py b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_5shot-fine-tuning.py similarity index 87% rename from configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_5shot_ft.py rename to configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_5shot-fine-tuning.py index 70fb1f8..5550d21 100644 --- a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_5shot_ft.py +++ b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_5shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -30,9 +29,8 @@ lr_config = dict(warmup=None, step=[1200]) log_config = dict(interval=10) runner = dict(max_iters=1200) # load_from = 'path of base training model' -load_from = 'work_dirs/' \ - 'attention_rpn_faster_rcnn_r50_c4_voc_split3_base_training/' \ - 'latest.pth' +load_from = \ + 'work_dirs/attention_rpn_r50_c4_voc-split3_base-training/latest.pth' model = dict( frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_base_training.py b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_base-training.py similarity index 91% rename from configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_base_training.py rename to configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_base-training.py index 8548de8..6e997e1 100644 --- a/configs/detection/attention_rpn/voc/split3/attention_rpn_faster_rcnn_r50_c4_voc_split3_base_training.py +++ b/configs/detection/attention_rpn/voc/split3/attention-rpn_r50_c4_voc-split3_base-training.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/query_aware/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../attention_rpn_faster_rcnn_r50_c4.py', + '../../../_base_/schedules/schedule.py', '../../attention-rpn_r50_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset diff --git a/configs/detection/attention_rpn/voc/split3/metafile.yml b/configs/detection/attention_rpn/voc/split3/metafile.yml new file mode 100644 index 0000000..ea80fa5 --- /dev/null +++ b/configs/detection/attention_rpn/voc/split3/metafile.yml @@ -0,0 +1,81 @@ +Collections: + - Name: Attention RPN + Metadata: + Training Data: VOC Split3 + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - Attention RPN + - ResNet + Paper: https://arxiv.org/abs/1908.01998 + README: configs/detection/attention_rpn/README.md + +Models: + - Name: attention_rpn_r50_c4_voc-split3_base-training + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split3_base-training.py + Metadata: + Training Data: VOC Split3 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + base box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split3_1shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split3_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split3_2shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split3_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split3_3shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split3_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split3_5shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split3_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none + - Name: attention_rpn_r50_c4_voc-split3_10shot-fine-tuning + In Collection: Attention RPN + Config: configs/detection/attention_rpn/coco/attention-rpn_r50_c4_voc-split3_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC + Metrics: + novel box AP50: none + Weights: none diff --git a/configs/detection/fsce/README.md b/configs/detection/fsce/README.md new file mode 100644 index 0000000..4644c48 --- /dev/null +++ b/configs/detection/fsce/README.md @@ -0,0 +1,137 @@ + + +# FSCE (CVPR'2021) + +```bibteN +@inproceedings{sun2021fsce, + title={FSCE: Few-Shot Object Detection via Contrastive Proposal Encoding}, + author={Sun, Bo and Li, Banghuai and Cai, Shengcai and Yuan, Ye and Zhang, Chi}, + booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition (CVPR)}, + year={2021} +} +``` + +**Note**: ALL the reported results use the data split released from [fsce](https://github.com/ucbdrive/few-shot-object-detection/blob/master/datasets/README.md) official repo. +Currently, each setting is only evaluated with one fiNed few shot dataset. +Please refer to [here]() to get more details about the dataset and data preparation. + + +## How to reproduce FSCE + + +Following the original implementation, it consists of 3 steps: +- **Step1: Base training** + - use all the images and annotations of base classes to train a base model. + +- **Step2: Reshape the bbox head of base model**: + - create a new bbox head for all classes fine-tuning (base classes + novel classes) + - the weights of base class in new bbox head directly use the original one as initialization. + - the weights of novel class in new bbox head use random initialization. + +- **Step3: Few shot fine-tuning**: + - use the base model from step2 as model initialization and further fine tune the bbox head with few shot datasets. + + +### An example of VOC split1 1 shot setting with 8 gpus + +```bash +# step1: base training for voc split1 +bash ./tools/detection/dist_train.sh \ + configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_base-training.py 8 + +# step2: reshape the bbox head of base model for few shot fine-tuning +python -m tools.detection.misc.initialize_bbox_head \ + --src1 work_dirs/fsce_r101_fpn_voc-split1_base-training/latest.pth \ + --method randinit \ + --save-dir work_dirs/fsce_r101_fpn_voc-split1_base-training + +# step3: few shot fine-tuning +bash ./tools/detection/dist_train.sh \ + configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_1shot-fine-tuning.py 8 +``` + +**Note**: +- The default output path of the reshaped base model in step2 is set to `work_dirs/{BASE TRAINING CONFIG}/base_model_random_init_bbox_head.pth`. + When the model is saved to different path, please update the argument `load-from` in step3 few shot fine-tune configs instead + of using `resume_from`. + + +## Results on VOC dataset + +### Base Training + +| arch | Split | Base AP50 | ckpt(step1) | ckpt(step2) | log | +| :------: | :-----------: | :------: | :------: | :------: |:------: | +| [r101_fpn](/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_base-training.py) | 1 | - | [ckpt]() | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_base-training.py) | 2 | - | [ckpt]() | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_base-training.py) | 3 | - | [ckpt]() | [ckpt]() | [log]() | + +**Note**: +- All the base training configs is the same as [TFA](/configs/detection/fsce/README.md) and the released base training + checkpoint is the same as the fsce, too. Therefore, the few shot fine-tuning can directly reuse the reshaped + base model of fsce by creating a symlink or copying the whole checkpoint to the corresponding folder. +- The performance of the same few shot setting using different base training models can be dramatically unstable + (AP50 can fluctuate by 5.0 or more), even their mAP on base classes are very close. +- Temporally, the solution to getting a good base model is training the base model with different random seed. + Also, the random seed used in this code base may not the optimal one, and it is possible to get the higher results by using + other random seeds. + However, using the same random seed still can not guarantee the identical result each time. + +- To reproduce the reported few shot results, it is highly recommended using the released step2 model for few shot fine-tuning. + We will continue to investigate and improve it. + + + +### Few Shot Fine-tuning + +| arch | contrastive loss| Split | Shot | Base AP50 | Novel AP50 | ckpt | log | +| :--------------: | :-----------: | :-----------: | :------: | :------: | :------: |:------: |:------: | +| [r101_fpn](/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_1shot-fine-tuning.py) | N | 1 | 1 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_2shot-fine-tuning.py) | N | 1 | 2 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_3shot-fine-tuning.py) | N | 1 | 3 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_5shot-fine-tuning.py) | N | 1 | 5 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_10shot-fine-tuning.py) | N | 1 | 10| - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_3shot-fine-tuning.py) | Y | 1 | 3 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_5shot-fine-tuning.py) | Y | 1 | 5 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_10shot-fine-tuning.py) | Y | 1 | 10| - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_1shot-fine-tuning.py) | N | 2 | 1 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_2shot-fine-tuning.py) | N | 2 | 2 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_3shot-fine-tuning.py) | N | 2 | 3 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_5shot-fine-tuning.py) | N | 2 | 5 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_10shot-fine-tuning.py) | N | 2 | 10| - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_3shot-fine-tuning.py) | Y | 2 | 3 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_5shot-fine-tuning.py) | Y | 2 | 5 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_10shot-fine-tuning.py) | Y | 2 | 10| - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_1shot-fine-tuning.py) | N | 3 | 1 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_2shot-fine-tuning.py) | N | 3 | 2 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_3shot-fine-tuning.py) | N | 3 | 3 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_5shot-fine-tuning.py) | N | 3 | 5 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_10shot-fine-tuning.py) | N | 3 | 10| - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_3shot-fine-tuning.py) | Y | 3 | 3 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_5shot-fine-tuning.py) | Y | 3 | 5 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_10shot-fine-tuning.py) | Y | 3 | 10| - | - | [ckpt]() | [log]() | + +**Note**: +- Following the original implementation, the contrastive loss only be added at VOC 3/5/10 shot setting and in VOC 1/2 shot + setting only the `fc_cls` and `fc_reg` layers are fine-tuned. +- Some arguments of configs are different from the official codes, for example, the official codes use aug test + in some settings, while all the results reported above do not use `aug_test`. + +## Results on COCO dataset + +### Base Training + +| arch | base AP50 | ckpt | log | +| :------: | :-----------: | :------: |:------: | +| [r101_fpn](/configs/detection/fsce/coco/fsce_r101_fpn_coco_base-training.py) | - | - | [ckpt]() | [log]() | + +### Few Shot Fine-tuning + +| arch | shot | contrastive loss| base mAP | novel mAP | ckpt | log | +| :--------------: | :-----------: | :------: | :------: | :------: |:------: |:------: | +| [r101_fpn](/configs/detection/fsce/coco/fsce_r101_fpn_coco_10shot-fine-tuning.py) | 10 | N | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/fsce/coco/fsce_r101_fpn_coco_30shot-fine-tuning.py) | 30 | N | - | - | [ckpt]() | [log]() | + +**Note**: +- Some arguments of configs are different from the official codes, for example, the official codes use aug test + in some settings, while all the results reported above do not use `aug_test`. diff --git a/configs/detection/fsce/coco/fsce_faster_rcnn_r101_fpn_coco_10shot_ft.py b/configs/detection/fsce/coco/fsce_r101_fpn_coco_10shot-fine-tuning.py similarity index 65% rename from configs/detection/fsce/coco/fsce_faster_rcnn_r101_fpn_coco_10shot_ft.py rename to configs/detection/fsce/coco/fsce_r101_fpn_coco_10shot-fine-tuning.py index d3afdaa..ef45545 100644 --- a/configs/detection/fsce/coco/fsce_faster_rcnn_r101_fpn_coco_10shot_ft.py +++ b/configs/detection/fsce/coco/fsce_r101_fpn_coco_10shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ - '../../_base_/datasets/finetune_based/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../fsce_faster_rcnn_r101_fpn.py', + '../../_base_/datasets/fine_tune_based/few_shot_coco.py', + '../../_base_/schedules/schedule.py', '../fsce_r101_fpn.py', '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotCocoDataset @@ -16,13 +16,14 @@ checkpoint_config = dict(interval=5000) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.3, step=[20000]) runner = dict(max_iters=30000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_coco_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict(bbox_head=dict(num_classes=80)), train_cfg=dict( rcnn=dict( assigner=dict(pos_iou_thr=0.5, neg_iou_thr=0.5, min_pos_iou=0.5)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +# load_from = 'path of base training model' +load_from = ('work_dirs/fsce_r101_fpn_coco_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/coco/fsce_faster_rcnn_r101_fpn_coco_30shot_ft.py b/configs/detection/fsce/coco/fsce_r101_fpn_coco_30shot-fine-tuning.py similarity index 65% rename from configs/detection/fsce/coco/fsce_faster_rcnn_r101_fpn_coco_30shot_ft.py rename to configs/detection/fsce/coco/fsce_r101_fpn_coco_30shot-fine-tuning.py index 1b96974..c39c8ce 100644 --- a/configs/detection/fsce/coco/fsce_faster_rcnn_r101_fpn_coco_30shot_ft.py +++ b/configs/detection/fsce/coco/fsce_r101_fpn_coco_30shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ - '../../_base_/datasets/finetune_based/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../fsce_faster_rcnn_r101_fpn.py', + '../../_base_/datasets/fine_tune_based/few_shot_coco.py', + '../../_base_/schedules/schedule.py', '../fsce_r101_fpn.py', '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotCocoDataset @@ -16,13 +16,14 @@ checkpoint_config = dict(interval=5000) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.3, step=[30000]) runner = dict(max_iters=40000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_coco_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict(bbox_head=dict(num_classes=80)), train_cfg=dict( rcnn=dict( assigner=dict(pos_iou_thr=0.5, neg_iou_thr=0.5, min_pos_iou=0.5)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +# load_from = 'path of base training model' +load_from = ('work_dirs/fsce_r101_fpn_coco_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/coco/fsce_faster_rcnn_r101_fpn_coco_base_training.py b/configs/detection/fsce/coco/fsce_r101_fpn_coco_base-training.py similarity index 87% rename from configs/detection/fsce/coco/fsce_faster_rcnn_r101_fpn_coco_base_training.py rename to configs/detection/fsce/coco/fsce_r101_fpn_coco_base-training.py index 558e17e..7ba3488 100644 --- a/configs/detection/fsce/coco/fsce_faster_rcnn_r101_fpn_coco_base_training.py +++ b/configs/detection/fsce/coco/fsce_r101_fpn_coco_base-training.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/datasets/finetune_based/base_coco.py', + '../../_base_/datasets/fine_tune_based/base_coco.py', '../../_base_/schedules/schedule.py', '../../_base_/models/faster_rcnn_r50_caffe_fpn.py', '../../_base_/default_runtime.py' diff --git a/configs/detection/fsce/coco/metafile.yml b/configs/detection/fsce/coco/metafile.yml new file mode 100644 index 0000000..fb316c7 --- /dev/null +++ b/configs/detection/fsce/coco/metafile.yml @@ -0,0 +1,51 @@ +Collections: + - Name: FSCE + Metadata: + Training Data: COCO + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2103.05950 + README: configs/detection/fsce/README.md + +Models: + - Name: fsce_r101_fpn_coco_base-training + In Collection: FSCE + Config: configs/detection/fsce/coco/fsce_r101_fpn_coco_base-training.py + Metadata: + Training Data: COCO Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + Weights: none + - Name: fsce_r101_fpn_coco_10shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/coco/fsce_r101_fpn_coco_10shot-fine-tuning.py + Metadata: + Training Data: COCO 10shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_coco_30shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/coco/fsce_r101_fpn_coco_30shot-fine-tuning.py + Metadata: + Training Data: COCO 30shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/fsce/fsce_faster_rcnn_r101_fpn.py b/configs/detection/fsce/fsce_r101_fpn.py similarity index 100% rename from configs/detection/fsce/fsce_faster_rcnn_r101_fpn.py rename to configs/detection/fsce/fsce_r101_fpn.py diff --git a/configs/detection/fsce/fsce_faster_rcnn_r101_fpn_cl.py b/configs/detection/fsce/fsce_r101_fpn_contrastive_loss.py similarity index 100% rename from configs/detection/fsce/fsce_faster_rcnn_r101_fpn_cl.py rename to configs/detection/fsce/fsce_r101_fpn_contrastive_loss.py diff --git a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_10shot_ft_cl.py b/configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_10shot-fine-tuning.py similarity index 73% rename from configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_10shot_ft_cl.py rename to configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_10shot-fine-tuning.py index f24c704..60efefe 100644 --- a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_10shot_ft_cl.py +++ b/configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn_cl.py', + '../../fsce_r101_fpn_contrastive_loss.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -28,13 +28,13 @@ custom_hooks = [ decay_steps=(6000, 10000), decay_rate=0.5) ] -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict( bbox_head=dict( with_weight_decay=True, loss_contrast=dict(iou_threshold=0.8, loss_weight=0.5)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_3shot_ft_cl.py b/configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_3shot-fine-tuning.py similarity index 72% rename from configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_3shot_ft_cl.py rename to configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_3shot-fine-tuning.py index 11df2cc..19dcfc8 100644 --- a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_3shot_ft_cl.py +++ b/configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_3shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn_cl.py', + '../../fsce_r101_fpn_contrastive_loss.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -28,13 +28,13 @@ custom_hooks = [ decay_steps=(3000, 6000), decay_rate=0.5) ] -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict( bbox_head=dict( with_weight_decay=True, loss_contrast=dict(iou_threshold=0.6, loss_weight=0.2)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_5shot_ft_cl.py b/configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_5shot-fine-tuning.py similarity index 72% rename from configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_5shot_ft_cl.py rename to configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_5shot-fine-tuning.py index 63a4b43..ec95929 100644 --- a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_5shot_ft_cl.py +++ b/configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_5shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn_cl.py', + '../../fsce_r101_fpn_contrastive_loss.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -28,13 +28,13 @@ custom_hooks = [ decay_steps=(4000, 7000), decay_rate=0.5) ] -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict( bbox_head=dict( with_weight_decay=True, loss_contrast=dict(iou_threshold=0.7, loss_weight=0.5)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_10shot-fine-tuning.py similarity index 60% rename from configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py rename to configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_10shot-fine-tuning.py index 9807050..3bbd4f1 100644 --- a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py +++ b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -21,8 +21,8 @@ checkpoint_config = dict(interval=7500) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.5, step=[8000, 13000]) runner = dict(max_iters=15000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_1shot-fine-tuning.py similarity index 63% rename from configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py rename to configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_1shot-fine-tuning.py index 4010a7c..9179c2b 100644 --- a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py +++ b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_1shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,11 +24,11 @@ lr_config = dict( 3500, ]) runner = dict(max_iters=6000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' model = dict(frozen_parameters=[ 'backbone', 'neck', 'rpn_head', 'roi_head.bbox_head.shared_fcs.0' ]) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_2shot-fine-tuning.py similarity index 63% rename from configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py rename to configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_2shot-fine-tuning.py index 54888f2..3049aa0 100644 --- a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py +++ b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_2shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,11 +24,11 @@ lr_config = dict( 5000, ]) runner = dict(max_iters=7000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' model = dict(frozen_parameters=[ 'backbone', 'neck', 'rpn_head', 'roi_head.bbox_head.shared_fcs.0' ]) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_3shot-fine-tuning.py similarity index 60% rename from configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py rename to configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_3shot-fine-tuning.py index cf89653..e863ccf 100644 --- a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py +++ b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_3shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -21,8 +21,8 @@ checkpoint_config = dict(interval=4000) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.5, step=[4000, 6000]) runner = dict(max_iters=8000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_5shot-fine-tuning.py similarity index 60% rename from configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py rename to configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_5shot-fine-tuning.py index c4ae522..cfb520e 100644 --- a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py +++ b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_5shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -21,8 +21,8 @@ checkpoint_config = dict(interval=4500) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.5, step=[5000, 7000]) runner = dict(max_iters=9000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_base_training.py b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_base-training.py similarity index 81% rename from configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_base_training.py rename to configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_base-training.py index dc1d5bd..6beaa6e 100644 --- a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_base_training.py +++ b/configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_base-training.py @@ -1,5 +1,5 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/base_voc.py', + '../../../_base_/datasets/fine_tune_based/base_voc.py', '../../../_base_/schedules/schedule.py', '../../../_base_/models/faster_rcnn_r50_caffe_fpn.py', '../../../_base_/default_runtime.py' @@ -16,6 +16,5 @@ model = dict( pretrained='open-mmlab://detectron2/resnet101_caffe', backbone=dict(depth=101), roi_head=dict(bbox_head=dict(num_classes=15))) -# base training use normal sampler get better performance in fine-tuning +# using regular sampler can get a better base model use_infinite_sampler = False -seed = 2021 diff --git a/configs/detection/fsce/voc/split1/metafile.yml b/configs/detection/fsce/voc/split1/metafile.yml new file mode 100644 index 0000000..b283cd5 --- /dev/null +++ b/configs/detection/fsce/voc/split1/metafile.yml @@ -0,0 +1,123 @@ +Collections: + - Name: FSCE + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2003.06957 + README: configs/detection/fsce/README.md + +Models: + - Name: fsce_r101_fpn_voc-split1_base-training + In Collection: FSCE + Config: configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_base-training.py + Metadata: + Training Data: VOC Split1 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split1_1shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split1_2shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split1_3shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split1_5shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split1_10shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split1/fsce_r101_fpn_voc-split1_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_contrastive-loss_voc-split1_3shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_contrastive-loss_voc-split1_5shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_contrastive-loss_voc-split1_10shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split1/fsce_r101_fpn_contrastive-loss_voc-split1_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_10shot_ft_cl.py b/configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_10shot-fine-tuning.py similarity index 72% rename from configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_10shot_ft_cl.py rename to configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_10shot-fine-tuning.py index 04306c5..bc267ea 100644 --- a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_10shot_ft_cl.py +++ b/configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn_cl.py', + '../../fsce_r101_fpn_contrastive_loss.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -28,13 +28,13 @@ custom_hooks = [ decay_steps=(6000, 10000), decay_rate=0.5) ] -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict( bbox_head=dict( with_weight_decay=True, loss_contrast=dict(iou_threshold=0.8, loss_weight=0.5)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_3shot_ft_cl.py b/configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_3shot-fine-tuning.py similarity index 72% rename from configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_3shot_ft_cl.py rename to configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_3shot-fine-tuning.py index c1e1112..baaa5da 100644 --- a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_3shot_ft_cl.py +++ b/configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_3shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn_cl.py', + '../../fsce_r101_fpn_contrastive_loss.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -28,13 +28,13 @@ custom_hooks = [ decay_steps=(3000, 6000), decay_rate=0.5) ] -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict( bbox_head=dict( with_weight_decay=True, loss_contrast=dict(iou_threshold=0.6, loss_weight=0.2)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_5shot_ft_cl.py b/configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_5shot-fine-tuning.py similarity index 72% rename from configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_5shot_ft_cl.py rename to configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_5shot-fine-tuning.py index fca3bb0..0f4cdf0 100644 --- a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_5shot_ft_cl.py +++ b/configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_5shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn_cl.py', + '../../fsce_r101_fpn_contrastive_loss.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -28,13 +28,13 @@ custom_hooks = [ decay_steps=(4000, 7000), decay_rate=0.5) ] -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict( bbox_head=dict( with_weight_decay=True, loss_contrast=dict(iou_threshold=0.7, loss_weight=0.5)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_10shot-fine-tuning.py similarity index 60% rename from configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py rename to configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_10shot-fine-tuning.py index 36616f8..a405155 100644 --- a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py +++ b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -21,8 +21,8 @@ checkpoint_config = dict(interval=6000) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.5, step=[7000, 9000]) runner = dict(max_iters=12000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_1shot-fine-tuning.py similarity index 63% rename from configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py rename to configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_1shot-fine-tuning.py index f6941b4..fcd0c63 100644 --- a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py +++ b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_1shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,11 +24,11 @@ lr_config = dict( 2000, ]) runner = dict(max_iters=3000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' model = dict(frozen_parameters=[ 'backbone', 'neck', 'rpn_head', 'roi_head.bbox_head.shared_fcs.0' ]) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_2shot-fine-tuning.py similarity index 63% rename from configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py rename to configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_2shot-fine-tuning.py index 0ca6809..5eeae1f 100644 --- a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py +++ b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_2shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,11 +24,11 @@ lr_config = dict( 3000, ]) runner = dict(max_iters=5000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' model = dict(frozen_parameters=[ 'backbone', 'neck', 'rpn_head', 'roi_head.bbox_head.shared_fcs.0' ]) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_3shot-fine-tuning.py similarity index 60% rename from configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py rename to configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_3shot-fine-tuning.py index 53de912..5cb0405 100644 --- a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py +++ b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_3shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -21,8 +21,8 @@ checkpoint_config = dict(interval=4500) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.5, step=[5000, 7000]) runner = dict(max_iters=9000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_5shot-fine-tuning.py similarity index 60% rename from configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py rename to configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_5shot-fine-tuning.py index fc992d2..87851ce 100644 --- a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py +++ b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_5shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -21,8 +21,8 @@ checkpoint_config = dict(interval=4500) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=100, gamma=0.5, step=[5000, 7000]) runner = dict(max_iters=9000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_base_training.py b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_base-training.py similarity index 81% rename from configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_base_training.py rename to configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_base-training.py index 5197574..228f401 100644 --- a/configs/detection/fsce/voc/split2/fsce_faster_rcnn_r101_fpn_voc_split2_base_training.py +++ b/configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_base-training.py @@ -1,5 +1,5 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/base_voc.py', + '../../../_base_/datasets/fine_tune_based/base_voc.py', '../../../_base_/schedules/schedule.py', '../../../_base_/models/faster_rcnn_r50_caffe_fpn.py', '../../../_base_/default_runtime.py' @@ -16,3 +16,5 @@ model = dict( pretrained='open-mmlab://detectron2/resnet101_caffe', backbone=dict(depth=101), roi_head=dict(bbox_head=dict(num_classes=15))) +# using regular sampler can get a better base model +use_infinite_sampler = False diff --git a/configs/detection/fsce/voc/split2/metafile.yml b/configs/detection/fsce/voc/split2/metafile.yml new file mode 100644 index 0000000..582e92f --- /dev/null +++ b/configs/detection/fsce/voc/split2/metafile.yml @@ -0,0 +1,123 @@ +Collections: + - Name: FSCE + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2003.06957 + README: configs/detection/fsce/README.md + +Models: + - Name: fsce_r101_fpn_voc-split2_base-training + In Collection: FSCE + Config: configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_base-training.py + Metadata: + Training Data: VOC Split2 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split2_1shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split2_2shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split2_3shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split2_5shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split2_10shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split2/fsce_r101_fpn_voc-split2_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_contrastive-loss_voc-split2_3shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_contrastive-loss_voc-split2_5shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_contrastive-loss_voc-split2_10shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split2/fsce_r101_fpn_contrastive-loss_voc-split2_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_10shot_ft_cl.py b/configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_10shot-fine-tuning.py similarity index 73% rename from configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_10shot_ft_cl.py rename to configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_10shot-fine-tuning.py index d10024e..3591c72 100644 --- a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_10shot_ft_cl.py +++ b/configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn_cl.py', + '../../fsce_r101_fpn_contrastive_loss.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -28,13 +28,13 @@ custom_hooks = [ decay_steps=(6000, 10000), decay_rate=0.5) ] -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict( bbox_head=dict( with_weight_decay=True, loss_contrast=dict(iou_threshold=0.8, loss_weight=0.5)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_3shot_ft_cl.py b/configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_3shot-fine-tuning.py similarity index 72% rename from configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_3shot_ft_cl.py rename to configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_3shot-fine-tuning.py index 6a48f72..f120bca 100644 --- a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_3shot_ft_cl.py +++ b/configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_3shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn_cl.py', + '../../fsce_r101_fpn_contrastive_loss.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -28,13 +28,13 @@ custom_hooks = [ decay_steps=(3000, 6000), decay_rate=0.5) ] -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict( bbox_head=dict( with_weight_decay=True, loss_contrast=dict(iou_threshold=0.6, loss_weight=0.2)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_5shot_ft_cl.py b/configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_5shot-fine-tuning.py similarity index 72% rename from configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_5shot_ft_cl.py rename to configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_5shot-fine-tuning.py index a3b4726..94a89d4 100644 --- a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_5shot_ft_cl.py +++ b/configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_5shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn_cl.py', + '../../fsce_r101_fpn_contrastive_loss.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -28,13 +28,13 @@ custom_hooks = [ decay_steps=(4000, 7000), decay_rate=0.5) ] -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' model = dict( roi_head=dict( bbox_head=dict( with_weight_decay=True, loss_contrast=dict(iou_threshold=0.7, loss_weight=0.5)))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_10shot-fine-tuning.py similarity index 60% rename from configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py rename to configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_10shot-fine-tuning.py index 70dd79f..b67bb2b 100644 --- a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py +++ b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -21,8 +21,8 @@ checkpoint_config = dict(interval=7500) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.5, step=[8000, 13000]) runner = dict(max_iters=15000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_1shot-fine-tuning.py similarity index 63% rename from configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py rename to configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_1shot-fine-tuning.py index bbf8e20..d5e527b 100644 --- a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py +++ b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_1shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,11 +24,11 @@ lr_config = dict( 6000, ]) runner = dict(max_iters=8000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' model = dict(frozen_parameters=[ 'backbone', 'neck', 'rpn_head', 'roi_head.bbox_head.shared_fcs.0' ]) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_2shot-fine-tuning.py similarity index 63% rename from configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py rename to configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_2shot-fine-tuning.py index 1db9ba2..9ee3834 100644 --- a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py +++ b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_2shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,11 +24,11 @@ lr_config = dict( 6000, ]) runner = dict(max_iters=8000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' model = dict(frozen_parameters=[ 'backbone', 'neck', 'rpn_head', 'roi_head.bbox_head.shared_fcs.0' ]) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_3shot-fine-tuning.py similarity index 60% rename from configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py rename to configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_3shot-fine-tuning.py index 8e75409..e291608 100644 --- a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py +++ b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_3shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -21,8 +21,8 @@ checkpoint_config = dict(interval=5000) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.5, step=[6000, 8000]) runner = dict(max_iters=10000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_5shot-fine-tuning.py similarity index 60% rename from configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py rename to configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_5shot-fine-tuning.py index 8742d7a..48a834d 100644 --- a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py +++ b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_5shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsce_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../fsce_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -21,8 +21,8 @@ checkpoint_config = dict(interval=6000) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=200, gamma=0.3, step=[8000, 10000]) runner = dict(max_iters=12000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'fsce_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/fsce/README.md for more details. +load_from = ('work_dirs/fsce_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_base_training.py b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_base-training.py similarity index 81% rename from configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_base_training.py rename to configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_base-training.py index 2fb23f9..7372491 100644 --- a/configs/detection/fsce/voc/split3/fsce_faster_rcnn_r101_fpn_voc_split3_base_training.py +++ b/configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_base-training.py @@ -1,5 +1,5 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/base_voc.py', + '../../../_base_/datasets/fine_tune_based/base_voc.py', '../../../_base_/schedules/schedule.py', '../../../_base_/models/faster_rcnn_r50_caffe_fpn.py', '../../../_base_/default_runtime.py' @@ -16,3 +16,5 @@ model = dict( pretrained='open-mmlab://detectron2/resnet101_caffe', backbone=dict(depth=101), roi_head=dict(bbox_head=dict(num_classes=15))) +# using regular sampler can get a better base model +use_infinite_sampler = False diff --git a/configs/detection/fsce/voc/split3/metafile.yml b/configs/detection/fsce/voc/split3/metafile.yml new file mode 100644 index 0000000..5e9195e --- /dev/null +++ b/configs/detection/fsce/voc/split3/metafile.yml @@ -0,0 +1,123 @@ +Collections: + - Name: FSCE + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2003.06957 + README: configs/detection/fsce/README.md + +Models: + - Name: fsce_r101_fpn_voc-split3_base-training + In Collection: FSCE + Config: configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_base-training.py + Metadata: + Training Data: VOC Split3 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split3_1shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split3_2shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split3_3shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split3_5shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_voc-split3_10shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split3/fsce_r101_fpn_voc-split3_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_contrastive-loss_voc-split3_3shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_contrastive-loss_voc-split3_5shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsce_r101_fpn_contrastive-loss_voc-split3_10shot-fine-tuning + In Collection: FSCE + Config: configs/detection/fsce/voc/split3/fsce_r101_fpn_contrastive-loss_voc-split3_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/fsdetview/README.md b/configs/detection/fsdetview/README.md new file mode 100644 index 0000000..1fd73b2 --- /dev/null +++ b/configs/detection/fsdetview/README.md @@ -0,0 +1,100 @@ + + +# FSDetView (ECCV'2020) + +```bibtex +@inproceedings{xiao2020fsdetview, + title={Few-Shot Object Detection and Viewpoint Estimation for Objects in the Wild}, + author={Yang Xiao and Renaud Marlet}, + booktitle={European Conference on Computer Vision (ECCV)}, + year={2020} +} +``` +**Note**: ALL the reported results use the data split released from [TFA](https://github.com/ucbdrive/few-shot-object-detection/blob/master/datasets/README.md) official repo. +Currently, each setting is only evaluated with one fixed few shot dataset. +Please refer to [here]() to get more details about the dataset and data preparation. + +## How to reproduce FSDetView + +Following the original implementation, it consists of 2 steps: +- **Step1: Base training** + - use all the images and annotations of base classes to train a base model. + +- **Step2: Few shot fine-tuning**: + - use the base model from step1 as model initialization and further fine tune the model with few shot datasets. + + +### An example of VOC split1 1 shot setting with 8 gpus + +```bash +# step1: base training for voc split1 +bash ./tools/detection/dist_train.sh \ + configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_base-training.py 8 + +# step2: few shot fine-tuning +bash ./tools/detection/dist_train.sh \ + configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py 8 +``` + +**Note**: +- The default output path of base model in step1 is set to `work_dirs/{BASE TRAINING CONFIG}/latest.pth`. + When the model is saved to different path, please update the argument `load-from` in step2 few shot fine-tune configs instead + of using `resume_from`. + + + + + +## Results on VOC dataset +**Note**: +- The official implementation use batch size 1x4 for training, + while we use batch size 8x4 and adjust some arguments in configs. +- ALL the reported results use the data split released from TFA. + +### Base Training + +| Arch | Split | Base AP50 | ckpt | log | +| :------: | :-----------: | :------: | :------: |:------: | +| [r101 c4](/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_base-training.py) | 1 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_base-training.py) | 2 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_base-training.py) | 3 | - | [ckpt]() | [log]() | + +### Few Shot Fine-tuning + + +| Arch | Split | Shot | Novel AP50 | ckpt | log | +| :--------------: | :-----------: | :------: | :------: |:------: |:------: | +| [r101 c4](/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py) | 1 | 1 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py) | 1 | 2 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py) | 1 | 3 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py) | 1 | 5 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py) | 1 | 10 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py) | 1 | 1 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py) | 1 | 2 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py) | 1 | 3 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py) | 1 | 5 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py) | 1 | 10 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py) | 1 | 1 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py) | 1 | 2 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py) | 1 | 3 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py) | 1 | 5 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py) | 1 | 10 | - | [ckpt]() | [log]() | + +**Note**: +- Only the roi head will be trained during few shot fine-tuning. +- The iterations or training strategy may not be the optimal in 8gpu setting. + +## Results on COCO dataset +### Base Training + +| Arch | Base AP50 | ckpt | log | +| :------: | :-----------: | :------: |:------: | +| [r50 c4](/configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_base-training.py) | - | [ckpt]() | [log]() | + +### Few Shot Fine-tuning + + +| Arch | Shot | Novel AP50 | ckpt | log | +| :--------------: | :-----------: | :------: |:------: |:------: | +| [r50 c4](/configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_10shot-fine-tuning.py) | 10 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_30shot-fine-tuning.py) | 30 | - | [ckpt]() | [log]() | diff --git a/configs/detection/fsdetview/coco/fsdetview_faster_rcnn_r50_c4_coco_10shot_ft.py b/configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_10shot-fine-tuning.py similarity index 83% rename from configs/detection/fsdetview/coco/fsdetview_faster_rcnn_r50_c4_coco_10shot_ft.py rename to configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_10shot-fine-tuning.py index 4ba4420..e52071d 100644 --- a/configs/detection/fsdetview/coco/fsdetview_faster_rcnn_r50_c4_coco_10shot_ft.py +++ b/configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_10shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ '../../_base_/datasets/nway_kshot/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../fsdetview_faster_rcnn_r50_c4.py', + '../../_base_/schedules/schedule.py', '../fsdetview_r50_c4.py', '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -22,9 +22,7 @@ lr_config = dict(warmup=None, step=[5000]) runner = dict(max_iters=5000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r50_c4_coco_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r50_c4_8xb4_coco_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'neck', 'rpn_head', 'roi_head.bbox_head.shared_fcs' diff --git a/configs/detection/fsdetview/coco/fsdetview_faster_rcnn_r50_c4_coco_30shot_ft.py b/configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_30shot-fine-tuning.py similarity index 83% rename from configs/detection/fsdetview/coco/fsdetview_faster_rcnn_r50_c4_coco_30shot_ft.py rename to configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_30shot-fine-tuning.py index c053232..436cb5c 100644 --- a/configs/detection/fsdetview/coco/fsdetview_faster_rcnn_r50_c4_coco_30shot_ft.py +++ b/configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_30shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ '../../_base_/datasets/nway_kshot/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../fsdetview_faster_rcnn_r50_c4.py', + '../../_base_/schedules/schedule.py', '../fsdetview_r50_c4.py', '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -22,9 +22,7 @@ lr_config = dict(warmup=None, step=[8000]) runner = dict(max_iters=8000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r50_c4_coco_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r50_c4_8xb4_coco_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'neck', 'rpn_head', 'roi_head.bbox_head.shared_fcs' diff --git a/configs/detection/fsdetview/coco/fsdetview_faster_rcnn_r50_c4_coco_base_training.py b/configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_base-training.py similarity index 69% rename from configs/detection/fsdetview/coco/fsdetview_faster_rcnn_r50_c4_coco_base_training.py rename to configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_base-training.py index 7c6291f..fa97c10 100644 --- a/configs/detection/fsdetview/coco/fsdetview_faster_rcnn_r50_c4_coco_base_training.py +++ b/configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_base-training.py @@ -1,12 +1,13 @@ _base_ = [ '../../_base_/datasets/nway_kshot/base_coco.py', - '../../_base_/schedules/schedule.py', '../fsdetview_faster_rcnn_r50_c4.py', + '../../_base_/schedules/schedule.py', '../fsdetview_r50_c4.py', '../../_base_/default_runtime.py' ] lr_config = dict(warmup_iters=500, step=[110000], gamma=0.5) checkpoint_config = dict(interval=10000) runner = dict(max_iters=120000) -optimizer = dict(lr=0.01) +data = dict(train=dict(num_used_support_shots=500)) +optimizer = dict(lr=0.005) # model settings model = dict( roi_head=dict(bbox_head=dict(num_classes=60, num_meta_classes=60))) diff --git a/configs/detection/fsdetview/coco/metafile.yml b/configs/detection/fsdetview/coco/metafile.yml new file mode 100644 index 0000000..ab26952 --- /dev/null +++ b/configs/detection/fsdetview/coco/metafile.yml @@ -0,0 +1,51 @@ +Collections: + - Name: FSDETVIEW + Metadata: + Training Data: COCO + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Batch Size: 8x4 + Architecture: + - RPN + - ResNet + Paper: https://arxiv.org/abs/2007.12107 + README: configs/detection/fsdetview/README.md + +Models: + - Name: fsdetview_r50_c4_8xb4_coco_base-training + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_base-training.py + Metadata: + Training Data: COCO Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + Weights: none + - Name: fsdetview_r50_c4_8xb4_coco_10shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_10shot-fine-tuning.py + Metadata: + Training Data: COCO 10shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r50_c4_8xb4_coco_30shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/coco/fsdetview_r50_c4_8xb4_coco_30shot-fine-tuning.py + Metadata: + Training Data: COCO 30shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/meta_rcnn/meta_rcnn_faster_rcnn_r101_c4.py b/configs/detection/fsdetview/fsdetview_r101_c4.py similarity index 87% rename from configs/detection/meta_rcnn/meta_rcnn_faster_rcnn_r101_c4.py rename to configs/detection/fsdetview/fsdetview_r101_c4.py index 91ab9c7..3798b5a 100644 --- a/configs/detection/meta_rcnn/meta_rcnn_faster_rcnn_r101_c4.py +++ b/configs/detection/fsdetview/fsdetview_r101_c4.py @@ -1,5 +1,5 @@ _base_ = [ - './meta_rcnn_faster_rcnn_r50_c4.py', + './fsdetview_r50_c4.py', ] pretrained = 'open-mmlab://detectron2/resnet101_caffe' # model settings diff --git a/configs/detection/fsdetview/fsdetview_faster_rcnn_r50_c4.py b/configs/detection/fsdetview/fsdetview_r50_c4.py similarity index 100% rename from configs/detection/fsdetview/fsdetview_faster_rcnn_r50_c4.py rename to configs/detection/fsdetview/fsdetview_r50_c4.py diff --git a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_10shot_ft.py b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_10shot_ft.py rename to configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py index 7d15f07..83a5212 100644 --- a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_10shot_ft.py +++ b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=1000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_1shot_ft.py b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_1shot_ft.py rename to configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py index 0d889a6..cb35a90 100644 --- a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_1shot_ft.py +++ b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=100) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_2shot_ft.py b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_2shot_ft.py rename to configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py index a23c787..84d135f 100644 --- a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_2shot_ft.py +++ b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=300) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_3shot_ft.py b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_3shot_ft.py rename to configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py index 8bf7d65..1262cec 100644 --- a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_3shot_ft.py +++ b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=500) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_5shot_ft.py b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_5shot_ft.py rename to configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py index a8f880a..533d974 100644 --- a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_5shot_ft.py +++ b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=800) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_base_training.py b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_base-training.py similarity index 89% rename from configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_base_training.py rename to configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_base-training.py index 6b4fbf4..a94abac 100644 --- a/configs/detection/fsdetview/voc/split1/fsdetview_faster_rcnn_r101_c4_voc_split1_base_training.py +++ b/configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_base-training.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset diff --git a/configs/detection/fsdetview/voc/split1/metafile.yml b/configs/detection/fsdetview/voc/split1/metafile.yml new file mode 100644 index 0000000..6f97de9 --- /dev/null +++ b/configs/detection/fsdetview/voc/split1/metafile.yml @@ -0,0 +1,87 @@ +Collections: + - Name: FSDETVIEW + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Batch Size: 8x4 + Architecture: + - RPN + - ResNet + Paper: https://arxiv.org/abs/2007.12107 + README: configs/detection/fsdetview/README.md + +Models: + - Name: fsdetview_r101_c4_8xb4_voc-split1_base-training + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_base-training.py + Metadata: + Training Data: VOC Split1 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split1_1shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split1_2shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split1_3shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split1_5shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split1_10shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split1/fsdetview_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_10shot_ft.py b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_10shot_ft.py rename to configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py index aaa9172..8ccd311 100644 --- a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_10shot_ft.py +++ b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=1000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_1shot_ft.py b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_1shot_ft.py rename to configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py index 57a8bfa..95489b0 100644 --- a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_1shot_ft.py +++ b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=100) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_2shot_ft.py b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_2shot_ft.py rename to configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py index 851c216..4f0d523 100644 --- a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_2shot_ft.py +++ b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=300) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_3shot_ft.py b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_3shot_ft.py rename to configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py index 3962c38..d0fbcba 100644 --- a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_3shot_ft.py +++ b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=500) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_5shot_ft.py b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_5shot_ft.py rename to configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py index 289def2..6944614 100644 --- a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_5shot_ft.py +++ b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=800) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_base_training.py b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_base-training.py similarity index 89% rename from configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_base_training.py rename to configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_base-training.py index b2b8518..b268e90 100644 --- a/configs/detection/fsdetview/voc/split2/fsdetview_faster_rcnn_r101_c4_voc_split2_base_training.py +++ b/configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_base-training.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset diff --git a/configs/detection/fsdetview/voc/split2/metafile.yml b/configs/detection/fsdetview/voc/split2/metafile.yml new file mode 100644 index 0000000..5d36d71 --- /dev/null +++ b/configs/detection/fsdetview/voc/split2/metafile.yml @@ -0,0 +1,87 @@ +Collections: + - Name: FSDETVIEW + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Batch Size: 8x4 + Architecture: + - RPN + - ResNet + Paper: https://arxiv.org/abs/2007.12107 + README: configs/detection/fsdetview/README.md + +Models: + - Name: fsdetview_r101_c4_8xb4_voc-split2_base-training + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_base-training.py + Metadata: + Training Data: VOC Split2 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split2_1shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split2_2shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split2_3shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split2_5shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split2_10shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split2/fsdetview_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_10shot_ft.py b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_10shot_ft.py rename to configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py index c51e40b..a927ab4 100644 --- a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_10shot_ft.py +++ b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=1000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_1shot_ft.py b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_1shot_ft.py rename to configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py index daab0fe..390c28d 100644 --- a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_1shot_ft.py +++ b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=100) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_2shot_ft.py b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_2shot_ft.py rename to configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py index 1480138..3b07ea1 100644 --- a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_2shot_ft.py +++ b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=300) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_3shot_ft.py b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_3shot_ft.py rename to configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py index d7cc991..7532c56 100644 --- a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_3shot_ft.py +++ b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=500) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_5shot_ft.py b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py similarity index 84% rename from configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_5shot_ft.py rename to configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py index 08f4939..8c0a4a7 100644 --- a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_5shot_ft.py +++ b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset @@ -26,9 +25,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=800) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'fsdetview_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/fsdetview_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_base_training.py b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_base-training.py similarity index 89% rename from configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_base_training.py rename to configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_base-training.py index 8e7c992..8f5ee57 100644 --- a/configs/detection/fsdetview/voc/split3/fsdetview_faster_rcnn_r101_c4_voc_split3_base_training.py +++ b/configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_base-training.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../fsdetview_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../fsdetview_r101_c4.py', '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset diff --git a/configs/detection/fsdetview/voc/split3/metafile.yml b/configs/detection/fsdetview/voc/split3/metafile.yml new file mode 100644 index 0000000..7cba695 --- /dev/null +++ b/configs/detection/fsdetview/voc/split3/metafile.yml @@ -0,0 +1,87 @@ +Collections: + - Name: FSDETVIEW + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Batch Size: 8x4 + Architecture: + - RPN + - ResNet + Paper: https://arxiv.org/abs/2007.12107 + README: configs/detection/fsdetview/README.md + +Models: + - Name: fsdetview_r101_c4_8xb4_voc-split3_base-training + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_base-training.py + Metadata: + Training Data: VOC Split3 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split3_1shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split3_2shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split3_3shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split3_5shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: fsdetview_r101_c4_8xb4_voc-split3_10shot-fine-tuning + In Collection: FSDETVIEW + Config: configs/detection/fsdetview/voc/split3/fsdetview_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/meta_rcnn/README.md b/configs/detection/meta_rcnn/README.md new file mode 100644 index 0000000..3a0d46c --- /dev/null +++ b/configs/detection/meta_rcnn/README.md @@ -0,0 +1,90 @@ + + +# Meta RCNN (ICCV'2019) + +```bibtex +@inproceedings{yan2019meta, + title={Meta r-cnn: Towards general solver for instance-level low-shot learning}, + author={Yan, Xiaopeng and Chen, Ziliang and Xu, Anni and Wang, Xiaoxi and Liang, Xiaodan and Lin, Liang}, + booktitle={Proceedings of the IEEE International Conference on Computer Vision}, + year={2019} +} +``` +**Note**: ALL the reported results use the data split released from [TFA](https://github.com/ucbdrive/few-shot-object-detection/blob/master/datasets/README.md) official repo. +Currently, each setting is only evaluated with one fixed few shot dataset. +Please refer to [here]() to get more details about the dataset and data preparation. + +## How to reproduce Meta RCNN + +Following the original implementation, it consists of 2 steps: +- **Step1: Base training** + - use all the images and annotations of base classes to train a base model. + +- **Step2: Few shot fine-tuning**: + - use the base model from step1 as model initialization and further fine tune the model with few shot datasets. + + +### An example of VOC split1 1 shot setting with 8 gpus + +```bash +# step1: base training for voc split1 +bash ./tools/detection/dist_train.sh \ + configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_base-training.py 8 + +# step2: few shot fine-tuning +bash ./tools/detection/dist_train.sh \ + configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py 8 +``` + +**Note**: +- The default output path of base model in step1 is set to `work_dirs/{BASE TRAINING CONFIG}/latest.pth`. + When the model is saved to different path, please update the argument `load-from` in step2 few shot fine-tune configs instead + of using `resume_from`. + + +## Results on VOC dataset + +### Base Training + +| Arch | Split | Base AP50 | ckpt | log | +| :------: | :-----------: | :------: | :------: |:------: | +| [r101 c4](/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_base-training.py) | 1 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_base-training.py) | 2 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_base-training.py) | 3 | - | [ckpt]() | [log]() | + +### Few Shot Finetuning + + +| Arch | Split | Shot | Novel AP50 | ckpt | log | +| :--------------: | :-----------: | :------: | :------: |:------: |:------: | +| [r101 c4](/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py) | 1 | 1 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py) | 1 | 2 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py) | 1 | 3 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py) | 1 | 5 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py) | 1 | 10 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py) | 1 | 1 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py) | 1 | 2 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py) | 1 | 3 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py) | 1 | 5 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py) | 1 | 10 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py) | 1 | 1 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py) | 1 | 2 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py) | 1 | 3 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py) | 1 | 5 | - | [ckpt]() | [log]() | +| [r101 c4](/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py) | 1 | 10 | - | [ckpt]() | [log]() | + + +## Results on COCO dataset +### Base Training + +| Arch | Base AP50 | ckpt | log | +| :------: | :-----------: | :------: |:------: | +| [r50 c4](/configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_base-training.py) | - | [ckpt]() | [log]() | + +Few Shot Finetuning + + +| Arch | Shot | Novel AP50 | ckpt | log | +| :--------------: | :-----------: | :------: |:------: |:------: | +| [r50 c4](/configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_10shot-fine-tuning.py) | 10 | - | [ckpt]() | [log]() | +| [r50 c4](/configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_30shot-fine-tuning.py) | 30 | - | [ckpt]() | [log]() | diff --git a/configs/detection/meta_rcnn/coco/meta_rcnn_faster_rcnn_r50_c4_coco_10shot_ft.py b/configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_10shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/coco/meta_rcnn_faster_rcnn_r50_c4_coco_10shot_ft.py rename to configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_10shot-fine-tuning.py index c6434ec..ce583a5 100644 --- a/configs/detection/meta_rcnn/coco/meta_rcnn_faster_rcnn_r50_c4_coco_10shot_ft.py +++ b/configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_10shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ '../../_base_/datasets/nway_kshot/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../meta_rcnn_faster_rcnn_r50_c4.py', + '../../_base_/schedules/schedule.py', '../meta-rcnn_r50_c4.py', '../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -23,9 +23,7 @@ lr_config = dict(warmup=None, step=[5000]) runner = dict(max_iters=5000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r50_c4_coco_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r50_c4_8xb4_coco_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/coco/meta_rcnn_faster_rcnn_r50_c4_coco_30shot_ft.py b/configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_30shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/coco/meta_rcnn_faster_rcnn_r50_c4_coco_30shot_ft.py rename to configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_30shot-fine-tuning.py index d807a29..d8fc3d4 100644 --- a/configs/detection/meta_rcnn/coco/meta_rcnn_faster_rcnn_r50_c4_coco_30shot_ft.py +++ b/configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_30shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ '../../_base_/datasets/nway_kshot/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../meta_rcnn_faster_rcnn_r50_c4.py', + '../../_base_/schedules/schedule.py', '../meta-rcnn_r50_c4.py', '../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -23,9 +23,7 @@ lr_config = dict(warmup=None, step=[8000]) runner = dict(max_iters=8000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r50_c4_coco_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r50_c4_8xb4_coco_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/coco/meta_rcnn_faster_rcnn_r50_c4_coco_base_training.py b/configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_base-training.py similarity index 81% rename from configs/detection/meta_rcnn/coco/meta_rcnn_faster_rcnn_r50_c4_coco_base_training.py rename to configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_base-training.py index b07727a..37f0982 100644 --- a/configs/detection/meta_rcnn/coco/meta_rcnn_faster_rcnn_r50_c4_coco_base_training.py +++ b/configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_base-training.py @@ -1,6 +1,6 @@ _base_ = [ '../../_base_/datasets/nway_kshot/base_coco.py', - '../../_base_/schedules/schedule.py', '../meta_rcnn_faster_rcnn_r50_c4.py', + '../../_base_/schedules/schedule.py', '../meta-rcnn_r50_c4.py', '../../_base_/default_runtime.py' ] lr_config = dict(warmup=None, step=[110000]) diff --git a/configs/detection/meta_rcnn/coco/metafile.yml b/configs/detection/meta_rcnn/coco/metafile.yml new file mode 100644 index 0000000..0d0dc63 --- /dev/null +++ b/configs/detection/meta_rcnn/coco/metafile.yml @@ -0,0 +1,51 @@ +Collections: + - Name: Meta RCNN + Metadata: + Training Data: COCO + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Batch Size: 8x4 + Architecture: + - RPN + - ResNet + Paper: https://arxiv.org/abs/1909.13032 + README: configs/detection/meta_rcnn/README.md + +Models: + - Name: meta-rcnn_r50_c4_8xb4_coco_base-training + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_base-training.py + Metadata: + Training Data: COCO Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + Weights: none + - Name: meta-rcnn_r50_c4_8xb4_coco_10shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_10shot-fine-tuning.py + Metadata: + Training Data: COCO 10shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r50_c4_8xb4_coco_30shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/coco/meta-rcnn_r50_c4_8xb4_coco_30shot-fine-tuning.py + Metadata: + Training Data: COCO 30shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/fsdetview/fsdetview_faster_rcnn_r101_c4.py b/configs/detection/meta_rcnn/meta-rcnn_r101_c4.py similarity index 87% rename from configs/detection/fsdetview/fsdetview_faster_rcnn_r101_c4.py rename to configs/detection/meta_rcnn/meta-rcnn_r101_c4.py index d64bbb5..7d36ea2 100644 --- a/configs/detection/fsdetview/fsdetview_faster_rcnn_r101_c4.py +++ b/configs/detection/meta_rcnn/meta-rcnn_r101_c4.py @@ -1,5 +1,5 @@ _base_ = [ - './fsdetview_faster_rcnn_r50_c4.py', + './meta-rcnn_r50_c4.py', ] pretrained = 'open-mmlab://detectron2/resnet101_caffe' # model settings diff --git a/configs/detection/meta_rcnn/meta_rcnn_faster_rcnn_r50_c4.py b/configs/detection/meta_rcnn/meta-rcnn_r50_c4.py similarity index 100% rename from configs/detection/meta_rcnn/meta_rcnn_faster_rcnn_r50_c4.py rename to configs/detection/meta_rcnn/meta-rcnn_r50_c4.py diff --git a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_10shot_ft.py b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_10shot_ft.py rename to configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py index 66de95b..1a6a016 100644 --- a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_10shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=1000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_1shot_ft.py b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_1shot_ft.py rename to configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py index dde0996..f6654f2 100644 --- a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_1shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=100) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_2shot_ft.py b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_2shot_ft.py rename to configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py index 8484cde..37ef0e3 100644 --- a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_2shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=300) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_3shot_ft.py b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_3shot_ft.py rename to configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py index 2c45dd4..51f89e5 100644 --- a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_3shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=500) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_5shot_ft.py b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_5shot_ft.py rename to configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py index 62be864..9ae8f1d 100644 --- a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_5shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=800) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split1_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split1_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_base_training.py b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_base-training.py similarity index 90% rename from configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_base_training.py rename to configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_base-training.py index 4ce3aa9..b33ebdb 100644 --- a/configs/detection/meta_rcnn/voc/split1/meta_rcnn_faster_rcnn_r101_c4_voc_split1_base_training.py +++ b/configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_base-training.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in diff --git a/configs/detection/meta_rcnn/voc/split1/metafile.yml b/configs/detection/meta_rcnn/voc/split1/metafile.yml new file mode 100644 index 0000000..cd5e846 --- /dev/null +++ b/configs/detection/meta_rcnn/voc/split1/metafile.yml @@ -0,0 +1,87 @@ +Collections: + - Name: Meta RCNN + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Batch Size: 8x4 + Architecture: + - RPN + - ResNet + Paper: https://arxiv.org/abs/2007.12107 + README: configs/detection/meta_rcnn/README.md + +Models: + - Name: meta-rcnn_r101_c4_8xb4_voc-split1_base-training + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_base-training.py + Metadata: + Training Data: VOC Split1 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split1_1shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split1_2shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split1_3shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split1_5shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split1_10shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split1/meta-rcnn_r101_c4_8xb4_voc-split1_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_10shot_ft.py b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_10shot_ft.py rename to configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py index dde7e72..2af6db4 100644 --- a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_10shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=1000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_1shot_ft.py b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_1shot_ft.py rename to configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py index 73d298c..84019b7 100644 --- a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_1shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=100) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_2shot_ft.py b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_2shot_ft.py rename to configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py index 83a9a5c..541d692 100644 --- a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_2shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=300) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_3shot_ft.py b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_3shot_ft.py rename to configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py index aef5004..3061021 100644 --- a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_3shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=500) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_5shot_ft.py b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_5shot_ft.py rename to configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py index 53f61ac..c7fbbea 100644 --- a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_5shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=800) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split2_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split2_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_base_training.py b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_base-training.py similarity index 90% rename from configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_base_training.py rename to configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_base-training.py index 81fdd78..296ac55 100644 --- a/configs/detection/meta_rcnn/voc/split2/meta_rcnn_faster_rcnn_r101_c4_voc_split2_base_training.py +++ b/configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_base-training.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in diff --git a/configs/detection/meta_rcnn/voc/split2/metafile.yml b/configs/detection/meta_rcnn/voc/split2/metafile.yml new file mode 100644 index 0000000..088139d --- /dev/null +++ b/configs/detection/meta_rcnn/voc/split2/metafile.yml @@ -0,0 +1,87 @@ +Collections: + - Name: Meta RCNN + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Batch Size: 8x4 + Architecture: + - RPN + - ResNet + Paper: https://arxiv.org/abs/2007.12107 + README: configs/detection/meta_rcnn/README.md + +Models: + - Name: meta-rcnn_r101_c4_8xb4_voc-split2_base-training + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_base-training.py + Metadata: + Training Data: VOC Split2 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split2_1shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split2_2shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split2_3shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split2_5shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split2_10shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split2/meta-rcnn_r101_c4_8xb4_voc-split2_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_10shot_ft.py b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_10shot_ft.py rename to configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py index 95adc9b..0c75454 100644 --- a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_10shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=1000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_1shot_ft.py b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_1shot_ft.py rename to configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py index 679dd8d..577d649 100644 --- a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_1shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=100) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_2shot_ft.py b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_2shot_ft.py rename to configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py index 425b27c..2cd32a3 100644 --- a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_2shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=300) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_3shot_ft.py b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_3shot_ft.py rename to configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py index a284d0b..6aef602 100644 --- a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_3shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=500) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_5shot_ft.py b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py similarity index 84% rename from configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_5shot_ft.py rename to configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py index 1128ad2..d0b602e 100644 --- a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_5shot_ft.py +++ b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in @@ -27,9 +26,7 @@ lr_config = dict(warmup=None) runner = dict(max_iters=800) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'meta_rcnn_faster_rcnn_r101_c4_voc_split3_base_training/' \ - 'latest.pth' + 'work_dirs/meta_rcnn_r101_c4_8xb4_voc-split3_base-training/latest.pth' # model settings model = dict(frozen_parameters=[ 'backbone', 'shared_head', 'rpn_head', 'aggregation_layer' diff --git a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_base_training.py b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_base-training.py similarity index 90% rename from configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_base_training.py rename to configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_base-training.py index 3bb66db..c3269f3 100644 --- a/configs/detection/meta_rcnn/voc/split3/meta_rcnn_faster_rcnn_r101_c4_voc_split3_base_training.py +++ b/configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_base-training.py @@ -1,7 +1,6 @@ _base_ = [ '../../../_base_/datasets/nway_kshot/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../meta_rcnn_faster_rcnn_r101_c4.py', + '../../../_base_/schedules/schedule.py', '../../meta-rcnn_r101_c4.py', '../../../_base_/default_runtime.py' ] # Predefined ann_cfg, classes and class_splits are defined in diff --git a/configs/detection/meta_rcnn/voc/split3/metafile.yml b/configs/detection/meta_rcnn/voc/split3/metafile.yml new file mode 100644 index 0000000..7b152eb --- /dev/null +++ b/configs/detection/meta_rcnn/voc/split3/metafile.yml @@ -0,0 +1,87 @@ +Collections: + - Name: Meta RCNN + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Batch Size: 8x4 + Architecture: + - RPN + - ResNet + Paper: https://arxiv.org/abs/2007.12107 + README: configs/detection/meta_rcnn/README.md + +Models: + - Name: meta-rcnn_r101_c4_8xb4_voc-split3_base-training + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_base-training.py + Metadata: + Training Data: VOC Split3 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split3_1shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split3_2shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split3_3shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split3_5shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: meta-rcnn_r101_c4_8xb4_voc-split3_10shot-fine-tuning + In Collection: Meta RCNN + Config: configs/detection/meta_rcnn/voc/split3/meta-rcnn_r101_c4_8xb4_voc-split3_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/mpsr/README.md b/configs/detection/mpsr/README.md new file mode 100644 index 0000000..cc895a6 --- /dev/null +++ b/configs/detection/mpsr/README.md @@ -0,0 +1,88 @@ + + +# MPSR (ECCV'2020) + +```bibtex +@inproceedings{wu2020mpsr, + title={Multi-Scale Positive Sample Refinement for Few-Shot Object Detection}, + author={Wu, Jiaxi and Liu, Songtao and Huang, Di and Wang, Yunhong}, + booktitle={European Conference on Computer Vision}, + year={2020} +} +``` +**Note**: ALL the reported results use the data split released from [TFA](https://github.com/ucbdrive/few-shot-object-detection/blob/master/datasets/README.md) official repo. +Currently, each setting is only evaluated with one fixed few shot dataset. +Please refer to [here]() to get more details about the dataset and data preparation. + +## How to reproduce MPSR +Following the original implementation, it consists of 2 steps: +- **Step1: Base training** + - use all the images and annotations of base classes to train a base model. + +- **Step2: Few shot fine-tuning**: + - use the base model from step1 as model initialization and further fine tune the model with few shot datasets. + + +### An example of VOC split1 1 shot setting with 8 gpus + +```bash +# step1: base training for voc split1 +bash ./tools/detection/dist_train.sh \ + configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_base-training.py 8 + +# step2: few shot fine-tuning +bash ./tools/detection/dist_train.sh \ + configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_1shot-fine-tuning.py 8 +``` + +**Note**: +- The default output path of base model in step1 is set to `work_dirs/{BASE TRAINING CONFIG}/latest.pth`. + When the model is saved to different path, please update the argument `load-from` in step2 few shot fine-tune configs instead + of using `resume_from`. + +## Results on VOC dataset + +### Base Training + +| Arch | Split | Base AP50 | ckpt | log | +| :------: | :-----------: | :------: | :------: |:------: | +| [r101 fpn](/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_base-training.py) | 1 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_base-training.py) | 2 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_base-training.py) | 3 | - | [ckpt]() | [log]() | + +### Few Shot Fine-tuning + + +| Arch | Split | Shot | Novel AP50 | ckpt | log | +| :--------------: | :-----------: | :------: | :------: |:------: |:------: | +| [r101 fpn](/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_1shot-fine-tuning.py) | 1 | 1 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_2shot-fine-tuning.py) | 1 | 2 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_3shot-fine-tuning.py) | 1 | 3 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_5shot-fine-tuning.py) | 1 | 5 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_10shot-fine-tuning.py) | 1 | 10 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_1shot-fine-tuning.py) | 2 | 1 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_2shot-fine-tuning.py) | 2 | 2 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_3shot-fine-tuning.py) | 2 | 3 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_5shot-fine-tuning.py) | 2 | 5 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_10shot-fine-tuning.py) | 2 | 10 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_1shot-fine-tuning.py) | 3 | 1 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_2shot-fine-tuning.py) | 3 | 2 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_3shot-fine-tuning.py) | 3 | 3 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_5shot-fine-tuning.py) | 3 | 5 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_10shot-fine-tuning.py) | 3 | 10 | - | [ckpt]() | [log]() | + + +## Results on COCO dataset +### Base Training + +| Arch | Base AP50 | ckpt | log | +| :------: | :-----------: | :------: |:------: | +| [r101 fpn](/configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_base-training.py) | - | [ckpt]() | [log]() | + +### Few Shot Fine-tuning + + +| Arch | Shot | Novel AP50 | ckpt | log | +| :--------------: | :-----------: | :------: |:------: |:------: | +| [r101 fpn](/configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_10shot-fine-tuning.py) | 10 | - | [ckpt]() | [log]() | +| [r101 fpn](/configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_30shot-fine-tuning.py) | 30 | - | [ckpt]() | [log]() | diff --git a/configs/detection/mpsr/coco/metafile.yml b/configs/detection/mpsr/coco/metafile.yml new file mode 100644 index 0000000..7a9ed70 --- /dev/null +++ b/configs/detection/mpsr/coco/metafile.yml @@ -0,0 +1,52 @@ +Collections: + - Name: MPSR + Metadata: + Training Data: COCO + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 2x V100 GPUs + Batch Size: 2x2 + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2007.09384 + README: configs/detection/meta_rcnn/README.md + +Models: + - Name: mpsr_r101_fpn_2xb2_coco_base-training + In Collection: MPSR + Config: configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_base-training.py + Metadata: + Training Data: COCO Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_coco_10shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_10shot-fine-tuning.py + Metadata: + Training Data: COCO 10shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_coco_30shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_30shot-fine-tuning.py + Metadata: + Training Data: COCO 30shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/mpsr/coco/mpsr_faster_rcnn_r101_fpn_coco_10shot_ft.py b/configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_10shot-fine-tuning.py similarity index 85% rename from configs/detection/mpsr/coco/mpsr_faster_rcnn_r101_fpn_coco_10shot_ft.py rename to configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_10shot-fine-tuning.py index 5b15508..c332cbd 100644 --- a/configs/detection/mpsr/coco/mpsr_faster_rcnn_r101_fpn_coco_10shot_ft.py +++ b/configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_10shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ '../../_base_/datasets/two_branch/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../mpsr_faster_rcnn_r101_fpn.py', + '../../_base_/schedules/schedule.py', '../mpsr_r101_fpn.py', '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotCocoDataset @@ -19,9 +19,7 @@ lr_config = dict(warmup_iters=500, warmup_ratio=1. / 3, step=[2800, 3500]) runner = dict(max_iters=4000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_coco_base_training/' \ - 'latest.pth' + 'work_dirs/mpsr_r101_fpn_2xb2_coco_base-training/latest.pth' model = dict( roi_head=dict( bbox_head=dict( diff --git a/configs/detection/mpsr/coco/mpsr_faster_rcnn_r101_fpn_coco_30shot_ft.py b/configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_30shot-fine-tuning.py similarity index 85% rename from configs/detection/mpsr/coco/mpsr_faster_rcnn_r101_fpn_coco_30shot_ft.py rename to configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_30shot-fine-tuning.py index f9d1def..b65fd4e 100644 --- a/configs/detection/mpsr/coco/mpsr_faster_rcnn_r101_fpn_coco_30shot_ft.py +++ b/configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_30shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ '../../_base_/datasets/two_branch/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../mpsr_faster_rcnn_r101_fpn.py', + '../../_base_/schedules/schedule.py', '../mpsr_r101_fpn.py', '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotCocoDataset @@ -19,9 +19,7 @@ lr_config = dict(warmup_iters=500, warmup_ratio=1. / 3, step=[2800, 3500]) runner = dict(max_iters=4000) # load_from = 'path of base training model' load_from = \ - 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_coco_base_training/' \ - 'latest.pth' + 'work_dirs/mpsr_r101_fpn_2xb2_coco_base-training/latest.pth' model = dict( roi_head=dict( bbox_head=dict( diff --git a/configs/detection/mpsr/coco/mpsr_faster_rcnn_r101_fpn_coco_base_training.py b/configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_base-training.py similarity index 83% rename from configs/detection/mpsr/coco/mpsr_faster_rcnn_r101_fpn_coco_base_training.py rename to configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_base-training.py index 5747caa..9447106 100644 --- a/configs/detection/mpsr/coco/mpsr_faster_rcnn_r101_fpn_coco_base_training.py +++ b/configs/detection/mpsr/coco/mpsr_r101_fpn_2xb2_coco_base-training.py @@ -1,6 +1,6 @@ _base_ = [ '../../_base_/datasets/two_branch/base_coco.py', - '../../_base_/schedules/schedule.py', '../mpsr_faster_rcnn_r101_fpn.py', + '../../_base_/schedules/schedule.py', '../mpsr_r101_fpn.py', '../../_base_/default_runtime.py' ] evaluation = dict(interval=20000) diff --git a/configs/detection/mpsr/mpsr_faster_rcnn_r101_fpn.py b/configs/detection/mpsr/mpsr_r101_fpn.py similarity index 100% rename from configs/detection/mpsr/mpsr_faster_rcnn_r101_fpn.py rename to configs/detection/mpsr/mpsr_r101_fpn.py diff --git a/configs/detection/mpsr/voc/split1/metafile.yml b/configs/detection/mpsr/voc/split1/metafile.yml new file mode 100644 index 0000000..13e1462 --- /dev/null +++ b/configs/detection/mpsr/voc/split1/metafile.yml @@ -0,0 +1,88 @@ +Collections: + - Name: MPSR + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 2x V100 GPUs + Batch Size: 2x2 + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2007.09384 + README: configs/detection/mpsr/README.md + +Models: + - Name: mpsr_r101_fpn_2xb2_voc-split1_base-training + In Collection: MPSR + Config: configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_base-training.py + Metadata: + Training Data: VOC Split1 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split1_1shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split1_2shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split1_3shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split1_5shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split1_10shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_10shot-fine-tuning.py similarity index 75% rename from configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py rename to configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_10shot-fine-tuning.py index 27299e2..7aa14f4 100644 --- a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py +++ b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_10shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,14 +21,18 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split1_base-training/' \ + 'mpsr_voc_base_split1.pth' model = dict( roi_head=dict( bbox_head=dict(init_cfg=[ diff --git a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_1shot-fine-tuning.py similarity index 71% rename from configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py rename to configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_1shot-fine-tuning.py index 8c77feb..2255b24 100644 --- a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py +++ b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_1shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -18,18 +17,22 @@ data = dict( test=dict(classes='ALL_CLASSES_SPLIT1')) evaluation = dict( interval=500, class_splits=['BASE_CLASSES_SPLIT1', 'NOVEL_CLASSES_SPLIT1']) -checkpoint_config = dict(interval=1000) +checkpoint_config = dict(interval=2000) optimizer = dict( - lr=0.004, + lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[2000]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split1_base-training/' \ + 'mpsr_voc_base_split1.pth' model = dict( roi_head=dict( bbox_head=dict(init_cfg=[ diff --git a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_2shot-fine-tuning.py similarity index 73% rename from configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py rename to configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_2shot-fine-tuning.py index a467064..839631a 100644 --- a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py +++ b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_2shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,15 +21,20 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split1_base-training/' \ + 'mpsr_voc_base_split1.pth' model = dict( + frozen_parameters=['backbone'], roi_head=dict( bbox_head=dict(init_cfg=[ dict( diff --git a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_3shot-fine-tuning.py similarity index 73% rename from configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py rename to configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_3shot-fine-tuning.py index 3494cf4..14124b7 100644 --- a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py +++ b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_3shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,15 +21,20 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split1_base-training/' \ + 'mpsr_voc_base_split1.pth' model = dict( + frozen_parameters=['backbone'], roi_head=dict( bbox_head=dict(init_cfg=[ dict( diff --git a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_5shot-fine-tuning.py similarity index 74% rename from configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py rename to configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_5shot-fine-tuning.py index de7e110..03c97d4 100644 --- a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py +++ b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_5shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,14 +21,18 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split1_base-training/' \ + 'mpsr_voc_base_split1.pth' model = dict( roi_head=dict( bbox_head=dict(init_cfg=[ diff --git a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_base_training.py b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_base-training.py similarity index 55% rename from configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_base_training.py rename to configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_base-training.py index 2f359a9..0aa169a 100644 --- a/configs/detection/mpsr/voc/split1/mpsr_faster_rcnn_r101_fpn_voc_split1_base_training.py +++ b/configs/detection/mpsr/voc/split1/mpsr_r101_fpn_2xb2_voc-split1_base-training.py @@ -1,7 +1,7 @@ _base_ = [ '../../../_base_/datasets/two_branch/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset data = dict( @@ -11,12 +11,6 @@ data = dict( evaluation = dict(interval=9000, class_splits=['BASE_CLASSES_SPLIT1']) checkpoint_config = dict(interval=3000) lr_config = dict(warmup_iters=500, step=[24000, 32000]) -optimizer = dict( - lr=0.005, - paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) +optimizer = dict(lr=0.005) runner = dict(max_iters=36000) -model = dict( - roi_head=dict( - bbox_head=dict(num_classes=15), - bbox_roi_extractor=dict(roi_layer=dict(aligned=False)))) +model = dict(roi_head=dict(bbox_head=dict(num_classes=15))) diff --git a/configs/detection/mpsr/voc/split2/metafile.yml b/configs/detection/mpsr/voc/split2/metafile.yml new file mode 100644 index 0000000..da11a81 --- /dev/null +++ b/configs/detection/mpsr/voc/split2/metafile.yml @@ -0,0 +1,88 @@ +Collections: + - Name: MPSR + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 2x V100 GPUs + Batch Size: 2x2 + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2007.09384 + README: configs/detection/mpsr/README.md + +Models: + - Name: mpsr_r101_fpn_2xb2_voc-split2_base-training + In Collection: MPSR + Config: configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_base-training.py + Metadata: + Training Data: VOC Split2 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split2_1shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split2_2shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split2_3shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split2_5shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split2_10shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_10shot-fine-tuning.py similarity index 75% rename from configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py rename to configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_10shot-fine-tuning.py index eaa8114..90c1165 100644 --- a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py +++ b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -22,14 +22,18 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split2_base-training/' \ + 'mpsr_voc_base_split2.pth' model = dict( roi_head=dict( bbox_head=dict(init_cfg=[ diff --git a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_1shot-fine-tuning.py similarity index 73% rename from configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py rename to configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_1shot-fine-tuning.py index f0d79d3..915793b 100644 --- a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py +++ b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_1shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,15 +21,20 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split2_base-training/' \ + 'mpsr_voc_base_split2.pth' model = dict( + frozen_parameters=['backbone'], roi_head=dict( bbox_head=dict(init_cfg=[ dict( diff --git a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_2shot-fine-tuning.py similarity index 73% rename from configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py rename to configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_2shot-fine-tuning.py index 71dbcab..d2049d6 100644 --- a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py +++ b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_2shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,15 +21,20 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split2_base-training/' \ + 'mpsr_voc_base_split2.pth' model = dict( + frozen_parameters=['backbone'], roi_head=dict( bbox_head=dict(init_cfg=[ dict( diff --git a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_3shot-fine-tuning.py similarity index 73% rename from configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py rename to configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_3shot-fine-tuning.py index 7702301..a5b70e0 100644 --- a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py +++ b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_3shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,15 +21,20 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split2_base-training/' \ + 'mpsr_voc_base_split2.pth' model = dict( + frozen_parameters=['backbone'], roi_head=dict( bbox_head=dict(init_cfg=[ dict( diff --git a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_5shot-fine-tuning.py similarity index 74% rename from configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py rename to configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_5shot-fine-tuning.py index 951fba4..55c65d7 100644 --- a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py +++ b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_5shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,14 +21,18 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split2_base-training/' \ + 'mpsr_voc_base_split2.pth' model = dict( roi_head=dict( bbox_head=dict(init_cfg=[ diff --git a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_base_training.py b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_base-training.py similarity index 68% rename from configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_base_training.py rename to configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_base-training.py index c188e49..8978a04 100644 --- a/configs/detection/mpsr/voc/split2/mpsr_faster_rcnn_r101_fpn_voc_split2_base_training.py +++ b/configs/detection/mpsr/voc/split2/mpsr_r101_fpn_2xb2_voc-split2_base-training.py @@ -1,7 +1,7 @@ _base_ = [ '../../../_base_/datasets/two_branch/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset data = dict( @@ -10,10 +10,7 @@ data = dict( test=dict(classes='BASE_CLASSES_SPLIT2')) evaluation = dict(interval=9000, class_splits=['BASE_CLASSES_SPLIT2']) checkpoint_config = dict(interval=3000) -optimizer = dict( - lr=0.005, - paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) lr_config = dict(warmup_iters=500, step=[24000, 32000]) +optimizer = dict(lr=0.005) runner = dict(max_iters=36000) model = dict(roi_head=dict(bbox_head=dict(num_classes=15))) diff --git a/configs/detection/mpsr/voc/split3/metafile.yml b/configs/detection/mpsr/voc/split3/metafile.yml new file mode 100644 index 0000000..257b783 --- /dev/null +++ b/configs/detection/mpsr/voc/split3/metafile.yml @@ -0,0 +1,88 @@ +Collections: + - Name: MPSR + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 2x V100 GPUs + Batch Size: 2x2 + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2007.09384 + README: configs/detection/mpsr/README.md + +Models: + - Name: mpsr_r101_fpn_2xb2_voc-split3_base-training + In Collection: MPSR + Config: configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_base-training.py + Metadata: + Training Data: VOC Split3 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split3_1shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split3_2shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split3_3shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split3_5shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: mpsr_r101_fpn_2xb2_voc-split3_10shot-fine-tuning + In Collection: MPSR + Config: configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_10shot-fine-tuning.py similarity index 75% rename from configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py rename to configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_10shot-fine-tuning.py index 48f9e36..90f84f6 100644 --- a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py +++ b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_10shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,14 +21,18 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split3_base-training/' \ + 'mpsr_voc_base_split3.pth' model = dict( roi_head=dict( bbox_head=dict(init_cfg=[ diff --git a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_1shot-fine-tuning.py similarity index 73% rename from configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py rename to configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_1shot-fine-tuning.py index 6f295bb..57b3a89 100644 --- a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py +++ b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_1shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,15 +21,20 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split3_base-training/' \ + 'mpsr_voc_base_split3.pth' model = dict( + frozen_parameters=['backbone'], roi_head=dict( bbox_head=dict(init_cfg=[ dict( diff --git a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_2shot-fine-tuning.py similarity index 73% rename from configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py rename to configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_2shot-fine-tuning.py index ef041e6..feec559 100644 --- a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py +++ b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_2shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,15 +21,20 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split3_base-training/' \ + 'mpsr_voc_base_split3.pth' model = dict( + frozen_parameters=['backbone'], roi_head=dict( bbox_head=dict(init_cfg=[ dict( diff --git a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_3shot-fine-tuning.py similarity index 73% rename from configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py rename to configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_3shot-fine-tuning.py index ebd3c22..2795b2d 100644 --- a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py +++ b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_3shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,15 +21,20 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split3_base-training/' \ + 'mpsr_voc_base_split3.pth' model = dict( + frozen_parameters=['backbone'], roi_head=dict( bbox_head=dict(init_cfg=[ dict( diff --git a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_5shot-fine-tuning.py similarity index 74% rename from configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py rename to configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_5shot-fine-tuning.py index c93f419..ba7e3aa 100644 --- a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py +++ b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_5shot-fine-tuning.py @@ -1,12 +1,11 @@ _base_ = [ '../../../_base_/datasets/two_branch/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. data = dict( - save_dataset=True, train=dict( dataset=dict( type='FewShotVOCDefaultDataset', @@ -22,14 +21,18 @@ checkpoint_config = dict(interval=2000) optimizer = dict( lr=0.005, paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) -lr_config = dict(warmup_iters=500, step=[1300, 1700]) + custom_keys=dict({'.bias': dict(lr_mult=2.0, decay_mult=0.0)}))) +lr_config = dict( + warmup_iters=500, + warmup_ratio=1. / 3, + step=[1300], +) runner = dict(max_iters=2000) # load_from = 'path of base training model' load_from = \ 'work_dirs/' \ - 'mpsr_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'latest.pth' + 'mpsr_r101_fpn_2xb2_voc-split3_base-training/' \ + 'mpsr_voc_base_split3.pth' model = dict( roi_head=dict( bbox_head=dict(init_cfg=[ diff --git a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_base_training.py b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_base-training.py similarity index 68% rename from configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_base_training.py rename to configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_base-training.py index f7461eb..3bbf2cf 100644 --- a/configs/detection/mpsr/voc/split3/mpsr_faster_rcnn_r101_fpn_voc_split3_base_training.py +++ b/configs/detection/mpsr/voc/split3/mpsr_r101_fpn_2xb2_voc-split3_base-training.py @@ -1,7 +1,7 @@ _base_ = [ '../../../_base_/datasets/two_branch/base_voc.py', - '../../../_base_/schedules/schedule.py', - '../../mpsr_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/schedules/schedule.py', '../../mpsr_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset data = dict( @@ -10,10 +10,7 @@ data = dict( test=dict(classes='BASE_CLASSES_SPLIT3')) evaluation = dict(interval=9000, class_splits=['BASE_CLASSES_SPLIT3']) checkpoint_config = dict(interval=3000) -optimizer = dict( - lr=0.005, - paramwise_cfg=dict( - custom_keys={'.bias': dict(lr_mult=2.0, decay_mult=0.0)})) lr_config = dict(warmup_iters=500, step=[24000, 32000]) +optimizer = dict(lr=0.005) runner = dict(max_iters=36000) model = dict(roi_head=dict(bbox_head=dict(num_classes=15))) diff --git a/configs/detection/tfa/README.md b/configs/detection/tfa/README.md new file mode 100644 index 0000000..99d1ae9 --- /dev/null +++ b/configs/detection/tfa/README.md @@ -0,0 +1,116 @@ + + +# TFA (ICML'2020) + +```bibtex +@inproceedings{wang2020few, + title={Frustratingly Simple Few-Shot Object Detection}, + author={Wang, Xin and Huang, Thomas E. and Darrell, Trevor and Gonzalez, Joseph E and Yu, Fisher} + booktitle={International Conference on Machine Learning (ICML)}, + year={2020} +} +``` + +**Note**: ALL the reported results use the data split released from [TFA](https://github.com/ucbdrive/few-shot-object-detection/blob/master/datasets/README.md) official repo. +Currently, each setting is only evaluated with one fixed few shot dataset. +Please refer to [here]() to get more details about the dataset and data preparation. + + +## How to reproduce TFA + + +Following the original implementation, it consists of 3 steps: +- **Step1: Base training** + - use all the images and annotations of base classes to train a base model. + +- **Step2: Reshape the bbox head of base model**: + - create a new bbox head for all classes fine-tuning (base classes + novel classes) + - the weights of base class in new bbox head directly use the original one as initialization. + - the weights of novel class in new bbox head use random initialization. + +- **Step3: Few shot fine-tuning**: + - use the base model from step2 as model initialization and further fine tune the bbox head with few shot datasets. + + +### An example of VOC split1 1 shot setting with 8 gpus + +```bash +# step1: base training for voc split1 +bash ./tools/detection/dist_train.sh \ + configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_base-training.py 8 + +# step2: reshape the bbox head of base model for few shot fine-tuning +python -m tools.detection.misc.initialize_bbox_head \ + --src1 work_dirs/tfa_r101_fpn_voc-split1_base-training/latest.pth \ + --method randinit \ + --save-dir work_dirs/tfa_r101_fpn_voc-split1_base-training + +# step3: few shot fine-tuning +bash ./tools/detection/dist_train.sh \ + configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_1shot-fine-tuning.py 8 +``` + +**Note**: +- The default output path of the reshaped base model in step2 is set to `work_dirs/{BASE TRAINING CONFIG}/base_model_random_init_bbox_head.pth`. + When the model is saved to different path, please update the argument `load-from` in step3 few shot fine-tune configs instead + of using `resume_from`. + + + +## Results on VOC dataset + +### Base Training + +| Arch | Split | Base AP50 | ckpt(step1) | ckpt(step2) | log | +| :------: | :-----------: | :------: | :------: | :------: |:------: | +| [r101_fpn](/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_base-training.py) | 1 | - | [ckpt]() | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_base-training.py) | 2 | - | [ckpt]() | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_base-training.py) | 3 | - | [ckpt]() | [ckpt]() | [log]() | + +**Note**: +- The performance of the same few shot setting using different base training models can be dramatically unstable + (AP50 can fluctuate by 5.0 or more), even their mAP on base classes are very close. +- Temporally, the solution to getting a good base model is training the base model with different random seed. + Also, the random seed used in this code base may not the optimal one, and it is possible to get the higher results by using + other random seeds. + However, using the same random seed still can not guarantee the identical result each time. + +- To reproduce the reported few shot results, it is highly recommended using the released step2 model for few shot fine-tuning. + We will continue to investigate and improve it. + + +### Few Shot Fine-tuning + +| Arch | Split | Shot | Base AP50 | Novel AP50 | ckpt | log | +| :--------------: | :-----------: | :------: | :------: | :------: |:------: |:------: | +| [r101_fpn](/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_1shot-fine-tuning.py) | 1 | 1 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_2shot-fine-tuning.py) | 1 | 2 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_3shot-fine-tuning.py) | 1 | 3 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_5shot-fine-tuning.py) | 1 | 5 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_10shot-fine-tuning.py) | 1 | 10| - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_1shot-fine-tuning.py) | 2 | 1 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_2shot-fine-tuning.py) | 2 | 2 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_3shot-fine-tuning.py) | 2 | 3 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_5shot-fine-tuning.py) | 2 | 5 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_10shot-fine-tuning.py) | 2 | 10| - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_1shot-fine-tuning.py) | 3 | 1 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_2shot-fine-tuning.py) | 3 | 2 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_3shot-fine-tuning.py) | 3 | 3 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_5shot-fine-tuning.py) | 3 | 5 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_10shot-fine-tuning.py) | 3 | 10| - | - | [ckpt]() | [log]() | + + +## Results on COCO dataset + +### Base Training + +| Arch | Base AP50 | ckpt | log | +| :------: | :-----------: | :------: |:------: | +| [r101_fpn](/configs/detection/tfa/coco/tfa_r101_fpn_coco_base-training.py) | - | - | [ckpt]() | [log]() | + +### Few Shot Fine-tuning + +| Arch | Shot | Base mAP | Novel mAP | ckpt | log | +| :--------------: | :-----------: | :------: | :------: |:------: |:------: | +| [r101_fpn](/configs/detection/tfa/coco/tfa_r101_fpn_coco_10shot-fine-tuning.py) | 10 | - | - | [ckpt]() | [log]() | +| [r101_fpn](/configs/detection/tfa/coco/tfa_r101_fpn_coco_30shot-fine-tuning.py) | 30 | - | - | [ckpt]() | [log]() | diff --git a/configs/detection/tfa/coco/metafile.yml b/configs/detection/tfa/coco/metafile.yml new file mode 100644 index 0000000..753547d --- /dev/null +++ b/configs/detection/tfa/coco/metafile.yml @@ -0,0 +1,51 @@ +Collections: + - Name: TFA + Metadata: + Training Data: COCO + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2003.06957 + README: configs/detection/tfa/README.md + +Models: + - Name: tfa_r101_fpn_coco_base-training + In Collection: TFA + Config: configs/detection/tfa/coco/tfa_r101_fpn_coco_base-training.py + Metadata: + Training Data: COCO Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + Weights: none + - Name: tfa_r101_fpn_coco_10shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/coco/tfa_r101_fpn_coco_10shot-fine-tuning.py + Metadata: + Training Data: COCO 10shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_coco_30shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/coco/tfa_r101_fpn_coco_30shot-fine-tuning.py + Metadata: + Training Data: COCO 30shot + Results: + - Task: Few Shot Object Detection + Dataset: COCO + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/tfa/coco/tfa_faster_rcnn_r101_fpn_coco_10shot_ft.py b/configs/detection/tfa/coco/tfa_r101_fpn_coco_10shot-fine-tuning.py similarity index 59% rename from configs/detection/tfa/coco/tfa_faster_rcnn_r101_fpn_coco_10shot_ft.py rename to configs/detection/tfa/coco/tfa_r101_fpn_coco_10shot-fine-tuning.py index 2c8692f..f592188 100644 --- a/configs/detection/tfa/coco/tfa_faster_rcnn_r101_fpn_coco_10shot_ft.py +++ b/configs/detection/tfa/coco/tfa_r101_fpn_coco_10shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ - '../../_base_/datasets/finetune_based/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../tfa_faster_rcnn_r101_fpn.py', + '../../_base_/datasets/fine_tune_based/few_shot_coco.py', + '../../_base_/schedules/schedule.py', '../tfa_r101_fpn.py', '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotCocoDataset @@ -16,9 +16,9 @@ checkpoint_config = dict(interval=80000) optimizer = dict(lr=0.001) lr_config = dict(warmup_iters=10, step=[144000]) runner = dict(max_iters=160000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_coco_base_training/' \ - 'model_reset_randinit.pth' model = dict(roi_head=dict(bbox_head=dict(num_classes=80))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_coco_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/coco/tfa_faster_rcnn_r101_fpn_coco_30shot_ft.py b/configs/detection/tfa/coco/tfa_r101_fpn_coco_30shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/coco/tfa_faster_rcnn_r101_fpn_coco_30shot_ft.py rename to configs/detection/tfa/coco/tfa_r101_fpn_coco_30shot-fine-tuning.py index 9937590..b789637 100644 --- a/configs/detection/tfa/coco/tfa_faster_rcnn_r101_fpn_coco_30shot_ft.py +++ b/configs/detection/tfa/coco/tfa_r101_fpn_coco_30shot-fine-tuning.py @@ -1,6 +1,6 @@ _base_ = [ - '../../_base_/datasets/finetune_based/few_shot_coco.py', - '../../_base_/schedules/schedule.py', '../tfa_faster_rcnn_r101_fpn.py', + '../../_base_/datasets/fine_tune_based/few_shot_coco.py', + '../../_base_/schedules/schedule.py', '../tfa_r101_fpn.py', '../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotCocoDataset @@ -19,9 +19,9 @@ lr_config = dict( 216000, ]) runner = dict(max_iters=240000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_coco_base_training/' \ - 'model_reset_randinit.pth' model = dict(roi_head=dict(bbox_head=dict(num_classes=80))) +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_coco_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/coco/tfa_faster_rcnn_r101_fpn_coco_base_training.py b/configs/detection/tfa/coco/tfa_r101_fpn_coco_base-training.py similarity index 87% rename from configs/detection/tfa/coco/tfa_faster_rcnn_r101_fpn_coco_base_training.py rename to configs/detection/tfa/coco/tfa_r101_fpn_coco_base-training.py index 247d2f0..f93e463 100644 --- a/configs/detection/tfa/coco/tfa_faster_rcnn_r101_fpn_coco_base_training.py +++ b/configs/detection/tfa/coco/tfa_r101_fpn_coco_base-training.py @@ -1,5 +1,5 @@ _base_ = [ - '../../_base_/datasets/finetune_based/base_coco.py', + '../../_base_/datasets/fine_tune_based/base_coco.py', '../../_base_/schedules/schedule.py', '../../_base_/models/faster_rcnn_r50_caffe_fpn.py', '../../_base_/default_runtime.py' diff --git a/configs/detection/tfa/tfa_faster_rcnn_r101_fpn.py b/configs/detection/tfa/tfa_r101_fpn.py similarity index 100% rename from configs/detection/tfa/tfa_faster_rcnn_r101_fpn.py rename to configs/detection/tfa/tfa_r101_fpn.py diff --git a/configs/detection/tfa/voc/split1/metafile.yml b/configs/detection/tfa/voc/split1/metafile.yml new file mode 100644 index 0000000..1ff1ec9 --- /dev/null +++ b/configs/detection/tfa/voc/split1/metafile.yml @@ -0,0 +1,87 @@ +Collections: + - Name: TFA + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2003.06957 + README: configs/detection/tfa/README.md + +Models: + - Name: tfa_r101_fpn_voc-split1_base-training + In Collection: TFA + Config: configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_base-training.py + Metadata: + Training Data: VOC Split1 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split1_1shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split1_2shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split1_3shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split1_5shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split1_10shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split1 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_10shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py rename to configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_10shot-fine-tuning.py index 45bf77e..d6ee683 100644 --- a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_10shot_ft.py +++ b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 36000, ]) runner = dict(max_iters=40000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_1shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py rename to configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_1shot-fine-tuning.py index 0fe8659..44f6300 100644 --- a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_1shot_ft.py +++ b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_1shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 3000, ]) runner = dict(max_iters=4000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_2shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py rename to configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_2shot-fine-tuning.py index 117fc60..f2803e4 100644 --- a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_2shot_ft.py +++ b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_2shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 7000, ]) runner = dict(max_iters=8000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_3shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py rename to configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_3shot-fine-tuning.py index 00c975f..6f62a32 100644 --- a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_3shot_ft.py +++ b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_3shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 11000, ]) runner = dict(max_iters=12000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_5shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py rename to configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_5shot-fine-tuning.py index 00c2028..ede93f9 100644 --- a/configs/detection/tfa/voc/split1/tfa_faster_rcnn_r101_fpn_voc_split1_5shot_ft.py +++ b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_5shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 18000, ]) runner = dict(max_iters=20000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split1_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split1_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_base_training.py b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_base-training.py similarity index 81% rename from configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_base_training.py rename to configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_base-training.py index 2be779a..6beaa6e 100644 --- a/configs/detection/fsce/voc/split1/fsce_faster_rcnn_r101_fpn_voc_split1_base_training.py +++ b/configs/detection/tfa/voc/split1/tfa_r101_fpn_voc-split1_base-training.py @@ -1,5 +1,5 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/base_voc.py', + '../../../_base_/datasets/fine_tune_based/base_voc.py', '../../../_base_/schedules/schedule.py', '../../../_base_/models/faster_rcnn_r50_caffe_fpn.py', '../../../_base_/default_runtime.py' @@ -16,3 +16,5 @@ model = dict( pretrained='open-mmlab://detectron2/resnet101_caffe', backbone=dict(depth=101), roi_head=dict(bbox_head=dict(num_classes=15))) +# using regular sampler can get a better base model +use_infinite_sampler = False diff --git a/configs/detection/tfa/voc/split2/metafile.yml b/configs/detection/tfa/voc/split2/metafile.yml new file mode 100644 index 0000000..26fdb82 --- /dev/null +++ b/configs/detection/tfa/voc/split2/metafile.yml @@ -0,0 +1,87 @@ +Collections: + - Name: TFA + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2003.06957 + README: configs/detection/tfa/README.md + +Models: + - Name: tfa_r101_fpn_voc-split2_base-training + In Collection: TFA + Config: configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_base-training.py + Metadata: + Training Data: VOC Split2 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split2_1shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split2_2shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split2_3shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split2_5shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split2_10shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split2 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split2 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_10shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py rename to configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_10shot-fine-tuning.py index dd86b42..0af5ae7 100644 --- a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_10shot_ft.py +++ b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 36000, ]) runner = dict(max_iters=40000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_1shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py rename to configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_1shot-fine-tuning.py index d67e2fe..b7c59d7 100644 --- a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_1shot_ft.py +++ b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_1shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 3000, ]) runner = dict(max_iters=4000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_2shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py rename to configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_2shot-fine-tuning.py index d6741d9..fb738f2 100644 --- a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_2shot_ft.py +++ b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_2shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 7000, ]) runner = dict(max_iters=8000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_3shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py rename to configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_3shot-fine-tuning.py index 8cb20b6..cc756e6 100644 --- a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_3shot_ft.py +++ b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_3shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 11000, ]) runner = dict(max_iters=12000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_5shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py rename to configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_5shot-fine-tuning.py index 07e50e3..95f4492 100644 --- a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_5shot_ft.py +++ b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_5shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 18000, ]) runner = dict(max_iters=20000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split2_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split2_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_base_training.py b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_base-training.py similarity index 81% rename from configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_base_training.py rename to configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_base-training.py index 1671751..228f401 100644 --- a/configs/detection/tfa/voc/split2/tfa_faster_rcnn_r101_fpn_voc_split2_base_training.py +++ b/configs/detection/tfa/voc/split2/tfa_r101_fpn_voc-split2_base-training.py @@ -1,5 +1,5 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/base_voc.py', + '../../../_base_/datasets/fine_tune_based/base_voc.py', '../../../_base_/schedules/schedule.py', '../../../_base_/models/faster_rcnn_r50_caffe_fpn.py', '../../../_base_/default_runtime.py' @@ -14,6 +14,7 @@ runner = dict(max_iters=18000) # model settings model = dict( pretrained='open-mmlab://detectron2/resnet101_caffe', - backbone=dict(depth=101, ), + backbone=dict(depth=101), roi_head=dict(bbox_head=dict(num_classes=15))) +# using regular sampler can get a better base model use_infinite_sampler = False diff --git a/configs/detection/tfa/voc/split3/metafile.yml b/configs/detection/tfa/voc/split3/metafile.yml new file mode 100644 index 0000000..8d6ea00 --- /dev/null +++ b/configs/detection/tfa/voc/split3/metafile.yml @@ -0,0 +1,87 @@ +Collections: + - Name: TFA + Metadata: + Training Data: VOC + Training Techniques: + - SGD with Momentum + - Weight Decay + Training Resources: 8x V100 GPUs + Architecture: + - RPN + - FPN + - ResNet + Paper: https://arxiv.org/abs/2003.06957 + README: configs/detection/tfa/README.md + +Models: + - Name: tfa_r101_fpn_voc-split3_base-training + In Collection: TFA + Config: configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_base-training.py + Metadata: + Training Data: VOC Split3 Base Classes + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split1 + Metrics: + base box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split3_1shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_1shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 1shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split3_2shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_2shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 2shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split3_3shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_3shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 3shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split3_5shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_5shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 5shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none + - Name: tfa_r101_fpn_voc-split3_10shot-fine-tuning + In Collection: TFA + Config: configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_10shot-fine-tuning.py + Metadata: + Training Data: VOC Split3 10shot + Results: + - Task: Few Shot Object Detection + Dataset: VOC Split3 + Metrics: + base box AP: none + novel box AP: none + Weights: none diff --git a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_10shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py rename to configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_10shot-fine-tuning.py index 9426ab0..e4e2341 100644 --- a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_10shot_ft.py +++ b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_10shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 36000, ]) runner = dict(max_iters=40000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_1shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py rename to configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_1shot-fine-tuning.py index 1c4c75d..d2f9a41 100644 --- a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_1shot_ft.py +++ b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_1shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 3000, ]) runner = dict(max_iters=4000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_2shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py rename to configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_2shot-fine-tuning.py index 8fecfa9..383f20a 100644 --- a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_2shot_ft.py +++ b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_2shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 7000, ]) runner = dict(max_iters=8000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_3shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py rename to configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_3shot-fine-tuning.py index 40594b7..a239633 100644 --- a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_3shot_ft.py +++ b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_3shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 11000, ]) runner = dict(max_iters=12000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_5shot-fine-tuning.py similarity index 60% rename from configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py rename to configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_5shot-fine-tuning.py index 85bddc0..05394e9 100644 --- a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_5shot_ft.py +++ b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_5shot-fine-tuning.py @@ -1,7 +1,7 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/few_shot_voc.py', - '../../../_base_/schedules/schedule.py', - '../../tfa_faster_rcnn_r101_fpn.py', '../../../_base_/default_runtime.py' + '../../../_base_/datasets/fine_tune_based/few_shot_voc.py', + '../../../_base_/schedules/schedule.py', '../../tfa_r101_fpn.py', + '../../../_base_/default_runtime.py' ] # classes splits are predefined in FewShotVOCDataset # FewShotVOCDefaultDataset predefine ann_cfg for model reproducibility. @@ -24,8 +24,8 @@ lr_config = dict( 18000, ]) runner = dict(max_iters=20000) -# load_from = 'path of base training model' -load_from = \ - 'work_dirs/' \ - 'tfa_faster_rcnn_r101_fpn_voc_split3_base_training/' \ - 'model_reset_randinit.pth' +# base model needs to be initialized with following script: +# tools/detection/misc/initialize_bbox_head.py +# please refer to configs/detection/tfa/README.md for more details. +load_from = ('work_dirs/tfa_r101_fpn_voc-split3_base-training/' + 'base_model_random_init_bbox_head.pth') diff --git a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_base_training.py b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_base-training.py similarity index 77% rename from configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_base_training.py rename to configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_base-training.py index da2aaf2..7372491 100644 --- a/configs/detection/tfa/voc/split3/tfa_faster_rcnn_r101_fpn_voc_split3_base_training.py +++ b/configs/detection/tfa/voc/split3/tfa_r101_fpn_voc-split3_base-training.py @@ -1,5 +1,5 @@ _base_ = [ - '../../../_base_/datasets/finetune_based/base_voc.py', + '../../../_base_/datasets/fine_tune_based/base_voc.py', '../../../_base_/schedules/schedule.py', '../../../_base_/models/faster_rcnn_r50_caffe_fpn.py', '../../../_base_/default_runtime.py' @@ -14,8 +14,7 @@ runner = dict(max_iters=18000) # model settings model = dict( pretrained='open-mmlab://detectron2/resnet101_caffe', - backbone=dict(depth=101, ), + backbone=dict(depth=101), roi_head=dict(bbox_head=dict(num_classes=15))) -# base training use normal sampler get better performance in fine-tuning +# using regular sampler can get a better base model use_infinite_sampler = False -seed = 1234567 diff --git a/mmfewshot/__init__.py b/mmfewshot/__init__.py index 608371a..2ed910d 100644 --- a/mmfewshot/__init__.py +++ b/mmfewshot/__init__.py @@ -32,7 +32,7 @@ assert (digit_version(mmcv_minimum_version) <= mmcv_version f'Please install mmcv>={mmcv_minimum_version}, <={mmcv_maximum_version}.' mmdet_minimum_version = '2.16.0' -mmdet_maximum_version = '2.16.0' +mmdet_maximum_version = '2.20.0' mmdet_version = digit_version(mmdet.__version__) @@ -43,7 +43,7 @@ assert (digit_version(mmdet_minimum_version) <= mmdet_version <={mmdet_maximum_version}.' mmcls_minimum_version = '0.15.0' -mmcls_maximum_version = '0.15.0' +mmcls_maximum_version = '0.19.0' mmcls_version = digit_version(mmcls.__version__) diff --git a/mmfewshot/classification/utils/meta_test_parallel.py b/mmfewshot/classification/utils/meta_test_parallel.py index 006a839..1cd2753 100644 --- a/mmfewshot/classification/utils/meta_test_parallel.py +++ b/mmfewshot/classification/utils/meta_test_parallel.py @@ -39,7 +39,7 @@ class MetaTestParallel(nn.Module): def forward(self, *inputs, **kwargs): """Override the original forward function. - The main difference lies in the CPU inference where the datas in + The main difference lies in the CPU inference where the data in :class:`DataContainers` will still be gathered. """ diff --git a/mmfewshot/detection/core/evaluation/mean_ap.py b/mmfewshot/detection/core/evaluation/mean_ap.py index c918caf..96a3a66 100644 --- a/mmfewshot/detection/core/evaluation/mean_ap.py +++ b/mmfewshot/detection/core/evaluation/mean_ap.py @@ -42,7 +42,7 @@ def eval_map(det_results: List[List[np.ndarray]], iou_thr (float): IoU threshold to be considered as matched. Default: 0.5. dataset (list[str] | str | None): Dataset name or dataset classes, - there are minor differences in metrics for different datsets, e.g. + there are minor differences in metrics for different datasets, e.g. "voc07", "imagenet_det", etc. Default: None. logger (logging.Logger | None): The way to print the mAP summary. See `mmcv.utils.print_log()` for details. Default: None. diff --git a/mmfewshot/detection/datasets/builder.py b/mmfewshot/detection/datasets/builder.py index a71cd8e..ae9d91c 100644 --- a/mmfewshot/detection/datasets/builder.py +++ b/mmfewshot/detection/datasets/builder.py @@ -217,7 +217,7 @@ def build_dataloader(dataset: Dataset, pin_memory=False, worker_init_fn=init_fn, **kwargs) - # creat support dataset from query dataset and + # create support dataset from query dataset and # sample batch index with same length as query dataloader support_dataset = copy.deepcopy(dataset) support_dataset.convert_query_to_support( diff --git a/mmfewshot/detection/datasets/few_shot_base.py b/mmfewshot/detection/datasets/few_shot_base.py index 60b52e1..8fa2b89 100644 --- a/mmfewshot/detection/datasets/few_shot_base.py +++ b/mmfewshot/detection/datasets/few_shot_base.py @@ -77,7 +77,7 @@ class FewShotBaseDataset(CustomDataset): filter_empty_gt (bool): If set true, images without bounding boxes of the dataset's classes will be filtered out. This option only works when `test_mode=False`, i.e., we never filter images - during tests. Default: Ture. + during tests. Default: True. min_bbox_size (int | float | None): The minimum size of bounding boxes in the images. If the size of a bounding box is less than ``min_bbox_size``, it would be added to ignored field. diff --git a/mmfewshot/detection/datasets/pipelines/__init__.py b/mmfewshot/detection/datasets/pipelines/__init__.py index 8fae261..8543fac 100644 --- a/mmfewshot/detection/datasets/pipelines/__init__.py +++ b/mmfewshot/detection/datasets/pipelines/__init__.py @@ -1,5 +1,5 @@ # Copyright (c) OpenMMLab. All rights reserved. -from .formating import MultiImageCollect, MultiImageFormatBundle +from .formatting import MultiImageCollect, MultiImageFormatBundle from .transforms import (CropInstance, CropResizeInstance, GenerateMask, MultiImageNormalize, MultiImagePad, MultiImageRandomCrop, MultiImageRandomFlip, diff --git a/mmfewshot/detection/datasets/pipelines/formating.py b/mmfewshot/detection/datasets/pipelines/formatting.py similarity index 100% rename from mmfewshot/detection/datasets/pipelines/formating.py rename to mmfewshot/detection/datasets/pipelines/formatting.py diff --git a/mmfewshot/detection/datasets/voc.py b/mmfewshot/detection/datasets/voc.py index 635ba75..178efa3 100644 --- a/mmfewshot/detection/datasets/voc.py +++ b/mmfewshot/detection/datasets/voc.py @@ -333,7 +333,7 @@ class FewShotVOCDataset(FewShotBaseDataset): # the four coordinates are reduced by 1 when the annotation # is parsed. Here we following detectron2, only xmin and ymin # will be reduced by 1 during training. The groundtruth used for - # evaluation or testing keep consisent with original xml + # evaluation or testing keep consistent with original xml # annotation file and the xmin and ymin of prediction results # will add 1 for inverse of data loading logic. bbox = [ @@ -441,7 +441,7 @@ class FewShotVOCDataset(FewShotBaseDataset): # the four coordinates are reduced by 1 when the annotation # is parsed. Here we following detectron2, only xmin and ymin # will be reduced by 1 during training. The groundtruth used for - # evaluation or testing keep consisent with original xml + # evaluation or testing keep consistent with original xml # annotation file and the xmin and ymin of prediction results # will add 1 for inverse of data loading logic. for i in range(len(results)): diff --git a/mmfewshot/detection/models/dense_heads/attention_rpn_head.py b/mmfewshot/detection/models/dense_heads/attention_rpn_head.py index 85a3085..57cd9b2 100644 --- a/mmfewshot/detection/models/dense_heads/attention_rpn_head.py +++ b/mmfewshot/detection/models/dense_heads/attention_rpn_head.py @@ -162,7 +162,7 @@ class AttentionRPNHead(RPNHead): gt_bboxes_ignore=query_gt_bboxes_ignore, pair_flags=pair_flags) proposal_list = self.get_bboxes( - *outs, repeat_query_img_metas, cfg=proposal_cfg) + *outs, img_metas=repeat_query_img_metas, cfg=proposal_cfg) return losses, proposal_list @force_fp32(apply_to=('cls_scores', 'bbox_preds')) diff --git a/mmfewshot/detection/models/dense_heads/two_branch_rpn_head.py b/mmfewshot/detection/models/dense_heads/two_branch_rpn_head.py index c99cd92..dae0429 100644 --- a/mmfewshot/detection/models/dense_heads/two_branch_rpn_head.py +++ b/mmfewshot/detection/models/dense_heads/two_branch_rpn_head.py @@ -121,8 +121,8 @@ class TwoBranchRPNHead(RPNHead): level with shape (N, num_anchors * 4, H, W). anchors (Tensor): Box reference for each scale level with shape (N, num_total_anchors, 4). - bbox_targets (Tensor): BBox regression targets of each anchor wight - shape (N, num_total_anchors, 4). + bbox_targets (Tensor): BBox regression targets of each anchor + weight shape (N, num_total_anchors, 4). bbox_weights (Tensor): BBox regression loss weights of each anchor with shape (N, num_total_anchors, 4). num_total_samples (int): If sampling, num total samples equal to diff --git a/mmfewshot/detection/models/detectors/mpsr.py b/mmfewshot/detection/models/detectors/mpsr.py index ba79823..7a4d331 100644 --- a/mmfewshot/detection/models/detectors/mpsr.py +++ b/mmfewshot/detection/models/detectors/mpsr.py @@ -154,7 +154,7 @@ class MPSR(TwoStageDetector): and may also contain `filename`, `ori_shape`, `pad_shape`, and `img_norm_cfg`. For details on the values of these keys, see :class:`mmdet.datasets.pipelines.Collect`. Default: None. - return_loss (bool): If set Ture call :func:`forward_train`, + return_loss (bool): If set True call :func:`forward_train`, otherwise call :func:`forward_test`. Default: True. """ if return_loss: diff --git a/model-index.yml b/model-index.yml new file mode 100644 index 0000000..223810b --- /dev/null +++ b/model-index.yml @@ -0,0 +1,49 @@ +Import: + - configs/classification/baseline/cub/metafile.yml + - configs/classification/baseline/mini_imagenet/metafile.yml + - configs/classification/baseline/tiered_imagenet/metafile.yml + - configs/classification/baseline_plus/cub/metafile.yml + - configs/classification/baseline_plus/mini_imagenet/metafile.yml + - configs/classification/baseline_plus/tiered_imagenet/metafile.yml + - configs/classification/maml/cub/metafile.yml + - configs/classification/maml/mini_imagenet/metafile.yml + - configs/classification/maml/tiered_imagenet/metafile.yml + - configs/classification/matching_net/cub/metafile.yml + - configs/classification/matching_net/mini_imagenet/metafile.yml + - configs/classification/matching_net/tiered_imagenet/metafile.yml + - configs/classification/meta_baseline/cub/metafile.yml + - configs/classification/meta_baseline/mini_imagenet/metafile.yml + - configs/classification/meta_baseline/tiered_imagenet/metafile.yml + - configs/classification/neg_margin/cub/metafile.yml + - configs/classification/neg_margin/mini_imagenet/metafile.yml + - configs/classification/neg_margin/tiered_imagenet/metafile.yml + - configs/classification/proto_net/cub/metafile.yml + - configs/classification/proto_net/mini_imagenet/metafile.yml + - configs/classification/proto_net/tiered_imagenet/metafile.yml + - configs/classification/relation_net/cub/metafile.yml + - configs/classification/relation_net/mini_imagenet/metafile.yml + - configs/classification/relation_net/tiered_imagenet/metafile.yml + - configs/detection/attention_rpn/coco/metafile.yml + - configs/detection/attention_rpn/voc_split1/metafile.yml + - configs/detection/attention_rpn/voc_split2/metafile.yml + - configs/detection/attention_rpn/voc_split3/metafile.yml + - configs/detection/fsce/coco/metafile.yml + - configs/detection/fsce/voc_split1/metafile.yml + - configs/detection/fsce/voc_split2/metafile.yml + - configs/detection/fsce/voc_split3/metafile.yml + - configs/detection/fsdetview/coco/metafile.yml + - configs/detection/fsdetview/voc_split1/metafile.yml + - configs/detection/fsdetview/voc_split2/metafile.yml + - configs/detection/fsdetview/voc_split3/metafile.yml + - configs/detection/meta_rcnn/coco/metafile.yml + - configs/detection/meta_rcnn/voc_split1/metafile.yml + - configs/detection/meta_rcnn/voc_split2/metafile.yml + - configs/detection/meta_rcnn/voc_split3/metafile.yml + - configs/detection/mpsr/coco/metafile.yml + - configs/detection/mpsr/voc_split1/metafile.yml + - configs/detection/mpsr/voc_split2/metafile.yml + - configs/detection/mpsr/voc_split3/metafile.yml + - configs/detection/tfa/coco/metafile.yml + - configs/detection/tfa/voc_split1/metafile.yml + - configs/detection/tfa/voc_split2/metafile.yml + - configs/detection/tfa/voc_split3/metafile.yml diff --git a/model_zoo.yml b/model_zoo.yml new file mode 100644 index 0000000..223810b --- /dev/null +++ b/model_zoo.yml @@ -0,0 +1,49 @@ +Import: + - configs/classification/baseline/cub/metafile.yml + - configs/classification/baseline/mini_imagenet/metafile.yml + - configs/classification/baseline/tiered_imagenet/metafile.yml + - configs/classification/baseline_plus/cub/metafile.yml + - configs/classification/baseline_plus/mini_imagenet/metafile.yml + - configs/classification/baseline_plus/tiered_imagenet/metafile.yml + - configs/classification/maml/cub/metafile.yml + - configs/classification/maml/mini_imagenet/metafile.yml + - configs/classification/maml/tiered_imagenet/metafile.yml + - configs/classification/matching_net/cub/metafile.yml + - configs/classification/matching_net/mini_imagenet/metafile.yml + - configs/classification/matching_net/tiered_imagenet/metafile.yml + - configs/classification/meta_baseline/cub/metafile.yml + - configs/classification/meta_baseline/mini_imagenet/metafile.yml + - configs/classification/meta_baseline/tiered_imagenet/metafile.yml + - configs/classification/neg_margin/cub/metafile.yml + - configs/classification/neg_margin/mini_imagenet/metafile.yml + - configs/classification/neg_margin/tiered_imagenet/metafile.yml + - configs/classification/proto_net/cub/metafile.yml + - configs/classification/proto_net/mini_imagenet/metafile.yml + - configs/classification/proto_net/tiered_imagenet/metafile.yml + - configs/classification/relation_net/cub/metafile.yml + - configs/classification/relation_net/mini_imagenet/metafile.yml + - configs/classification/relation_net/tiered_imagenet/metafile.yml + - configs/detection/attention_rpn/coco/metafile.yml + - configs/detection/attention_rpn/voc_split1/metafile.yml + - configs/detection/attention_rpn/voc_split2/metafile.yml + - configs/detection/attention_rpn/voc_split3/metafile.yml + - configs/detection/fsce/coco/metafile.yml + - configs/detection/fsce/voc_split1/metafile.yml + - configs/detection/fsce/voc_split2/metafile.yml + - configs/detection/fsce/voc_split3/metafile.yml + - configs/detection/fsdetview/coco/metafile.yml + - configs/detection/fsdetview/voc_split1/metafile.yml + - configs/detection/fsdetview/voc_split2/metafile.yml + - configs/detection/fsdetview/voc_split3/metafile.yml + - configs/detection/meta_rcnn/coco/metafile.yml + - configs/detection/meta_rcnn/voc_split1/metafile.yml + - configs/detection/meta_rcnn/voc_split2/metafile.yml + - configs/detection/meta_rcnn/voc_split3/metafile.yml + - configs/detection/mpsr/coco/metafile.yml + - configs/detection/mpsr/voc_split1/metafile.yml + - configs/detection/mpsr/voc_split2/metafile.yml + - configs/detection/mpsr/voc_split3/metafile.yml + - configs/detection/tfa/coco/metafile.yml + - configs/detection/tfa/voc_split1/metafile.yml + - configs/detection/tfa/voc_split2/metafile.yml + - configs/detection/tfa/voc_split3/metafile.yml diff --git a/requirements/readthedocs.txt b/requirements/readthedocs.txt index d2f69a1..e81ffa9 100644 --- a/requirements/readthedocs.txt +++ b/requirements/readthedocs.txt @@ -1,5 +1,5 @@ mmcls>=0.15.0 mmcv>=1.3.12 mmdet>=2.16.0 -torch==1.7.0 +torch torchvision diff --git a/tests/test_detection_data/test_pipelines/test_detection_formating.py b/tests/test_detection_data/test_pipelines/test_detection_formatting.py similarity index 94% rename from tests/test_detection_data/test_pipelines/test_detection_formating.py rename to tests/test_detection_data/test_pipelines/test_detection_formatting.py index a140a92..21bbeaa 100644 --- a/tests/test_detection_data/test_pipelines/test_detection_formating.py +++ b/tests/test_detection_data/test_pipelines/test_detection_formatting.py @@ -2,7 +2,7 @@ import copy import os.path as osp -from mmfewshot.detection.datasets.pipelines.formating import PIPELINES +from mmfewshot.detection.datasets.pipelines.formatting import PIPELINES def test_multi_image_format_bundle(): diff --git a/tests/test_detection_models/test_detectors/test_attention_rpn_detector.py b/tests/test_detection_models/test_detectors/test_attention_rpn_detector.py index 1f02efd..a9baa6f 100644 --- a/tests/test_detection_models/test_detectors/test_attention_rpn_detector.py +++ b/tests/test_detection_models/test_detectors/test_attention_rpn_detector.py @@ -1,12 +1,116 @@ # Copyright (c) OpenMMLab. All rights reserved. import copy +from os.path import dirname, exists, join +import numpy as np import pytest import torch from mmfewshot.detection.models import build_detector -from .test_fine_tune_based_detector import _get_detector_cfg + + +def _get_config_directory(): + """Find the predefined detector config directory.""" + try: + # Assume we are running in the source mmfewshot repo + repo_dpath = dirname(dirname(dirname(dirname(__file__)))) + except NameError: + # For IPython development when this __file__ is not defined + import mmfewshot + repo_dpath = dirname(dirname(mmfewshot.__file__)) + config_dpath = join(repo_dpath, 'configs') + if not exists(config_dpath): + raise Exception('Cannot find config path') + return config_dpath + + +def _get_config_module(fname): + """Load a configuration as a python module.""" + from mmcv import Config + config_dpath = _get_config_directory() + config_fpath = join(config_dpath, fname) + config_mod = Config.fromfile(config_fpath) + return config_mod + + +def _get_detector_cfg(fname): + """Grab configs necessary to create a detector. + + These are deep copied to allow for safe modification of parameters without + influencing other tests. + """ + config = _get_config_module(fname) + model = copy.deepcopy(config.model) + return model + + +def _demo_mm_inputs(input_shape=(1, 3, 300, 300), + num_items=None, num_classes=10): # yapf: disable + """Create a superset of inputs needed to run test or train batches. + + Args: + input_shape (tuple): + input batch dimensions + num_items (None | List[int]): + specifies the number of boxes in each batch item + num_classes (int): + number of different labels a box might have + """ + from mmdet.core import BitmapMasks + + (N, C, H, W) = input_shape + + rng = np.random.RandomState(0) + + imgs = rng.rand(*input_shape) + + img_metas = [{ + 'img_shape': (H, W, C), + 'ori_shape': (H, W, C), + 'pad_shape': (H, W, C), + 'filename': '.png', + 'scale_factor': np.array([1.1, 1.2, 1.1, 1.2]), + 'flip': False, + 'flip_direction': None, + } for _ in range(N)] + + gt_bboxes = [] + gt_labels = [] + gt_masks = [] + + for batch_idx in range(N): + if num_items is None: + num_boxes = rng.randint(1, 10) + else: + num_boxes = num_items[batch_idx] + + cx, cy, bw, bh = rng.rand(num_boxes, 4).T + + tl_x = ((cx * W) - (W * bw / 2)).clip(0, W) + tl_y = ((cy * H) - (H * bh / 2)).clip(0, H) + br_x = ((cx * W) + (W * bw / 2)).clip(0, W) + br_y = ((cy * H) + (H * bh / 2)).clip(0, H) + + boxes = np.vstack([tl_x, tl_y, br_x, br_y]).T + class_idxs = rng.randint(1, num_classes, size=num_boxes) + + gt_bboxes.append(torch.FloatTensor(boxes)) + gt_labels.append(torch.LongTensor(class_idxs)) + + mask = np.random.randint(0, 2, (len(boxes), H, W), dtype=np.uint8) + gt_masks.append(BitmapMasks(mask, H, W)) + + mm_inputs = { + 'imgs': torch.FloatTensor(imgs).requires_grad_(True), + 'img_metas': img_metas, + 'gt_bboxes': gt_bboxes, + 'gt_labels': gt_labels, + 'gt_bboxes_ignore': None, + 'gt_masks': gt_masks, + } + + return mm_inputs @pytest.mark.parametrize( diff --git a/tests/test_detection_models/test_detectors/test_meta_rcnn_detector.py b/tests/test_detection_models/test_detectors/test_meta_rcnn_detector.py index d9c1720..fbcbb63 100644 --- a/tests/test_detection_models/test_detectors/test_meta_rcnn_detector.py +++ b/tests/test_detection_models/test_detectors/test_meta_rcnn_detector.py @@ -1,11 +1,115 @@ # Copyright (c) OpenMMLab. All rights reserved. import copy +from os.path import dirname, exists, join +import numpy as np import pytest import torch from mmfewshot.detection.models import build_detector -from .test_fine_tune_based_detector import _get_detector_cfg + + +def _get_config_directory(): + """Find the predefined detector config directory.""" + try: + # Assume we are running in the source mmfewshot repo + repo_dpath = dirname(dirname(dirname(dirname(__file__)))) + except NameError: + # For IPython development when this __file__ is not defined + import mmfewshot + repo_dpath = dirname(dirname(mmfewshot.__file__)) + config_dpath = join(repo_dpath, 'configs') + if not exists(config_dpath): + raise Exception('Cannot find config path') + return config_dpath + + +def _get_config_module(fname): + """Load a configuration as a python module.""" + from mmcv import Config + config_dpath = _get_config_directory() + config_fpath = join(config_dpath, fname) + config_mod = Config.fromfile(config_fpath) + return config_mod + + +def _get_detector_cfg(fname): + """Grab configs necessary to create a detector. + + These are deep copied to allow for safe modification of parameters without + influencing other tests. + """ + config = _get_config_module(fname) + model = copy.deepcopy(config.model) + return model + + +def _demo_mm_inputs(input_shape=(1, 3, 300, 300), + num_items=None, num_classes=10): # yapf: disable + """Create a superset of inputs needed to run test or train batches. + + Args: + input_shape (tuple): + input batch dimensions + num_items (None | List[int]): + specifies the number of boxes in each batch item + num_classes (int): + number of different labels a box might have + """ + from mmdet.core import BitmapMasks + + (N, C, H, W) = input_shape + + rng = np.random.RandomState(0) + + imgs = rng.rand(*input_shape) + + img_metas = [{ + 'img_shape': (H, W, C), + 'ori_shape': (H, W, C), + 'pad_shape': (H, W, C), + 'filename': '.png', + 'scale_factor': np.array([1.1, 1.2, 1.1, 1.2]), + 'flip': False, + 'flip_direction': None, + } for _ in range(N)] + + gt_bboxes = [] + gt_labels = [] + gt_masks = [] + + for batch_idx in range(N): + if num_items is None: + num_boxes = rng.randint(1, 10) + else: + num_boxes = num_items[batch_idx] + + cx, cy, bw, bh = rng.rand(num_boxes, 4).T + + tl_x = ((cx * W) - (W * bw / 2)).clip(0, W) + tl_y = ((cy * H) - (H * bh / 2)).clip(0, H) + br_x = ((cx * W) + (W * bw / 2)).clip(0, W) + br_y = ((cy * H) + (H * bh / 2)).clip(0, H) + + boxes = np.vstack([tl_x, tl_y, br_x, br_y]).T + class_idxs = rng.randint(1, num_classes, size=num_boxes) + + gt_bboxes.append(torch.FloatTensor(boxes)) + gt_labels.append(torch.LongTensor(class_idxs)) + + mask = np.random.randint(0, 2, (len(boxes), H, W), dtype=np.uint8) + gt_masks.append(BitmapMasks(mask, H, W)) + + mm_inputs = { + 'imgs': torch.FloatTensor(imgs).requires_grad_(True), + 'img_metas': img_metas, + 'gt_bboxes': gt_bboxes, + 'gt_labels': gt_labels, + 'gt_bboxes_ignore': None, + 'gt_masks': gt_masks, + } + + return mm_inputs @pytest.mark.parametrize( diff --git a/tests/test_detection_models/test_detectors/test_mpsr_detector.py b/tests/test_detection_models/test_detectors/test_mpsr_detector.py index d0894c5..63c2e73 100644 --- a/tests/test_detection_models/test_detectors/test_mpsr_detector.py +++ b/tests/test_detection_models/test_detectors/test_mpsr_detector.py @@ -1,11 +1,116 @@ # Copyright (c) OpenMMLab. All rights reserved. -import copy +import copy +from os.path import dirname, exists, join + +import numpy as np import pytest import torch from mmfewshot.detection.models import build_detector -from .test_fine_tune_based_detector import _get_detector_cfg + + +def _get_config_directory(): + """Find the predefined detector config directory.""" + try: + # Assume we are running in the source mmfewshot repo + repo_dpath = dirname(dirname(dirname(dirname(__file__)))) + except NameError: + # For IPython development when this __file__ is not defined + import mmfewshot + repo_dpath = dirname(dirname(mmfewshot.__file__)) + config_dpath = join(repo_dpath, 'configs') + if not exists(config_dpath): + raise Exception('Cannot find config path') + return config_dpath + + +def _get_config_module(fname): + """Load a configuration as a python module.""" + from mmcv import Config + config_dpath = _get_config_directory() + config_fpath = join(config_dpath, fname) + config_mod = Config.fromfile(config_fpath) + return config_mod + + +def _get_detector_cfg(fname): + """Grab configs necessary to create a detector. + + These are deep copied to allow for safe modification of parameters without + influencing other tests. + """ + config = _get_config_module(fname) + model = copy.deepcopy(config.model) + return model + + +def _demo_mm_inputs(input_shape=(1, 3, 300, 300), + num_items=None, num_classes=10): # yapf: disable + """Create a superset of inputs needed to run test or train batches. + + Args: + input_shape (tuple): + input batch dimensions + num_items (None | List[int]): + specifies the number of boxes in each batch item + num_classes (int): + number of different labels a box might have + """ + from mmdet.core import BitmapMasks + + (N, C, H, W) = input_shape + + rng = np.random.RandomState(0) + + imgs = rng.rand(*input_shape) + + img_metas = [{ + 'img_shape': (H, W, C), + 'ori_shape': (H, W, C), + 'pad_shape': (H, W, C), + 'filename': '.png', + 'scale_factor': np.array([1.1, 1.2, 1.1, 1.2]), + 'flip': False, + 'flip_direction': None, + } for _ in range(N)] + + gt_bboxes = [] + gt_labels = [] + gt_masks = [] + + for batch_idx in range(N): + if num_items is None: + num_boxes = rng.randint(1, 10) + else: + num_boxes = num_items[batch_idx] + + cx, cy, bw, bh = rng.rand(num_boxes, 4).T + + tl_x = ((cx * W) - (W * bw / 2)).clip(0, W) + tl_y = ((cy * H) - (H * bh / 2)).clip(0, H) + br_x = ((cx * W) + (W * bw / 2)).clip(0, W) + br_y = ((cy * H) + (H * bh / 2)).clip(0, H) + + boxes = np.vstack([tl_x, tl_y, br_x, br_y]).T + class_idxs = rng.randint(1, num_classes, size=num_boxes) + + gt_bboxes.append(torch.FloatTensor(boxes)) + gt_labels.append(torch.LongTensor(class_idxs)) + + mask = np.random.randint(0, 2, (len(boxes), H, W), dtype=np.uint8) + gt_masks.append(BitmapMasks(mask, H, W)) + + mm_inputs = { + 'imgs': torch.FloatTensor(imgs).requires_grad_(True), + 'img_metas': img_metas, + 'gt_bboxes': gt_bboxes, + 'gt_labels': gt_labels, + 'gt_bboxes_ignore': None, + 'gt_masks': gt_masks, + } + + return mm_inputs @pytest.mark.parametrize( diff --git a/tools/detection/misc/visualize_saved_dataset.py b/tools/detection/misc/visualize_saved_dataset.py index f4915e7..82e9466 100644 --- a/tools/detection/misc/visualize_saved_dataset.py +++ b/tools/detection/misc/visualize_saved_dataset.py @@ -230,8 +230,7 @@ class Visualizer: else: data_info['ann'][k] = data_info['ann'][k].astype( np.int64) - assert len( - self.CLASSES) > 0, 'missing CLASSSES for saved dataset json.' + assert len(self.CLASSES) > 0, 'missing CLASSES for saved dataset json.' if meta_index is not None: data_infos.pop(meta_index) return data_infos diff --git a/tools/detection/multi_dist_test.sh b/tools/detection/multi_dist_test.sh deleted file mode 100644 index 72dd430..0000000 --- a/tools/detection/multi_dist_test.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -CONFIG=$1 -GPUS=$2 -TIMES=$3 -PORT=${PORT:-29500} - -PYTHONPATH="$(dirname $0)/..":$PYTHONPATH -python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \ - $(dirname "$0")/multi_test.py $CONFIG $TIMES --launcher pytorch ${@:4} diff --git a/tools/detection/multi_test.py b/tools/detection/multi_test.py deleted file mode 100644 index 57184c6..0000000 --- a/tools/detection/multi_test.py +++ /dev/null @@ -1,264 +0,0 @@ -"""Test multiple run few shot models.""" -import argparse -import copy -import os -import warnings - -import mmcv -import torch -from mmcv import Config, DictAction -from mmcv.parallel import MMDataParallel, MMDistributedDataParallel -from mmcv.runner import (get_dist_info, init_dist, load_checkpoint, - wrap_fp16_model) - -import mmfewshot # noqa: F401, F403 -from mmfewshot.detection.datasets import (build_dataloader, build_dataset, - get_copy_dataset_type) -from mmfewshot.detection.models import build_detector - - -def parse_args(): - parser = argparse.ArgumentParser( - description='MMFewShot test (and eval) models for multi train') - parser.add_argument('config', help='test config file path') - parser.add_argument( - 'times', type=int, help='number of experiments to test') - parser.add_argument( - '--checkpoint', - type=str, - default='latest', - help='name of checkpoint to test') - parser.add_argument( - '--start', - default=0, - type=int, - help='number of resume experiment times') - parser.add_argument( - '--work-dir', default=None, help='work directory for experiments') - parser.add_argument('--out', help='output result file in pickle format') - parser.add_argument( - '--eval', - type=str, - nargs='+', - help='evaluation metrics, which depends on the dataset ' - 'of specific task_type, e.g., "bbox","segm", "proposal" for ' - 'COCO, and "mAP", "recall" for PASCAL VOC in' - 'MMDet or "accuracy", "precision", "recall", "f1_score", ' - '"support" for single label dataset, and "mAP", "CP", "CR",' - '"CF1", "OP", "OR", "OF1" for ' - 'multi-label dataset in MMCLS') - parser.add_argument( - '--gpu-collect', - action='store_true', - help='whether to use gpu to collect results.') - parser.add_argument( - '--tmpdir', - help='tmp directory used for collecting results from multiple ' - 'workers, available when gpu-collect is not specified') - parser.add_argument( - '--cfg-options', - nargs='+', - action=DictAction, - help='override some settings in the used config, the key-value pair ' - 'in xxx=yyy format will be merged into config file. If the value to ' - 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' - 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' - 'Note that the quotation marks are necessary and that no white space ' - 'is allowed.') - parser.add_argument( - '--options', - nargs='+', - action=DictAction, - help='custom options for evaluation, the key-value pair in xxx=yyy ' - 'format will be kwargs for dataset.evaluate() function (deprecate), ' - 'change to --eval-options instead.') - parser.add_argument( - '--eval-options', - nargs='+', - action=DictAction, - help='custom options for evaluation, the key-value pair in xxx=yyy ' - 'format will be kwargs for dataset.evaluate() function') - parser.add_argument( - '--launcher', - choices=['none', 'pytorch', 'slurm', 'mpi'], - default='none', - help='job launcher') - parser.add_argument('--local_rank', type=int, default=0) - args = parser.parse_args() - if 'LOCAL_RANK' not in os.environ: - os.environ['LOCAL_RANK'] = str(args.local_rank) - - if args.options and args.eval_options: - raise ValueError( - '--options and --eval-options cannot be both ' - 'specified, --options is deprecated in favor of --eval-options') - if args.options: - warnings.warn('--options is deprecated in favor of --eval-options') - args.eval_options = args.options - args.cfg_options = args.options - return args - - -def main(): - args = parse_args() - - if args.work_dir is None: - args.work_dir = os.path.join( - './work_dirs', - os.path.splitext(os.path.basename(args.config))[0]) - - assert args.out or args.eval, ( - 'Please specify at least one operation (save/eval the ' - 'results / save the results) with the argument "--out", "--eval"') - - if args.out is not None and not args.out.endswith(('.pkl', '.pickle')): - raise ValueError('The output file must be a pkl file.') - - base_cfg = Config.fromfile(args.config) - - if args.cfg_options is not None: - base_cfg.merge_from_dict(args.cfg_options) - - # import modules from string list. - if base_cfg.get('custom_imports', None): - from mmcv.utils import import_modules_from_strings - import_modules_from_strings(**base_cfg['custom_imports']) - # set cudnn_benchmark - if base_cfg.get('cudnn_benchmark', False): - torch.backends.cudnn.benchmark = True - base_cfg.model.pretrained = None - - # currently only support single images testing - samples_per_gpu = base_cfg.data.test.pop('samples_per_gpu', 1) - assert samples_per_gpu == 1, 'currently only support single images testing' - - # init distributed env first, since logger depends on the dist info. - if args.launcher == 'none': - distributed = False - else: - distributed = True - init_dist(args.launcher, **base_cfg.dist_params) - rank, _ = get_dist_info() - eval_result_list = [] - # build the dataloader - dataset = build_dataset(base_cfg.data.test) - # currently only support single images testing - data_loader = build_dataloader( - dataset, - samples_per_gpu=samples_per_gpu, - workers_per_gpu=base_cfg.data.workers_per_gpu, - dist=distributed, - shuffle=False) - - for i in range(args.start, args.times): - cfg = copy.deepcopy(base_cfg) - work_dir = os.path.join(args.work_dir, f'times_{i}') - cfg.work_dir = work_dir - # pop frozen_parameters - cfg.model.pop('frozen_parameters', None) - - # build the model and load checkpoint - cfg.model.train_cfg = None - model = build_detector(cfg.model) - checkpoint_path = os.path.join(work_dir, f'{args.checkpoint}.pth') - checkpoint = load_checkpoint( - model, checkpoint_path, map_location='cpu') - - fp16_cfg = cfg.get('fp16', None) - if fp16_cfg is not None: - wrap_fp16_model(model) - # for meta-learning methods which require support template dataset - # for model initialization. - if cfg.data.get('model_init', None) is not None: - cfg.data.model_init.pop('copy_from_train_dataset') - model_init_samples_per_gpu = cfg.data.model_init.pop( - 'samples_per_gpu', 1) - model_init_workers_per_gpu = cfg.data.model_init.pop( - 'workers_per_gpu', 1) - if cfg.data.model_init.get('ann_cfg', None) is None: - assert checkpoint['meta'].get('model_init_ann_cfg', - None) is not None - cfg.data.model_init.type = \ - get_copy_dataset_type(cfg.data.model_init.type) - cfg.data.model_init.ann_cfg = \ - checkpoint['meta']['model_init_ann_cfg'] - model_init_dataset = build_dataset(cfg.data.model_init) - # disable dist to make all rank get same data - model_init_dataloader = build_dataloader( - model_init_dataset, - samples_per_gpu=model_init_samples_per_gpu, - workers_per_gpu=model_init_workers_per_gpu, - dist=False, - shuffle=False) - - # old versions did not save class info in checkpoints, - # this walkaround is for backward compatibility - if 'CLASSES' in checkpoint.get('meta', {}): - model.CLASSES = checkpoint['meta']['CLASSES'] - else: - model.CLASSES = dataset.CLASSES - - if not distributed: - model = MMDataParallel(model, device_ids=[0]) - show_kwargs = dict(show_score_thr=args.show_score_thr) - if cfg.data.get('model_init', None) is not None: - from mmfewshot.detection.apis import (single_gpu_model_init, - single_gpu_test) - single_gpu_model_init(model, model_init_dataloader) - else: - from mmdet.apis.test import single_gpu_test - outputs = single_gpu_test(model, data_loader, args.show, - args.show_dir, **show_kwargs) - else: - model = MMDistributedDataParallel( - model.cuda(), - device_ids=[torch.cuda.current_device()], - broadcast_buffers=False) - if cfg.data.get('model_init', None) is not None: - from mmfewshot.detection.apis import (multi_gpu_model_init, - multi_gpu_test) - multi_gpu_model_init(model, model_init_dataloader) - else: - from mmdet.apis.test import multi_gpu_test - outputs = multi_gpu_test( - model, - data_loader, - args.tmpdir, - args.gpu_collect, - ) - rank, _ = get_dist_info() - if rank == 0: - if args.out: - print(f'\nwriting results to {args.out}') - mmcv.dump(outputs, args.out) - kwargs = {} if args.eval_options is None else args.eval_options - if args.eval: - eval_kwargs = cfg.get('evaluation', {}).copy() - # hard-code way to remove EvalHook args - for key in [ - 'interval', 'tmpdir', 'start', 'gpu_collect', - 'save_best', 'rule' - ]: - eval_kwargs.pop(key, None) - eval_kwargs.update(dict(metric=args.eval, **kwargs)) - eval_result = dataset.evaluate(outputs, **eval_kwargs) - print(eval_result) - eval_result_list.append(eval_result) - - if i == (args.times - 1): - num_results = len(eval_result_list) - if num_results == 0: - print('zero experiment tested') - else: - avg_results = dict() - for k in eval_result_list[0].keys(): - avg_results[f'Avg {k}'] = sum([ - eval_result_list[i][k] for i in range(num_results) - ]) / num_results - mmcv.dump(avg_results, - os.path.join(args.work_dir, 'avg_result.json')) - print(avg_results) - - -if __name__ == '__main__': - main() diff --git a/tools/misc/print_config.py b/tools/misc/print_config.py new file mode 100644 index 0000000..e44cda0 --- /dev/null +++ b/tools/misc/print_config.py @@ -0,0 +1,55 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import argparse +import warnings + +from mmcv import Config, DictAction + + +def parse_args(): + parser = argparse.ArgumentParser(description='Print the whole config') + parser.add_argument('config', help='config file path') + parser.add_argument( + '--options', + nargs='+', + action=DictAction, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file (deprecate), ' + 'change to --cfg-options instead.') + parser.add_argument( + '--cfg-options', + nargs='+', + action=DictAction, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file. If the value to ' + 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' + 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' + 'Note that the quotation marks are necessary and that no white space ' + 'is allowed.') + args = parser.parse_args() + + if args.options and args.cfg_options: + raise ValueError( + '--options and --cfg-options cannot be both ' + 'specified, --options is deprecated in favor of --cfg-options') + if args.options: + warnings.warn('--options is deprecated in favor of --cfg-options') + args.cfg_options = args.options + + return args + + +def main(): + args = parse_args() + + cfg = Config.fromfile(args.config) + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + # import modules from string list. + if cfg.get('custom_imports', None): + from mmcv.utils import import_modules_from_strings + import_modules_from_strings(**cfg['custom_imports']) + print(f'Config:\n{cfg.pretty_text}') + + +if __name__ == '__main__': + main()