|
| 1 | +_base_ = [ |
| 2 | + '../../../configs/_base_/default_runtime.py', |
| 3 | +] |
| 4 | + |
| 5 | +# dataset settings |
| 6 | +dataset_type = 'CocoDataset' |
| 7 | +data_root = 'data/coco/' |
| 8 | +image_size = (1024, 1024) |
| 9 | + |
| 10 | +backend_args = None |
| 11 | + |
| 12 | +train_pipeline = [ |
| 13 | + dict(type='LoadImageFromFile', backend_args=backend_args), |
| 14 | + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), |
| 15 | + dict(type='RandomFlip', prob=0.5), |
| 16 | + dict( |
| 17 | + type='RandomResize', |
| 18 | + scale=image_size, |
| 19 | + ratio_range=(0.1, 2.0), |
| 20 | + keep_ratio=True), |
| 21 | + dict( |
| 22 | + type='RandomCrop', |
| 23 | + crop_type='absolute_range', |
| 24 | + crop_size=image_size, |
| 25 | + recompute_bbox=True, |
| 26 | + allow_negative_crop=True), |
| 27 | + dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), |
| 28 | + dict(type='Pad', size=image_size, pad_val=dict(img=(114, 114, 114))), |
| 29 | + dict(type='PackDetInputs') |
| 30 | +] |
| 31 | + |
| 32 | +test_pipeline = [ |
| 33 | + dict(type='LoadImageFromFile', backend_args=backend_args), |
| 34 | + dict(type='Resize', scale=image_size, keep_ratio=True), |
| 35 | + dict(type='Pad', size=image_size, pad_val=dict(img=(114, 114, 114))), |
| 36 | + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), |
| 37 | + dict( |
| 38 | + type='PackDetInputs', |
| 39 | + meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', |
| 40 | + 'scale_factor')) |
| 41 | +] |
| 42 | + |
| 43 | +train_dataloader = dict( |
| 44 | + batch_size=4, |
| 45 | + num_workers=8, |
| 46 | + persistent_workers=True, |
| 47 | + sampler=dict(type='DefaultSampler', shuffle=True), |
| 48 | + dataset=dict( |
| 49 | + type=dataset_type, |
| 50 | + data_root=data_root, |
| 51 | + ann_file='annotations/instances_train2017.json', |
| 52 | + data_prefix=dict(img='train2017/'), |
| 53 | + filter_cfg=dict(filter_empty_gt=True, min_size=32), |
| 54 | + pipeline=train_pipeline)) |
| 55 | + |
| 56 | +val_dataloader = dict( |
| 57 | + batch_size=1, |
| 58 | + num_workers=2, |
| 59 | + persistent_workers=True, |
| 60 | + drop_last=False, |
| 61 | + sampler=dict(type='DefaultSampler', shuffle=False), |
| 62 | + dataset=dict( |
| 63 | + type=dataset_type, |
| 64 | + data_root=data_root, |
| 65 | + ann_file='annotations/instances_val2017.json', |
| 66 | + data_prefix=dict(img='val2017/'), |
| 67 | + test_mode=True, |
| 68 | + pipeline=test_pipeline)) |
| 69 | +test_dataloader = val_dataloader |
| 70 | + |
| 71 | +val_evaluator = dict( |
| 72 | + type='CocoMetric', |
| 73 | + ann_file=data_root + 'annotations/instances_val2017.json', |
| 74 | + metric=['bbox', 'segm'], |
| 75 | + format_only=False) |
| 76 | +test_evaluator = val_evaluator |
| 77 | + |
| 78 | +optim_wrapper = dict( |
| 79 | + type='AmpOptimWrapper', |
| 80 | + constructor='LayerDecayOptimizerConstructor', |
| 81 | + paramwise_cfg={ |
| 82 | + 'decay_rate': 0.7, |
| 83 | + 'decay_type': 'layer_wise', |
| 84 | + 'num_layers': 12, |
| 85 | + }, |
| 86 | + optimizer=dict( |
| 87 | + type='AdamW', |
| 88 | + lr=0.0001, |
| 89 | + betas=(0.9, 0.999), |
| 90 | + weight_decay=0.1, |
| 91 | + )) |
| 92 | + |
| 93 | +# 100 ep = 184375 iters * 64 images/iter / 118000 images/ep |
| 94 | +max_iters = 184375 |
| 95 | +interval = 5000 |
| 96 | +dynamic_intervals = [(max_iters // interval * interval + 1, max_iters)] |
| 97 | +param_scheduler = [ |
| 98 | + dict( |
| 99 | + type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=250), |
| 100 | + dict( |
| 101 | + type='MultiStepLR', |
| 102 | + begin=0, |
| 103 | + end=max_iters, |
| 104 | + by_epoch=False, |
| 105 | + # 88 ep = [163889 iters * 64 images/iter / 118000 images/ep |
| 106 | + # 96 ep = [177546 iters * 64 images/iter / 118000 images/ep |
| 107 | + milestones=[163889, 177546], |
| 108 | + gamma=0.1) |
| 109 | +] |
| 110 | + |
| 111 | +train_cfg = dict( |
| 112 | + type='IterBasedTrainLoop', |
| 113 | + max_iters=max_iters, |
| 114 | + val_interval=interval, |
| 115 | + dynamic_intervals=dynamic_intervals) |
| 116 | +val_cfg = dict(type='ValLoop') |
| 117 | +test_cfg = dict(type='TestLoop') |
| 118 | + |
| 119 | +default_hooks = dict( |
| 120 | + logger=dict(type='LoggerHook', interval=50), |
| 121 | + checkpoint=dict( |
| 122 | + type='CheckpointHook', |
| 123 | + by_epoch=False, |
| 124 | + save_last=True, |
| 125 | + interval=interval, |
| 126 | + max_keep_ckpts=5)) |
| 127 | +vis_backends = [ |
| 128 | + dict(type='LocalVisBackend'), |
| 129 | + dict(type='TensorboardVisBackend') |
| 130 | +] |
| 131 | +visualizer = dict( |
| 132 | + type='DetLocalVisualizer', vis_backends=vis_backends, name='visualizer') |
| 133 | +log_processor = dict(type='LogProcessor', window_size=50, by_epoch=False) |
| 134 | + |
| 135 | +auto_scale_lr = dict(base_batch_size=64) |
0 commit comments