_base_ = [ '../../../configs/_base_/default_runtime.py', ] # dataset settings dataset_type = 'CocoDataset' data_root = 'data/coco/' image_size = (1024, 1024) backend_args = None train_pipeline = [ dict(type='LoadImageFromFile', backend_args=backend_args), dict(type='LoadAnnotations', with_bbox=True, with_mask=True), dict(type='RandomFlip', prob=0.5), dict( type='RandomResize', scale=image_size, ratio_range=(0.1, 2.0), keep_ratio=True), dict( type='RandomCrop', crop_type='absolute_range', crop_size=image_size, recompute_bbox=True, allow_negative_crop=True), dict(type='FilterAnnotations', min_gt_bbox_wh=(1e-2, 1e-2)), dict(type='Pad', size=image_size, pad_val=dict(img=(114, 114, 114))), dict(type='PackDetInputs') ] test_pipeline = [ dict(type='LoadImageFromFile', backend_args=backend_args), dict(type='Resize', scale=image_size, keep_ratio=True), dict(type='Pad', size=image_size, pad_val=dict(img=(114, 114, 114))), dict(type='LoadAnnotations', with_bbox=True, with_mask=True), dict( type='PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'scale_factor')) ] train_dataloader = dict( batch_size=4, num_workers=8, persistent_workers=True, sampler=dict(type='DefaultSampler', shuffle=True), dataset=dict( type=dataset_type, data_root=data_root, ann_file='annotations/instances_train2017.json', data_prefix=dict(img='train2017/'), filter_cfg=dict(filter_empty_gt=True, min_size=32), pipeline=train_pipeline)) val_dataloader = dict( batch_size=1, num_workers=2, persistent_workers=True, drop_last=False, sampler=dict(type='DefaultSampler', shuffle=False), dataset=dict( type=dataset_type, data_root=data_root, ann_file='annotations/instances_val2017.json', data_prefix=dict(img='val2017/'), test_mode=True, pipeline=test_pipeline)) test_dataloader = val_dataloader val_evaluator = dict( type='CocoMetric', ann_file=data_root + 'annotations/instances_val2017.json', metric=['bbox', 'segm'], format_only=False) test_evaluator = val_evaluator optim_wrapper = dict( type='AmpOptimWrapper', constructor='LayerDecayOptimizerConstructor', paramwise_cfg={ 'decay_rate': 0.7, 'decay_type': 'layer_wise', 'num_layers': 12, }, optimizer=dict( type='AdamW', lr=0.0001, betas=(0.9, 0.999), weight_decay=0.1, )) # 100 ep = 184375 iters * 64 images/iter / 118000 images/ep max_iters = 184375 interval = 5000 dynamic_intervals = [(max_iters // interval * interval + 1, max_iters)] param_scheduler = [ dict( type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=250), dict( type='MultiStepLR', begin=0, end=max_iters, by_epoch=False, # 88 ep = [163889 iters * 64 images/iter / 118000 images/ep # 96 ep = [177546 iters * 64 images/iter / 118000 images/ep milestones=[163889, 177546], gamma=0.1) ] train_cfg = dict( type='IterBasedTrainLoop', max_iters=max_iters, val_interval=interval, dynamic_intervals=dynamic_intervals) val_cfg = dict(type='ValLoop') test_cfg = dict(type='TestLoop') default_hooks = dict( logger=dict(type='LoggerHook', interval=50), checkpoint=dict( type='CheckpointHook', by_epoch=False, save_last=True, interval=interval, max_keep_ckpts=5)) vis_backends = [ dict(type='LocalVisBackend'), dict(type='TensorboardVisBackend') ] visualizer = dict( type='DetLocalVisualizer', vis_backends=vis_backends, name='visualizer') log_processor = dict(type='LogProcessor', window_size=50, by_epoch=False) auto_scale_lr = dict(base_batch_size=64)