faster_rcnn_r50_fpn_coco.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. # runtime settings
  2. default_scope = 'mmdet'
  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='DetVisualizationHook'))
  10. env_cfg = dict(
  11. cudnn_benchmark=False,
  12. mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),
  13. dist_cfg=dict(backend='nccl'),
  14. )
  15. vis_backends = [dict(type='LocalVisBackend')]
  16. visualizer = dict(
  17. type='DetLocalVisualizer', vis_backends=vis_backends, name='visualizer')
  18. log_processor = dict(type='LogProcessor', window_size=50, by_epoch=True)
  19. log_level = 'INFO'
  20. load_from = None
  21. resume = False
  22. # model settings
  23. model = dict(
  24. type='FasterRCNN',
  25. data_preprocessor=dict(
  26. type='DetDataPreprocessor',
  27. mean=[123.675, 116.28, 103.53],
  28. std=[58.395, 57.12, 57.375],
  29. bgr_to_rgb=True,
  30. pad_size_divisor=32),
  31. backbone=dict(
  32. type='ResNet',
  33. depth=50,
  34. num_stages=4,
  35. out_indices=(0, 1, 2, 3),
  36. frozen_stages=1,
  37. norm_cfg=dict(type='BN', requires_grad=True),
  38. norm_eval=True,
  39. style='pytorch',
  40. init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')),
  41. neck=dict(
  42. type='FPN',
  43. in_channels=[256, 512, 1024, 2048],
  44. out_channels=256,
  45. num_outs=5),
  46. rpn_head=dict(
  47. type='RPNHead',
  48. in_channels=256,
  49. feat_channels=256,
  50. anchor_generator=dict(
  51. type='AnchorGenerator',
  52. scales=[8],
  53. ratios=[0.5, 1.0, 2.0],
  54. strides=[4, 8, 16, 32, 64]),
  55. bbox_coder=dict(
  56. type='DeltaXYWHBBoxCoder',
  57. target_means=[.0, .0, .0, .0],
  58. target_stds=[1.0, 1.0, 1.0, 1.0]),
  59. loss_cls=dict(
  60. type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),
  61. loss_bbox=dict(type='L1Loss', loss_weight=1.0)),
  62. roi_head=dict(
  63. type='StandardRoIHead',
  64. bbox_roi_extractor=dict(
  65. type='SingleRoIExtractor',
  66. roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),
  67. out_channels=256,
  68. featmap_strides=[4, 8, 16, 32]),
  69. bbox_head=dict(
  70. type='Shared2FCBBoxHead',
  71. in_channels=256,
  72. fc_out_channels=1024,
  73. roi_feat_size=7,
  74. num_classes=80,
  75. bbox_coder=dict(
  76. type='DeltaXYWHBBoxCoder',
  77. target_means=[0., 0., 0., 0.],
  78. target_stds=[0.1, 0.1, 0.2, 0.2]),
  79. reg_class_agnostic=False,
  80. loss_cls=dict(
  81. type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),
  82. loss_bbox=dict(type='L1Loss', loss_weight=1.0))),
  83. # model training and testing settings
  84. train_cfg=dict(
  85. rpn=dict(
  86. assigner=dict(
  87. type='MaxIoUAssigner',
  88. pos_iou_thr=0.7,
  89. neg_iou_thr=0.3,
  90. min_pos_iou=0.3,
  91. match_low_quality=True,
  92. ignore_iof_thr=-1),
  93. sampler=dict(
  94. type='RandomSampler',
  95. num=256,
  96. pos_fraction=0.5,
  97. neg_pos_ub=-1,
  98. add_gt_as_proposals=False),
  99. allowed_border=-1,
  100. pos_weight=-1,
  101. debug=False),
  102. rpn_proposal=dict(
  103. nms_pre=2000,
  104. max_per_img=1000,
  105. nms=dict(type='nms', iou_threshold=0.7),
  106. min_bbox_size=0),
  107. rcnn=dict(
  108. assigner=dict(
  109. type='MaxIoUAssigner',
  110. pos_iou_thr=0.5,
  111. neg_iou_thr=0.5,
  112. min_pos_iou=0.5,
  113. match_low_quality=False,
  114. ignore_iof_thr=-1),
  115. sampler=dict(
  116. type='RandomSampler',
  117. num=512,
  118. pos_fraction=0.25,
  119. neg_pos_ub=-1,
  120. add_gt_as_proposals=True),
  121. pos_weight=-1,
  122. debug=False)),
  123. test_cfg=dict(
  124. rpn=dict(
  125. nms_pre=1000,
  126. max_per_img=1000,
  127. nms=dict(type='nms', iou_threshold=0.7),
  128. min_bbox_size=0),
  129. rcnn=dict(
  130. score_thr=0.05,
  131. nms=dict(type='nms', iou_threshold=0.5),
  132. max_per_img=100)
  133. # soft-nms is also supported for rcnn testing
  134. # e.g., nms=dict(type='soft_nms', iou_threshold=0.5, min_score=0.05)
  135. ))
  136. # dataset settings
  137. dataset_type = 'CocoDataset'
  138. data_root = 'data/coco/'
  139. train_pipeline = [
  140. dict(type='LoadImageFromFile'),
  141. dict(type='LoadAnnotations', with_bbox=True),
  142. dict(type='Resize', scale=(1333, 800), keep_ratio=True),
  143. dict(type='RandomFlip', prob=0.5),
  144. dict(type='PackDetInputs')
  145. ]
  146. test_pipeline = [
  147. dict(type='LoadImageFromFile'),
  148. dict(type='Resize', scale=(1333, 800), keep_ratio=True),
  149. # If you don't have a gt annotation, delete the pipeline
  150. dict(type='LoadAnnotations', with_bbox=True),
  151. dict(
  152. type='PackDetInputs',
  153. meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
  154. 'scale_factor'))
  155. ]
  156. train_dataloader = dict(
  157. batch_size=2,
  158. num_workers=2,
  159. persistent_workers=True,
  160. sampler=dict(type='DefaultSampler', shuffle=True),
  161. batch_sampler=dict(type='AspectRatioBatchSampler'),
  162. dataset=dict(
  163. type=dataset_type,
  164. data_root=data_root,
  165. ann_file='annotations/instances_train2017.json',
  166. data_prefix=dict(img='train2017/'),
  167. filter_cfg=dict(filter_empty_gt=True, min_size=32),
  168. pipeline=train_pipeline))
  169. val_dataloader = dict(
  170. batch_size=1,
  171. num_workers=2,
  172. persistent_workers=True,
  173. drop_last=False,
  174. sampler=dict(type='DefaultSampler', shuffle=False),
  175. dataset=dict(
  176. type=dataset_type,
  177. data_root=data_root,
  178. ann_file='annotations/instances_val2017.json',
  179. data_prefix=dict(img='val2017/'),
  180. test_mode=True,
  181. pipeline=test_pipeline))
  182. test_dataloader = val_dataloader
  183. val_evaluator = dict(
  184. type='CocoMetric',
  185. ann_file=data_root + 'annotations/instances_val2017.json',
  186. metric='bbox',
  187. format_only=False)
  188. test_evaluator = val_evaluator