ssdlite_mobilenetv2-scratch_8xb24-600e_coco.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. # model settings
  2. data_preprocessor = dict(
  3. type='DetDataPreprocessor',
  4. mean=[123.675, 116.28, 103.53],
  5. std=[58.395, 57.12, 57.375],
  6. bgr_to_rgb=True,
  7. pad_size_divisor=1)
  8. model = dict(
  9. type='SingleStageDetector',
  10. data_preprocessor=data_preprocessor,
  11. backbone=dict(
  12. type='MobileNetV2',
  13. out_indices=(4, 7),
  14. norm_cfg=dict(type='BN', eps=0.001, momentum=0.03),
  15. init_cfg=dict(type='TruncNormal', layer='Conv2d', std=0.03)),
  16. neck=dict(
  17. type='SSDNeck',
  18. in_channels=(96, 1280),
  19. out_channels=(96, 1280, 512, 256, 256, 128),
  20. level_strides=(2, 2, 2, 2),
  21. level_paddings=(1, 1, 1, 1),
  22. l2_norm_scale=None,
  23. use_depthwise=True,
  24. norm_cfg=dict(type='BN', eps=0.001, momentum=0.03),
  25. act_cfg=dict(type='ReLU6'),
  26. init_cfg=dict(type='TruncNormal', layer='Conv2d', std=0.03)),
  27. bbox_head=dict(
  28. type='SSDHead',
  29. in_channels=(96, 1280, 512, 256, 256, 128),
  30. num_classes=80,
  31. use_depthwise=True,
  32. norm_cfg=dict(type='BN', eps=0.001, momentum=0.03),
  33. act_cfg=dict(type='ReLU6'),
  34. init_cfg=dict(type='Normal', layer='Conv2d', std=0.001),
  35. # set anchor size manually instead of using the predefined
  36. # SSD300 setting.
  37. anchor_generator=dict(
  38. type='SSDAnchorGenerator',
  39. scale_major=False,
  40. strides=[16, 32, 64, 107, 160, 320],
  41. ratios=[[2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3]],
  42. min_sizes=[48, 100, 150, 202, 253, 304],
  43. max_sizes=[100, 150, 202, 253, 304, 320]),
  44. bbox_coder=dict(
  45. type='DeltaXYWHBBoxCoder',
  46. target_means=[.0, .0, .0, .0],
  47. target_stds=[0.1, 0.1, 0.2, 0.2])),
  48. # model training and testing settings
  49. train_cfg=dict(
  50. assigner=dict(
  51. type='MaxIoUAssigner',
  52. pos_iou_thr=0.5,
  53. neg_iou_thr=0.5,
  54. min_pos_iou=0.,
  55. ignore_iof_thr=-1,
  56. gt_max_assign_all=False),
  57. sampler=dict(type='PseudoSampler'),
  58. smoothl1_beta=1.,
  59. allowed_border=-1,
  60. pos_weight=-1,
  61. neg_pos_ratio=3,
  62. debug=False),
  63. test_cfg=dict(
  64. nms_pre=1000,
  65. nms=dict(type='nms', iou_threshold=0.45),
  66. min_bbox_size=0,
  67. score_thr=0.02,
  68. max_per_img=200))
  69. env_cfg = dict(cudnn_benchmark=True)
  70. # dataset settings
  71. dataset_type = 'CocoDataset'
  72. data_root = 'data/coco/'
  73. input_size = 320
  74. train_pipeline = [
  75. dict(type='LoadImageFromFile'),
  76. dict(type='LoadAnnotations', with_bbox=True),
  77. dict(
  78. type='Expand',
  79. mean=data_preprocessor['mean'],
  80. to_rgb=data_preprocessor['bgr_to_rgb'],
  81. ratio_range=(1, 4)),
  82. dict(
  83. type='MinIoURandomCrop',
  84. min_ious=(0.1, 0.3, 0.5, 0.7, 0.9),
  85. min_crop_size=0.3),
  86. dict(type='Resize', scale=(input_size, input_size), keep_ratio=False),
  87. dict(type='RandomFlip', prob=0.5),
  88. dict(
  89. type='PhotoMetricDistortion',
  90. brightness_delta=32,
  91. contrast_range=(0.5, 1.5),
  92. saturation_range=(0.5, 1.5),
  93. hue_delta=18),
  94. dict(type='PackDetInputs')
  95. ]
  96. test_pipeline = [
  97. dict(type='LoadImageFromFile'),
  98. dict(type='Resize', scale=(input_size, input_size), keep_ratio=False),
  99. dict(type='LoadAnnotations', with_bbox=True),
  100. dict(
  101. type='PackDetInputs',
  102. meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
  103. 'scale_factor'))
  104. ]
  105. train_dataloader = dict(
  106. batch_size=24,
  107. num_workers=4,
  108. batch_sampler=None,
  109. dataset=dict(
  110. _delete_=True,
  111. type='RepeatDataset',
  112. times=5,
  113. dataset=dict(
  114. type=dataset_type,
  115. data_root=data_root,
  116. ann_file='annotations/instances_train2017.json',
  117. data_prefix=dict(img='train2017/'),
  118. filter_cfg=dict(filter_empty_gt=True, min_size=32),
  119. pipeline=train_pipeline)))
  120. val_dataloader = dict(
  121. batch_size=8,
  122. num_workers=2,
  123. persistent_workers=True,
  124. drop_last=False,
  125. sampler=dict(type='DefaultSampler', shuffle=False),
  126. dataset=dict(
  127. type=dataset_type,
  128. data_root=data_root,
  129. ann_file='annotations/instances_val2017.json',
  130. data_prefix=dict(img='val2017/'),
  131. test_mode=True,
  132. pipeline=test_pipeline))
  133. test_dataloader = val_dataloader