mayurKuchha commited on
Commit
76582c8
1 Parent(s): 3d137c6

Upload 26 files

Browse files
configs/_base_/datasets/dior.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'DIORDataset'
3
+ data_root = 'data/DIOR/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
9
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
10
+ dict(type='mmdet.Resize', scale=(800, 800), keep_ratio=True),
11
+ dict(
12
+ type='mmdet.RandomFlip',
13
+ prob=0.75,
14
+ direction=['horizontal', 'vertical', 'diagonal']),
15
+ dict(type='mmdet.PackDetInputs')
16
+ ]
17
+ val_pipeline = [
18
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
19
+ dict(type='mmdet.Resize', scale=(800, 800), keep_ratio=True),
20
+ # avoid bboxes being resized
21
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
22
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
23
+ dict(
24
+ type='mmdet.PackDetInputs',
25
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
26
+ 'scale_factor'))
27
+ ]
28
+ test_pipeline = [
29
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
30
+ dict(type='mmdet.Resize', scale=(800, 800), keep_ratio=True),
31
+ dict(
32
+ type='mmdet.PackDetInputs',
33
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
34
+ 'scale_factor'))
35
+ ]
36
+ train_dataloader = dict(
37
+ batch_size=2,
38
+ num_workers=2,
39
+ persistent_workers=True,
40
+ sampler=dict(type='DefaultSampler', shuffle=True),
41
+ batch_sampler=None,
42
+ dataset=dict(
43
+ type='ConcatDataset',
44
+ ignore_keys=['DATASET_TYPE'],
45
+ datasets=[
46
+ dict(
47
+ type=dataset_type,
48
+ data_root=data_root,
49
+ ann_file='ImageSets/Main/train.txt',
50
+ data_prefix=dict(img_path='JPEGImages-trainval'),
51
+ filter_cfg=dict(filter_empty_gt=True),
52
+ pipeline=train_pipeline),
53
+ dict(
54
+ type=dataset_type,
55
+ data_root=data_root,
56
+ ann_file='ImageSets/Main/val.txt',
57
+ data_prefix=dict(img_path='JPEGImages-trainval'),
58
+ filter_cfg=dict(filter_empty_gt=True),
59
+ pipeline=train_pipeline,
60
+ backend_args=backend_args)
61
+ ]))
62
+ val_dataloader = dict(
63
+ batch_size=1,
64
+ num_workers=2,
65
+ persistent_workers=True,
66
+ drop_last=False,
67
+ sampler=dict(type='DefaultSampler', shuffle=False),
68
+ dataset=dict(
69
+ type=dataset_type,
70
+ data_root=data_root,
71
+ ann_file='ImageSets/Main/test.txt',
72
+ data_prefix=dict(img_path='JPEGImages-test'),
73
+ test_mode=True,
74
+ pipeline=val_pipeline,
75
+ backend_args=backend_args))
76
+ test_dataloader = val_dataloader
77
+
78
+ val_evaluator = dict(type='DOTAMetric', metric='mAP')
79
+ test_evaluator = val_evaluator
configs/_base_/datasets/dota.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'DOTADataset'
3
+ data_root = 'data/split_ss_dota/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
9
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
10
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
11
+ dict(
12
+ type='mmdet.RandomFlip',
13
+ prob=0.75,
14
+ direction=['horizontal', 'vertical', 'diagonal']),
15
+ dict(type='mmdet.PackDetInputs')
16
+ ]
17
+ val_pipeline = [
18
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
19
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
20
+ # avoid bboxes being resized
21
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
22
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
23
+ dict(
24
+ type='mmdet.PackDetInputs',
25
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
26
+ 'scale_factor'))
27
+ ]
28
+ test_pipeline = [
29
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
30
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
31
+ dict(
32
+ type='mmdet.PackDetInputs',
33
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
34
+ 'scale_factor'))
35
+ ]
36
+ train_dataloader = dict(
37
+ batch_size=2,
38
+ num_workers=2,
39
+ persistent_workers=True,
40
+ sampler=dict(type='DefaultSampler', shuffle=True),
41
+ batch_sampler=None,
42
+ dataset=dict(
43
+ type=dataset_type,
44
+ data_root=data_root,
45
+ ann_file='trainval/annfiles/',
46
+ data_prefix=dict(img_path='trainval/images/'),
47
+ filter_cfg=dict(filter_empty_gt=True),
48
+ pipeline=train_pipeline))
49
+ val_dataloader = dict(
50
+ batch_size=1,
51
+ num_workers=2,
52
+ persistent_workers=True,
53
+ drop_last=False,
54
+ sampler=dict(type='DefaultSampler', shuffle=False),
55
+ dataset=dict(
56
+ type=dataset_type,
57
+ data_root=data_root,
58
+ ann_file='trainval/annfiles/',
59
+ data_prefix=dict(img_path='trainval/images/'),
60
+ test_mode=True,
61
+ pipeline=val_pipeline))
62
+ test_dataloader = val_dataloader
63
+
64
+ val_evaluator = dict(type='DOTAMetric', metric='mAP')
65
+ test_evaluator = val_evaluator
66
+
67
+ # inference on test dataset and format the output results
68
+ # for submission. Note: the test set has no annotation.
69
+ # test_dataloader = dict(
70
+ # batch_size=1,
71
+ # num_workers=2,
72
+ # persistent_workers=True,
73
+ # drop_last=False,
74
+ # sampler=dict(type='DefaultSampler', shuffle=False),
75
+ # dataset=dict(
76
+ # type=dataset_type,
77
+ # data_root=data_root,
78
+ # data_prefix=dict(img_path='test/images/'),
79
+ # test_mode=True,
80
+ # pipeline=test_pipeline))
81
+ # test_evaluator = dict(
82
+ # type='DOTAMetric',
83
+ # format_only=True,
84
+ # merge_patches=True,
85
+ # outfile_prefix='./work_dirs/dota/Task1')
configs/_base_/datasets/dota_coco.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'mmdet.CocoDataset'
3
+ data_root = 'data/split_ms_dota/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(
9
+ type='mmdet.LoadAnnotations',
10
+ with_bbox=True,
11
+ with_mask=True,
12
+ poly2mask=False),
13
+ dict(type='ConvertMask2BoxType', box_type='rbox'),
14
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
15
+ dict(
16
+ type='mmdet.RandomFlip',
17
+ prob=0.75,
18
+ direction=['horizontal', 'vertical', 'diagonal']),
19
+ dict(type='mmdet.PackDetInputs')
20
+ ]
21
+ val_pipeline = [
22
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
23
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
24
+ # avoid bboxes being resized
25
+ dict(
26
+ type='mmdet.LoadAnnotations',
27
+ with_bbox=True,
28
+ with_mask=True,
29
+ poly2mask=False),
30
+ dict(type='ConvertMask2BoxType', box_type='qbox'),
31
+ dict(
32
+ type='mmdet.PackDetInputs',
33
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
34
+ 'scale_factor', 'instances'))
35
+ ]
36
+ test_pipeline = [
37
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
38
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
39
+ dict(
40
+ type='mmdet.PackDetInputs',
41
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
42
+ 'scale_factor'))
43
+ ]
44
+
45
+ metainfo = dict(
46
+ classes=('plane', 'baseball-diamond', 'bridge', 'ground-track-field',
47
+ 'small-vehicle', 'large-vehicle', 'ship', 'tennis-court',
48
+ 'basketball-court', 'storage-tank', 'soccer-ball-field',
49
+ 'roundabout', 'harbor', 'swimming-pool', 'helicopter'))
50
+
51
+ train_dataloader = dict(
52
+ batch_size=2,
53
+ num_workers=2,
54
+ persistent_workers=True,
55
+ sampler=dict(type='DefaultSampler', shuffle=True),
56
+ batch_sampler=None,
57
+ dataset=dict(
58
+ type=dataset_type,
59
+ metainfo=metainfo,
60
+ data_root=data_root,
61
+ ann_file='train/train.json',
62
+ data_prefix=dict(img='train/images/'),
63
+ filter_cfg=dict(filter_empty_gt=True),
64
+ pipeline=train_pipeline,
65
+ backend_args=backend_args))
66
+ val_dataloader = dict(
67
+ batch_size=1,
68
+ num_workers=2,
69
+ persistent_workers=True,
70
+ drop_last=False,
71
+ sampler=dict(type='DefaultSampler', shuffle=False),
72
+ dataset=dict(
73
+ type=dataset_type,
74
+ metainfo=metainfo,
75
+ data_root=data_root,
76
+ ann_file='val/val.json',
77
+ data_prefix=dict(img='val/images/'),
78
+ test_mode=True,
79
+ pipeline=val_pipeline,
80
+ backend_args=backend_args))
81
+ test_dataloader = val_dataloader
82
+
83
+ val_evaluator = dict(
84
+ type='RotatedCocoMetric',
85
+ metric='bbox',
86
+ classwise=True,
87
+ backend_args=backend_args)
88
+
89
+ test_evaluator = val_evaluator
90
+
91
+ # inference on test dataset and format the output results
92
+ # for submission. Note: the test set has no annotation.
93
+ # test_dataloader = dict(
94
+ # batch_size=1,
95
+ # num_workers=2,
96
+ # persistent_workers=True,
97
+ # drop_last=False,
98
+ # sampler=dict(type='DefaultSampler', shuffle=False),
99
+ # dataset=dict(
100
+ # type=dataset_type,
101
+ # ann_file='test/test.json',
102
+ # data_prefix=dict(img='test/images/'),
103
+ # test_mode=True,
104
+ # pipeline=test_pipeline))
105
+ # test_evaluator = dict(
106
+ # type='DOTAMetric',
107
+ # format_only=True,
108
+ # merge_patches=True,
109
+ # outfile_prefix='./work_dirs/dota/Task1')
configs/_base_/datasets/dota_ms.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'DOTADataset'
3
+ data_root = 'data/split_ms_dota/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
9
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
10
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
11
+ dict(
12
+ type='mmdet.RandomFlip',
13
+ prob=0.75,
14
+ direction=['horizontal', 'vertical', 'diagonal']),
15
+ dict(
16
+ type='RandomRotate',
17
+ prob=0.5,
18
+ angle_range=180,
19
+ rect_obj_labels=[9, 11]),
20
+ dict(type='mmdet.PackDetInputs')
21
+ ]
22
+ val_pipeline = [
23
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
24
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
25
+ # avoid bboxes being resized
26
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
27
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
28
+ dict(
29
+ type='mmdet.PackDetInputs',
30
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
31
+ 'scale_factor'))
32
+ ]
33
+ test_pipeline = [
34
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
35
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
36
+ dict(
37
+ type='mmdet.PackDetInputs',
38
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
39
+ 'scale_factor'))
40
+ ]
41
+ train_dataloader = dict(
42
+ batch_size=2,
43
+ num_workers=2,
44
+ persistent_workers=True,
45
+ sampler=dict(type='DefaultSampler', shuffle=True),
46
+ batch_sampler=None,
47
+ dataset=dict(
48
+ type=dataset_type,
49
+ data_root=data_root,
50
+ ann_file='trainval/annfiles/',
51
+ data_prefix=dict(img_path='trainval/images/'),
52
+ filter_cfg=dict(filter_empty_gt=True),
53
+ pipeline=train_pipeline))
54
+ val_dataloader = dict(
55
+ batch_size=1,
56
+ num_workers=2,
57
+ persistent_workers=True,
58
+ drop_last=False,
59
+ sampler=dict(type='DefaultSampler', shuffle=False),
60
+ dataset=dict(
61
+ type=dataset_type,
62
+ data_root=data_root,
63
+ ann_file='trainval/annfiles/',
64
+ data_prefix=dict(img_path='trainval/images/'),
65
+ test_mode=True,
66
+ pipeline=val_pipeline))
67
+ test_dataloader = val_dataloader
68
+
69
+ val_evaluator = dict(type='DOTAMetric', metric='mAP')
70
+ test_evaluator = val_evaluator
71
+
72
+ # inference on test dataset and format the output results
73
+ # for submission. Note: the test set has no annotation.
74
+ # test_dataloader = dict(
75
+ # batch_size=1,
76
+ # num_workers=2,
77
+ # persistent_workers=True,
78
+ # drop_last=False,
79
+ # sampler=dict(type='DefaultSampler', shuffle=False),
80
+ # dataset=dict(
81
+ # type=dataset_type,
82
+ # data_root=data_root,
83
+ # data_prefix=dict(img_path='test/images/'),
84
+ # test_mode=True,
85
+ # pipeline=test_pipeline))
86
+ # test_evaluator = dict(
87
+ # type='DOTAMetric',
88
+ # format_only=True,
89
+ # merge_patches=True,
90
+ # outfile_prefix='./work_dirs/dota/Task1')
configs/_base_/datasets/dota_qbox.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'DOTADataset'
3
+ data_root = 'data/split_ss_dota/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
9
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
10
+ dict(
11
+ type='mmdet.RandomFlip',
12
+ prob=0.75,
13
+ direction=['horizontal', 'vertical', 'diagonal']),
14
+ dict(type='mmdet.PackDetInputs')
15
+ ]
16
+ val_pipeline = [
17
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
18
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
19
+ # avoid bboxes being resized
20
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
21
+ dict(
22
+ type='mmdet.PackDetInputs',
23
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
24
+ 'scale_factor'))
25
+ ]
26
+ test_pipeline = [
27
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
28
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
29
+ dict(
30
+ type='mmdet.PackDetInputs',
31
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
32
+ 'scale_factor'))
33
+ ]
34
+ train_dataloader = dict(
35
+ batch_size=2,
36
+ num_workers=2,
37
+ persistent_workers=True,
38
+ sampler=dict(type='DefaultSampler', shuffle=True),
39
+ batch_sampler=None,
40
+ dataset=dict(
41
+ type=dataset_type,
42
+ data_root=data_root,
43
+ ann_file='trainval/annfiles/',
44
+ data_prefix=dict(img_path='trainval/images/'),
45
+ filter_cfg=dict(filter_empty_gt=True),
46
+ pipeline=train_pipeline))
47
+ val_dataloader = dict(
48
+ batch_size=1,
49
+ num_workers=2,
50
+ persistent_workers=True,
51
+ drop_last=False,
52
+ sampler=dict(type='DefaultSampler', shuffle=False),
53
+ dataset=dict(
54
+ type=dataset_type,
55
+ data_root=data_root,
56
+ ann_file='trainval/annfiles/',
57
+ data_prefix=dict(img_path='trainval/images/'),
58
+ test_mode=True,
59
+ pipeline=val_pipeline))
60
+ test_dataloader = val_dataloader
61
+
62
+ val_evaluator = dict(
63
+ type='DOTAMetric', metric='mAP', iou_thrs=0.2, predict_box_type='qbox')
64
+ test_evaluator = val_evaluator
65
+
66
+ # inference on test dataset and format the output results
67
+ # for submission. Note: the test set has no annotation.
68
+ # test_dataloader = dict(
69
+ # batch_size=1,
70
+ # num_workers=2,
71
+ # persistent_workers=True,
72
+ # drop_last=False,
73
+ # sampler=dict(type='DefaultSampler', shuffle=False),
74
+ # dataset=dict(
75
+ # type=dataset_type,
76
+ # data_root=data_root,
77
+ # data_prefix=dict(img_path='test/images/'),
78
+ # test_mode=True,
79
+ # pipeline=test_pipeline))
80
+ # test_evaluator = dict(
81
+ # type='DOTAMetric',
82
+ # format_only=True,
83
+ # merge_patches=True,
84
+ # predict_box_type='qbox',
85
+ # outfile_prefix='./work_dirs/dota/Task1')
configs/_base_/datasets/dotav15.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'DOTAv15Dataset'
3
+ data_root = 'data/split_ss_dota1_5/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
9
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
10
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
11
+ dict(
12
+ type='mmdet.RandomFlip',
13
+ prob=0.75,
14
+ direction=['horizontal', 'vertical', 'diagonal']),
15
+ dict(type='mmdet.PackDetInputs')
16
+ ]
17
+ val_pipeline = [
18
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
19
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
20
+ # avoid bboxes being resized
21
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
22
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
23
+ dict(
24
+ type='mmdet.PackDetInputs',
25
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
26
+ 'scale_factor'))
27
+ ]
28
+ test_pipeline = [
29
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
30
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
31
+ dict(
32
+ type='mmdet.PackDetInputs',
33
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
34
+ 'scale_factor'))
35
+ ]
36
+ train_dataloader = dict(
37
+ batch_size=2,
38
+ num_workers=2,
39
+ persistent_workers=True,
40
+ sampler=dict(type='DefaultSampler', shuffle=True),
41
+ batch_sampler=None,
42
+ dataset=dict(
43
+ type=dataset_type,
44
+ data_root=data_root,
45
+ ann_file='trainval/annfiles/',
46
+ data_prefix=dict(img_path='trainval/images/'),
47
+ filter_cfg=dict(filter_empty_gt=True),
48
+ pipeline=train_pipeline))
49
+ val_dataloader = dict(
50
+ batch_size=1,
51
+ num_workers=2,
52
+ persistent_workers=True,
53
+ drop_last=False,
54
+ sampler=dict(type='DefaultSampler', shuffle=False),
55
+ dataset=dict(
56
+ type=dataset_type,
57
+ data_root=data_root,
58
+ ann_file='trainval/annfiles/',
59
+ data_prefix=dict(img_path='trainval/images/'),
60
+ test_mode=True,
61
+ pipeline=val_pipeline))
62
+ test_dataloader = val_dataloader
63
+
64
+ val_evaluator = dict(type='DOTAMetric', metric='mAP')
65
+ test_evaluator = val_evaluator
66
+
67
+ # inference on test dataset and format the output results
68
+ # for submission. Note: the test set has no annotation.
69
+ # test_dataloader = dict(
70
+ # batch_size=1,
71
+ # num_workers=2,
72
+ # persistent_workers=True,
73
+ # drop_last=False,
74
+ # sampler=dict(type='DefaultSampler', shuffle=False),
75
+ # dataset=dict(
76
+ # type=dataset_type,
77
+ # data_root=data_root,
78
+ # data_prefix=dict(img_path='test/images/'),
79
+ # test_mode=True,
80
+ # pipeline=test_pipeline))
81
+ # test_evaluator = dict(
82
+ # type='DOTAMetric',
83
+ # format_only=True,
84
+ # merge_patches=True,
85
+ # outfile_prefix='./work_dirs/dotav15/h2rbox-le90_r50_fpn_adamw-1x_dotav15/Task1')
configs/_base_/datasets/dotav2.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'DOTAv2Dataset'
3
+ data_root = 'data/split_ss_dota2_0/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
9
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
10
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
11
+ dict(
12
+ type='mmdet.RandomFlip',
13
+ prob=0.75,
14
+ direction=['horizontal', 'vertical', 'diagonal']),
15
+ dict(type='mmdet.PackDetInputs')
16
+ ]
17
+ val_pipeline = [
18
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
19
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
20
+ # avoid bboxes being resized
21
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
22
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
23
+ dict(
24
+ type='mmdet.PackDetInputs',
25
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
26
+ 'scale_factor'))
27
+ ]
28
+ test_pipeline = [
29
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
30
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
31
+ dict(
32
+ type='mmdet.PackDetInputs',
33
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
34
+ 'scale_factor'))
35
+ ]
36
+ train_dataloader = dict(
37
+ batch_size=2,
38
+ num_workers=2,
39
+ persistent_workers=True,
40
+ sampler=dict(type='DefaultSampler', shuffle=True),
41
+ batch_sampler=None,
42
+ dataset=dict(
43
+ type=dataset_type,
44
+ data_root=data_root,
45
+ ann_file='trainval/annfiles/',
46
+ data_prefix=dict(img_path='trainval/images/'),
47
+ filter_cfg=dict(filter_empty_gt=True),
48
+ pipeline=train_pipeline))
49
+ val_dataloader = dict(
50
+ batch_size=1,
51
+ num_workers=2,
52
+ persistent_workers=True,
53
+ drop_last=False,
54
+ sampler=dict(type='DefaultSampler', shuffle=False),
55
+ dataset=dict(
56
+ type=dataset_type,
57
+ data_root=data_root,
58
+ ann_file='trainval/annfiles/',
59
+ data_prefix=dict(img_path='trainval/images/'),
60
+ test_mode=True,
61
+ pipeline=val_pipeline))
62
+ test_dataloader = val_dataloader
63
+
64
+ val_evaluator = dict(type='DOTAMetric', metric='mAP')
65
+ test_evaluator = val_evaluator
66
+
67
+ # inference on test dataset and format the output results
68
+ # for submission. Note: the test set has no annotation.
69
+ # test_dataloader = dict(
70
+ # batch_size=1,
71
+ # num_workers=2,
72
+ # persistent_workers=True,
73
+ # drop_last=False,
74
+ # sampler=dict(type='DefaultSampler', shuffle=False),
75
+ # dataset=dict(
76
+ # type=dataset_type,
77
+ # data_root=data_root,
78
+ # data_prefix=dict(img_path='test/images/'),
79
+ # test_mode=True,
80
+ # pipeline=test_pipeline))
81
+ # test_evaluator = dict(
82
+ # type='DOTAMetric',
83
+ # format_only=True,
84
+ # merge_patches=True,
85
+ # outfile_prefix='./work_dirs/dotav2/h2rbox-le90_r50_fpn_adamw-1x_dotav2/Task1')
configs/_base_/datasets/hrsc.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'HRSCDataset'
3
+ data_root = 'data/hrsc/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
9
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
10
+ dict(type='mmdet.Resize', scale=(800, 512), keep_ratio=True),
11
+ dict(
12
+ type='mmdet.RandomFlip',
13
+ prob=0.75,
14
+ direction=['horizontal', 'vertical', 'diagonal']),
15
+ dict(type='mmdet.PackDetInputs')
16
+ ]
17
+ val_pipeline = [
18
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
19
+ dict(type='mmdet.Resize', scale=(800, 512), keep_ratio=True),
20
+ # avoid bboxes being resized
21
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
22
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
23
+ dict(
24
+ type='mmdet.PackDetInputs',
25
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
26
+ 'scale_factor'))
27
+ ]
28
+ test_pipeline = [
29
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
30
+ dict(type='mmdet.Resize', scale=(800, 512), keep_ratio=True),
31
+ dict(
32
+ type='mmdet.PackDetInputs',
33
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
34
+ 'scale_factor'))
35
+ ]
36
+ train_dataloader = dict(
37
+ batch_size=2,
38
+ num_workers=2,
39
+ persistent_workers=True,
40
+ sampler=dict(type='DefaultSampler', shuffle=True),
41
+ batch_sampler=None,
42
+ dataset=dict(
43
+ type=dataset_type,
44
+ data_root=data_root,
45
+ ann_file='ImageSets/trainval.txt',
46
+ data_prefix=dict(sub_data_root='FullDataSet/'),
47
+ filter_cfg=dict(filter_empty_gt=True),
48
+ pipeline=train_pipeline,
49
+ backend_args=backend_args))
50
+ val_dataloader = dict(
51
+ batch_size=1,
52
+ num_workers=2,
53
+ persistent_workers=True,
54
+ drop_last=False,
55
+ sampler=dict(type='DefaultSampler', shuffle=False),
56
+ dataset=dict(
57
+ type=dataset_type,
58
+ data_root=data_root,
59
+ ann_file='ImageSets/test.txt',
60
+ data_prefix=dict(sub_data_root='FullDataSet/'),
61
+ test_mode=True,
62
+ pipeline=val_pipeline,
63
+ backend_args=backend_args))
64
+ test_dataloader = val_dataloader
65
+
66
+ val_evaluator = dict(type='DOTAMetric', metric='mAP')
67
+ test_evaluator = val_evaluator
configs/_base_/datasets/hrsid.py ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'mmdet.CocoDataset'
3
+ data_root = 'data/HRSID_JPG/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(
9
+ type='mmdet.LoadAnnotations',
10
+ with_bbox=True,
11
+ with_mask=True,
12
+ poly2mask=False),
13
+ dict(type='ConvertMask2BoxType', box_type='rbox'),
14
+ dict(type='mmdet.Resize', scale=(800, 800), keep_ratio=True),
15
+ dict(type='mmdet.FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)),
16
+ dict(
17
+ type='mmdet.RandomFlip',
18
+ prob=0.75,
19
+ direction=['horizontal', 'vertical', 'diagonal']),
20
+ dict(type='mmdet.PackDetInputs')
21
+ ]
22
+ val_pipeline = [
23
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
24
+ dict(type='mmdet.Resize', scale=(800, 800), keep_ratio=True),
25
+ # avoid bboxes being resized
26
+ dict(
27
+ type='mmdet.LoadAnnotations',
28
+ with_bbox=True,
29
+ with_mask=True,
30
+ poly2mask=False),
31
+ dict(type='ConvertMask2BoxType', box_type='qbox'),
32
+ dict(
33
+ type='mmdet.PackDetInputs',
34
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
35
+ 'scale_factor', 'instances'))
36
+ ]
37
+ test_pipeline = [
38
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
39
+ dict(type='mmdet.Resize', scale=(800, 800), keep_ratio=True),
40
+ dict(
41
+ type='mmdet.PackDetInputs',
42
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
43
+ 'scale_factor'))
44
+ ]
45
+
46
+ metainfo = dict(classes=('ship', ))
47
+
48
+ train_dataloader = dict(
49
+ batch_size=2,
50
+ num_workers=2,
51
+ persistent_workers=True,
52
+ sampler=dict(type='DefaultSampler', shuffle=True),
53
+ batch_sampler=None,
54
+ dataset=dict(
55
+ type=dataset_type,
56
+ metainfo=metainfo,
57
+ data_root=data_root,
58
+ ann_file='annotations/train2017.json',
59
+ data_prefix=dict(img='JPEGImages/'),
60
+ filter_cfg=dict(filter_empty_gt=True),
61
+ pipeline=train_pipeline,
62
+ backend_args=backend_args))
63
+ val_dataloader = dict(
64
+ batch_size=1,
65
+ num_workers=2,
66
+ persistent_workers=True,
67
+ drop_last=False,
68
+ sampler=dict(type='DefaultSampler', shuffle=False),
69
+ dataset=dict(
70
+ type=dataset_type,
71
+ metainfo=metainfo,
72
+ data_root=data_root,
73
+ ann_file='annotations/test2017.json',
74
+ data_prefix=dict(img='JPEGImages/'),
75
+ test_mode=True,
76
+ pipeline=val_pipeline,
77
+ backend_args=backend_args))
78
+ test_dataloader = val_dataloader
79
+
80
+ val_evaluator = dict(type='RotatedCocoMetric', metric='bbox')
81
+
82
+ test_evaluator = val_evaluator
configs/_base_/datasets/rsdd.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'mmdet.CocoDataset'
3
+ data_root = 'data/rsdd/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(
9
+ type='mmdet.LoadAnnotations',
10
+ with_bbox=True,
11
+ with_mask=True,
12
+ poly2mask=False),
13
+ dict(type='ConvertMask2BoxType', box_type='rbox'),
14
+ dict(type='mmdet.Resize', scale=(512, 512), keep_ratio=True),
15
+ dict(
16
+ type='mmdet.RandomFlip',
17
+ prob=0.75,
18
+ direction=['horizontal', 'vertical', 'diagonal']),
19
+ dict(type='mmdet.PackDetInputs')
20
+ ]
21
+ val_pipeline = [
22
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
23
+ dict(type='mmdet.Resize', scale=(512, 512), keep_ratio=True),
24
+ # avoid bboxes being resized
25
+ dict(
26
+ type='mmdet.LoadAnnotations',
27
+ with_bbox=True,
28
+ with_mask=True,
29
+ poly2mask=False),
30
+ dict(type='ConvertMask2BoxType', box_type='qbox'),
31
+ dict(
32
+ type='mmdet.PackDetInputs',
33
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
34
+ 'scale_factor', 'instances'))
35
+ ]
36
+ test_pipeline = [
37
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
38
+ dict(type='mmdet.Resize', scale=(512, 512), keep_ratio=True),
39
+ dict(
40
+ type='mmdet.PackDetInputs',
41
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
42
+ 'scale_factor'))
43
+ ]
44
+
45
+ metainfo = dict(classes=('ship', ))
46
+
47
+ train_dataloader = dict(
48
+ batch_size=2,
49
+ num_workers=2,
50
+ persistent_workers=True,
51
+ sampler=dict(type='DefaultSampler', shuffle=True),
52
+ batch_sampler=None,
53
+ dataset=dict(
54
+ type=dataset_type,
55
+ metainfo=metainfo,
56
+ data_root=data_root,
57
+ ann_file='ImageSets/train.json',
58
+ data_prefix=dict(img='JPEGImages/'),
59
+ filter_cfg=dict(filter_empty_gt=True),
60
+ pipeline=train_pipeline,
61
+ backend_args=backend_args))
62
+ val_dataloader = dict(
63
+ batch_size=1,
64
+ num_workers=2,
65
+ persistent_workers=True,
66
+ drop_last=False,
67
+ sampler=dict(type='DefaultSampler', shuffle=False),
68
+ dataset=dict(
69
+ type=dataset_type,
70
+ metainfo=metainfo,
71
+ data_root=data_root,
72
+ ann_file='ImageSets/test.json',
73
+ data_prefix=dict(img='JPEGImages/'),
74
+ test_mode=True,
75
+ pipeline=val_pipeline,
76
+ backend_args=backend_args))
77
+ test_dataloader = val_dataloader
78
+
79
+ val_evaluator = dict(type='RotatedCocoMetric', metric='bbox')
80
+
81
+ test_evaluator = val_evaluator
configs/_base_/datasets/srsdd.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'mmdet.CocoDataset'
3
+ data_root = 'data/srsdd/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(
9
+ type='mmdet.LoadAnnotations',
10
+ with_bbox=True,
11
+ with_mask=True,
12
+ poly2mask=False),
13
+ dict(type='ConvertMask2BoxType', box_type='rbox'),
14
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
15
+ dict(
16
+ type='mmdet.RandomFlip',
17
+ prob=0.75,
18
+ direction=['horizontal', 'vertical', 'diagonal']),
19
+ dict(type='mmdet.PackDetInputs')
20
+ ]
21
+ val_pipeline = [
22
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
23
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
24
+ # avoid bboxes being resized
25
+ dict(
26
+ type='mmdet.LoadAnnotations',
27
+ with_bbox=True,
28
+ with_mask=True,
29
+ poly2mask=False),
30
+ dict(type='ConvertMask2BoxType', box_type='qbox'),
31
+ dict(
32
+ type='mmdet.PackDetInputs',
33
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
34
+ 'scale_factor', 'instances'))
35
+ ]
36
+ test_pipeline = [
37
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
38
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
39
+ dict(
40
+ type='mmdet.PackDetInputs',
41
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
42
+ 'scale_factor'))
43
+ ]
44
+
45
+ metainfo = dict(
46
+ classes=('Container', 'Dredger', 'LawEnforce', 'Cell-Container', 'ore-oil',
47
+ 'Fishing'))
48
+
49
+ train_dataloader = dict(
50
+ batch_size=2,
51
+ num_workers=2,
52
+ persistent_workers=True,
53
+ sampler=dict(type='DefaultSampler', shuffle=True),
54
+ batch_sampler=None,
55
+ dataset=dict(
56
+ type=dataset_type,
57
+ metainfo=metainfo,
58
+ data_root=data_root,
59
+ ann_file='train/train.json',
60
+ data_prefix=dict(img='train/images/'),
61
+ filter_cfg=dict(filter_empty_gt=True),
62
+ pipeline=train_pipeline,
63
+ backend_args=backend_args))
64
+ val_dataloader = dict(
65
+ batch_size=1,
66
+ num_workers=2,
67
+ persistent_workers=True,
68
+ drop_last=False,
69
+ sampler=dict(type='DefaultSampler', shuffle=False),
70
+ dataset=dict(
71
+ type=dataset_type,
72
+ metainfo=metainfo,
73
+ data_root=data_root,
74
+ ann_file='test/test.json',
75
+ data_prefix=dict(img='test/images/'),
76
+ test_mode=True,
77
+ pipeline=val_pipeline,
78
+ backend_args=backend_args))
79
+ test_dataloader = val_dataloader
80
+
81
+ val_evaluator = dict(type='RotatedCocoMetric', metric='bbox')
82
+
83
+ test_evaluator = val_evaluator
configs/_base_/datasets/ssdd.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'mmdet.CocoDataset'
3
+ data_root = 'data/ssdd/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(
9
+ type='mmdet.LoadAnnotations',
10
+ with_bbox=True,
11
+ with_mask=True,
12
+ poly2mask=False),
13
+ dict(type='ConvertMask2BoxType', box_type='rbox'),
14
+ dict(type='mmdet.Resize', scale=(512, 512), keep_ratio=True),
15
+ dict(
16
+ type='mmdet.RandomFlip',
17
+ prob=0.75,
18
+ direction=['horizontal', 'vertical', 'diagonal']),
19
+ dict(type='mmdet.PackDetInputs')
20
+ ]
21
+ val_pipeline = [
22
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
23
+ dict(type='mmdet.Resize', scale=(512, 512), keep_ratio=True),
24
+ # avoid bboxes being resized
25
+ dict(
26
+ type='mmdet.LoadAnnotations',
27
+ with_bbox=True,
28
+ with_mask=True,
29
+ poly2mask=False),
30
+ dict(type='ConvertMask2BoxType', box_type='qbox'),
31
+ dict(
32
+ type='mmdet.PackDetInputs',
33
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
34
+ 'scale_factor', 'instances'))
35
+ ]
36
+ test_pipeline = [
37
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
38
+ dict(type='mmdet.Resize', scale=(512, 512), keep_ratio=True),
39
+ dict(
40
+ type='mmdet.PackDetInputs',
41
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
42
+ 'scale_factor'))
43
+ ]
44
+
45
+ metainfo = dict(classes=('ship', ))
46
+
47
+ train_dataloader = dict(
48
+ batch_size=2,
49
+ num_workers=2,
50
+ persistent_workers=True,
51
+ sampler=dict(type='DefaultSampler', shuffle=True),
52
+ batch_sampler=None,
53
+ dataset=dict(
54
+ type=dataset_type,
55
+ metainfo=metainfo,
56
+ data_root=data_root,
57
+ ann_file='train/train.json',
58
+ data_prefix=dict(img='train/images/'),
59
+ filter_cfg=dict(filter_empty_gt=True),
60
+ pipeline=train_pipeline,
61
+ backend_args=backend_args))
62
+ val_dataloader = dict(
63
+ batch_size=1,
64
+ num_workers=2,
65
+ persistent_workers=True,
66
+ drop_last=False,
67
+ sampler=dict(type='DefaultSampler', shuffle=False),
68
+ dataset=dict(
69
+ type=dataset_type,
70
+ metainfo=metainfo,
71
+ data_root=data_root,
72
+ ann_file='test/all/test.json',
73
+ data_prefix=dict(img='test/all/images/'),
74
+ test_mode=True,
75
+ pipeline=val_pipeline,
76
+ backend_args=backend_args))
77
+ test_dataloader = val_dataloader
78
+
79
+ val_evaluator = dict(type='RotatedCocoMetric', metric='bbox')
80
+
81
+ test_evaluator = val_evaluator
configs/_base_/default_runtime.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ default_scope = 'mmrotate'
2
+
3
+ default_hooks = dict(
4
+ timer=dict(type='IterTimerHook'),
5
+ logger=dict(type='LoggerHook', interval=50),
6
+ param_scheduler=dict(type='ParamSchedulerHook'),
7
+ checkpoint=dict(type='CheckpointHook', interval=1),
8
+ sampler_seed=dict(type='DistSamplerSeedHook'),
9
+ visualization=dict(type='mmdet.DetVisualizationHook'))
10
+
11
+ env_cfg = dict(
12
+ cudnn_benchmark=False,
13
+ mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),
14
+ dist_cfg=dict(backend='nccl'),
15
+ )
16
+
17
+ vis_backends = [dict(type='LocalVisBackend')]
18
+ visualizer = dict(
19
+ type='RotLocalVisualizer', vis_backends=vis_backends, name='visualizer')
20
+ log_processor = dict(type='LogProcessor', window_size=50, by_epoch=True)
21
+
22
+ log_level = 'INFO'
23
+ load_from = None
24
+ resume = False
configs/_base_/schedules/schedule_1x.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # training schedule for 1x
2
+ train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=12, val_interval=1)
3
+ val_cfg = dict(type='ValLoop')
4
+ test_cfg = dict(type='TestLoop')
5
+
6
+ # learning rate
7
+ param_scheduler = [
8
+ dict(
9
+ type='LinearLR',
10
+ start_factor=1.0 / 3,
11
+ by_epoch=False,
12
+ begin=0,
13
+ end=500),
14
+ dict(
15
+ type='MultiStepLR',
16
+ begin=0,
17
+ end=12,
18
+ by_epoch=True,
19
+ milestones=[8, 11],
20
+ gamma=0.1)
21
+ ]
22
+
23
+ # optimizer
24
+ optim_wrapper = dict(
25
+ type='OptimWrapper',
26
+ optimizer=dict(type='SGD', lr=0.0025, momentum=0.9, weight_decay=0.0001),
27
+ clip_grad=dict(max_norm=35, norm_type=2))
configs/_base_/schedules/schedule_3x.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # training schedule for 1x
2
+ train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=36, val_interval=1)
3
+ val_cfg = dict(type='ValLoop')
4
+ test_cfg = dict(type='TestLoop')
5
+
6
+ # learning rate
7
+ param_scheduler = [
8
+ dict(
9
+ type='LinearLR',
10
+ start_factor=1.0 / 3,
11
+ by_epoch=False,
12
+ begin=0,
13
+ end=500),
14
+ dict(
15
+ type='MultiStepLR',
16
+ begin=0,
17
+ end=36,
18
+ by_epoch=True,
19
+ milestones=[24, 33],
20
+ gamma=0.1)
21
+ ]
22
+
23
+ # optimizer
24
+ optim_wrapper = dict(
25
+ type='OptimWrapper',
26
+ optimizer=dict(type='SGD', lr=0.0025, momentum=0.9, weight_decay=0.0001),
27
+ clip_grad=dict(max_norm=35, norm_type=2))
configs/_base_/schedules/schedule_40e.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # training schedule for 1x
2
+ train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=40, val_interval=1)
3
+ val_cfg = dict(type='ValLoop')
4
+ test_cfg = dict(type='TestLoop')
5
+
6
+ # learning rate
7
+ param_scheduler = [
8
+ dict(
9
+ type='LinearLR',
10
+ start_factor=1.0 / 3,
11
+ by_epoch=False,
12
+ begin=0,
13
+ end=500),
14
+ dict(
15
+ type='MultiStepLR',
16
+ begin=0,
17
+ end=40,
18
+ by_epoch=True,
19
+ milestones=[24, 32, 38],
20
+ gamma=0.1)
21
+ ]
22
+
23
+ # optimizer
24
+ optim_wrapper = dict(
25
+ type='OptimWrapper',
26
+ optimizer=dict(type='SGD', lr=0.0025, momentum=0.9, weight_decay=0.0001),
27
+ clip_grad=dict(max_norm=35, norm_type=2))
configs/_base_/schedules/schedule_6x.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # training schedule for 1x
2
+ train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=72, val_interval=1)
3
+ val_cfg = dict(type='ValLoop')
4
+ test_cfg = dict(type='TestLoop')
5
+
6
+ # learning rate
7
+ param_scheduler = [
8
+ dict(
9
+ type='LinearLR',
10
+ start_factor=1.0 / 3,
11
+ by_epoch=False,
12
+ begin=0,
13
+ end=500),
14
+ dict(
15
+ type='MultiStepLR',
16
+ begin=0,
17
+ end=72,
18
+ by_epoch=True,
19
+ milestones=[48, 66],
20
+ gamma=0.1)
21
+ ]
22
+
23
+ # optimizer
24
+ optim_wrapper = dict(
25
+ type='OptimWrapper',
26
+ optimizer=dict(type='SGD', lr=0.0025, momentum=0.9, weight_decay=0.0001),
27
+ clip_grad=dict(max_norm=35, norm_type=2))
configs/rotated_rtmdet/README.md ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # RTMDet-R
2
+
3
+ > [RTMDet: An Empirical Study of Designing Real-Time Object Detectors](https://arxiv.org/abs/2212.07784)
4
+
5
+ <!-- [ALGORITHM] -->
6
+
7
+ ## Abstract
8
+
9
+ In this paper, we aim to design an efficient real-time object detector that exceeds the YOLO series and is easily extensible for many object recognition tasks such as instance segmentation and rotated object detection. To obtain a more efficient model architecture, we explore an architecture that has compatible capacities in the backbone and neck, constructed by a basic building block that consists of large-kernel depth-wise convolutions. We further introduce soft labels when calculating matching costs in the dynamic label assignment to improve accuracy. Together with better training techniques, the resulting object detector, named RTMDet, achieves 52.8% AP on COCO with 300+ FPS on an NVIDIA 3090 GPU, outperforming the current mainstream industrial detectors. RTMDet achieves the best parameter-accuracy trade-off with tiny/small/medium/large/extra-large model sizes for various application scenarios, and obtains new state-of-the-art performance on real-time instance segmentation and rotated object detection. We hope the experimental results can provide new insights into designing versatile real-time object detectors for many object recognition tasks.
10
+
11
+ <div align=center>
12
+ <img src="https://user-images.githubusercontent.com/11705038/204995787-ef739910-e196-42c7-a9db-c9c8e28a494d.jpg" height="360"/>
13
+ </div>
14
+
15
+ ## Results and Models
16
+
17
+ ### DOTA-v1.0
18
+
19
+ [![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/rtmdet-an-empirical-study-of-designing-real/object-detection-in-aerial-images-on-dota-1)](https://paperswithcode.com/sota/object-detection-in-aerial-images-on-dota-1?p=rtmdet-an-empirical-study-of-designing-real)
20
+
21
+ [![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/rtmdet-an-empirical-study-of-designing-real/one-stage-anchor-free-oriented-object-1)](https://paperswithcode.com/sota/one-stage-anchor-free-oriented-object-1?p=rtmdet-an-empirical-study-of-designing-real)
22
+
23
+ | Backbone | pretrain | Aug | mmAP | mAP50 | mAP75 | Params(M) | FLOPS(G) | TRT-FP16-Latency(ms) | Config | Download |
24
+ | :---------: | :------: | :---: | :---: | :---: | :---: | :-------: | :------: | :------------------: | :------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
25
+ | RTMDet-tiny | IN | RR | 47.37 | 75.36 | 50.64 | 4.88 | 20.45 | 4.40 | [config](./rotated_rtmdet_tiny-3x-dota.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_tiny-3x-dota/rotated_rtmdet_tiny-3x-dota-9d821076.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_tiny-3x-dota/rotated_rtmdet_tiny-3x-dota_20221201_120814.json) |
26
+ | RTMDet-tiny | IN | MS+RR | 53.59 | 79.82 | 58.87 | 4.88 | 20.45 | 4.40 | [config](./rotated_rtmdet_tiny-3x-dota_ms.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_tiny-3x-dota_ms/rotated_rtmdet_tiny-3x-dota_ms-f12286ff.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_tiny-3x-dota_ms/rotated_rtmdet_tiny-3x-dota_ms_20221113_201235.log) |
27
+ | RTMDet-s | IN | RR | 48.16 | 76.93 | 50.59 | 8.86 | 37.62 | 4.86 | [config](./rotated_rtmdet_s-3x-dota.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_s-3x-dota/rotated_rtmdet_s-3x-dota-11f6ccf5.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_s-3x-dota/rotated_rtmdet_s-3x-dota_20221124_081442.json) |
28
+ | RTMDet-s | IN | MS+RR | 54.43 | 79.98 | 60.07 | 8.86 | 37.62 | 4.86 | [config](./rotated_rtmdet_s-3x-dota_ms.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_s-3x-dota_ms/rotated_rtmdet_s-3x-dota_ms-20ead048.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_s-3x-dota_ms/rotated_rtmdet_s-3x-dota_ms_20221113_201055.json) |
29
+ | RTMDet-m | IN | RR | 50.56 | 78.24 | 54.47 | 24.67 | 99.76 | 7.82 | [config](./rotated_rtmdet_m-3x-dota.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_m-3x-dota/rotated_rtmdet_m-3x-dota-beeadda6.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_m-3x-dota/rotated_rtmdet_m-3x-dota_20221122_011234.json) |
30
+ | RTMDet-m | IN | MS+RR | 55.00 | 80.26 | 61.26 | 24.67 | 99.76 | 7.82 | [config](./rotated_rtmdet_m-3x-dota_ms.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_m-3x-dota_ms/rotated_rtmdet_m-3x-dota_ms-c71eb375.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_m-3x-dota_ms/rotated_rtmdet_m-3x-dota_ms_20221122_011234.json) |
31
+ | RTMDet-l | IN | RR | 51.01 | 78.85 | 55.21 | 52.27 | 204.21 | 10.82 | [config](./rotated_rtmdet_l-3x-dota.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-3x-dota/rotated_rtmdet_l-3x-dota-23992372.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-3x-dota/rotated_rtmdet_l-3x-dota_20221122_011241.json) |
32
+ | RTMDet-l | IN | MS+RR | 55.52 | 80.54 | 61.47 | 52.27 | 204.21 | 10.82 | [config](./rotated_rtmdet_l-3x-dota_ms.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-3x-dota_ms/rotated_rtmdet_l-3x-dota_ms-2738da34.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-3x-dota_ms/rotated_rtmdet_l-3x-dota_ms_20221122_011241.json) |
33
+ | RTMDet-l | COCO | MS+RR | 56.74 | 81.33 | 63.45 | 52.27 | 204.21 | 10.82 | [config](./rotated_rtmdet_l-coco_pretrain-3x-dota_ms.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-coco_pretrain-3x-dota_ms/rotated_rtmdet_l-coco_pretrain-3x-dota_ms-06d248a2.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-coco_pretrain-3x-dota_ms/rotated_rtmdet_l-coco_pretrain-3x-dota_ms_20221113_202010.json) |
34
+
35
+ - By default, DOTA-v1.0 dataset trained with 3x schedule and image size 1024\*1024.
36
+
37
+ ### HRSC
38
+
39
+ [![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/rtmdet-an-empirical-study-of-designing-real/object-detection-in-aerial-images-on-hrsc2016)](https://paperswithcode.com/sota/object-detection-in-aerial-images-on-hrsc2016?p=rtmdet-an-empirical-study-of-designing-real)
40
+
41
+ [![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/rtmdet-an-empirical-study-of-designing-real/one-stage-anchor-free-oriented-object-3)](https://paperswithcode.com/sota/one-stage-anchor-free-oriented-object-3?p=rtmdet-an-empirical-study-of-designing-real)
42
+
43
+ | Backbone | pretrain | Aug | mAP 07 | mAP 12 | Params(M) | FLOPS(G) | Config | Download |
44
+ | :---------: | :------: | :-: | :----: | :----: | :-------: | :------: | :----------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
45
+ | RTMDet-tiny | IN | RR | 90.6 | 97.1 | 4.88 | 12.54 | [config](./rotated_rtmdet_tiny-9x-hrsc.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_tiny-9x-hrsc/rotated_rtmdet_tiny-9x-hrsc-9f2e3ca6.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_tiny-9x-hrsc/rotated_rtmdet_tiny-9x-hrsc_20221125_145920.json) |
46
+
47
+ - By default, HRSC dataset trained with 9x schedule and image size 800\*800.
48
+
49
+ ### Stronger augmentation
50
+
51
+ We also provide configs with Mixup, Mosaic and RandomRotate with longer schedule. Training time is less than MS.
52
+
53
+ DOTA:
54
+
55
+ | Backbone | pretrain | schedule | Aug | mmAP | mAP50 | mAP75 | Config | Download |
56
+ | :------: | :------: | :------: | :-------------: | :---: | :---: | :---: | :-------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
57
+ | RTMDet-l | IN | 100e | Mixup+Mosaic+RR | 54.59 | 80.16 | 61.16 | [config](./rotated_rtmdet_l-100e-aug-dota.py) | [model](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-100e-aug-dota/rotated_rtmdet_l-100e-aug-dota-bc59fd88.pth) \| [log](https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-100e-aug-dota/rotated_rtmdet_l-100e-aug-dota_20221124_224135.json) |
58
+
59
+ **Note**:
60
+
61
+ 1. We follow the latest metrics from the DOTA evaluation server, original voc format mAP is now mAP50.
62
+ 2. `IN` means ImageNet pretrain, `COCO` means COCO pretrain.
63
+ 3. Different from the report, the inference speed here is measured on an NVIDIA 2080Ti GPU with TensorRT 8.4.3, cuDNN 8.2.0, FP16, batch size=1, and with NMS.
64
+
65
+ ## Citation
66
+
67
+ ```
68
+ @misc{lyu2022rtmdet,
69
+ title={RTMDet: An Empirical Study of Designing Real-Time Object Detectors},
70
+ author={Chengqi Lyu and Wenwei Zhang and Haian Huang and Yue Zhou and Yudong Wang and Yanyi Liu and Shilong Zhang and Kai Chen},
71
+ year={2022},
72
+ eprint={2212.07784},
73
+ archivePrefix={arXiv},
74
+ primaryClass={cs.CV}
75
+ }
76
+ ```
configs/rotated_rtmdet/_base_/default_runtime.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ default_scope = 'mmrotate'
2
+
3
+ default_hooks = dict(
4
+ timer=dict(type='IterTimerHook'),
5
+ logger=dict(type='LoggerHook', interval=50),
6
+ param_scheduler=dict(type='ParamSchedulerHook'),
7
+ checkpoint=dict(type='CheckpointHook', interval=12, max_keep_ckpts=3),
8
+ sampler_seed=dict(type='DistSamplerSeedHook'),
9
+ visualization=dict(type='mmdet.DetVisualizationHook'))
10
+
11
+ env_cfg = dict(
12
+ cudnn_benchmark=False,
13
+ mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),
14
+ dist_cfg=dict(backend='nccl'),
15
+ )
16
+
17
+ vis_backends = [dict(type='LocalVisBackend')]
18
+ visualizer = dict(
19
+ type='RotLocalVisualizer', vis_backends=vis_backends, name='visualizer')
20
+ log_processor = dict(type='LogProcessor', window_size=50, by_epoch=True)
21
+
22
+ log_level = 'INFO'
23
+ load_from = None
24
+ resume = False
25
+
26
+ custom_hooks = [
27
+ dict(type='mmdet.NumClassCheckHook'),
28
+ dict(
29
+ type='EMAHook',
30
+ ema_type='mmdet.ExpMomentumEMA',
31
+ momentum=0.0002,
32
+ update_buffers=True,
33
+ priority=49)
34
+ ]
configs/rotated_rtmdet/_base_/dota_rr.py ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'DOTADataset'
3
+ data_root = 'data/split_ss_dota/'
4
+
5
+ backend_args = None
6
+
7
+ train_pipeline = [
8
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
9
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
10
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
11
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
12
+ dict(
13
+ type='mmdet.RandomFlip',
14
+ prob=0.75,
15
+ direction=['horizontal', 'vertical', 'diagonal']),
16
+ dict(
17
+ type='RandomRotate',
18
+ prob=0.5,
19
+ angle_range=180,
20
+ rect_obj_labels=[9, 11]),
21
+ dict(
22
+ type='mmdet.Pad', size=(1024, 1024),
23
+ pad_val=dict(img=(114, 114, 114))),
24
+ dict(type='mmdet.PackDetInputs')
25
+ ]
26
+ val_pipeline = [
27
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
28
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
29
+ # avoid bboxes being resized
30
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
31
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
32
+ dict(
33
+ type='mmdet.Pad', size=(1024, 1024),
34
+ pad_val=dict(img=(114, 114, 114))),
35
+ dict(
36
+ type='mmdet.PackDetInputs',
37
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
38
+ 'scale_factor'))
39
+ ]
40
+ test_pipeline = [
41
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
42
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
43
+ dict(
44
+ type='mmdet.Pad', size=(1024, 1024),
45
+ pad_val=dict(img=(114, 114, 114))),
46
+ dict(
47
+ type='mmdet.PackDetInputs',
48
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
49
+ 'scale_factor'))
50
+ ]
51
+ train_dataloader = dict(
52
+ batch_size=8,
53
+ num_workers=8,
54
+ persistent_workers=True,
55
+ sampler=dict(type='DefaultSampler', shuffle=True),
56
+ batch_sampler=None,
57
+ pin_memory=False,
58
+ dataset=dict(
59
+ type=dataset_type,
60
+ data_root=data_root,
61
+ ann_file='trainval/annfiles/',
62
+ data_prefix=dict(img_path='trainval/images/'),
63
+ filter_cfg=dict(filter_empty_gt=True),
64
+ pipeline=train_pipeline))
65
+ val_dataloader = dict(
66
+ batch_size=1,
67
+ num_workers=2,
68
+ persistent_workers=True,
69
+ drop_last=False,
70
+ sampler=dict(type='DefaultSampler', shuffle=False),
71
+ dataset=dict(
72
+ type=dataset_type,
73
+ data_root=data_root,
74
+ ann_file='trainval/annfiles/',
75
+ data_prefix=dict(img_path='trainval/images/'),
76
+ test_mode=True,
77
+ pipeline=val_pipeline))
78
+ test_dataloader = val_dataloader
79
+
80
+ val_evaluator = dict(type='DOTAMetric', metric='mAP')
81
+ test_evaluator = val_evaluator
82
+
83
+ # inference on test dataset and format the output results
84
+ # for submission. Note: the test set has no annotation.
85
+ # test_dataloader = dict(
86
+ # batch_size=8,
87
+ # num_workers=8,
88
+ # persistent_workers=False,
89
+ # drop_last=False,
90
+ # sampler=dict(type='DefaultSampler', shuffle=False),
91
+ # dataset=dict(
92
+ # type=dataset_type,
93
+ # data_root=data_root,
94
+ # data_prefix=dict(img_path='test/images/'),
95
+ # test_mode=True,
96
+ # pipeline=test_pipeline))
97
+ # test_evaluator = dict(
98
+ # type='DOTAMetric',
99
+ # format_only=True,
100
+ # merge_patches=True,
101
+ # outfile_prefix='./work_dirs/rtmdet_r/Task1')
configs/rotated_rtmdet/_base_/dota_rr_ms.py ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'DOTADataset'
3
+ data_root = 'data/split_ms_dota/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
9
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
10
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
11
+ dict(
12
+ type='mmdet.RandomFlip',
13
+ prob=0.75,
14
+ direction=['horizontal', 'vertical', 'diagonal']),
15
+ dict(
16
+ type='RandomRotate',
17
+ prob=0.5,
18
+ angle_range=180,
19
+ rect_obj_labels=[9, 11]),
20
+ dict(
21
+ type='mmdet.Pad', size=(1024, 1024),
22
+ pad_val=dict(img=(114, 114, 114))),
23
+ dict(type='mmdet.PackDetInputs')
24
+ ]
25
+ val_pipeline = [
26
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
27
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
28
+ # avoid bboxes being resized
29
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
30
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
31
+ dict(
32
+ type='mmdet.Pad', size=(1024, 1024),
33
+ pad_val=dict(img=(114, 114, 114))),
34
+ dict(
35
+ type='mmdet.PackDetInputs',
36
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
37
+ 'scale_factor'))
38
+ ]
39
+ test_pipeline = [
40
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
41
+ dict(type='mmdet.Resize', scale=(1024, 1024), keep_ratio=True),
42
+ dict(
43
+ type='mmdet.Pad', size=(1024, 1024),
44
+ pad_val=dict(img=(114, 114, 114))),
45
+ dict(
46
+ type='mmdet.PackDetInputs',
47
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
48
+ 'scale_factor'))
49
+ ]
50
+ train_dataloader = dict(
51
+ batch_size=8,
52
+ num_workers=8,
53
+ persistent_workers=True,
54
+ sampler=dict(type='DefaultSampler', shuffle=True),
55
+ batch_sampler=None,
56
+ pin_memory=False,
57
+ dataset=dict(
58
+ type=dataset_type,
59
+ data_root=data_root,
60
+ ann_file='trainval/annfiles/',
61
+ data_prefix=dict(img_path='trainval/images/'),
62
+ filter_cfg=dict(filter_empty_gt=True),
63
+ pipeline=train_pipeline))
64
+ val_dataloader = dict(
65
+ batch_size=1,
66
+ num_workers=2,
67
+ persistent_workers=True,
68
+ drop_last=False,
69
+ sampler=dict(type='DefaultSampler', shuffle=False),
70
+ dataset=dict(
71
+ type=dataset_type,
72
+ data_root=data_root,
73
+ ann_file='trainval/annfiles/',
74
+ data_prefix=dict(img_path='trainval/images/'),
75
+ test_mode=True,
76
+ pipeline=val_pipeline))
77
+ test_dataloader = val_dataloader
78
+
79
+ val_evaluator = dict(type='DOTAMetric', metric='mAP')
80
+ test_evaluator = val_evaluator
81
+
82
+ # inference on test dataset and format the output results
83
+ # for submission. Note: the test set has no annotation.
84
+ # test_dataloader = dict(
85
+ # batch_size=8,
86
+ # num_workers=8,
87
+ # persistent_workers=False,
88
+ # drop_last=False,
89
+ # sampler=dict(type='DefaultSampler', shuffle=False),
90
+ # dataset=dict(
91
+ # type=dataset_type,
92
+ # data_root=data_root,
93
+ # data_prefix=dict(img_path='test/images/'),
94
+ # test_mode=True,
95
+ # pipeline=test_pipeline))
96
+ # test_evaluator = dict(
97
+ # type='DOTAMetric',
98
+ # format_only=True,
99
+ # merge_patches=True,
100
+ # outfile_prefix='./work_dirs/rtmdet_r/Task1')
configs/rotated_rtmdet/_base_/hrsc_rr.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # dataset settings
2
+ dataset_type = 'HRSCDataset'
3
+ data_root = 'data/hrsc/'
4
+ backend_args = None
5
+
6
+ train_pipeline = [
7
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
8
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
9
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
10
+ dict(type='mmdet.Resize', scale=(800, 800), keep_ratio=True),
11
+ dict(
12
+ type='mmdet.RandomFlip',
13
+ prob=0.75,
14
+ direction=['horizontal', 'vertical', 'diagonal']),
15
+ dict(type='RandomRotate', prob=0.5, angle_range=180),
16
+ dict(type='mmdet.Pad', size=(800, 800), pad_val=dict(img=(114, 114, 114))),
17
+ dict(type='mmdet.PackDetInputs')
18
+ ]
19
+ val_pipeline = [
20
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
21
+ dict(type='mmdet.Resize', scale=(800, 800), keep_ratio=True),
22
+ # avoid bboxes being resized
23
+ dict(type='mmdet.LoadAnnotations', with_bbox=True, box_type='qbox'),
24
+ dict(type='ConvertBoxType', box_type_mapping=dict(gt_bboxes='rbox')),
25
+ dict(type='mmdet.Pad', size=(800, 800), pad_val=dict(img=(114, 114, 114))),
26
+ dict(
27
+ type='mmdet.PackDetInputs',
28
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
29
+ 'scale_factor'))
30
+ ]
31
+ test_pipeline = [
32
+ dict(type='mmdet.LoadImageFromFile', backend_args=backend_args),
33
+ dict(type='mmdet.Resize', scale=(800, 800), keep_ratio=True),
34
+ dict(type='mmdet.Pad', size=(800, 800), pad_val=dict(img=(114, 114, 114))),
35
+ dict(
36
+ type='mmdet.PackDetInputs',
37
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
38
+ 'scale_factor'))
39
+ ]
40
+ train_dataloader = dict(
41
+ batch_size=8,
42
+ num_workers=8,
43
+ persistent_workers=True,
44
+ sampler=dict(type='DefaultSampler', shuffle=True),
45
+ batch_sampler=None,
46
+ pin_memory=True,
47
+ dataset=dict(
48
+ type='RepeatDataset',
49
+ times=3,
50
+ dataset=dict(
51
+ type=dataset_type,
52
+ data_root=data_root,
53
+ ann_file='ImageSets/trainval.txt',
54
+ data_prefix=dict(sub_data_root='FullDataSet/'),
55
+ filter_cfg=dict(filter_empty_gt=True),
56
+ pipeline=train_pipeline,
57
+ backend_args=backend_args)))
58
+ val_dataloader = dict(
59
+ batch_size=1,
60
+ num_workers=2,
61
+ persistent_workers=True,
62
+ drop_last=False,
63
+ sampler=dict(type='DefaultSampler', shuffle=False),
64
+ dataset=dict(
65
+ type=dataset_type,
66
+ data_root=data_root,
67
+ ann_file='ImageSets/test.txt',
68
+ data_prefix=dict(sub_data_root='FullDataSet/'),
69
+ test_mode=True,
70
+ pipeline=val_pipeline,
71
+ backend_args=backend_args))
72
+ test_dataloader = val_dataloader
73
+
74
+ val_evaluator = [
75
+ dict(
76
+ type='DOTAMetric',
77
+ eval_mode='11points',
78
+ prefix='dota_ap07',
79
+ metric='mAP'),
80
+ dict(
81
+ type='DOTAMetric', eval_mode='area', prefix='dota_ap12', metric='mAP'),
82
+ ]
83
+ test_evaluator = val_evaluator
configs/rotated_rtmdet/_base_/schedule_3x.py ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ max_epochs = 3 * 12
2
+ base_lr = 0.004 / 16
3
+ interval = 1
4
+
5
+ train_cfg = dict(
6
+ type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=interval)
7
+ val_cfg = dict(type='ValLoop')
8
+ test_cfg = dict(type='TestLoop')
9
+
10
+ # learning rate
11
+ param_scheduler = [
12
+ dict(
13
+ type='LinearLR',
14
+ start_factor=1.0e-5,
15
+ by_epoch=False,
16
+ begin=0,
17
+ end=1000),
18
+ dict(
19
+ type='CosineAnnealingLR',
20
+ eta_min=base_lr * 0.05,
21
+ begin=max_epochs // 2,
22
+ end=max_epochs,
23
+ T_max=max_epochs // 2,
24
+ by_epoch=True,
25
+ convert_to_iter_based=True),
26
+ ]
27
+
28
+ # optimizer
29
+ optim_wrapper = dict(
30
+ type='OptimWrapper',
31
+ optimizer=dict(type='AdamW', lr=base_lr, weight_decay=0.05),
32
+ paramwise_cfg=dict(
33
+ norm_decay_mult=0, bias_decay_mult=0, bypass_duplicate=True))
configs/rotated_rtmdet/custom.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ _base_ = [
2
+ './_base_/default_runtime.py', './_base_/schedule_3x.py',
3
+ './_base_/dota_rr_ms.py'
4
+ ]
5
+ checkpoint = '/content/drive/MyDrive/RTMDET/epoch_36.pth' # noqa
6
+
7
+ angle_version = 'le90'
8
+ model = dict(
9
+ type='mmdet.RTMDet',
10
+ data_preprocessor=dict(
11
+ type='mmdet.DetDataPreprocessor',
12
+ mean=[103.53, 116.28, 123.675],
13
+ std=[57.375, 57.12, 58.395],
14
+ bgr_to_rgb=False,
15
+ boxtype2tensor=False,
16
+ batch_augments=None),
17
+ backbone=dict(
18
+ type='mmdet.CSPNeXt',
19
+ arch='P5',
20
+ expand_ratio=0.5,
21
+ deepen_factor=1,
22
+ widen_factor=1,
23
+ channel_attention=True,
24
+ norm_cfg=dict(type='SyncBN'),
25
+ act_cfg=dict(type='SiLU'),
26
+ init_cfg=dict(
27
+ type='Pretrained', prefix='backbone.', checkpoint=checkpoint)),
28
+ neck=dict(
29
+ type='mmdet.CSPNeXtPAFPN',
30
+ in_channels=[256, 512, 1024],
31
+ out_channels=256,
32
+ num_csp_blocks=3,
33
+ expand_ratio=0.5,
34
+ norm_cfg=dict(type='SyncBN'),
35
+ act_cfg=dict(type='SiLU')),
36
+ bbox_head=dict(
37
+ type='RotatedRTMDetSepBNHead',
38
+ num_classes=1,
39
+ in_channels=256,
40
+ stacked_convs=2,
41
+ feat_channels=256,
42
+ angle_version=angle_version,
43
+ anchor_generator=dict(
44
+ type='mmdet.MlvlPointGenerator', offset=0, strides=[8, 16, 32]),
45
+ bbox_coder=dict(
46
+ type='DistanceAnglePointCoder', angle_version=angle_version),
47
+ loss_cls=dict(
48
+ type='mmdet.QualityFocalLoss',
49
+ use_sigmoid=True,
50
+ beta=2.0,
51
+ loss_weight=1.0),
52
+ loss_bbox=dict(type='RotatedIoULoss', mode='linear', loss_weight=2.0),
53
+ with_objectness=False,
54
+ exp_on_reg=True,
55
+ share_conv=True,
56
+ pred_kernel_size=1,
57
+ use_hbbox_loss=False,
58
+ scale_angle=False,
59
+ loss_angle=None,
60
+ norm_cfg=dict(type='SyncBN'),
61
+ act_cfg=dict(type='SiLU')),
62
+ train_cfg=dict(
63
+ assigner=dict(
64
+ type='mmdet.DynamicSoftLabelAssigner',
65
+ iou_calculator=dict(type='RBboxOverlaps2D'),
66
+ topk=13),
67
+ allowed_border=-1,
68
+ pos_weight=-1,
69
+ debug=False),
70
+ test_cfg=dict(
71
+ nms_pre=2000,
72
+ min_bbox_size=0,
73
+ score_thr=0.05,
74
+ nms=dict(type='nms_rotated', iou_threshold=0.1),
75
+ max_per_img=2000),
76
+ )
77
+
78
+ # batch_size = (2 GPUs) x (4 samples per GPU) = 8
79
+ train_dataloader = dict(batch_size=4, num_workers=4)
configs/rotated_rtmdet/metafile.yml ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Collections:
2
+ - Name: rotated_rtmdet
3
+ Metadata:
4
+ Training Data:
5
+ - DOTAv1.0
6
+ - HRSC
7
+ Training Techniques:
8
+ - AdamW
9
+ - Flat Cosine Annealing
10
+ Training Resources: 1x RTX3090 GPUs
11
+ Architecture:
12
+ - CSPNeXt
13
+ - CSPNeXtPAFPN
14
+ README: configs/rotated_rtmdet/README.md
15
+
16
+ Models:
17
+ - Name: rotated_rtmdet_tiny-3x-dota
18
+ In Collection: rotated_rtmdet
19
+ Config: configs/rotated_rtmdet/rotated_rtmdet_tiny-3x-dota.py
20
+ Metadata:
21
+ Training Data: DOTAv1.0
22
+ Results:
23
+ - Task: Oriented Object Detection
24
+ Dataset: DOTAv1.0
25
+ Metrics:
26
+ mAP: 75.60
27
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_tiny-3x-dota/rotated_rtmdet_tiny-3x-dota-9d821076.pth
28
+
29
+ - Name: rotated_rtmdet_tiny-3x-dota_ms
30
+ In Collection: rotated_rtmdet
31
+ Config: configs/rotated_rtmdet/rotated_rtmdet_tiny-3x-dota_ms.py
32
+ Metadata:
33
+ Training Data: DOTAv1.0
34
+ Results:
35
+ - Task: Oriented Object Detection
36
+ Dataset: DOTAv1.0
37
+ Metrics:
38
+ mAP: 79.82
39
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_tiny-3x-dota_ms/rotated_rtmdet_tiny-3x-dota_ms-f12286ff.pth
40
+
41
+ - Name: rotated_rtmdet_s-3x-dota
42
+ In Collection: rotated_rtmdet
43
+ Config: configs/rotated_rtmdet/rotated_rtmdet_s-3x-dota.py
44
+ Metadata:
45
+ Training Data: DOTAv1.0
46
+ Results:
47
+ - Task: Oriented Object Detection
48
+ Dataset: DOTAv1.0
49
+ Metrics:
50
+ mAP: 76.93
51
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_s-3x-dota/rotated_rtmdet_s-3x-dota-11f6ccf5.pth
52
+
53
+ - Name: rotated_rtmdet_s-3x-dota_ms
54
+ In Collection: rotated_rtmdet
55
+ Config: configs/rotated_rtmdet/rotated_rtmdet_s-3x-dota_ms.py
56
+ Metadata:
57
+ Training Data: DOTAv1.0
58
+ Results:
59
+ - Task: Oriented Object Detection
60
+ Dataset: DOTAv1.0
61
+ Metrics:
62
+ mAP: 79.98
63
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_s-3x-dota_ms/rotated_rtmdet_s-3x-dota_ms-20ead048.pth
64
+
65
+ - Name: rotated_rtmdet_m-3x-dota
66
+ In Collection: rotated_rtmdet
67
+ Config: configs/rotated_rtmdet/rotated_rtmdet_m-3x-dota.py
68
+ Metadata:
69
+ Training Data: DOTAv1.0
70
+ Results:
71
+ - Task: Oriented Object Detection
72
+ Dataset: DOTAv1.0
73
+ Metrics:
74
+ mAP: 78.24
75
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_m-3x-dota/rotated_rtmdet_m-3x-dota-beeadda6.pth
76
+
77
+ - Name: rotated_rtmdet_m-3x-dota_ms
78
+ In Collection: rotated_rtmdet
79
+ Config: configs/rotated_rtmdet/rotated_rtmdet_m-3x-dota_ms.py
80
+ Metadata:
81
+ Training Data: DOTAv1.0
82
+ Results:
83
+ - Task: Oriented Object Detection
84
+ Dataset: DOTAv1.0
85
+ Metrics:
86
+ mAP: 80.26
87
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_m-3x-dota_ms/rotated_rtmdet_m-3x-dota_ms-c71eb375.pth
88
+
89
+ - Name: rotated_rtmdet_l-3x-dota
90
+ In Collection: rotated_rtmdet
91
+ Config: configs/rotated_rtmdet/rotated_rtmdet_l-3x-dota.py
92
+ Metadata:
93
+ Training Data: DOTAv1.0
94
+ Results:
95
+ - Task: Oriented Object Detection
96
+ Dataset: DOTAv1.0
97
+ Metrics:
98
+ mAP: 78.85
99
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-3x-dota/rotated_rtmdet_l-3x-dota-23992372.pth
100
+
101
+ - Name: rotated_rtmdet_l-3x-dota_ms
102
+ In Collection: rotated_rtmdet
103
+ Config: configs/rotated_rtmdet/rotated_rtmdet_l-3x-dota_ms.py
104
+ Metadata:
105
+ Training Data: DOTAv1.0
106
+ Results:
107
+ - Task: Oriented Object Detection
108
+ Dataset: DOTAv1.0
109
+ Metrics:
110
+ mAP: 80.54
111
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-3x-dota_ms/rotated_rtmdet_l-3x-dota_ms-2738da34.pth
112
+
113
+ - Name: rotated_rtmdet_l-coco_pretrain-3x-dota_ms
114
+ In Collection: rotated_rtmdet
115
+ Config: configs/rotated_rtmdet/rotated_rtmdet_l-coco_pretrain-3x-dota_ms.py
116
+ Metadata:
117
+ Training Data: DOTAv1.0
118
+ Results:
119
+ - Task: Oriented Object Detection
120
+ Dataset: DOTAv1.0
121
+ Metrics:
122
+ mAP: 81.33
123
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-coco_pretrain-3x-dota_ms/rotated_rtmdet_l-coco_pretrain-3x-dota_ms-06d248a2.pth
124
+
125
+ - Name: rotated_rtmdet_tiny-9x-hrsc
126
+ In Collection: rotated_rtmdet
127
+ Config: configs/rotated_rtmdet/
128
+ Metadata:
129
+ Training Data: HRSC
130
+ Results:
131
+ - Task: Oriented Object Detection
132
+ Dataset: HRSC
133
+ Metrics:
134
+ mAP: 90.6
135
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_tiny-9x-hrsc/rotated_rtmdet_tiny-9x-hrsc-9f2e3ca6.pth
136
+
137
+ - Name: rotated_rtmdet_l-100e-aug-dota
138
+ In Collection: rotated_rtmdet
139
+ Config: configs/rotated_rtmdet/
140
+ Metadata:
141
+ Training Data: DOTAv1.0
142
+ Results:
143
+ - Task: Oriented Object Detection
144
+ Dataset: DOTAv1.0
145
+ Metrics:
146
+ mAP: 80.16
147
+ Weights: https://download.openmmlab.com/mmrotate/v1.0/rotated_rtmdet/rotated_rtmdet_l-100e-aug-dota/rotated_rtmdet_l-100e-aug-dota-bc59fd88.pth
configs/rotated_rtmdet/rotated_rtmdet_l-3x-dota_ms.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ _base_ = [
2
+ './_base_/default_runtime.py', './_base_/schedule_3x.py',
3
+ './_base_/dota_rr_ms.py'
4
+ ]
5
+ checkpoint = 'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-l_8xb256-rsb-a1-600e_in1k-6a760974.pth' # noqa
6
+
7
+ angle_version = 'le90'
8
+ model = dict(
9
+ type='mmdet.RTMDet',
10
+ data_preprocessor=dict(
11
+ type='mmdet.DetDataPreprocessor',
12
+ mean=[103.53, 116.28, 123.675],
13
+ std=[57.375, 57.12, 58.395],
14
+ bgr_to_rgb=False,
15
+ boxtype2tensor=False,
16
+ batch_augments=None),
17
+ backbone=dict(
18
+ type='mmdet.CSPNeXt',
19
+ arch='P5',
20
+ expand_ratio=0.5,
21
+ deepen_factor=1,
22
+ widen_factor=1,
23
+ channel_attention=True,
24
+ norm_cfg=dict(type='SyncBN'),
25
+ act_cfg=dict(type='SiLU'),
26
+ init_cfg=dict(
27
+ type='Pretrained', prefix='backbone.', checkpoint=checkpoint)),
28
+ neck=dict(
29
+ type='mmdet.CSPNeXtPAFPN',
30
+ in_channels=[256, 512, 1024],
31
+ out_channels=256,
32
+ num_csp_blocks=3,
33
+ expand_ratio=0.5,
34
+ norm_cfg=dict(type='SyncBN'),
35
+ act_cfg=dict(type='SiLU')),
36
+ bbox_head=dict(
37
+ type='RotatedRTMDetSepBNHead',
38
+ num_classes=15,
39
+ in_channels=256,
40
+ stacked_convs=2,
41
+ feat_channels=256,
42
+ angle_version=angle_version,
43
+ anchor_generator=dict(
44
+ type='mmdet.MlvlPointGenerator', offset=0, strides=[8, 16, 32]),
45
+ bbox_coder=dict(
46
+ type='DistanceAnglePointCoder', angle_version=angle_version),
47
+ loss_cls=dict(
48
+ type='mmdet.QualityFocalLoss',
49
+ use_sigmoid=True,
50
+ beta=2.0,
51
+ loss_weight=1.0),
52
+ loss_bbox=dict(type='RotatedIoULoss', mode='linear', loss_weight=2.0),
53
+ with_objectness=False,
54
+ exp_on_reg=True,
55
+ share_conv=True,
56
+ pred_kernel_size=1,
57
+ use_hbbox_loss=False,
58
+ scale_angle=False,
59
+ loss_angle=None,
60
+ norm_cfg=dict(type='SyncBN'),
61
+ act_cfg=dict(type='SiLU')),
62
+ train_cfg=dict(
63
+ assigner=dict(
64
+ type='mmdet.DynamicSoftLabelAssigner',
65
+ iou_calculator=dict(type='RBboxOverlaps2D'),
66
+ topk=13),
67
+ allowed_border=-1,
68
+ pos_weight=-1,
69
+ debug=False),
70
+ test_cfg=dict(
71
+ nms_pre=2000,
72
+ min_bbox_size=0,
73
+ score_thr=0.05,
74
+ nms=dict(type='nms_rotated', iou_threshold=0.1),
75
+ max_per_img=2000),
76
+ )
77
+
78
+ # batch_size = (2 GPUs) x (4 samples per GPU) = 8
79
+ train_dataloader = dict(batch_size=4, num_workers=4)