_base_ = ['../yolox/yolox_x_8xb8-300e_coco.py'] data_root = 'data/MOT17/' img_scale = (1440, 800) # width, height batch_size = 4 # model settings model = dict( bbox_head=dict(num_classes=1), test_cfg=dict(nms=dict(iou_threshold=0.7)), init_cfg=dict( type='Pretrained', checkpoint= # noqa: E251 'https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_x_8x8_300e_coco/yolox_x_8x8_300e_coco_20211126_140254-1ef88d67.pth' # noqa: E501 )) train_pipeline = [ dict( type='Mosaic', img_scale=img_scale, pad_val=114.0, bbox_clip_border=False), dict( type='RandomAffine', scaling_ratio_range=(0.1, 2), border=(-img_scale[0] // 2, -img_scale[1] // 2), bbox_clip_border=False), dict( type='MixUp', img_scale=img_scale, ratio_range=(0.8, 1.6), pad_val=114.0, bbox_clip_border=False), dict(type='YOLOXHSVRandomAug'), dict(type='RandomFlip', prob=0.5), dict( type='Resize', scale=img_scale, keep_ratio=True, clip_object_border=False), dict(type='Pad', size_divisor=32, pad_val=dict(img=(114.0, 114.0, 114.0))), dict(type='FilterAnnotations', min_gt_bbox_wh=(1, 1), keep_empty=False), dict(type='PackDetInputs') ] test_pipeline = [ dict(type='LoadImageFromFile', backend_args=_base_.backend_args), dict(type='Resize', scale=img_scale, keep_ratio=True), dict(type='Pad', size_divisor=32, pad_val=dict(img=(114.0, 114.0, 114.0))), dict(type='LoadAnnotations', with_bbox=True), dict( type='PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'scale_factor')) ] train_dataloader = dict( _delete_=True, batch_size=batch_size, num_workers=4, persistent_workers=True, pin_memory=True, sampler=dict(type='DefaultSampler', shuffle=True), dataset=dict( type='MultiImageMixDataset', dataset=dict( type='ConcatDataset', datasets=[ dict( type='CocoDataset', data_root=data_root, ann_file='annotations/half-train_cocoformat.json', data_prefix=dict(img='train'), filter_cfg=dict(filter_empty_gt=True, min_size=32), metainfo=dict(classes=('pedestrian', )), pipeline=[ dict( type='LoadImageFromFile', backend_args=_base_.backend_args), dict(type='LoadAnnotations', with_bbox=True), ]), dict( type='CocoDataset', data_root='data/crowdhuman', ann_file='annotations/crowdhuman_train.json', data_prefix=dict(img='train'), filter_cfg=dict(filter_empty_gt=True, min_size=32), metainfo=dict(classes=('pedestrian', )), pipeline=[ dict( type='LoadImageFromFile', backend_args=_base_.backend_args), dict(type='LoadAnnotations', with_bbox=True), ]), dict( type='CocoDataset', data_root='data/crowdhuman', ann_file='annotations/crowdhuman_val.json', data_prefix=dict(img='val'), filter_cfg=dict(filter_empty_gt=True, min_size=32), metainfo=dict(classes=('pedestrian', )), pipeline=[ dict( type='LoadImageFromFile', backend_args=_base_.backend_args), dict(type='LoadAnnotations', with_bbox=True), ]), ]), pipeline=train_pipeline)) val_dataloader = dict( batch_size=1, num_workers=2, dataset=dict( data_root=data_root, ann_file='annotations/half-val_cocoformat.json', data_prefix=dict(img='train'), metainfo=dict(classes=('pedestrian', )), pipeline=test_pipeline)) test_dataloader = val_dataloader # training settings max_epochs = 80 num_last_epochs = 10 interval = 5 train_cfg = dict(max_epochs=max_epochs, val_begin=75, val_interval=1) # optimizer # default 8 gpu base_lr = 0.001 / 8 * batch_size optim_wrapper = dict(optimizer=dict(lr=base_lr)) # learning rate param_scheduler = [ dict( type='QuadraticWarmupLR', by_epoch=True, begin=0, end=1, convert_to_iter_based=True), dict( type='CosineAnnealingLR', eta_min=base_lr * 0.05, begin=1, T_max=max_epochs - num_last_epochs, end=max_epochs - num_last_epochs, by_epoch=True, convert_to_iter_based=True), dict( type='ConstantLR', by_epoch=True, factor=1, begin=max_epochs - num_last_epochs, end=max_epochs, ) ] default_hooks = dict( checkpoint=dict( interval=1, max_keep_ckpts=5 # only keep latest 5 checkpoints )) custom_hooks = [ dict( type='YOLOXModeSwitchHook', num_last_epochs=num_last_epochs, priority=48), dict(type='SyncNormHook', priority=48), dict( type='EMAHook', ema_type='ExpMomentumEMA', momentum=0.0001, update_buffers=True, priority=49) ] # evaluator val_evaluator = dict( ann_file=data_root + 'annotations/half-val_cocoformat.json', format_only=False) test_evaluator = val_evaluator del _base_.tta_model del _base_.tta_pipeline del _base_.train_dataset