mmtracking icon indicating copy to clipboard operation
mmtracking copied to clipboard

How can we change the bytetrack config for yolo detector I tried my best but in mmtracking detector give me bad result, but individual detector give me proper result

Open raju-kulkarni opened this issue 2 years ago • 0 comments

Below is my tracker config I try to modify for Yolo

base = [ '../../base/models/yolo_8x8.py', '../../base/datasets/mot_challenge.py', '../../base/default_runtime.py' ]

#img_scale = (800, 1440) img_scale = (416, 416) samples_per_gpu = 4

model = dict( type='ByteTrack', detector=dict( type='YOLOV3', #input_size=img_scale, #random_size_range=(18, 32), bbox_head=dict(num_classes=4), test_cfg=dict(score_thr=0.6, nms=dict(type='nms', iou_threshold=0.7)), init_cfg=dict( type='Pretrained', checkpoint= '../mmdetection/work_dirs/yolov3_d53_8xb8-ms-416-273e_coco/epoch_7.pth')),

noqa: E251 # noqa: E501

motion=dict(type='KalmanFilter'),
tracker=dict(
    type='ByteTracker',
    obj_score_thrs=dict(high=0.6, low=0.1),
    init_track_thr=0.7,
    weight_iou_with_det_scores=True,
    match_iou_thrs=dict(high=0.1, low=0.5, tentative=0.3),
    num_frames_retain=30))

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', flip_ratio=0.5), dict( type='Resize', img_scale=img_scale, keep_ratio=True, bbox_clip_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='DefaultFormatBundle'), dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']) ]

test_pipeline = [ dict(type='LoadImageFromFile'), dict( type='MultiScaleFlipAug', img_scale=img_scale, flip=False, transforms=[ dict(type='Resize', keep_ratio=True), dict(type='RandomFlip'), dict( type='Normalize', mean=[0.0, 0.0, 0.0], std=[1.0, 1.0, 1.0], to_rgb=False), dict( type='Pad', size_divisor=32, pad_val=dict(img=(114.0, 114.0, 114.0))), dict(type='ImageToTensor', keys=['img']), dict(type='VideoCollect', keys=['img']) ]) ] data = dict( samples_per_gpu=samples_per_gpu, workers_per_gpu=4, persistent_workers=True, train=dict( delete=True, type='MultiImageMixDataset', dataset=dict( type='CocoDataset', ann_file=[ 'data/MOT17/annotations/half-train_cocoformat.json', 'data/crowdhuman/annotations/crowdhuman_train.json', 'data/crowdhuman/annotations/crowdhuman_val.json' ], img_prefix=[ 'data/MOT17/train', 'data/crowdhuman/train', 'data/crowdhuman/val' ], classes=('pedestrian', ), pipeline=[ dict(type='LoadImageFromFile'), dict(type='LoadAnnotations', with_bbox=True) ], filter_empty_gt=False), pipeline=train_pipeline), val=dict( pipeline=test_pipeline, interpolate_tracks_cfg=dict(min_num_frames=5, max_num_frames=20)), test=dict( pipeline=test_pipeline, interpolate_tracks_cfg=dict(min_num_frames=5, max_num_frames=20)))

optimizer

default 8 gpu

optimizer = dict( type='SGD', lr=0.001 / 8 * samples_per_gpu, momentum=0.9, weight_decay=5e-4, nesterov=True, paramwise_cfg=dict(norm_decay_mult=0.0, bias_decay_mult=0.0)) optimizer_config = dict(grad_clip=None)

some hyper parameters

total_epochs = 80 num_last_epochs = 10 resume_from = None interval = 5

learning policy

lr_config = dict( policy='YOLOX', warmup='exp', by_epoch=False, warmup_by_epoch=True, warmup_ratio=1, warmup_iters=1, num_last_epochs=num_last_epochs, min_lr_ratio=0.05)

custom_hooks = [

dict(

type='YOLOXModeSwitchHook',

num_last_epochs=num_last_epochs,

priority=48),

dict(

type='SyncNormHook',

num_last_epochs=num_last_epochs,

interval=interval,

priority=48),

dict(

type='ExpMomentumEMAHook',

resume_from=resume_from,

momentum=0.0001,

priority=49)

]

checkpoint_config = dict(interval=1) evaluation = dict(metric=['bbox', 'track'], interval=1) search_metrics = ['MOTA', 'IDF1', 'FN', 'FP', 'IDs', 'MT', 'ML']

you need to set mode='dynamic' if you are using pytorch<=1.5.0

fp16 = dict(loss_scale=dict(init_scale=512.))

Below is my detector model file yolo_8x8.py

train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=273, val_interval=7) val_cfg = dict(type='ValLoop') test_cfg = dict(type='TestLoop') param_scheduler = [ dict(type='LinearLR', start_factor=0.1, by_epoch=False, begin=0, end=2000), dict(type='MultiStepLR', by_epoch=True, milestones=[218, 246], gamma=0.1) ] optim_wrapper = dict( type='OptimWrapper', optimizer=dict(type='SGD', lr=0.001, momentum=0.9, weight_decay=0.0005), clip_grad=dict(max_norm=35, norm_type=2)) auto_scale_lr = dict(enable=False, base_batch_size=64) default_scope = 'mmdet'

model = dict( detector = dict( type='YOLOV3', backbone=dict( type='Darknet', depth=53, out_indices=(3, 4, 5), init_cfg=dict(type='Pretrained', checkpoint='open-mmlab://darknet53')), neck=dict( type='YOLOV3Neck', num_scales=3, in_channels=[1024, 512, 256], out_channels=[512, 256, 128]), bbox_head=dict( type='YOLOV3Head', num_classes=4, in_channels=[512, 256, 128], out_channels=[1024, 512, 256], anchor_generator=dict( type='YOLOAnchorGenerator', base_sizes=[[(116, 90), (156, 198), (373, 326)], [(30, 61), (62, 45), (59, 119)], [(10, 13), (16, 30), (33, 23)]], strides=[32, 16, 8]), bbox_coder=dict(type='YOLOBBoxCoder'), featmap_strides=[32, 16, 8], loss_cls=dict( type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0, reduction='sum'), loss_conf=dict( type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0, reduction='sum'), loss_xy=dict( type='CrossEntropyLoss', use_sigmoid=True, loss_weight=2.0, reduction='sum'), loss_wh=dict(type='MSELoss', loss_weight=2.0, reduction='sum')), train_cfg=dict( assigner=dict( type='GridAssigner', pos_iou_thr=0.5, neg_iou_thr=0.5, min_pos_iou=0)), test_cfg=dict( nms_pre=1000, min_bbox_size=0, score_thr=0.05, conf_thr=0.005, nms=dict(type='nms', iou_threshold=0.45), max_per_img=100)))

Please help me to create config file for bytetrack with Yolo

raju-kulkarni avatar May 08 '23 04:05 raju-kulkarni