diff --git a/configs/albu_example/mask_rcnn_r50_fpn_1x.py b/configs/albu_example/mask_rcnn_r50_fpn_1x.py index 9638faca4fba87a5d64d85c24155bf488a2176b0..c84988a50860c79926078cf8a1299b3266e73aa1 100644 --- a/configs/albu_example/mask_rcnn_r50_fpn_1x.py +++ b/configs/albu_example/mask_rcnn_r50_fpn_1x.py @@ -218,6 +218,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) @@ -237,7 +238,6 @@ log_config = dict( # dict(type='TensorboardLoggerHook') ]) # yapf:enable -evaluation = dict(interval=1) # runtime settings total_epochs = 12 dist_params = dict(backend='nccl') diff --git a/configs/atss/atss_r50_fpn_1x.py b/configs/atss/atss_r50_fpn_1x.py index e19a39da967e588072692505048bf7cc9d9ff128..e8c7253e196e52b10cb525b537693a58e271beab 100644 --- a/configs/atss/atss_r50_fpn_1x.py +++ b/configs/atss/atss_r50_fpn_1x.py @@ -98,6 +98,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_mask_rcnn_r101_fpn_1x.py b/configs/cascade_mask_rcnn_r101_fpn_1x.py index 5ac4075e32f11cbd9b0661e27973b289c05aa4e6..2d7209a09edbf40cb79e2f1a9d5f6e09aa23f6d0 100644 --- a/configs/cascade_mask_rcnn_r101_fpn_1x.py +++ b/configs/cascade_mask_rcnn_r101_fpn_1x.py @@ -223,6 +223,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_mask_rcnn_r50_caffe_c4_1x.py b/configs/cascade_mask_rcnn_r50_caffe_c4_1x.py index 7ef36d5514b700d24fafc2aa7b72a89bfbf54761..867ef7cb56aab017202c2facf676b8686957795d 100644 --- a/configs/cascade_mask_rcnn_r50_caffe_c4_1x.py +++ b/configs/cascade_mask_rcnn_r50_caffe_c4_1x.py @@ -225,6 +225,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_mask_rcnn_r50_fpn_1x.py b/configs/cascade_mask_rcnn_r50_fpn_1x.py index e23e159d9bd9c3b553f584dddf5f246ec0892b91..10463a5f7e33f6e31dc1320c748711112f6cd75c 100644 --- a/configs/cascade_mask_rcnn_r50_fpn_1x.py +++ b/configs/cascade_mask_rcnn_r50_fpn_1x.py @@ -223,6 +223,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_mask_rcnn_x101_32x4d_fpn_1x.py b/configs/cascade_mask_rcnn_x101_32x4d_fpn_1x.py index 723462c22c8463644880982be06564be185838e9..38a38bdd54fb055cbe1d4b1628989f161e2c37b1 100644 --- a/configs/cascade_mask_rcnn_x101_32x4d_fpn_1x.py +++ b/configs/cascade_mask_rcnn_x101_32x4d_fpn_1x.py @@ -225,6 +225,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_mask_rcnn_x101_64x4d_fpn_1x.py b/configs/cascade_mask_rcnn_x101_64x4d_fpn_1x.py index b8ad46225dc57a1555dc1ff35c5d5a1778680a38..80a5ed6a2b31ff06816ce74d04570d82517229a0 100644 --- a/configs/cascade_mask_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/cascade_mask_rcnn_x101_64x4d_fpn_1x.py @@ -225,6 +225,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_rcnn_r101_fpn_1x.py b/configs/cascade_rcnn_r101_fpn_1x.py index 9f3d08801e479187ea305456887b4ac78850287b..e9e5a46aa8f765ca5ac6499093c2aaff71d30240 100644 --- a/configs/cascade_rcnn_r101_fpn_1x.py +++ b/configs/cascade_rcnn_r101_fpn_1x.py @@ -204,6 +204,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_rcnn_r50_caffe_c4_1x.py b/configs/cascade_rcnn_r50_caffe_c4_1x.py index 5722d416cb47c5f0e79c1dad0a91cc8573aeadd9..926310e27f7e14e40206b88e762d3c56864e4fbb 100644 --- a/configs/cascade_rcnn_r50_caffe_c4_1x.py +++ b/configs/cascade_rcnn_r50_caffe_c4_1x.py @@ -213,6 +213,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_rcnn_r50_fpn_1x.py b/configs/cascade_rcnn_r50_fpn_1x.py index 56e3ee9c7986533073db4d934c4324466feb084f..c4f80c52cab2995f99520fb38bf55bde5a8c9548 100644 --- a/configs/cascade_rcnn_r50_fpn_1x.py +++ b/configs/cascade_rcnn_r50_fpn_1x.py @@ -204,6 +204,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_rcnn_x101_32x4d_fpn_1x.py b/configs/cascade_rcnn_x101_32x4d_fpn_1x.py index 397d0b846bdf9bb60cefb07f17a52bfc2417ba23..1e76574a151a9c4d225cd22928a0bedf7f7f725a 100644 --- a/configs/cascade_rcnn_x101_32x4d_fpn_1x.py +++ b/configs/cascade_rcnn_x101_32x4d_fpn_1x.py @@ -206,6 +206,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cascade_rcnn_x101_64x4d_fpn_1x.py b/configs/cascade_rcnn_x101_64x4d_fpn_1x.py index 0d31f88332146565ac283415deecdd8c53a6761f..67b0ff600a5751264768ebc6e0d5015c6fe22f4e 100644 --- a/configs/cascade_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/cascade_rcnn_x101_64x4d_fpn_1x.py @@ -206,6 +206,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/cityscapes/faster_rcnn_r50_fpn_1x_cityscapes.py b/configs/cityscapes/faster_rcnn_r50_fpn_1x_cityscapes.py index 2f2c03556275ea88f6230ff5dc52474c5ce75127..b8ed66e5d241311e1c77fe3f846143f546ca600b 100644 --- a/configs/cityscapes/faster_rcnn_r50_fpn_1x_cityscapes.py +++ b/configs/cityscapes/faster_rcnn_r50_fpn_1x_cityscapes.py @@ -152,6 +152,7 @@ data = dict( 'annotations/instancesonly_filtered_gtFine_val.json', img_prefix=data_root + 'val/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer # lr is set for a batch size of 8 optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) diff --git a/configs/cityscapes/mask_rcnn_r50_fpn_1x_cityscapes.py b/configs/cityscapes/mask_rcnn_r50_fpn_1x_cityscapes.py index 84082506674c5f16f1c6a040095e89abf34e4e69..8711edd94c939959d65885291d886ce4d9f3e91d 100644 --- a/configs/cityscapes/mask_rcnn_r50_fpn_1x_cityscapes.py +++ b/configs/cityscapes/mask_rcnn_r50_fpn_1x_cityscapes.py @@ -166,6 +166,7 @@ data = dict( 'annotations/instancesonly_filtered_gtFine_val.json', img_prefix=data_root + 'val/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer # lr is set for a batch size of 8 optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) diff --git a/configs/dcn/cascade_mask_rcnn_dconv_c3-c5_r50_fpn_1x.py b/configs/dcn/cascade_mask_rcnn_dconv_c3-c5_r50_fpn_1x.py index 0a0231db22abbc09cc644edb107daf41a320281b..820d40907bdc04bbc809b9dfc2d09b27067b8ad6 100644 --- a/configs/dcn/cascade_mask_rcnn_dconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/cascade_mask_rcnn_dconv_c3-c5_r50_fpn_1x.py @@ -225,6 +225,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/dcn/cascade_rcnn_dconv_c3-c5_r50_fpn_1x.py b/configs/dcn/cascade_rcnn_dconv_c3-c5_r50_fpn_1x.py index 352cf2da4c44f644e4669cafc6ff556d6b334f5c..ae76ddde05aaec01ca0049b545f981b863c9355f 100644 --- a/configs/dcn/cascade_rcnn_dconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/cascade_rcnn_dconv_c3-c5_r50_fpn_1x.py @@ -206,6 +206,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/dcn/faster_rcnn_dconv_c3-c5_r50_fpn_1x.py b/configs/dcn/faster_rcnn_dconv_c3-c5_r50_fpn_1x.py index 87c2b4c929f3c1f31f0249d61b12c128a8afbae9..7f92c2cc1bcae50e06df818fd253ca09c7be8c01 100644 --- a/configs/dcn/faster_rcnn_dconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/faster_rcnn_dconv_c3-c5_r50_fpn_1x.py @@ -147,6 +147,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/dcn/faster_rcnn_dconv_c3-c5_x101_32x4d_fpn_1x.py b/configs/dcn/faster_rcnn_dconv_c3-c5_x101_32x4d_fpn_1x.py index 4cd3a35985b393ad14151d4a9f1af3279a9ecc01..d924e7fa3324d6605ddbb97dda4f201a9a91dd49 100644 --- a/configs/dcn/faster_rcnn_dconv_c3-c5_x101_32x4d_fpn_1x.py +++ b/configs/dcn/faster_rcnn_dconv_c3-c5_x101_32x4d_fpn_1x.py @@ -149,6 +149,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/dcn/faster_rcnn_dpool_r50_fpn_1x.py b/configs/dcn/faster_rcnn_dpool_r50_fpn_1x.py index bddcce40cd2cee9f9f9a7ebee34e464cb69f3e01..62fb85c65a9b54525941a2a80e2caacf70df7e59 100644 --- a/configs/dcn/faster_rcnn_dpool_r50_fpn_1x.py +++ b/configs/dcn/faster_rcnn_dpool_r50_fpn_1x.py @@ -151,6 +151,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/dcn/faster_rcnn_mdconv_c3-c5_group4_r50_fpn_1x.py b/configs/dcn/faster_rcnn_mdconv_c3-c5_group4_r50_fpn_1x.py index ddaae7c423534b8a0c017845b400a185f20bf2fe..b520238b0595855c15b5528ab8c40c68f0c420a7 100644 --- a/configs/dcn/faster_rcnn_mdconv_c3-c5_group4_r50_fpn_1x.py +++ b/configs/dcn/faster_rcnn_mdconv_c3-c5_group4_r50_fpn_1x.py @@ -147,6 +147,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/dcn/faster_rcnn_mdconv_c3-c5_r50_fpn_1x.py b/configs/dcn/faster_rcnn_mdconv_c3-c5_r50_fpn_1x.py index fbb8fc8addd90ba8d7df70964ba4f3467dc020bf..c35d4d1dd471d1c47a6090707b8f6a142d904757 100644 --- a/configs/dcn/faster_rcnn_mdconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/faster_rcnn_mdconv_c3-c5_r50_fpn_1x.py @@ -147,6 +147,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/dcn/faster_rcnn_mdpool_r50_fpn_1x.py b/configs/dcn/faster_rcnn_mdpool_r50_fpn_1x.py index fba0b330bfeefd55f3824658dc2f8b777e98edb3..e2a37f3311bac415fa6c195f50baee32931efb72 100644 --- a/configs/dcn/faster_rcnn_mdpool_r50_fpn_1x.py +++ b/configs/dcn/faster_rcnn_mdpool_r50_fpn_1x.py @@ -151,6 +151,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/dcn/mask_rcnn_dconv_c3-c5_r50_fpn_1x.py b/configs/dcn/mask_rcnn_dconv_c3-c5_r50_fpn_1x.py index e9415eea5dfaf60386d375bd91c416e990631007..180d58ecf61ce4034b5cbdf616977f7a13793b09 100644 --- a/configs/dcn/mask_rcnn_dconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/mask_rcnn_dconv_c3-c5_r50_fpn_1x.py @@ -161,6 +161,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/dcn/mask_rcnn_mdconv_c3-c5_r50_fpn_1x.py b/configs/dcn/mask_rcnn_mdconv_c3-c5_r50_fpn_1x.py index c4902567ba9412e3eb5f7cf1364b04aa0d23f861..238a07a93d4ce7bc276c8e798581db0af2741a03 100644 --- a/configs/dcn/mask_rcnn_mdconv_c3-c5_r50_fpn_1x.py +++ b/configs/dcn/mask_rcnn_mdconv_c3-c5_r50_fpn_1x.py @@ -161,6 +161,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/double_heads/dh_faster_rcnn_r50_fpn_1x.py b/configs/double_heads/dh_faster_rcnn_r50_fpn_1x.py index 708f67265b8f124f8df67cca06c93d4e7f311237..2e5086617a3795b79120773b8b12173bdf990fb1 100644 --- a/configs/double_heads/dh_faster_rcnn_r50_fpn_1x.py +++ b/configs/double_heads/dh_faster_rcnn_r50_fpn_1x.py @@ -148,6 +148,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/empirical_attention/faster_rcnn_r50_fpn_attention_0010_1x.py b/configs/empirical_attention/faster_rcnn_r50_fpn_attention_0010_1x.py index db20d8d2c979f91b25dfe82398df852d716ea3cc..772530b19f35c16756f3ec349d48da7f25b6e835 100644 --- a/configs/empirical_attention/faster_rcnn_r50_fpn_attention_0010_1x.py +++ b/configs/empirical_attention/faster_rcnn_r50_fpn_attention_0010_1x.py @@ -149,6 +149,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/empirical_attention/faster_rcnn_r50_fpn_attention_0010_dcn_1x.py b/configs/empirical_attention/faster_rcnn_r50_fpn_attention_0010_dcn_1x.py index e91aedadd790ad243ceb69fd224b5c7d80dbb81c..aa53d436299e6effadb7f4ac6397a40d5a3f4e5e 100644 --- a/configs/empirical_attention/faster_rcnn_r50_fpn_attention_0010_dcn_1x.py +++ b/configs/empirical_attention/faster_rcnn_r50_fpn_attention_0010_dcn_1x.py @@ -151,6 +151,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/empirical_attention/faster_rcnn_r50_fpn_attention_1111_1x.py b/configs/empirical_attention/faster_rcnn_r50_fpn_attention_1111_1x.py index f3eace271f576641de1fb35e7e6ebaf90a363e39..d945ac0ad33c32eefda9532dc0a8512a88b708d7 100644 --- a/configs/empirical_attention/faster_rcnn_r50_fpn_attention_1111_1x.py +++ b/configs/empirical_attention/faster_rcnn_r50_fpn_attention_1111_1x.py @@ -149,6 +149,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/empirical_attention/faster_rcnn_r50_fpn_attention_1111_dcn_1x.py b/configs/empirical_attention/faster_rcnn_r50_fpn_attention_1111_dcn_1x.py index 789127628edc7efddcbfce4353576b9fd53988c0..c98b3b94af2d7ed574004612da35011775db46a8 100644 --- a/configs/empirical_attention/faster_rcnn_r50_fpn_attention_1111_dcn_1x.py +++ b/configs/empirical_attention/faster_rcnn_r50_fpn_attention_1111_dcn_1x.py @@ -151,6 +151,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/fast_mask_rcnn_r101_fpn_1x.py b/configs/fast_mask_rcnn_r101_fpn_1x.py index 576d488a1ca761836c7a651faacd34903d398e02..0ea15a9eefe6b025f2ac8bf48ef0d0d27ae895a3 100644 --- a/configs/fast_mask_rcnn_r101_fpn_1x.py +++ b/configs/fast_mask_rcnn_r101_fpn_1x.py @@ -124,6 +124,7 @@ data = dict( proposal_file=data_root + 'proposals/rpn_r50_fpn_1x_val2017.pkl', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/fast_mask_rcnn_r50_caffe_c4_1x.py b/configs/fast_mask_rcnn_r50_caffe_c4_1x.py index cca87107861308fbeb0ade85eb1f9ee206083add..a8aae0a04e484c6393b5eb15cbce3869fc80b066 100644 --- a/configs/fast_mask_rcnn_r50_caffe_c4_1x.py +++ b/configs/fast_mask_rcnn_r50_caffe_c4_1x.py @@ -123,6 +123,7 @@ data = dict( proposal_file=data_root + 'proposals/rpn_r50_c4_1x_val2017.pkl', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/fast_mask_rcnn_r50_fpn_1x.py b/configs/fast_mask_rcnn_r50_fpn_1x.py index c324356d5a2ffff2e0b3d3884b50478569cf85b9..6c70a72c3e4f77e9e56459bb3bd5d663c2c43ba0 100644 --- a/configs/fast_mask_rcnn_r50_fpn_1x.py +++ b/configs/fast_mask_rcnn_r50_fpn_1x.py @@ -124,6 +124,7 @@ data = dict( proposal_file=data_root + 'proposals/rpn_r50_fpn_1x_val2017.pkl', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/fast_rcnn_r101_fpn_1x.py b/configs/fast_rcnn_r101_fpn_1x.py index 06d88126a1d6b0c9834654da6b571fffbebce3a7..2aafdb47bf0cbbe48b58d7d2764516ee1ae406d5 100644 --- a/configs/fast_rcnn_r101_fpn_1x.py +++ b/configs/fast_rcnn_r101_fpn_1x.py @@ -105,6 +105,7 @@ data = dict( proposal_file=data_root + 'proposals/rpn_r50_fpn_1x_val2017.pkl', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/fast_rcnn_r50_caffe_c4_1x.py b/configs/fast_rcnn_r50_caffe_c4_1x.py index d1c6f3ab56438876f4a5f79c1f6dde8b8d9de62e..7bb39f1c9f8ee714d4760fc8b20ba0999e9797ec 100644 --- a/configs/fast_rcnn_r50_caffe_c4_1x.py +++ b/configs/fast_rcnn_r50_caffe_c4_1x.py @@ -113,6 +113,7 @@ data = dict( proposal_file=data_root + 'proposals/rpn_r50_c4_1x_val2017.pkl', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/fast_rcnn_r50_fpn_1x.py b/configs/fast_rcnn_r50_fpn_1x.py index b22dede05d9a1fba1ba433985c20ea192f4c9ca0..1695186aab4b6b860fde72f68ef9f09434bf62d9 100644 --- a/configs/fast_rcnn_r50_fpn_1x.py +++ b/configs/fast_rcnn_r50_fpn_1x.py @@ -105,6 +105,7 @@ data = dict( proposal_file=data_root + 'proposals/rpn_r50_fpn_1x_val2017.pkl', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/faster_rcnn_ohem_r50_fpn_1x.py b/configs/faster_rcnn_ohem_r50_fpn_1x.py index e2dbc8df9918818b19164c157ca2142f110a8375..315aa613621baebd31f114cda6b752f871da5ba8 100644 --- a/configs/faster_rcnn_ohem_r50_fpn_1x.py +++ b/configs/faster_rcnn_ohem_r50_fpn_1x.py @@ -145,6 +145,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/faster_rcnn_r101_fpn_1x.py b/configs/faster_rcnn_r101_fpn_1x.py index e0ad7066f48d4e521bbce5b00d3f6d0a1841336c..df81b701ccf6f1b6e272c70cd30193f66159f13d 100644 --- a/configs/faster_rcnn_r101_fpn_1x.py +++ b/configs/faster_rcnn_r101_fpn_1x.py @@ -145,6 +145,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/faster_rcnn_r50_caffe_c4_1x.py b/configs/faster_rcnn_r50_caffe_c4_1x.py index ddd8113420a87555c496a564b3547253fee5f8ef..fcac778c97eaca9a1d9dfd1c10a7a9bd10d32c53 100644 --- a/configs/faster_rcnn_r50_caffe_c4_1x.py +++ b/configs/faster_rcnn_r50_caffe_c4_1x.py @@ -150,6 +150,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/faster_rcnn_r50_fpn_1x.py b/configs/faster_rcnn_r50_fpn_1x.py index 0c5e243ac2aeb8b222ccf45e73aa38853721f122..3dd19f7a0fc186363452f60419c81444e126414d 100644 --- a/configs/faster_rcnn_r50_fpn_1x.py +++ b/configs/faster_rcnn_r50_fpn_1x.py @@ -145,6 +145,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/faster_rcnn_x101_32x4d_fpn_1x.py b/configs/faster_rcnn_x101_32x4d_fpn_1x.py index 8f3c6f706f4dcd134587990670ab1fc99a7a2862..c1cd45168fcc27f98f3e14869c1caf73ed84af41 100644 --- a/configs/faster_rcnn_x101_32x4d_fpn_1x.py +++ b/configs/faster_rcnn_x101_32x4d_fpn_1x.py @@ -147,6 +147,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/faster_rcnn_x101_64x4d_fpn_1x.py b/configs/faster_rcnn_x101_64x4d_fpn_1x.py index 90ad0ac3a998e949abe0ec27b80dea3269f4a09a..fb09f2e1bed0540d0f7aacdcafbe37d012eed7b8 100644 --- a/configs/faster_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/faster_rcnn_x101_64x4d_fpn_1x.py @@ -147,6 +147,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/fcos/fcos_mstrain_640_800_r101_caffe_fpn_gn_2x_4gpu.py b/configs/fcos/fcos_mstrain_640_800_r101_caffe_fpn_gn_2x_4gpu.py index 24a5f1a8514489102c6fa660eb85017b60ae1e20..40a358e9445280c0b8627e21cd4b0a8b5c43d8bc 100644 --- a/configs/fcos/fcos_mstrain_640_800_r101_caffe_fpn_gn_2x_4gpu.py +++ b/configs/fcos/fcos_mstrain_640_800_r101_caffe_fpn_gn_2x_4gpu.py @@ -104,6 +104,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict( type='SGD', diff --git a/configs/fcos/fcos_mstrain_640_800_x101_64x4d_fpn_gn_2x.py b/configs/fcos/fcos_mstrain_640_800_x101_64x4d_fpn_gn_2x.py index 373fbf738e58a45e202bc95ab391114852c015dd..950873915c07d767e57aef28e534e2114117e3b8 100644 --- a/configs/fcos/fcos_mstrain_640_800_x101_64x4d_fpn_gn_2x.py +++ b/configs/fcos/fcos_mstrain_640_800_x101_64x4d_fpn_gn_2x.py @@ -105,6 +105,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict( type='SGD', diff --git a/configs/fcos/fcos_r50_caffe_fpn_gn_1x_4gpu.py b/configs/fcos/fcos_r50_caffe_fpn_gn_1x_4gpu.py index 9c2531e8fbde6a957273ad60209bcec17a8115ad..fb37d3149c85b95cd9e218dfd092de6ce348e387 100644 --- a/configs/fcos/fcos_r50_caffe_fpn_gn_1x_4gpu.py +++ b/configs/fcos/fcos_r50_caffe_fpn_gn_1x_4gpu.py @@ -100,6 +100,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict( type='SGD', diff --git a/configs/foveabox/fovea_align_gn_ms_r101_fpn_4gpu_2x.py b/configs/foveabox/fovea_align_gn_ms_r101_fpn_4gpu_2x.py index 5bbdc8bf22e5fa255dc2eab3d32556d252cc3c16..2869a57d5fc30a67a71e5274a77ab196e2b56a9f 100644 --- a/configs/foveabox/fovea_align_gn_ms_r101_fpn_4gpu_2x.py +++ b/configs/foveabox/fovea_align_gn_ms_r101_fpn_4gpu_2x.py @@ -95,6 +95,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/foveabox/fovea_align_gn_ms_r50_fpn_4gpu_2x.py b/configs/foveabox/fovea_align_gn_ms_r50_fpn_4gpu_2x.py index 217e0e5752c971aebf88d89d102b2b32030d4599..42691a46184ff281f7fa55a0eb7d3cecb07af3fd 100644 --- a/configs/foveabox/fovea_align_gn_ms_r50_fpn_4gpu_2x.py +++ b/configs/foveabox/fovea_align_gn_ms_r50_fpn_4gpu_2x.py @@ -95,6 +95,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/foveabox/fovea_align_gn_r101_fpn_4gpu_2x.py b/configs/foveabox/fovea_align_gn_r101_fpn_4gpu_2x.py index 21622eb1266e16ce2f0ee610d39d769d10488af7..0f5ef2ca16921e695b291dd2fae25204237cbb3e 100644 --- a/configs/foveabox/fovea_align_gn_r101_fpn_4gpu_2x.py +++ b/configs/foveabox/fovea_align_gn_r101_fpn_4gpu_2x.py @@ -90,6 +90,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/foveabox/fovea_align_gn_r50_fpn_4gpu_2x.py b/configs/foveabox/fovea_align_gn_r50_fpn_4gpu_2x.py index c9db4e21a6a01073a2315dcfcd441fc38d64d146..b2f58a9ec2f5ef723330fe5714a3a7b076cffee6 100644 --- a/configs/foveabox/fovea_align_gn_r50_fpn_4gpu_2x.py +++ b/configs/foveabox/fovea_align_gn_r50_fpn_4gpu_2x.py @@ -90,6 +90,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/foveabox/fovea_r50_fpn_4gpu_1x.py b/configs/foveabox/fovea_r50_fpn_4gpu_1x.py index 3e00be1058d9d7dfcd2168afff7ed04d9e95446c..bb67c646d311d4e1ccfb88963da33c8d49085c6f 100644 --- a/configs/foveabox/fovea_r50_fpn_4gpu_1x.py +++ b/configs/foveabox/fovea_r50_fpn_4gpu_1x.py @@ -90,6 +90,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/fp16/faster_rcnn_r50_fpn_fp16_1x.py b/configs/fp16/faster_rcnn_r50_fpn_fp16_1x.py index 20ff20b4b966e738c783a5afe1bc8d2f6d25e061..9b90538ecaa3b74f81e355eac283420c0f0fbdb0 100644 --- a/configs/fp16/faster_rcnn_r50_fpn_fp16_1x.py +++ b/configs/fp16/faster_rcnn_r50_fpn_fp16_1x.py @@ -148,6 +148,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/fp16/mask_rcnn_r50_fpn_fp16_1x.py b/configs/fp16/mask_rcnn_r50_fpn_fp16_1x.py index 23cbcf5267a44be55815ac680a5f06b48ef98d3e..4d747fcaea0a2b9ef74f936722a1191aa1015f19 100644 --- a/configs/fp16/mask_rcnn_r50_fpn_fp16_1x.py +++ b/configs/fp16/mask_rcnn_r50_fpn_fp16_1x.py @@ -162,6 +162,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) @@ -181,7 +182,6 @@ log_config = dict( # dict(type='TensorboardLoggerHook') ]) # yapf:enable -evaluation = dict(interval=1) # runtime settings total_epochs = 12 dist_params = dict(backend='nccl') diff --git a/configs/fp16/retinanet_r50_fpn_fp16_1x.py b/configs/fp16/retinanet_r50_fpn_fp16_1x.py index 4e91c46e78ecc0a124b649f3fdca1c027ad3d424..c3e2ffaf0e93fb4118ee7fbf1629f8752e1a7d6f 100644 --- a/configs/fp16/retinanet_r50_fpn_fp16_1x.py +++ b/configs/fp16/retinanet_r50_fpn_fp16_1x.py @@ -103,6 +103,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/free_anchor/retinanet_free_anchor_r101_fpn_1x.py b/configs/free_anchor/retinanet_free_anchor_r101_fpn_1x.py index f6df69813b433f32735194ad8e88a37b53ade836..76c16004f1bd3e54b4b98ee290527b7058fcc28d 100644 --- a/configs/free_anchor/retinanet_free_anchor_r101_fpn_1x.py +++ b/configs/free_anchor/retinanet_free_anchor_r101_fpn_1x.py @@ -94,6 +94,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/free_anchor/retinanet_free_anchor_r50_fpn_1x.py b/configs/free_anchor/retinanet_free_anchor_r50_fpn_1x.py index e14d82b1af62fcfa442437b7774c80b1b917f719..141137d87eb9d27cd94284b265e6739c0a726a0f 100644 --- a/configs/free_anchor/retinanet_free_anchor_r50_fpn_1x.py +++ b/configs/free_anchor/retinanet_free_anchor_r50_fpn_1x.py @@ -94,6 +94,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/free_anchor/retinanet_free_anchor_x101-32x4d_fpn_1x.py b/configs/free_anchor/retinanet_free_anchor_x101-32x4d_fpn_1x.py index ee35b35be4e0c095a26a5caca29fd62ac76fb972..2f00adb400ec040de6bd851b0ef9100a69cefb90 100644 --- a/configs/free_anchor/retinanet_free_anchor_x101-32x4d_fpn_1x.py +++ b/configs/free_anchor/retinanet_free_anchor_x101-32x4d_fpn_1x.py @@ -96,6 +96,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gcnet/mask_rcnn_r16_gcb_c3-c5_r50_fpn_1x.py b/configs/gcnet/mask_rcnn_r16_gcb_c3-c5_r50_fpn_1x.py index bc949074c831057dbde277b5b992d44daaceb824..e1d653a9e454c0dcc10e5a7ba1264c4eadcd5529 100644 --- a/configs/gcnet/mask_rcnn_r16_gcb_c3-c5_r50_fpn_1x.py +++ b/configs/gcnet/mask_rcnn_r16_gcb_c3-c5_r50_fpn_1x.py @@ -161,6 +161,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gcnet/mask_rcnn_r16_gcb_c3-c5_r50_fpn_syncbn_1x.py b/configs/gcnet/mask_rcnn_r16_gcb_c3-c5_r50_fpn_syncbn_1x.py index ad06c9b84a8d308c16709bcc6aac510949cefbc1..abd079e0abb19e9c3566db89e925fd8120f0c676 100644 --- a/configs/gcnet/mask_rcnn_r16_gcb_c3-c5_r50_fpn_syncbn_1x.py +++ b/configs/gcnet/mask_rcnn_r16_gcb_c3-c5_r50_fpn_syncbn_1x.py @@ -165,6 +165,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gcnet/mask_rcnn_r4_gcb_c3-c5_r50_fpn_1x.py b/configs/gcnet/mask_rcnn_r4_gcb_c3-c5_r50_fpn_1x.py index 5568b2f7987f79460b817f52b2298463268dfc64..a43f0011830d984a0c7056eacf80b61e17e9865c 100644 --- a/configs/gcnet/mask_rcnn_r4_gcb_c3-c5_r50_fpn_1x.py +++ b/configs/gcnet/mask_rcnn_r4_gcb_c3-c5_r50_fpn_1x.py @@ -161,6 +161,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gcnet/mask_rcnn_r4_gcb_c3-c5_r50_fpn_syncbn_1x.py b/configs/gcnet/mask_rcnn_r4_gcb_c3-c5_r50_fpn_syncbn_1x.py index 6a32126ec785724516a9a9d99b9f69ecc8ba6dfa..810b8063a2b90b9e54cb9885e8d535c50d368482 100644 --- a/configs/gcnet/mask_rcnn_r4_gcb_c3-c5_r50_fpn_syncbn_1x.py +++ b/configs/gcnet/mask_rcnn_r4_gcb_c3-c5_r50_fpn_syncbn_1x.py @@ -165,6 +165,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gcnet/mask_rcnn_r50_fpn_sbn_1x.py b/configs/gcnet/mask_rcnn_r50_fpn_sbn_1x.py index 819c78facd935fb62d0a01c92e8076598cf3933e..cbde867210a06ce16e8e531071b742b25e46f79e 100644 --- a/configs/gcnet/mask_rcnn_r50_fpn_sbn_1x.py +++ b/configs/gcnet/mask_rcnn_r50_fpn_sbn_1x.py @@ -163,6 +163,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/ghm/retinanet_ghm_r50_fpn_1x.py b/configs/ghm/retinanet_ghm_r50_fpn_1x.py index 9996d474f246ff30f1312fd1e2d8928e674ff85c..4eb43bca0195cd97c9f4401f7f2afd9921b7c22a 100644 --- a/configs/ghm/retinanet_ghm_r50_fpn_1x.py +++ b/configs/ghm/retinanet_ghm_r50_fpn_1x.py @@ -101,6 +101,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gn+ws/faster_rcnn_r50_fpn_gn_ws_1x.py b/configs/gn+ws/faster_rcnn_r50_fpn_gn_ws_1x.py index eef21dbf7e482eaee7a6b2a82d92dd2adb5e2ab9..2cd1969c56478e89e3268ecf7e6b2092f715354d 100644 --- a/configs/gn+ws/faster_rcnn_r50_fpn_gn_ws_1x.py +++ b/configs/gn+ws/faster_rcnn_r50_fpn_gn_ws_1x.py @@ -152,6 +152,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_20_23_24e.py b/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_20_23_24e.py index 8856c84ec27c03f29bef219bca7812b6e3be7d88..5a698f269d767b47b49cfb023357b933d52f3bb1 100644 --- a/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_20_23_24e.py +++ b/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_20_23_24e.py @@ -171,6 +171,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_2x.py b/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_2x.py index ce0348ff8ff0f7bf086e227ec81728623f46b5c4..00dc587a33b829808d241415731511649002779e 100644 --- a/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_2x.py +++ b/configs/gn+ws/mask_rcnn_r50_fpn_gn_ws_2x.py @@ -171,6 +171,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gn+ws/mask_rcnn_x101_32x4d_fpn_gn_ws_2x.py b/configs/gn+ws/mask_rcnn_x101_32x4d_fpn_gn_ws_2x.py index b250590d94af082702ddfb4284f4d11e3700eb57..11077506df6909bf914eb8eb84c3d512cc6a83ec 100644 --- a/configs/gn+ws/mask_rcnn_x101_32x4d_fpn_gn_ws_2x.py +++ b/configs/gn+ws/mask_rcnn_x101_32x4d_fpn_gn_ws_2x.py @@ -173,6 +173,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gn/mask_rcnn_r101_fpn_gn_2x.py b/configs/gn/mask_rcnn_r101_fpn_gn_2x.py index ae1aeb89d3e6bd70e1ef5ef50a32182911480763..d13670960ee48dd44eaa45102aa5bfd77e355fb8 100644 --- a/configs/gn/mask_rcnn_r101_fpn_gn_2x.py +++ b/configs/gn/mask_rcnn_r101_fpn_gn_2x.py @@ -167,6 +167,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gn/mask_rcnn_r50_fpn_gn_2x.py b/configs/gn/mask_rcnn_r50_fpn_gn_2x.py index 43ecf9ea9f1d1f48a22316b0fbcaba5fb103ba7c..e0e09b5687b884200f1f9315c737c9b124505e81 100644 --- a/configs/gn/mask_rcnn_r50_fpn_gn_2x.py +++ b/configs/gn/mask_rcnn_r50_fpn_gn_2x.py @@ -167,6 +167,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/gn/mask_rcnn_r50_fpn_gn_contrib_2x.py b/configs/gn/mask_rcnn_r50_fpn_gn_contrib_2x.py index ee4ffafdc0a80f1a2de4f6a8b4e24adbf217fe90..271f6d25d12c43329df74dc02cd5b38dee560058 100644 --- a/configs/gn/mask_rcnn_r50_fpn_gn_contrib_2x.py +++ b/configs/gn/mask_rcnn_r50_fpn_gn_contrib_2x.py @@ -167,6 +167,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/grid_rcnn/grid_rcnn_gn_head_r50_fpn_2x.py b/configs/grid_rcnn/grid_rcnn_gn_head_r50_fpn_2x.py index 5a2c071f70d224cf112c6f7846257ecb441f3630..48ba454e9873305c074c3dddb25d94fbd4e3b8bd 100644 --- a/configs/grid_rcnn/grid_rcnn_gn_head_r50_fpn_2x.py +++ b/configs/grid_rcnn/grid_rcnn_gn_head_r50_fpn_2x.py @@ -156,6 +156,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=None) diff --git a/configs/grid_rcnn/grid_rcnn_gn_head_x101_32x4d_fpn_2x.py b/configs/grid_rcnn/grid_rcnn_gn_head_x101_32x4d_fpn_2x.py index 989065ec7bb1f4e090a891bced85aaa6eb7544db..84ac88bc2aa441312e4171166ece427a60ef0ac5 100644 --- a/configs/grid_rcnn/grid_rcnn_gn_head_x101_32x4d_fpn_2x.py +++ b/configs/grid_rcnn/grid_rcnn_gn_head_x101_32x4d_fpn_2x.py @@ -158,6 +158,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=None) diff --git a/configs/guided_anchoring/ga_fast_r50_caffe_fpn_1x.py b/configs/guided_anchoring/ga_fast_r50_caffe_fpn_1x.py index 98fabd29ccb9042ba85f18db379d883a09e04f83..d5a4753ebec622e116eac0c5ba44dd081348b9da 100644 --- a/configs/guided_anchoring/ga_fast_r50_caffe_fpn_1x.py +++ b/configs/guided_anchoring/ga_fast_r50_caffe_fpn_1x.py @@ -107,6 +107,7 @@ data = dict( proposal_file=data_root + 'proposals/ga_rpn_r50_fpn_1x_val2017.pkl', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/guided_anchoring/ga_faster_r50_caffe_fpn_1x.py b/configs/guided_anchoring/ga_faster_r50_caffe_fpn_1x.py index 791368cd750f30a9cabab5cb542a5f370bbad073..57da8d486b43f4e588587bbacf3b1652c0e843e0 100644 --- a/configs/guided_anchoring/ga_faster_r50_caffe_fpn_1x.py +++ b/configs/guided_anchoring/ga_faster_r50_caffe_fpn_1x.py @@ -170,6 +170,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/guided_anchoring/ga_faster_x101_32x4d_fpn_1x.py b/configs/guided_anchoring/ga_faster_x101_32x4d_fpn_1x.py index b0f2cb3b9bfc306fc05f58bf9077b42a2080cb7d..8a77ae938e408c5f47f666a0295d7cecc11bcb79 100644 --- a/configs/guided_anchoring/ga_faster_x101_32x4d_fpn_1x.py +++ b/configs/guided_anchoring/ga_faster_x101_32x4d_fpn_1x.py @@ -170,6 +170,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/guided_anchoring/ga_retinanet_r50_caffe_fpn_1x.py b/configs/guided_anchoring/ga_retinanet_r50_caffe_fpn_1x.py index af5f67aa5faac195008d2379f474371455524472..084b851a87303be5aef934d603f6e287dbccbff7 100644 --- a/configs/guided_anchoring/ga_retinanet_r50_caffe_fpn_1x.py +++ b/configs/guided_anchoring/ga_retinanet_r50_caffe_fpn_1x.py @@ -127,6 +127,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/guided_anchoring/ga_retinanet_x101_32x4d_fpn_1x.py b/configs/guided_anchoring/ga_retinanet_x101_32x4d_fpn_1x.py index 455ccacc0abaa79d3e294a5f0dc16cb73b394568..d37cf062f2535371b0f66e76f87618fb6d9d1386 100644 --- a/configs/guided_anchoring/ga_retinanet_x101_32x4d_fpn_1x.py +++ b/configs/guided_anchoring/ga_retinanet_x101_32x4d_fpn_1x.py @@ -127,6 +127,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/guided_anchoring/ga_rpn_r101_caffe_rpn_1x.py b/configs/guided_anchoring/ga_rpn_r101_caffe_rpn_1x.py index 8d81f326d8253e34e6e41514615555ed9f56459b..6629f12bb8d24916e89be2923aef6d5abf3a6497 100644 --- a/configs/guided_anchoring/ga_rpn_r101_caffe_rpn_1x.py +++ b/configs/guided_anchoring/ga_rpn_r101_caffe_rpn_1x.py @@ -128,6 +128,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='proposal_fast') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) # runner configs diff --git a/configs/guided_anchoring/ga_rpn_r50_caffe_fpn_1x.py b/configs/guided_anchoring/ga_rpn_r50_caffe_fpn_1x.py index 9d6b7cebbb6dec4069d949a5ccc01acee3ca33b0..507849e3c59a47cf089f5af957d1093902da8a7c 100644 --- a/configs/guided_anchoring/ga_rpn_r50_caffe_fpn_1x.py +++ b/configs/guided_anchoring/ga_rpn_r50_caffe_fpn_1x.py @@ -128,6 +128,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='proposal_fast') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) # runner configs diff --git a/configs/guided_anchoring/ga_rpn_x101_32x4d_fpn_1x.py b/configs/guided_anchoring/ga_rpn_x101_32x4d_fpn_1x.py index 1c5b7a0f89bdc9aab8b0e8cc690a6d7abb7dc26c..97f684cec1cc2e3605dd22efaa0c596f6ad93fb7 100644 --- a/configs/guided_anchoring/ga_rpn_x101_32x4d_fpn_1x.py +++ b/configs/guided_anchoring/ga_rpn_x101_32x4d_fpn_1x.py @@ -128,6 +128,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='proposal_fast') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) # runner configs diff --git a/configs/hrnet/cascade_mask_rcnn_hrnetv2p_w32_20e.py b/configs/hrnet/cascade_mask_rcnn_hrnetv2p_w32_20e.py index ae76e5a26985c90eeac810a72d0cdcbb2a415dd5..feb96f579b6cba90a2c7a0e2b1325e6cd559b72b 100644 --- a/configs/hrnet/cascade_mask_rcnn_hrnetv2p_w32_20e.py +++ b/configs/hrnet/cascade_mask_rcnn_hrnetv2p_w32_20e.py @@ -239,6 +239,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/hrnet/cascade_rcnn_hrnetv2p_w32_20e.py b/configs/hrnet/cascade_rcnn_hrnetv2p_w32_20e.py index 48c013764b746dab30a61a664a2f737f9aab54f0..7fc85b80e9262519cedab83f540fba615149464b 100644 --- a/configs/hrnet/cascade_rcnn_hrnetv2p_w32_20e.py +++ b/configs/hrnet/cascade_rcnn_hrnetv2p_w32_20e.py @@ -220,6 +220,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/hrnet/faster_rcnn_hrnetv2p_w18_1x.py b/configs/hrnet/faster_rcnn_hrnetv2p_w18_1x.py index 6baba422a7086e95e9bfdcf81fc948681151b011..44a0c46e62f8acb231b1ec35da47c7d5e5570b8c 100644 --- a/configs/hrnet/faster_rcnn_hrnetv2p_w18_1x.py +++ b/configs/hrnet/faster_rcnn_hrnetv2p_w18_1x.py @@ -161,6 +161,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/hrnet/faster_rcnn_hrnetv2p_w32_1x.py b/configs/hrnet/faster_rcnn_hrnetv2p_w32_1x.py index c04b78a168e8dbe00579ec5c0a93da2281a832fc..820dda100fcaa108418444ff16025e2b55447597 100644 --- a/configs/hrnet/faster_rcnn_hrnetv2p_w32_1x.py +++ b/configs/hrnet/faster_rcnn_hrnetv2p_w32_1x.py @@ -161,6 +161,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/hrnet/faster_rcnn_hrnetv2p_w40_1x.py b/configs/hrnet/faster_rcnn_hrnetv2p_w40_1x.py index 0fa5071c247f0dca8359e9c99265059007025c5a..6a9bcf03b8b497e7ce39b49e46a29fcb91bfd3f7 100644 --- a/configs/hrnet/faster_rcnn_hrnetv2p_w40_1x.py +++ b/configs/hrnet/faster_rcnn_hrnetv2p_w40_1x.py @@ -161,6 +161,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/hrnet/fcos_hrnetv2p_w32_gn_1x_4gpu.py b/configs/hrnet/fcos_hrnetv2p_w32_gn_1x_4gpu.py index b699a63e9d7f37f5631eeefa2d2c4d2c91e46f5a..e2c52250c96095d328380112f56234b3df5ec7dd 100644 --- a/configs/hrnet/fcos_hrnetv2p_w32_gn_1x_4gpu.py +++ b/configs/hrnet/fcos_hrnetv2p_w32_gn_1x_4gpu.py @@ -116,6 +116,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict( type='SGD', diff --git a/configs/hrnet/htc_hrnetv2p_w32_20e.py b/configs/hrnet/htc_hrnetv2p_w32_20e.py index a1489638b6172ceea14e4d01b567a2eab0278fd1..cc5369bec9dc646f10eed5032bf291fc4e412d99 100644 --- a/configs/hrnet/htc_hrnetv2p_w32_20e.py +++ b/configs/hrnet/htc_hrnetv2p_w32_20e.py @@ -261,6 +261,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/hrnet/mask_rcnn_hrnetv2p_w18_1x.py b/configs/hrnet/mask_rcnn_hrnetv2p_w18_1x.py index 153ce55e54e5329a4cd7fed284d8463e249cc239..0e562ffb4af7f640be06a9036e15cd457884ac3d 100644 --- a/configs/hrnet/mask_rcnn_hrnetv2p_w18_1x.py +++ b/configs/hrnet/mask_rcnn_hrnetv2p_w18_1x.py @@ -175,6 +175,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer # if you use 8 GPUs for training, please change lr to 0.02 optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) diff --git a/configs/hrnet/mask_rcnn_hrnetv2p_w32_1x.py b/configs/hrnet/mask_rcnn_hrnetv2p_w32_1x.py index a334ca3fcc30d076cb15c6b5f3dfc5c61d124b21..54eccb902452e130ff0eba165ae31de6512c0dcf 100644 --- a/configs/hrnet/mask_rcnn_hrnetv2p_w32_1x.py +++ b/configs/hrnet/mask_rcnn_hrnetv2p_w32_1x.py @@ -174,6 +174,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e.py b/configs/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e.py index b9139b3723c65df737a27fe610d5bb1c26882d9f..564f05c2d4eef113a4741a3f820416cd80554bf7 100644 --- a/configs/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e.py +++ b/configs/htc/htc_dconv_c3-c5_mstrain_400_1400_x101_64x4d_fpn_20e.py @@ -257,6 +257,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/htc/htc_r101_fpn_20e.py b/configs/htc/htc_r101_fpn_20e.py index 4f0ec727ad96ccdf0d86d52f73e2f4018d63bf97..9b7b5f000663ccfbfc4d541960ad8292a5e1a463 100644 --- a/configs/htc/htc_r101_fpn_20e.py +++ b/configs/htc/htc_r101_fpn_20e.py @@ -245,6 +245,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/htc/htc_r50_fpn_1x.py b/configs/htc/htc_r50_fpn_1x.py index 34ac663589542b1cd869e2e4a820f69ed315d6a8..7fc72fa38c396c6a77748bb0dc85fa87744a54bd 100644 --- a/configs/htc/htc_r50_fpn_1x.py +++ b/configs/htc/htc_r50_fpn_1x.py @@ -245,6 +245,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/htc/htc_r50_fpn_20e.py b/configs/htc/htc_r50_fpn_20e.py index 47714ac17ae2520897498c19117a4913dddb10f0..a14c256f0c93b7baf9866269e22c4f6335f0df1e 100644 --- a/configs/htc/htc_r50_fpn_20e.py +++ b/configs/htc/htc_r50_fpn_20e.py @@ -245,6 +245,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/htc/htc_without_semantic_r50_fpn_1x.py b/configs/htc/htc_without_semantic_r50_fpn_1x.py index de5dfcca6179065b8108d7d044ff2522bef026af..708e3b03c1d21e63c66e5970b192f3e6e7acf190 100644 --- a/configs/htc/htc_without_semantic_r50_fpn_1x.py +++ b/configs/htc/htc_without_semantic_r50_fpn_1x.py @@ -225,6 +225,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/htc/htc_x101_32x4d_fpn_20e_16gpu.py b/configs/htc/htc_x101_32x4d_fpn_20e_16gpu.py index b211ba97412a9432d15ce5e6c80245e6c200893e..255bd5c846e6cb1fcf2054b68d7b4f4aa39f859b 100644 --- a/configs/htc/htc_x101_32x4d_fpn_20e_16gpu.py +++ b/configs/htc/htc_x101_32x4d_fpn_20e_16gpu.py @@ -247,6 +247,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/htc/htc_x101_64x4d_fpn_20e_16gpu.py b/configs/htc/htc_x101_64x4d_fpn_20e_16gpu.py index 0186d72a792f0ce6439d0b9f96ac1e1fbbb65ef4..61a4448fabe4fe6ef6f4d7dde690c79f7553ce26 100644 --- a/configs/htc/htc_x101_64x4d_fpn_20e_16gpu.py +++ b/configs/htc/htc_x101_64x4d_fpn_20e_16gpu.py @@ -247,6 +247,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/instaboost/cascade_mask_rcnn_r50_fpn_instaboost_4x.py b/configs/instaboost/cascade_mask_rcnn_r50_fpn_instaboost_4x.py index d28e73b5ee74b91d84a734f028238a87a29dec6f..64ac47d1d7f39699b02dbff546d076dbf8c6e0ed 100644 --- a/configs/instaboost/cascade_mask_rcnn_r50_fpn_instaboost_4x.py +++ b/configs/instaboost/cascade_mask_rcnn_r50_fpn_instaboost_4x.py @@ -234,6 +234,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/instaboost/mask_rcnn_r50_fpn_instaboost_4x.py b/configs/instaboost/mask_rcnn_r50_fpn_instaboost_4x.py index f31a5953722858ebb7fe3d5aca573b1799413b7d..fe143a6e6d2c84dac516b0fc0d9aa5619d232e11 100644 --- a/configs/instaboost/mask_rcnn_r50_fpn_instaboost_4x.py +++ b/configs/instaboost/mask_rcnn_r50_fpn_instaboost_4x.py @@ -170,6 +170,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) @@ -189,7 +190,6 @@ log_config = dict( # dict(type='TensorboardLoggerHook') ]) # yapf:enable -evaluation = dict(interval=1) # runtime settings total_epochs = 48 dist_params = dict(backend='nccl') diff --git a/configs/instaboost/ssd300_coco_instaboost_4x.py b/configs/instaboost/ssd300_coco_instaboost_4x.py index 3fbe0986b4929147e348bbf67615671ad1fd00e1..3c7de8700b37b298ee3608f0471340c457afada5 100644 --- a/configs/instaboost/ssd300_coco_instaboost_4x.py +++ b/configs/instaboost/ssd300_coco_instaboost_4x.py @@ -116,6 +116,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=2e-3, momentum=0.9, weight_decay=5e-4) optimizer_config = dict() diff --git a/configs/libra_rcnn/libra_fast_rcnn_r50_fpn_1x.py b/configs/libra_rcnn/libra_fast_rcnn_r50_fpn_1x.py index 5855f2395c0272ef29699d1fa45426f0f50ca1cf..aea0ed96c374fd59544ef62ea66afae7046d2bd9 100644 --- a/configs/libra_rcnn/libra_fast_rcnn_r50_fpn_1x.py +++ b/configs/libra_rcnn/libra_fast_rcnn_r50_fpn_1x.py @@ -124,6 +124,7 @@ data = dict( proposal_file=data_root + 'libra_proposals/rpn_r50_fpn_1x_val2017.pkl', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/libra_rcnn/libra_faster_rcnn_r101_fpn_1x.py b/configs/libra_rcnn/libra_faster_rcnn_r101_fpn_1x.py index fec7052161e6423cff6cc8472c4d243c2eee11d4..3edd7dffbdd5e78852f3b94f2910fe640efec2c4 100644 --- a/configs/libra_rcnn/libra_faster_rcnn_r101_fpn_1x.py +++ b/configs/libra_rcnn/libra_faster_rcnn_r101_fpn_1x.py @@ -163,6 +163,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/libra_rcnn/libra_faster_rcnn_r50_fpn_1x.py b/configs/libra_rcnn/libra_faster_rcnn_r50_fpn_1x.py index 8e1284a6e597b079a73f2fb8e4055bb4e3bc6a37..0e97617f5ab088d2d3d9dc61ffa74f727315e81c 100644 --- a/configs/libra_rcnn/libra_faster_rcnn_r50_fpn_1x.py +++ b/configs/libra_rcnn/libra_faster_rcnn_r50_fpn_1x.py @@ -163,6 +163,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/libra_rcnn/libra_faster_rcnn_x101_64x4d_fpn_1x.py b/configs/libra_rcnn/libra_faster_rcnn_x101_64x4d_fpn_1x.py index fbd50c0425d258c6fce94726214847da162cbf8b..6a06465c32e5bc723fc1d079a99e800a5c631665 100644 --- a/configs/libra_rcnn/libra_faster_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/libra_rcnn/libra_faster_rcnn_x101_64x4d_fpn_1x.py @@ -165,6 +165,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/libra_rcnn/libra_retinanet_r50_fpn_1x.py b/configs/libra_rcnn/libra_retinanet_r50_fpn_1x.py index 87fb6aa7bcdd30e75023a652bfe17e3fd9728ef9..acb929f345fed5df9100187484d4e5a7747835f8 100644 --- a/configs/libra_rcnn/libra_retinanet_r50_fpn_1x.py +++ b/configs/libra_rcnn/libra_retinanet_r50_fpn_1x.py @@ -113,6 +113,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/mask_rcnn_r101_fpn_1x.py b/configs/mask_rcnn_r101_fpn_1x.py index 280808cf92f4a922810b0e298f48951c4e2e60a7..30807e6a4a4401a7edc23d6e8f5b715160cd6326 100644 --- a/configs/mask_rcnn_r101_fpn_1x.py +++ b/configs/mask_rcnn_r101_fpn_1x.py @@ -159,6 +159,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/mask_rcnn_r50_caffe_c4_1x.py b/configs/mask_rcnn_r50_caffe_c4_1x.py index 15fdafb0e95c4ef8c311ed7ce8625e8f61fbb559..b5077715f2e6f7e3dfd1a08fd89b2a4068f82cb8 100644 --- a/configs/mask_rcnn_r50_caffe_c4_1x.py +++ b/configs/mask_rcnn_r50_caffe_c4_1x.py @@ -163,6 +163,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/mask_rcnn_r50_fpn_1x.py b/configs/mask_rcnn_r50_fpn_1x.py index 04f6d22ef1ef1df218450faba7d8f07422708c01..73857c62003d4f7f10e5445d44e79e0f616576ff 100644 --- a/configs/mask_rcnn_r50_fpn_1x.py +++ b/configs/mask_rcnn_r50_fpn_1x.py @@ -159,6 +159,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) @@ -178,7 +179,6 @@ log_config = dict( # dict(type='TensorboardLoggerHook') ]) # yapf:enable -evaluation = dict(interval=1) # runtime settings total_epochs = 12 dist_params = dict(backend='nccl') diff --git a/configs/mask_rcnn_x101_32x4d_fpn_1x.py b/configs/mask_rcnn_x101_32x4d_fpn_1x.py index 74d6823f6beba6807c8ce2dc35c0c7984d85957b..24c7fd4efd252827f39137cc04974ba629a912be 100644 --- a/configs/mask_rcnn_x101_32x4d_fpn_1x.py +++ b/configs/mask_rcnn_x101_32x4d_fpn_1x.py @@ -161,6 +161,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/mask_rcnn_x101_64x4d_fpn_1x.py b/configs/mask_rcnn_x101_64x4d_fpn_1x.py index 18e4244c8c77d2e452e93e6ae13f004a5d629dbf..89b4499b3185bcbf0736bc5ec1c37feb7519f35d 100644 --- a/configs/mask_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/mask_rcnn_x101_64x4d_fpn_1x.py @@ -161,6 +161,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/ms_rcnn/ms_rcnn_r101_caffe_fpn_1x.py b/configs/ms_rcnn/ms_rcnn_r101_caffe_fpn_1x.py index 0a523f62333383b30e28db21cc5feca367d87f7a..c59a51316dfc853a43b8234993393a043b163e90 100644 --- a/configs/ms_rcnn/ms_rcnn_r101_caffe_fpn_1x.py +++ b/configs/ms_rcnn/ms_rcnn_r101_caffe_fpn_1x.py @@ -170,6 +170,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/ms_rcnn/ms_rcnn_r50_caffe_fpn_1x.py b/configs/ms_rcnn/ms_rcnn_r50_caffe_fpn_1x.py index 6f2a7916ecf4140631576d91e3e645a2d1a92950..3476a01a32c4c112c78e5853ea2e79fe60793ed1 100644 --- a/configs/ms_rcnn/ms_rcnn_r50_caffe_fpn_1x.py +++ b/configs/ms_rcnn/ms_rcnn_r50_caffe_fpn_1x.py @@ -170,6 +170,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/ms_rcnn/ms_rcnn_x101_64x4d_fpn_1x.py b/configs/ms_rcnn/ms_rcnn_x101_64x4d_fpn_1x.py index 009b0ad3a8257b401d3dd5a3b0299fd05481cda4..4533919cd59b5961a0f0a4deda0628f6ab46130d 100644 --- a/configs/ms_rcnn/ms_rcnn_x101_64x4d_fpn_1x.py +++ b/configs/ms_rcnn/ms_rcnn_x101_64x4d_fpn_1x.py @@ -171,6 +171,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/nas_fpn/retinanet_crop640_r50_fpn_50e.py b/configs/nas_fpn/retinanet_crop640_r50_fpn_50e.py index 1587d876632710903ace05bd18e74b9f43f6b638..7c05c18cd4a2272fc6a6109ba38c61b7eb198c9b 100644 --- a/configs/nas_fpn/retinanet_crop640_r50_fpn_50e.py +++ b/configs/nas_fpn/retinanet_crop640_r50_fpn_50e.py @@ -114,6 +114,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict( type='SGD', diff --git a/configs/nas_fpn/retinanet_crop640_r50_nasfpn_50e.py b/configs/nas_fpn/retinanet_crop640_r50_nasfpn_50e.py index e5a37042bbf0fae1a00899b44e8496a86795f40a..30b1cbe76330b6ed894bdd9b4179dcd3cffafcd8 100644 --- a/configs/nas_fpn/retinanet_crop640_r50_nasfpn_50e.py +++ b/configs/nas_fpn/retinanet_crop640_r50_nasfpn_50e.py @@ -113,6 +113,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict( type='SGD', diff --git a/configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py b/configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py index b4b533a2b300efce356d7e6542f52ed0b997f8de..5614029bd4be4a90d9e3379b3eaf24d1b46bb9e0 100644 --- a/configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py +++ b/configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py @@ -151,6 +151,7 @@ data = dict( ann_file=data_root + 'VOC2007/ImageSets/Main/test.txt', img_prefix=data_root + 'VOC2007/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='mAP') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/pascal_voc/ssd300_voc.py b/configs/pascal_voc/ssd300_voc.py index 2a5756d5fe0cc366d531a662391309c28d2c963d..4589424d3d3924e37dbb8ec564ede41b6225e26b 100644 --- a/configs/pascal_voc/ssd300_voc.py +++ b/configs/pascal_voc/ssd300_voc.py @@ -108,6 +108,7 @@ data = dict( ann_file=data_root + 'VOC2007/ImageSets/Main/test.txt', img_prefix=data_root + 'VOC2007/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='mAP') # optimizer optimizer = dict(type='SGD', lr=1e-3, momentum=0.9, weight_decay=5e-4) optimizer_config = dict() diff --git a/configs/pascal_voc/ssd512_voc.py b/configs/pascal_voc/ssd512_voc.py index 4fa7df658a755e67c74c3c454bf2f90e4423a9b5..c81e5473ad82b343fe09df3ccd95771a75597027 100644 --- a/configs/pascal_voc/ssd512_voc.py +++ b/configs/pascal_voc/ssd512_voc.py @@ -108,6 +108,7 @@ data = dict( ann_file=data_root + 'VOC2007/ImageSets/Main/test.txt', img_prefix=data_root + 'VOC2007/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='mAP') # optimizer optimizer = dict(type='SGD', lr=1e-3, momentum=0.9, weight_decay=5e-4) optimizer_config = dict() diff --git a/configs/reppoints/bbox_r50_grid_center_fpn_1x.py b/configs/reppoints/bbox_r50_grid_center_fpn_1x.py index dd3de053d0137b1159d676af5da20ed8830d5bee..7719cd5a32f05ed6af5de6d62d7b7131eba665e0 100644 --- a/configs/reppoints/bbox_r50_grid_center_fpn_1x.py +++ b/configs/reppoints/bbox_r50_grid_center_fpn_1x.py @@ -112,6 +112,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/bbox_r50_grid_fpn_1x.py b/configs/reppoints/bbox_r50_grid_fpn_1x.py index be175722f15c900f0634bf2de3fd2f8022afc70a..7420611a2ec957694eb1dc32072179bdd29d115c 100644 --- a/configs/reppoints/bbox_r50_grid_fpn_1x.py +++ b/configs/reppoints/bbox_r50_grid_fpn_1x.py @@ -117,6 +117,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_minmax_r50_fpn_1x.py b/configs/reppoints/reppoints_minmax_r50_fpn_1x.py index 21091f21719f3d9f50e7939ba56a9158133a81b0..76cbd4bfb644b1f7020697044e207e8005b91b1a 100644 --- a/configs/reppoints/reppoints_minmax_r50_fpn_1x.py +++ b/configs/reppoints/reppoints_minmax_r50_fpn_1x.py @@ -111,6 +111,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_moment_r101_dcn_fpn_2x.py b/configs/reppoints/reppoints_moment_r101_dcn_fpn_2x.py index e885dddec79365a877ba80b65b51ee5d55cfcfc7..c6891a7626d0c2ff365eb235fb2cbb8479f0e52f 100644 --- a/configs/reppoints/reppoints_moment_r101_dcn_fpn_2x.py +++ b/configs/reppoints/reppoints_moment_r101_dcn_fpn_2x.py @@ -114,6 +114,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_moment_r101_dcn_fpn_2x_mt.py b/configs/reppoints/reppoints_moment_r101_dcn_fpn_2x_mt.py index 88eff2a32169423cf046f8c7b6d15a5994793e8c..7a97d4914465134b81990b66b15d92e99ceb55fa 100644 --- a/configs/reppoints/reppoints_moment_r101_dcn_fpn_2x_mt.py +++ b/configs/reppoints/reppoints_moment_r101_dcn_fpn_2x_mt.py @@ -118,6 +118,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_moment_r101_fpn_2x.py b/configs/reppoints/reppoints_moment_r101_fpn_2x.py index 1459f8af093f797054a532e8f3c4bcf68c369762..9bf2631c6020498be716e5fea3bd34d9e21a2214 100644 --- a/configs/reppoints/reppoints_moment_r101_fpn_2x.py +++ b/configs/reppoints/reppoints_moment_r101_fpn_2x.py @@ -111,6 +111,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_moment_r101_fpn_2x_mt.py b/configs/reppoints/reppoints_moment_r101_fpn_2x_mt.py index 25c876ca5995b611394cf0e04ec917472ad7cace..a96549acd3b74d9a7661fb249b366aa2c4c79f33 100644 --- a/configs/reppoints/reppoints_moment_r101_fpn_2x_mt.py +++ b/configs/reppoints/reppoints_moment_r101_fpn_2x_mt.py @@ -115,6 +115,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_moment_r50_fpn_1x.py b/configs/reppoints/reppoints_moment_r50_fpn_1x.py index d9bd855c0d231ebdcc8ecfb9b5f6872713922fb6..bfec877ae379a0a4e598a4d6ea54cf569f8ca119 100644 --- a/configs/reppoints/reppoints_moment_r50_fpn_1x.py +++ b/configs/reppoints/reppoints_moment_r50_fpn_1x.py @@ -111,6 +111,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_moment_r50_fpn_2x.py b/configs/reppoints/reppoints_moment_r50_fpn_2x.py index be6be0e4526f45cc5f31365cf411ac4442ee0130..76cf73a49e9fb5b65fee7e1ab9263cb93adfde3b 100644 --- a/configs/reppoints/reppoints_moment_r50_fpn_2x.py +++ b/configs/reppoints/reppoints_moment_r50_fpn_2x.py @@ -111,6 +111,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_moment_r50_fpn_2x_mt.py b/configs/reppoints/reppoints_moment_r50_fpn_2x_mt.py index 4160c9b189c3d3d72bee25328e93f421b02804e2..962a6a97fbd866dc1e0a59bec9261e92d88f6a17 100644 --- a/configs/reppoints/reppoints_moment_r50_fpn_2x_mt.py +++ b/configs/reppoints/reppoints_moment_r50_fpn_2x_mt.py @@ -115,6 +115,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_moment_x101_dcn_fpn_2x.py b/configs/reppoints/reppoints_moment_x101_dcn_fpn_2x.py index d4a4aba18e733048895763feda1c3c546e49f6d7..901b7ef7cad1a95ecbec7c3aa52331a3909354fc 100644 --- a/configs/reppoints/reppoints_moment_x101_dcn_fpn_2x.py +++ b/configs/reppoints/reppoints_moment_x101_dcn_fpn_2x.py @@ -119,6 +119,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_moment_x101_dcn_fpn_2x_mt.py b/configs/reppoints/reppoints_moment_x101_dcn_fpn_2x_mt.py index a8de14aa19f80722e428a98606f048cbc424702b..4cabf9822a4f46555d6380d8f093a446be53b606 100644 --- a/configs/reppoints/reppoints_moment_x101_dcn_fpn_2x_mt.py +++ b/configs/reppoints/reppoints_moment_x101_dcn_fpn_2x_mt.py @@ -123,6 +123,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/reppoints/reppoints_partial_minmax_r50_fpn_1x.py b/configs/reppoints/reppoints_partial_minmax_r50_fpn_1x.py index c01d622f814642dade44ad4490eaa784ed5d8998..1409b4e2c3bfa827a8607c66d70717b0d613a0ed 100644 --- a/configs/reppoints/reppoints_partial_minmax_r50_fpn_1x.py +++ b/configs/reppoints/reppoints_partial_minmax_r50_fpn_1x.py @@ -111,6 +111,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/retinanet_r101_fpn_1x.py b/configs/retinanet_r101_fpn_1x.py index 71fea3b86dbb872dac0e5bdc04e3dace8ee8a8c3..3316ec4dd989d067296a3402ba1453911ec100d1 100644 --- a/configs/retinanet_r101_fpn_1x.py +++ b/configs/retinanet_r101_fpn_1x.py @@ -100,6 +100,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/retinanet_r50_fpn_1x.py b/configs/retinanet_r50_fpn_1x.py index 51381885e516c1db3c4f157638745f43fab507bf..15e1611b04efb726a60c1ec3f929b21f98dd9977 100644 --- a/configs/retinanet_r50_fpn_1x.py +++ b/configs/retinanet_r50_fpn_1x.py @@ -100,6 +100,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/retinanet_x101_32x4d_fpn_1x.py b/configs/retinanet_x101_32x4d_fpn_1x.py index d388d91f910d80d7eaf59ec336c88ff8a85cdf4e..653e54116371a03d8dd4644137bad78b0cff5029 100644 --- a/configs/retinanet_x101_32x4d_fpn_1x.py +++ b/configs/retinanet_x101_32x4d_fpn_1x.py @@ -102,6 +102,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/retinanet_x101_64x4d_fpn_1x.py b/configs/retinanet_x101_64x4d_fpn_1x.py index 430ed367d7573e45418905ed0c87241eec225c80..c8be724f92d2a09198980ad017f4851b0be09359 100644 --- a/configs/retinanet_x101_64x4d_fpn_1x.py +++ b/configs/retinanet_x101_64x4d_fpn_1x.py @@ -102,6 +102,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2)) diff --git a/configs/rpn_r101_fpn_1x.py b/configs/rpn_r101_fpn_1x.py index bcda8c19c748a5798bd8b0d36ea7b2a7d926a403..ed90c4529b45c686ff354178ac4f56046665b064 100644 --- a/configs/rpn_r101_fpn_1x.py +++ b/configs/rpn_r101_fpn_1x.py @@ -100,6 +100,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='proposal_fast') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) # runner configs diff --git a/configs/rpn_r50_caffe_c4_1x.py b/configs/rpn_r50_caffe_c4_1x.py index 3d7d15b589bda64527ee5705424720352f8b7496..c0b05a8a994d137131a6ac5abd4d1970786c3925 100644 --- a/configs/rpn_r50_caffe_c4_1x.py +++ b/configs/rpn_r50_caffe_c4_1x.py @@ -100,6 +100,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='proposal_fast') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) # runner configs diff --git a/configs/rpn_r50_fpn_1x.py b/configs/rpn_r50_fpn_1x.py index b8928257591ab7f4503bf5fb1ca105ef60e15f0d..1ace04bca920dddef3fe6f3bc287542dc1257ee0 100644 --- a/configs/rpn_r50_fpn_1x.py +++ b/configs/rpn_r50_fpn_1x.py @@ -100,6 +100,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='proposal_fast') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) # runner configs diff --git a/configs/rpn_x101_32x4d_fpn_1x.py b/configs/rpn_x101_32x4d_fpn_1x.py index 709b5de56bb5fd759c1e1104ae2105ac949ffd45..ce7a978b63ff36223e91e80f64eba9d26dd043a6 100644 --- a/configs/rpn_x101_32x4d_fpn_1x.py +++ b/configs/rpn_x101_32x4d_fpn_1x.py @@ -102,6 +102,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='proposal_fast') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) # runner configs diff --git a/configs/rpn_x101_64x4d_fpn_1x.py b/configs/rpn_x101_64x4d_fpn_1x.py index b2946d10aee77b16b3d1067ab068606cceb1c137..6cc50f4c46d946545e8669926af8047a06bb41c2 100644 --- a/configs/rpn_x101_64x4d_fpn_1x.py +++ b/configs/rpn_x101_64x4d_fpn_1x.py @@ -102,6 +102,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='proposal_fast') # optimizer optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) # runner configs diff --git a/configs/scratch/scratch_faster_rcnn_r50_fpn_gn_6x.py b/configs/scratch/scratch_faster_rcnn_r50_fpn_gn_6x.py index 5621d077d3ae7cdeef181e060483321c7580e085..2a5935148d6d0531946bf8d783a0b23717484c99 100644 --- a/configs/scratch/scratch_faster_rcnn_r50_fpn_gn_6x.py +++ b/configs/scratch/scratch_faster_rcnn_r50_fpn_gn_6x.py @@ -150,6 +150,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict( type='SGD', diff --git a/configs/scratch/scratch_mask_rcnn_r50_fpn_gn_6x.py b/configs/scratch/scratch_mask_rcnn_r50_fpn_gn_6x.py index 321619d9825801d181fd2a1b47fe10cefb4aaa95..1f389cd58fd05fe35e83c344b63924bfb8014a85 100644 --- a/configs/scratch/scratch_mask_rcnn_r50_fpn_gn_6x.py +++ b/configs/scratch/scratch_mask_rcnn_r50_fpn_gn_6x.py @@ -167,6 +167,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric=['bbox', 'segm']) # optimizer optimizer = dict( type='SGD', diff --git a/configs/ssd300_coco.py b/configs/ssd300_coco.py index f34d52e1b2d2a39723bf183c6a140ca2f808df2f..35219fac316e419149f78c6a0be27d34600e951a 100644 --- a/configs/ssd300_coco.py +++ b/configs/ssd300_coco.py @@ -105,6 +105,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=2e-3, momentum=0.9, weight_decay=5e-4) optimizer_config = dict() diff --git a/configs/ssd512_coco.py b/configs/ssd512_coco.py index a23a1b67dd4c20362df5d6daad34ae731ca12173..e6534c516168fe7e9d91ff7f60436b2e283f84cc 100644 --- a/configs/ssd512_coco.py +++ b/configs/ssd512_coco.py @@ -105,6 +105,7 @@ data = dict( ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') # optimizer optimizer = dict(type='SGD', lr=2e-3, momentum=0.9, weight_decay=5e-4) optimizer_config = dict() diff --git a/docs/GETTING_STARTED.md b/docs/GETTING_STARTED.md index e63882efedac75a47e935c9ba263e0eaf7009a7b..05d4b867f343c6c5417941a2c3c7b2348d47a915 100644 --- a/docs/GETTING_STARTED.md +++ b/docs/GETTING_STARTED.md @@ -26,14 +26,16 @@ python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [- Optional arguments: - `RESULT_FILE`: Filename of the output results in pickle format. If not specified, the results will not be saved to a file. -- `EVAL_METRICS`: Items to be evaluated on the results. Allowed values are: `proposal_fast`, `proposal`, `bbox`, `segm`, `keypoints`. -- `--show`: If specified, detection results will be plotted on the images and shown in a new window. It is only applicable to single GPU testing. Please make sure that GUI is available in your environment, otherwise you may encounter the error like `cannot connect to X server`. +- `EVAL_METRICS`: Items to be evaluated on the results. Allowed values depend on the dataset, e.g., `proposal_fast`, `proposal`, `bbox`, `segm` are available for COCO and `mAP`, `recall` for PASCAL VOC. +- `--show`: If specified, detection results will be plotted on the images and shown in a new window. It is only applicable to single GPU testing and used for debugging and visualization. Please make sure that GUI is available in your environment, otherwise you may encounter the error like `cannot connect to X server`. + +If you would like to evaluate the dataset, do not specify `--show` at the same time. Examples: -Assume that you have already downloaded the checkpoints to `checkpoints/`. +Assume that you have already downloaded the checkpoints to the directory `checkpoints/`. -1. Test Faster R-CNN and show the results. +1. Test Faster R-CNN and visualize the results. Press any key for the next image. ```shell python tools/test.py configs/faster_rcnn_r50_fpn_1x.py \ @@ -41,12 +43,12 @@ python tools/test.py configs/faster_rcnn_r50_fpn_1x.py \ --show ``` -2. Test Mask R-CNN and evaluate the bbox and mask AP. +2. Test Faster R-CNN on PASCAL VOC (without saving the test results) and evaluate the mAP. ```shell -python tools/test.py configs/mask_rcnn_r50_fpn_1x.py \ - checkpoints/mask_rcnn_r50_fpn_1x_20181010-069fa190.pth \ - --out results.pkl --eval bbox segm +python tools/test.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc.py \ + checkpoints/SOME_CHECKPOINT.pth \ + --eval mAP ``` 3. Test Mask R-CNN with 8 GPUs, and evaluate the bbox and mask AP. @@ -57,6 +59,16 @@ python tools/test.py configs/mask_rcnn_r50_fpn_1x.py \ 8 --out results.pkl --eval bbox segm ``` +4. Test Mask R-CNN on COCO test-dev with 8 GPUs, and generate the json file to be submit to the official evaluation server. + +```shell +./tools/dist_test.sh configs/mask_rcnn_r50_fpn_1x.py \ + checkpoints/mask_rcnn_r50_fpn_1x_20181010-069fa190.pth \ + 8 --out results.pkl --options "jsonfile_prefix=./mask_rcnn_test-dev_results" +``` + +You will get two json files `mask_rcnn_test-dev_results.bbox.json` and `mask_rcnn_test-dev_results.segm.json`. + ### Webcam demo We provide a webcam demo to illustrate the results. @@ -189,7 +201,7 @@ Difference between `resume_from` and `load_from`: ### Train with multiple machines -If you run MMDetection on a cluster managed with [slurm](https://slurm.schedmd.com/), you can use the script `slurm_train.sh`. +If you run MMDetection on a cluster managed with [slurm](https://slurm.schedmd.com/), you can use the script `slurm_train.sh`. (This script also supports single machine training.) ```shell ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR} [${GPUS}] @@ -219,7 +231,7 @@ CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 ./tools/dist_train.sh ${CONFIG_FILE} 4 CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 ./tools/dist_train.sh ${CONFIG_FILE} 4 ``` -If you use launch training jobs with slurm, you need to modify the config files (usually the 6th line from the bottom in config files) to set different communication ports. +If you use launch training jobs with slurm, you need to modify the config files (usually the 6th line from the bottom in config files) to set different communication ports. In `config1.py`, ```python @@ -240,6 +252,8 @@ CUDA_VISIBLE_DEVICES=4,5,6,7 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} con ## Useful tools +We provide lots of useful tools under `tools/` directory. + ### Analyze logs You can plot loss/mAP curves given a training log file. Run `pip install seaborn` first to install the dependency. @@ -287,16 +301,6 @@ average iter time: 1.1959 s/iter ``` -### Analyse class-wise performance - -You can analyse the class-wise mAP to have a more comprehensive understanding of the model. - -```shell -python coco_eval.py ${RESULT} --ann ${ANNOTATION_PATH} --types bbox --classwise -``` - -Now we only support class-wise mAP for all the evaluation types, we will support class-wise mAR in the future. - ### Get the FLOPs and params (experimental) We provide a script adapted from [flops-counter.pytorch](https://github.com/sovrasov/flops-counter.pytorch) to compute the FLOPs and params of a given model. diff --git a/mmdet/apis/train.py b/mmdet/apis/train.py index cb4f68be208f35dda51ee4102d3418a2127215ad..2ef90830ff18f287b922544fae9fc06d0c921039 100644 --- a/mmdet/apis/train.py +++ b/mmdet/apis/train.py @@ -8,11 +8,8 @@ import torch.distributed as dist from mmcv.parallel import MMDataParallel, MMDistributedDataParallel from mmcv.runner import DistSamplerSeedHook, Runner, obj_from_dict -from mmdet import datasets -from mmdet.core import (CocoDistEvalmAPHook, CocoDistEvalRecallHook, - DistEvalmAPHook, DistOptimizerHook, Fp16OptimizerHook) -from mmdet.datasets import DATASETS, build_dataloader -from mmdet.models import RPN +from mmdet.core import DistEvalHook, DistOptimizerHook, Fp16OptimizerHook +from mmdet.datasets import build_dataloader from mmdet.utils import get_root_logger @@ -233,18 +230,7 @@ def _dist_train(model, if validate: val_dataset_cfg = cfg.data.val eval_cfg = cfg.get('evaluation', {}) - if isinstance(model.module, RPN): - # TODO: implement recall hooks for other datasets - runner.register_hook( - CocoDistEvalRecallHook(val_dataset_cfg, **eval_cfg)) - else: - dataset_type = DATASETS.get(val_dataset_cfg.type) - if issubclass(dataset_type, datasets.CocoDataset): - runner.register_hook( - CocoDistEvalmAPHook(val_dataset_cfg, **eval_cfg)) - else: - runner.register_hook( - DistEvalmAPHook(val_dataset_cfg, **eval_cfg)) + runner.register_hook(DistEvalHook(val_dataset_cfg, **eval_cfg)) if cfg.resume_from: runner.resume(cfg.resume_from) diff --git a/mmdet/core/evaluation/__init__.py b/mmdet/core/evaluation/__init__.py index 90703fe65840465910149a3db9e04f4226ee3e0c..b8177aad5acfb810017735704077272ab398a707 100644 --- a/mmdet/core/evaluation/__init__.py +++ b/mmdet/core/evaluation/__init__.py @@ -1,18 +1,14 @@ from .class_names import (coco_classes, dataset_aliases, get_classes, imagenet_det_classes, imagenet_vid_classes, voc_classes) -from .coco_utils import coco_eval, fast_eval_recall, results2json -from .eval_hooks import (CocoDistEvalmAPHook, CocoDistEvalRecallHook, - DistEvalHook, DistEvalmAPHook) +from .eval_hooks import DistEvalHook from .mean_ap import average_precision, eval_map, print_map_summary from .recall import (eval_recalls, plot_iou_recall, plot_num_recall, print_recall_summary) __all__ = [ 'voc_classes', 'imagenet_det_classes', 'imagenet_vid_classes', - 'coco_classes', 'dataset_aliases', 'get_classes', 'coco_eval', - 'fast_eval_recall', 'results2json', 'DistEvalHook', 'DistEvalmAPHook', - 'CocoDistEvalRecallHook', 'CocoDistEvalmAPHook', 'average_precision', - 'eval_map', 'print_map_summary', 'eval_recalls', 'print_recall_summary', - 'plot_num_recall', 'plot_iou_recall' + 'coco_classes', 'dataset_aliases', 'get_classes', 'DistEvalHook', + 'average_precision', 'eval_map', 'print_map_summary', 'eval_recalls', + 'print_recall_summary', 'plot_num_recall', 'plot_iou_recall' ] diff --git a/mmdet/core/evaluation/coco_utils.py b/mmdet/core/evaluation/coco_utils.py deleted file mode 100644 index 2f6605d80ee0cd561a213e1a30adef9ac5902bdf..0000000000000000000000000000000000000000 --- a/mmdet/core/evaluation/coco_utils.py +++ /dev/null @@ -1,221 +0,0 @@ -import itertools - -import mmcv -import numpy as np -from pycocotools.coco import COCO -from pycocotools.cocoeval import COCOeval -from terminaltables import AsciiTable - -from .recall import eval_recalls - - -def coco_eval(result_files, - result_types, - coco, - max_dets=(100, 300, 1000), - classwise=False): - for res_type in result_types: - assert res_type in [ - 'proposal', 'proposal_fast', 'bbox', 'segm', 'keypoints' - ] - - if mmcv.is_str(coco): - coco = COCO(coco) - assert isinstance(coco, COCO) - - if result_types == ['proposal_fast']: - ar = fast_eval_recall(result_files, coco, np.array(max_dets)) - for i, num in enumerate(max_dets): - print('AR@{}\t= {:.4f}'.format(num, ar[i])) - return - - for res_type in result_types: - if isinstance(result_files, str): - result_file = result_files - elif isinstance(result_files, dict): - result_file = result_files[res_type] - else: - assert TypeError('result_files must be a str or dict') - assert result_file.endswith('.json') - - coco_dets = coco.loadRes(result_file) - img_ids = coco.getImgIds() - iou_type = 'bbox' if res_type == 'proposal' else res_type - cocoEval = COCOeval(coco, coco_dets, iou_type) - cocoEval.params.imgIds = img_ids - if res_type == 'proposal': - cocoEval.params.useCats = 0 - cocoEval.params.maxDets = list(max_dets) - cocoEval.evaluate() - cocoEval.accumulate() - cocoEval.summarize() - - if classwise: - # Compute per-category AP - # from https://github.com/facebookresearch/detectron2/blob/03064eb5bafe4a3e5750cc7a16672daf5afe8435/detectron2/evaluation/coco_evaluation.py#L259-L283 # noqa - precisions = cocoEval.eval['precision'] - catIds = coco.getCatIds() - # precision has dims (iou, recall, cls, area range, max dets) - assert len(catIds) == precisions.shape[2] - - results_per_category = [] - for idx, catId in enumerate(catIds): - # area range index 0: all area ranges - # max dets index -1: typically 100 per image - nm = coco.loadCats(catId)[0] - precision = precisions[:, :, idx, 0, -1] - precision = precision[precision > -1] - ap = np.mean(precision) if precision.size else float('nan') - results_per_category.append( - ('{}'.format(nm['name']), - '{:0.3f}'.format(float(ap * 100)))) - - N_COLS = min(6, len(results_per_category) * 2) - results_flatten = list(itertools.chain(*results_per_category)) - headers = ['category', 'AP'] * (N_COLS // 2) - results_2d = itertools.zip_longest( - *[results_flatten[i::N_COLS] for i in range(N_COLS)]) - table_data = [headers] - table_data += [result for result in results_2d] - table = AsciiTable(table_data) - print(table.table) - - -def fast_eval_recall(results, - coco, - max_dets, - iou_thrs=np.arange(0.5, 0.96, 0.05)): - if mmcv.is_str(results): - assert results.endswith('.pkl') - results = mmcv.load(results) - elif not isinstance(results, list): - raise TypeError( - 'results must be a list of numpy arrays or a filename, not {}'. - format(type(results))) - - gt_bboxes = [] - img_ids = coco.getImgIds() - for i in range(len(img_ids)): - ann_ids = coco.getAnnIds(imgIds=img_ids[i]) - ann_info = coco.loadAnns(ann_ids) - if len(ann_info) == 0: - gt_bboxes.append(np.zeros((0, 4))) - continue - bboxes = [] - for ann in ann_info: - if ann.get('ignore', False) or ann['iscrowd']: - continue - x1, y1, w, h = ann['bbox'] - bboxes.append([x1, y1, x1 + w - 1, y1 + h - 1]) - bboxes = np.array(bboxes, dtype=np.float32) - if bboxes.shape[0] == 0: - bboxes = np.zeros((0, 4)) - gt_bboxes.append(bboxes) - - recalls = eval_recalls( - gt_bboxes, results, max_dets, iou_thrs, print_summary=False) - ar = recalls.mean(axis=1) - return ar - - -def xyxy2xywh(bbox): - _bbox = bbox.tolist() - return [ - _bbox[0], - _bbox[1], - _bbox[2] - _bbox[0] + 1, - _bbox[3] - _bbox[1] + 1, - ] - - -def proposal2json(dataset, results): - json_results = [] - for idx in range(len(dataset)): - img_id = dataset.img_ids[idx] - bboxes = results[idx] - for i in range(bboxes.shape[0]): - data = dict() - data['image_id'] = img_id - data['bbox'] = xyxy2xywh(bboxes[i]) - data['score'] = float(bboxes[i][4]) - data['category_id'] = 1 - json_results.append(data) - return json_results - - -def det2json(dataset, results): - json_results = [] - for idx in range(len(dataset)): - img_id = dataset.img_ids[idx] - result = results[idx] - for label in range(len(result)): - bboxes = result[label] - for i in range(bboxes.shape[0]): - data = dict() - data['image_id'] = img_id - data['bbox'] = xyxy2xywh(bboxes[i]) - data['score'] = float(bboxes[i][4]) - data['category_id'] = dataset.cat_ids[label] - json_results.append(data) - return json_results - - -def segm2json(dataset, results): - bbox_json_results = [] - segm_json_results = [] - for idx in range(len(dataset)): - img_id = dataset.img_ids[idx] - det, seg = results[idx] - for label in range(len(det)): - # bbox results - bboxes = det[label] - for i in range(bboxes.shape[0]): - data = dict() - data['image_id'] = img_id - data['bbox'] = xyxy2xywh(bboxes[i]) - data['score'] = float(bboxes[i][4]) - data['category_id'] = dataset.cat_ids[label] - bbox_json_results.append(data) - - # segm results - # some detectors use different score for det and segm - if isinstance(seg, tuple): - segms = seg[0][label] - mask_score = seg[1][label] - else: - segms = seg[label] - mask_score = [bbox[4] for bbox in bboxes] - for i in range(bboxes.shape[0]): - data = dict() - data['image_id'] = img_id - data['bbox'] = xyxy2xywh(bboxes[i]) - data['score'] = float(mask_score[i]) - data['category_id'] = dataset.cat_ids[label] - if isinstance(segms[i]['counts'], bytes): - segms[i]['counts'] = segms[i]['counts'].decode() - data['segmentation'] = segms[i] - segm_json_results.append(data) - return bbox_json_results, segm_json_results - - -def results2json(dataset, results, out_file): - result_files = dict() - if isinstance(results[0], list): - json_results = det2json(dataset, results) - result_files['bbox'] = '{}.{}.json'.format(out_file, 'bbox') - result_files['proposal'] = '{}.{}.json'.format(out_file, 'bbox') - mmcv.dump(json_results, result_files['bbox']) - elif isinstance(results[0], tuple): - json_results = segm2json(dataset, results) - result_files['bbox'] = '{}.{}.json'.format(out_file, 'bbox') - result_files['proposal'] = '{}.{}.json'.format(out_file, 'bbox') - result_files['segm'] = '{}.{}.json'.format(out_file, 'segm') - mmcv.dump(json_results[0], result_files['bbox']) - mmcv.dump(json_results[1], result_files['segm']) - elif isinstance(results[0], np.ndarray): - json_results = proposal2json(dataset, results) - result_files['proposal'] = '{}.{}.json'.format(out_file, 'proposal') - mmcv.dump(json_results, result_files['proposal']) - else: - raise TypeError('invalid type of results') - return result_files diff --git a/mmdet/core/evaluation/eval_hooks.py b/mmdet/core/evaluation/eval_hooks.py index 1a074eec18578ae2abb60e3bc36797712a43ad0e..0b992f55fab5c72b570a65497151332eaee472e0 100644 --- a/mmdet/core/evaluation/eval_hooks.py +++ b/mmdet/core/evaluation/eval_hooks.py @@ -2,22 +2,17 @@ import os import os.path as osp import mmcv -import numpy as np import torch import torch.distributed as dist from mmcv.parallel import collate, scatter from mmcv.runner import Hook -from pycocotools.cocoeval import COCOeval from torch.utils.data import Dataset -from mmdet import datasets -from .coco_utils import fast_eval_recall, results2json -from .mean_ap import eval_map - class DistEvalHook(Hook): - def __init__(self, dataset, interval=1): + def __init__(self, dataset, interval=1, **eval_kwargs): + from mmdet import datasets if isinstance(dataset, Dataset): self.dataset = dataset elif isinstance(dataset, dict): @@ -27,6 +22,7 @@ class DistEvalHook(Hook): 'dataset must be a Dataset object or a dict, not {}'.format( type(dataset))) self.interval = interval + self.eval_kwargs = eval_kwargs def after_train_epoch(self, runner): if not self.every_n_epochs(runner, self.interval): @@ -69,84 +65,9 @@ class DistEvalHook(Hook): dist.barrier() dist.barrier() - def evaluate(self): - raise NotImplementedError - - -class DistEvalmAPHook(DistEvalHook): - def evaluate(self, runner, results): - annotations = [ - self.dataset.get_ann_info(i) for i in range(len(self.dataset)) - ] - # If the dataset is VOC2007, then use 11 points mAP evaluation. - if hasattr(self.dataset, 'year') and self.dataset.year == 2007: - ds_name = 'voc07' - else: - ds_name = self.dataset.CLASSES - mean_ap, eval_results = eval_map( - results, - annotations, - scale_ranges=None, - iou_thr=0.5, - dataset=ds_name, - logger=runner.logger) - runner.log_buffer.output['mAP'] = mean_ap - runner.log_buffer.ready = True - - -class CocoDistEvalRecallHook(DistEvalHook): - - def __init__(self, - dataset, - interval=1, - proposal_nums=(100, 300, 1000), - iou_thrs=np.arange(0.5, 0.96, 0.05)): - super(CocoDistEvalRecallHook, self).__init__( - dataset, interval=interval) - self.proposal_nums = np.array(proposal_nums, dtype=np.int32) - self.iou_thrs = np.array(iou_thrs, dtype=np.float32) - - def evaluate(self, runner, results): - # the official coco evaluation is too slow, here we use our own - # implementation instead, which may get slightly different results - ar = fast_eval_recall(results, self.dataset.coco, self.proposal_nums, - self.iou_thrs) - for i, num in enumerate(self.proposal_nums): - runner.log_buffer.output['AR@{}'.format(num)] = ar[i] - runner.log_buffer.ready = True - - -class CocoDistEvalmAPHook(DistEvalHook): - - def evaluate(self, runner, results): - tmp_file = osp.join(runner.work_dir, 'temp_0') - result_files = results2json(self.dataset, results, tmp_file) - - res_types = ['bbox', 'segm' - ] if runner.model.module.with_mask else ['bbox'] - cocoGt = self.dataset.coco - imgIds = cocoGt.getImgIds() - for res_type in res_types: - try: - cocoDt = cocoGt.loadRes(result_files[res_type]) - except IndexError: - print('No prediction found.') - break - iou_type = res_type - cocoEval = COCOeval(cocoGt, cocoDt, iou_type) - cocoEval.params.imgIds = imgIds - cocoEval.evaluate() - cocoEval.accumulate() - cocoEval.summarize() - metrics = ['mAP', 'mAP_50', 'mAP_75', 'mAP_s', 'mAP_m', 'mAP_l'] - for i in range(len(metrics)): - key = '{}_{}'.format(res_type, metrics[i]) - val = float('{:.3f}'.format(cocoEval.stats[i])) - runner.log_buffer.output[key] = val - runner.log_buffer.output['{}_mAP_copypaste'.format(res_type)] = ( - '{ap[0]:.3f} {ap[1]:.3f} {ap[2]:.3f} {ap[3]:.3f} ' - '{ap[4]:.3f} {ap[5]:.3f}').format(ap=cocoEval.stats[:6]) + eval_res = self.dataset.evaluate( + results, logger=runner.logger, **self.eval_kwargs) + for name, val in eval_res.items(): + runner.log_buffer.output[name] = val runner.log_buffer.ready = True - for res_type in res_types: - os.remove(result_files[res_type]) diff --git a/mmdet/core/evaluation/recall.py b/mmdet/core/evaluation/recall.py index 2a56f42fdef33341d4b9ec7a654832282b44a7c2..3a591e88f0fb4b50b80a663a0e0eef4d253729a9 100644 --- a/mmdet/core/evaluation/recall.py +++ b/mmdet/core/evaluation/recall.py @@ -1,6 +1,9 @@ +from collections.abc import Sequence + import numpy as np from terminaltables import AsciiTable +from mmdet.utils import print_log from .bbox_overlaps import bbox_overlaps @@ -40,7 +43,7 @@ def _recalls(all_ious, proposal_nums, thrs): def set_recall_param(proposal_nums, iou_thrs): """Check proposal_nums and iou_thrs and set correct format. """ - if isinstance(proposal_nums, list): + if isinstance(proposal_nums, Sequence): _proposal_nums = np.array(proposal_nums) elif isinstance(proposal_nums, int): _proposal_nums = np.array([proposal_nums]) @@ -49,7 +52,7 @@ def set_recall_param(proposal_nums, iou_thrs): if iou_thrs is None: _iou_thrs = np.array([0.5]) - elif isinstance(iou_thrs, list): + elif isinstance(iou_thrs, Sequence): _iou_thrs = np.array(iou_thrs) elif isinstance(iou_thrs, float): _iou_thrs = np.array([iou_thrs]) @@ -62,15 +65,17 @@ def set_recall_param(proposal_nums, iou_thrs): def eval_recalls(gts, proposals, proposal_nums=None, - iou_thrs=None, - print_summary=True): + iou_thrs=0.5, + logger=None): """Calculate recalls. Args: - gts(list or ndarray): a list of arrays of shape (n, 4) - proposals(list or ndarray): a list of arrays of shape (k, 4) or (k, 5) - proposal_nums(int or list of int or ndarray): top N proposals - thrs(float or list or ndarray): iou thresholds + gts (list[ndarray]): a list of arrays of shape (n, 4) + proposals (list[ndarray]): a list of arrays of shape (k, 4) or (k, 5) + proposal_nums (int | Sequence[int]): Top N proposals to be evaluated. + iou_thrs (float | Sequence[float]): IoU thresholds. Default: 0.5. + logger (logging.Logger | str | None): The way to print the recall + summary. See `mmdet.utils.print_log()` for details. Default: None. Returns: ndarray: recalls of different ious and proposal nums @@ -97,8 +102,8 @@ def eval_recalls(gts, all_ious.append(ious) all_ious = np.array(all_ious) recalls = _recalls(all_ious, proposal_nums, iou_thrs) - if print_summary: - print_recall_summary(recalls, proposal_nums, iou_thrs) + + print_recall_summary(recalls, proposal_nums, iou_thrs, logger=logger) return recalls @@ -106,15 +111,18 @@ def print_recall_summary(recalls, proposal_nums, iou_thrs, row_idxs=None, - col_idxs=None): + col_idxs=None, + logger=None): """Print recalls in a table. Args: - recalls(ndarray): calculated from `bbox_recalls` - proposal_nums(ndarray or list): top N proposals - iou_thrs(ndarray or list): iou thresholds - row_idxs(ndarray): which rows(proposal nums) to print - col_idxs(ndarray): which cols(iou thresholds) to print + recalls (ndarray): calculated from `bbox_recalls` + proposal_nums (ndarray or list): top N proposals + iou_thrs (ndarray or list): iou thresholds + row_idxs (ndarray): which rows(proposal nums) to print + col_idxs (ndarray): which cols(iou thresholds) to print + logger (logging.Logger | str | None): The way to print the recall + summary. See `mmdet.utils.print_log()` for details. Default: None. """ proposal_nums = np.array(proposal_nums, dtype=np.int32) iou_thrs = np.array(iou_thrs) @@ -132,7 +140,7 @@ def print_recall_summary(recalls, row.insert(0, num) table_data.append(row) table = AsciiTable(table_data) - print(table.table) + print_log('\n' + table.table, logger=logger) def plot_num_recall(recalls, proposal_nums): diff --git a/mmdet/datasets/coco.py b/mmdet/datasets/coco.py index d041532ab8838b7158ee2eb3798c782dcd56dcc3..31ccf43953beb962891c41c239107aaaa10b8f07 100644 --- a/mmdet/datasets/coco.py +++ b/mmdet/datasets/coco.py @@ -1,6 +1,14 @@ +import logging +import os.path as osp +import tempfile + +import mmcv import numpy as np from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval +from mmdet.core import eval_recalls +from mmdet.utils import print_log from .custom import CustomDataset from .registry import DATASETS @@ -108,3 +116,255 @@ class CocoDataset(CustomDataset): seg_map=seg_map) return ann + + def xyxy2xywh(self, bbox): + _bbox = bbox.tolist() + return [ + _bbox[0], + _bbox[1], + _bbox[2] - _bbox[0] + 1, + _bbox[3] - _bbox[1] + 1, + ] + + def _proposal2json(self, results): + json_results = [] + for idx in range(len(self)): + img_id = self.img_ids[idx] + bboxes = results[idx] + for i in range(bboxes.shape[0]): + data = dict() + data['image_id'] = img_id + data['bbox'] = self.xyxy2xywh(bboxes[i]) + data['score'] = float(bboxes[i][4]) + data['category_id'] = 1 + json_results.append(data) + return json_results + + def _det2json(self, results): + json_results = [] + for idx in range(len(self)): + img_id = self.img_ids[idx] + result = results[idx] + for label in range(len(result)): + bboxes = result[label] + for i in range(bboxes.shape[0]): + data = dict() + data['image_id'] = img_id + data['bbox'] = self.xyxy2xywh(bboxes[i]) + data['score'] = float(bboxes[i][4]) + data['category_id'] = self.cat_ids[label] + json_results.append(data) + return json_results + + def _segm2json(self, results): + bbox_json_results = [] + segm_json_results = [] + for idx in range(len(self)): + img_id = self.img_ids[idx] + det, seg = results[idx] + for label in range(len(det)): + # bbox results + bboxes = det[label] + for i in range(bboxes.shape[0]): + data = dict() + data['image_id'] = img_id + data['bbox'] = self.xyxy2xywh(bboxes[i]) + data['score'] = float(bboxes[i][4]) + data['category_id'] = self.cat_ids[label] + bbox_json_results.append(data) + + # segm results + # some detectors use different scores for bbox and mask + if isinstance(seg, tuple): + segms = seg[0][label] + mask_score = seg[1][label] + else: + segms = seg[label] + mask_score = [bbox[4] for bbox in bboxes] + for i in range(bboxes.shape[0]): + data = dict() + data['image_id'] = img_id + data['bbox'] = self.xyxy2xywh(bboxes[i]) + data['score'] = float(mask_score[i]) + data['category_id'] = self.cat_ids[label] + if isinstance(segms[i]['counts'], bytes): + segms[i]['counts'] = segms[i]['counts'].decode() + data['segmentation'] = segms[i] + segm_json_results.append(data) + return bbox_json_results, segm_json_results + + def results2json(self, results, outfile_prefix): + """Dump the detection results to a json file. + + There are 3 types of results: proposals, bbox predictions, mask + predictions, and they have different data types. This method will + automatically recognize the type, and dump them to json files. + + Args: + results (list[list | tuple | ndarray]): Testing results of the + dataset. + outfile_prefix (str): The filename prefix of the json files. If the + prefix is "somepath/xxx", the json files will be named + "somepath/xxx.bbox.json", "somepath/xxx.segm.json", + "somepath/xxx.proposal.json". + + Returns: + dict[str: str]: Possible keys are "bbox", "segm", "proposal", and + values are corresponding filenames. + """ + result_files = dict() + if isinstance(results[0], list): + json_results = self._det2json(results) + result_files['bbox'] = '{}.{}.json'.format(outfile_prefix, 'bbox') + result_files['proposal'] = '{}.{}.json'.format( + outfile_prefix, 'bbox') + mmcv.dump(json_results, result_files['bbox']) + elif isinstance(results[0], tuple): + json_results = self._segm2json(results) + result_files['bbox'] = '{}.{}.json'.format(outfile_prefix, 'bbox') + result_files['proposal'] = '{}.{}.json'.format( + outfile_prefix, 'bbox') + result_files['segm'] = '{}.{}.json'.format(outfile_prefix, 'segm') + mmcv.dump(json_results[0], result_files['bbox']) + mmcv.dump(json_results[1], result_files['segm']) + elif isinstance(results[0], np.ndarray): + json_results = self._proposal2json(results) + result_files['proposal'] = '{}.{}.json'.format( + outfile_prefix, 'proposal') + mmcv.dump(json_results, result_files['proposal']) + else: + raise TypeError('invalid type of results') + return result_files + + def fast_eval_recall(self, results, proposal_nums, iou_thrs, logger=None): + gt_bboxes = [] + for i in range(len(self.img_ids)): + ann_ids = self.coco.getAnnIds(imgIds=self.img_ids[i]) + ann_info = self.coco.loadAnns(ann_ids) + if len(ann_info) == 0: + gt_bboxes.append(np.zeros((0, 4))) + continue + bboxes = [] + for ann in ann_info: + if ann.get('ignore', False) or ann['iscrowd']: + continue + x1, y1, w, h = ann['bbox'] + bboxes.append([x1, y1, x1 + w - 1, y1 + h - 1]) + bboxes = np.array(bboxes, dtype=np.float32) + if bboxes.shape[0] == 0: + bboxes = np.zeros((0, 4)) + gt_bboxes.append(bboxes) + + recalls = eval_recalls( + gt_bboxes, results, proposal_nums, iou_thrs, logger=logger) + ar = recalls.mean(axis=1) + return ar + + def evaluate(self, + results, + metric='bbox', + logger=None, + jsonfile_prefix=None, + classwise=False, + proposal_nums=(100, 300, 1000), + iou_thrs=np.arange(0.5, 0.96, 0.05)): + """Evaluation in COCO protocol. + + Args: + results (list): Testing results of the dataset. + metric (str | list[str]): Metrics to be evaluated. + logger (logging.Logger | str | None): Logger used for printing + related information during evaluation. Default: None. + jsonfile_prefix (str | None): + classwise (bool): Whether to evaluating the AP for each class. + proposal_nums (Sequence[int]): Proposal number used for evaluating + recalls, such as recall@100, recall@1000. + Default: (100, 300, 1000). + iou_thrs (Sequence[float]): IoU threshold used for evaluating + recalls. If set to a list, the average recall of all IoUs will + also be computed. Default: 0.5. + + Returns: + dict[str: float] + """ + assert isinstance(results, list), 'results must be a list' + assert len(results) == len(self), ( + 'The length of results is not equal to the dataset len: {} != {}'. + format(len(results), len(self))) + + metrics = metric if isinstance(metric, list) else [metric] + allowed_metrics = ['bbox', 'segm', 'proposal', 'proposal_fast'] + for metric in metrics: + if metric not in allowed_metrics: + raise KeyError('metric {} is not supported'.format(metric)) + + if jsonfile_prefix is None: + tmp_dir = tempfile.TemporaryDirectory() + jsonfile_prefix = osp.join(tmp_dir.name, 'results') + result_files = self.results2json(results, jsonfile_prefix) + + eval_results = {} + cocoGt = self.coco + for metric in metrics: + msg = 'Evaluating {}...'.format(metric) + if logger is None: + msg = '\n' + msg + print_log(msg, logger=logger) + + if metric == 'proposal_fast': + ar = self.fast_eval_recall( + results, proposal_nums, iou_thrs, logger='silent') + log_msg = [] + for i, num in enumerate(proposal_nums): + eval_results['AR@{}'.format(num)] = ar[i] + log_msg.append('\nAR@{}\t{:.4f}'.format(num, ar[i])) + log_msg = ''.join(log_msg) + print_log(log_msg, logger=logger) + continue + + if metric not in result_files: + raise KeyError('{} is not in results'.format(metric)) + try: + cocoDt = cocoGt.loadRes(result_files[metric]) + except IndexError: + print_log( + 'The testing results of the whole dataset is empty.', + logger=logger, + level=logging.ERROR) + break + + iou_type = 'bbox' if metric == 'proposal' else metric + cocoEval = COCOeval(cocoGt, cocoDt, iou_type) + cocoEval.params.imgIds = self.img_ids + if metric == 'proposal': + cocoEval.params.useCats = 0 + cocoEval.params.maxDets = list(proposal_nums) + cocoEval.evaluate() + cocoEval.accumulate() + cocoEval.summarize() + metric_items = [ + 'AR@100', 'AR@300', 'AR@1000', 'AR_s@1000', 'AR_m@1000', + 'AR_l@1000' + ] + for i, item in enumerate(metric_items): + val = float('{:.3f}'.format(cocoEval.stats[i + 6])) + eval_results[item] = val + else: + cocoEval.evaluate() + cocoEval.accumulate() + cocoEval.summarize() + if classwise: # Compute per-category AP + pass # TODO + metric_items = [ + 'mAP', 'mAP_50', 'mAP_75', 'mAP_s', 'mAP_m', 'mAP_l' + ] + for i in range(len(metric_items)): + key = '{}_{}'.format(metric, metric_items[i]) + val = float('{:.3f}'.format(cocoEval.stats[i])) + eval_results[key] = val + eval_results['{}_mAP_copypaste'.format(metric)] = ( + '{ap[0]:.3f} {ap[1]:.3f} {ap[2]:.3f} {ap[3]:.3f} ' + '{ap[4]:.3f} {ap[5]:.3f}').format(ap=cocoEval.stats[:6]) + if jsonfile_prefix is None: + tmp_dir.cleanup() + return eval_results diff --git a/mmdet/datasets/custom.py b/mmdet/datasets/custom.py index 935b39d2c57b824f0cd7b5b3e10b2c8ee39ec48e..aea338a5cff087f28af30096f129a24b6c8652ac 100644 --- a/mmdet/datasets/custom.py +++ b/mmdet/datasets/custom.py @@ -4,6 +4,7 @@ import mmcv import numpy as np from torch.utils.data import Dataset +from mmdet.core import eval_map, eval_recalls from .pipelines import Compose from .registry import DATASETS @@ -150,3 +151,61 @@ class CustomDataset(Dataset): results['proposals'] = self.proposals[idx] self.pre_pipeline(results) return self.pipeline(results) + + def evaluate(self, + results, + metric='mAP', + logger=None, + proposal_nums=(100, 300, 1000), + iou_thr=0.5, + scale_ranges=None): + """Evaluate the dataset. + + Args: + results (list): Testing results of the dataset. + metric (str | list[str]): Metrics to be evaluated. + logger (logging.Logger | None | str): Logger used for printing + related information during evaluation. Default: None. + proposal_nums (Sequence[int]): Proposal number used for evaluating + recalls, such as recall@100, recall@1000. + Default: (100, 300, 1000). + iou_thr (float | list[float]): IoU threshold. It must be a float + when evaluating mAP, and can be a list when evaluating recall. + Default: 0.5. + scale_ranges (list[tuple] | None): Scale ranges for evaluating mAP. + Default: None. + """ + allowed_metrics = ['mAP', 'recall'] + if metric not in allowed_metrics: + raise KeyError('metric {} is not supported'.format(metric)) + annotations = [self.get_ann_info(i) for i in range(len(self))] + eval_results = {} + if metric == 'mAP': + assert isinstance(iou_thr, float) + mean_ap, _ = eval_map( + results, + annotations, + scale_ranges=scale_ranges, + iou_thr=iou_thr, + dataset=self.CLASSES, + logger=logger) + eval_results['mAP'] = mean_ap + elif metric == 'recall': + gt_bboxes = [ann['bboxes'] for ann in annotations] + if isinstance(iou_thr, float): + iou_thr = [iou_thr] + recalls = eval_recalls( + gt_bboxes, + results, + proposal_nums, + iou_thr, + print_summary=False) + for i, num in enumerate(proposal_nums): + for j, iou in enumerate(iou_thr): + eval_results['recall@{}@{}'.format(num, iou)] = recalls[i, + j] + if recalls.shape[1] > 1: + ar = recalls.mean(axis=1) + for i, num in enumerate(proposal_nums): + eval_results['AR@{}'.format(num)] = ar[i] + return eval_results diff --git a/mmdet/datasets/voc.py b/mmdet/datasets/voc.py index 77bffe355e0a32377449ed21aea9f44030e76d2a..0e3162f3f8bccce1b8749a26943636dbb87d5ca3 100644 --- a/mmdet/datasets/voc.py +++ b/mmdet/datasets/voc.py @@ -1,3 +1,4 @@ +from mmdet.core import eval_map, eval_recalls from .registry import DATASETS from .xml_style import XMLDataset @@ -18,3 +19,48 @@ class VOCDataset(XMLDataset): self.year = 2012 else: raise ValueError('Cannot infer dataset year from img_prefix') + + def evaluate(self, + results, + metric='mAP', + logger=None, + proposal_nums=(100, 300, 1000), + iou_thr=0.5, + scale_ranges=None): + if not isinstance(metric, str): + assert len(metric) == 1 + metric = metric[0] + allowed_metrics = ['mAP', 'recall'] + if metric not in allowed_metrics: + raise KeyError('metric {} is not supported'.format(metric)) + annotations = [self.get_ann_info(i) for i in range(len(self))] + eval_results = {} + if metric == 'mAP': + assert isinstance(iou_thr, float) + if self.year == 2007: + ds_name = 'voc07' + else: + ds_name = self.dataset.CLASSES + mean_ap, _ = eval_map( + results, + annotations, + scale_ranges=None, + iou_thr=iou_thr, + dataset=ds_name, + logger=logger) + eval_results['mAP'] = mean_ap + elif metric == 'recall': + gt_bboxes = [ann['bboxes'] for ann in annotations] + if isinstance(iou_thr, float): + iou_thr = [iou_thr] + recalls = eval_recalls( + gt_bboxes, results, proposal_nums, iou_thr, logger=logger) + for i, num in enumerate(proposal_nums): + for j, iou in enumerate(iou_thr): + eval_results['recall@{}@{}'.format(num, iou)] = recalls[i, + j] + if recalls.shape[1] > 1: + ar = recalls.mean(axis=1) + for i, num in enumerate(proposal_nums): + eval_results['AR@{}'.format(num)] = ar[i] + return eval_results diff --git a/tools/coco_eval.py b/tools/coco_eval.py deleted file mode 100644 index bc3c96b3cfb8fb99f39e8b448910a7db15421576..0000000000000000000000000000000000000000 --- a/tools/coco_eval.py +++ /dev/null @@ -1,30 +0,0 @@ -from argparse import ArgumentParser - -from mmdet.core import coco_eval - - -def main(): - parser = ArgumentParser(description='COCO Evaluation') - parser.add_argument('result', help='result file path') - parser.add_argument('--ann', help='annotation file path') - parser.add_argument( - '--types', - type=str, - nargs='+', - choices=['proposal_fast', 'proposal', 'bbox', 'segm', 'keypoint'], - default=['bbox'], - help='result types') - parser.add_argument( - '--max-dets', - type=int, - nargs='+', - default=[100, 300, 1000], - help='proposal numbers, only used for recall evaluation') - parser.add_argument( - '--classwise', action='store_true', help='whether eval class wise ap') - args = parser.parse_args() - coco_eval(args.result, args.types, args.ann, args.max_dets, args.classwise) - - -if __name__ == '__main__': - main() diff --git a/tools/test.py b/tools/test.py index b39cf13abde3146223eebeb11b0c9b0449106683..26f3ee8681b1adcffd1a885c036e4759ba062198 100644 --- a/tools/test.py +++ b/tools/test.py @@ -11,7 +11,7 @@ import torch.distributed as dist from mmcv.parallel import MMDataParallel, MMDistributedDataParallel from mmcv.runner import get_dist_info, init_dist, load_checkpoint -from mmdet.core import coco_eval, results2json, wrap_fp16_model +from mmdet.core import wrap_fp16_model from mmdet.datasets import build_dataloader, build_dataset from mmdet.models import build_detector @@ -153,27 +153,73 @@ def collect_results_gpu(result_part, size): return ordered_results +class MultipleKVAction(argparse.Action): + """ + argparse action to split an argument into KEY=VALUE form + on the first = and append to a dictionary. + """ + + def _is_int(self, val): + try: + _ = int(val) + return True + except Exception: + return False + + def _is_float(self, val): + try: + _ = float(val) + return True + except Exception: + return False + + def _is_bool(self, val): + return val.lower() in ['true', 'false'] + + def __call__(self, parser, namespace, values, option_string=None): + options = {} + for val in values: + parts = val.split('=') + key = parts[0].strip() + if len(parts) > 2: + val = '='.join(parts[1:]) + else: + val = parts[1].strip() + # try parsing val to bool/int/float first + if self._is_bool(val): + import json + val = json.loads(val.lower()) + elif self._is_int(val): + val = int(val) + elif self._is_float(val): + val = float(val) + options[key] = val + setattr(namespace, self.dest, options) + + def parse_args(): - parser = argparse.ArgumentParser(description='MMDet test detector') + parser = argparse.ArgumentParser( + description='MMDet test (and eval) a model') parser.add_argument('config', help='test config file path') parser.add_argument('checkpoint', help='checkpoint file') - parser.add_argument('--out', help='output result file') - parser.add_argument( - '--json_out', - help='output result file name without extension', - type=str) + parser.add_argument('--out', help='output result file in pickle format') parser.add_argument( '--eval', type=str, nargs='+', - choices=['proposal', 'proposal_fast', 'bbox', 'segm', 'keypoints'], - help='eval types') + help='evaluation metrics, which depends on the dataset, e.g., "bbox",' + ' "segm", "proposal" for COCO, and "mAP", "recall" for PASCAL VOC') parser.add_argument('--show', action='store_true', help='show results') parser.add_argument( '--gpu_collect', action='store_true', - help='whether to use gpu to collect results') - parser.add_argument('--tmpdir', help='tmp dir for writing some results') + 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( + '--options', nargs='+', action=MultipleKVAction, help='custom options') parser.add_argument( '--launcher', choices=['none', 'pytorch', 'slurm', 'mpi'], @@ -189,16 +235,13 @@ def parse_args(): def main(): args = parse_args() - assert args.out or args.show or args.json_out, \ - ('Please specify at least one operation (save or show the results) ' - 'with the argument "--out" or "--show" or "--json_out"') + assert args.out or args.eval or args.show, \ + ('Please specify at least one operation (save or eval or show the ' + 'results) with the argument "--out", "--eval" or "--show"') if args.out is not None and not args.out.endswith(('.pkl', '.pickle')): raise ValueError('The output file must be a pkl file.') - if args.json_out is not None and args.json_out.endswith('.json'): - args.json_out = args.json_out[:-5] - cfg = mmcv.Config.fromfile(args.config) # set cudnn_benchmark if cfg.get('cudnn_benchmark', False): @@ -245,37 +288,13 @@ def main(): args.gpu_collect) rank, _ = get_dist_info() - if args.out and rank == 0: - print('\nwriting results to {}'.format(args.out)) - mmcv.dump(outputs, args.out) - eval_types = args.eval - if eval_types: - print('Starting evaluate {}'.format(' and '.join(eval_types))) - if eval_types == ['proposal_fast']: - result_file = args.out - coco_eval(result_file, eval_types, dataset.coco) - else: - if not isinstance(outputs[0], dict): - result_files = results2json(dataset, outputs, args.out) - coco_eval(result_files, eval_types, dataset.coco) - else: - for name in outputs[0]: - print('\nEvaluating {}'.format(name)) - outputs_ = [out[name] for out in outputs] - result_file = args.out + '.{}'.format(name) - result_files = results2json(dataset, outputs_, - result_file) - coco_eval(result_files, eval_types, dataset.coco) - - # Save predictions in the COCO json format - if args.json_out and rank == 0: - if not isinstance(outputs[0], dict): - results2json(dataset, outputs, args.json_out) - else: - for name in outputs[0]: - outputs_ = [out[name] for out in outputs] - result_file = args.json_out + '.{}'.format(name) - results2json(dataset, outputs_, result_file) + if rank == 0: + if args.out: + print('\nwriting results to {}'.format(args.out)) + mmcv.dump(outputs, args.out) + if args.eval: + kwargs = {} if args.options is None else args.options + dataset.evaluate(outputs, args.eval, **kwargs) if __name__ == '__main__': diff --git a/tools/test_robustness.py b/tools/test_robustness.py index 2271f4c06daa825f06c3629e531d164de8e7cd03..862feb45706c0e2759cb09468f71d89837d0ffd4 100644 --- a/tools/test_robustness.py +++ b/tools/test_robustness.py @@ -6,7 +6,6 @@ import shutil import tempfile import mmcv -import numpy as np import torch import torch.distributed as dist from mmcv.parallel import MMDataParallel, MMDistributedDataParallel @@ -17,8 +16,7 @@ from robustness_eval import get_results from mmdet import datasets from mmdet.apis import set_random_seed -from mmdet.core import (eval_map, fast_eval_recall, results2json, - wrap_fp16_model) +from mmdet.core import eval_map, wrap_fp16_model from mmdet.datasets import build_dataloader, build_dataset from mmdet.models import build_detector @@ -28,20 +26,12 @@ def coco_eval_with_return(result_files, coco, max_dets=(100, 300, 1000)): for res_type in result_types: - assert res_type in [ - 'proposal', 'proposal_fast', 'bbox', 'segm', 'keypoints' - ] + assert res_type in ['proposal', 'bbox', 'segm', 'keypoints'] if mmcv.is_str(coco): coco = COCO(coco) assert isinstance(coco, COCO) - if result_types == ['proposal_fast']: - ar = fast_eval_recall(result_files, coco, np.array(max_dets)) - for i, num in enumerate(max_dets): - print('AR@{}\t= {:.4f}'.format(num, ar[i])) - return - eval_results = {} for res_type in result_types: result_file = result_files[res_type] @@ -320,6 +310,7 @@ def main(): else: corruptions = args.corruptions + rank, _ = get_dist_info() aggregated_results = {} for corr_i, corruption in enumerate(corruptions): aggregated_results[corruption] = {} @@ -378,7 +369,6 @@ def main(): model = MMDistributedDataParallel(model.cuda()) outputs = multi_gpu_test(model, data_loader, args.tmpdir) - rank, _ = get_dist_info() if args.out and rank == 0: eval_results_filename = ( osp.splitext(args.out)[0] + '_results' + @@ -409,16 +399,16 @@ def main(): result_file = args.out else: if not isinstance(outputs[0], dict): - result_files = results2json( - dataset, outputs, args.out) + result_files = dataset.results2json( + outputs, args.out) else: for name in outputs[0]: print('\nEvaluating {}'.format(name)) outputs_ = [out[name] for out in outputs] result_file = args.out + '.{}'.format(name) - result_files = results2json( - dataset, outputs_, result_file) + result_files = dataset.results2json( + outputs_, result_file) eval_results = coco_eval_with_return( result_files, eval_types, dataset.coco) aggregated_results[corruption][ @@ -427,26 +417,27 @@ def main(): print('\nNo task was selected for evaluation;' '\nUse --eval to select a task') - # save results after each evaluation - mmcv.dump(aggregated_results, eval_results_filename) - - # print filan results - print('\nAggregated results:') - prints = args.final_prints - aggregate = args.final_prints_aggregate + # save results after each evaluation + mmcv.dump(aggregated_results, eval_results_filename) - if cfg.dataset_type == 'VOCDataset': - get_results( - eval_results_filename, - dataset='voc', - prints=prints, - aggregate=aggregate) - else: - get_results( - eval_results_filename, - dataset='coco', - prints=prints, - aggregate=aggregate) + if rank == 0: + # print filan results + print('\nAggregated results:') + prints = args.final_prints + aggregate = args.final_prints_aggregate + + if cfg.dataset_type == 'VOCDataset': + get_results( + eval_results_filename, + dataset='voc', + prints=prints, + aggregate=aggregate) + else: + get_results( + eval_results_filename, + dataset='coco', + prints=prints, + aggregate=aggregate) if __name__ == '__main__': diff --git a/tools/voc_eval.py b/tools/voc_eval.py deleted file mode 100644 index be0bde6db991e60576cc233456abb8692133c8f9..0000000000000000000000000000000000000000 --- a/tools/voc_eval.py +++ /dev/null @@ -1,47 +0,0 @@ -from argparse import ArgumentParser - -import mmcv - -from mmdet import datasets -from mmdet.core import eval_map - - -def voc_eval(result_file, dataset, iou_thr=0.5, nproc=4): - det_results = mmcv.load(result_file) - annotations = [dataset.get_ann_info(i) for i in range(len(dataset))] - if hasattr(dataset, 'year') and dataset.year == 2007: - dataset_name = 'voc07' - else: - dataset_name = dataset.CLASSES - eval_map( - det_results, - annotations, - scale_ranges=None, - iou_thr=iou_thr, - dataset=dataset_name, - logger='print', - nproc=nproc) - - -def main(): - parser = ArgumentParser(description='VOC Evaluation') - parser.add_argument('result', help='result file path') - parser.add_argument('config', help='config file path') - parser.add_argument( - '--iou-thr', - type=float, - default=0.5, - help='IoU threshold for evaluation') - parser.add_argument( - '--nproc', - type=int, - default=4, - help='Processes to be used for computing mAP') - args = parser.parse_args() - cfg = mmcv.Config.fromfile(args.config) - test_dataset = mmcv.runner.obj_from_dict(cfg.data.test, datasets) - voc_eval(args.result, test_dataset, args.iou_thr, args.nproc) - - -if __name__ == '__main__': - main()