lsj-100e_coco-instance.py 3.9 KB

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