#!/usr/bin/env python # model settings # models s model = dict( stage='EDGE', type='YOLOX_EDGE', num_classes=80, model_type='s', test_conf=0.01, nms_thre=0.65, depth=1.0, width=1.0, max_model_params=-1, max_model_flops=-1, activation='hsilu') # train setting samples_per_gpu = 16 # batch size per gpu gpu_num = 4 # gpu number for one worker total_epochs = 1 # train epoch interval = 1 # models: s m l x img_scale = (640, 640) random_size = (14, 26) scale_ratio = (0.1, 2) # class list; default: coco class list CLASSES = [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush' ] # dataset settings data_root = 'data/coco/' img_norm_cfg = dict( mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) train_pipeline = [ dict(type='MMMosaic', img_scale=img_scale, pad_val=114.0), dict( type='MMRandomAffine', scaling_ratio_range=scale_ratio, border=(-img_scale[0] // 2, -img_scale[1] // 2)), dict( type='MMMixUp', # s m x l; tiny nano will detele img_scale=img_scale, ratio_range=(0.8, 1.6), pad_val=114.0), dict( type='MMPhotoMetricDistortion', brightness_delta=32, contrast_range=(0.5, 1.5), saturation_range=(0.5, 1.5), hue_delta=18), dict(type='MMRandomFlip', flip_ratio=0.5), dict(type='MMResize', keep_ratio=True), dict(type='MMPad', pad_to_square=True, pad_val=(114.0, 114.0, 114.0)), dict(type='MMNormalize', **img_norm_cfg), dict(type='DefaultFormatBundle'), dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']) ] test_pipeline = [ dict(type='MMResize', img_scale=img_scale, keep_ratio=True), dict(type='MMPad', pad_to_square=True, pad_val=(114.0, 114.0, 114.0)), dict(type='MMNormalize', **img_norm_cfg), dict(type='DefaultFormatBundle'), dict(type='Collect', keys=['img']) ] train_dataset = dict( type='DetImagesMixDataset', data_source=dict( type='DetSourceCoco', ann_file=data_root + 'annotations/instances_train2017.json', img_prefix=data_root + 'train2017/', pipeline=[ dict(type='LoadImageFromFile', to_float32=True), dict(type='LoadAnnotations', with_bbox=True) ], classes=CLASSES, filter_empty_gt=False, iscrowd=False), pipeline=train_pipeline, dynamic_scale=img_scale) val_dataset = dict( type='DetImagesMixDataset', imgs_per_gpu=samples_per_gpu, data_source=dict( type='DetSourceCoco', ann_file=data_root + 'annotations/instances_val2017.json', img_prefix=data_root + 'val2017/', pipeline=[ dict(type='LoadImageFromFile', to_float32=True), dict(type='LoadAnnotations', with_bbox=True) ], classes=CLASSES, filter_empty_gt=False, iscrowd=True), pipeline=test_pipeline, dynamic_scale=None, label_padding=False) data = dict( imgs_per_gpu=samples_per_gpu, workers_per_gpu=gpu_num, train=train_dataset, val=val_dataset) # additional hooks custom_hooks = [ dict( type='YOLOXModeSwitchHook', no_aug_epochs=15, skip_type_keys=('MMMosaic', 'MMRandomAffine', 'MMMixUp'), priority=48), dict( type='SyncRandomSizeHook', ratio_range=random_size, img_scale=img_scale, interval=interval, priority=48), dict( type='SyncNormHook', num_last_epochs=15, interval=interval, priority=48) ] # evaluation eval_config = dict(interval=interval, gpu_collect=False) eval_pipelines = [ dict( mode='test', data=data['val'], evaluators=[dict(type='CocoDetectionEvaluator', classes=CLASSES)], ) ] checkpoint_config = dict(interval=interval) # optimizer # basic_lr_per_img = 0.01 / 64.0 optimizer = dict( type='SGD', lr=0.01, momentum=0.9, weight_decay=5e-4, nesterov=True) optimizer_config = {} # learning policy lr_config = dict( policy='YOLOX', warmup='exp', by_epoch=False, warmup_by_epoch=True, warmup_ratio=1, warmup_iters=5, num_last_epochs=15, min_lr_ratio=0.05) # exponetial model average ema = dict(decay=0.9998) # yapf:disable log_config = dict( interval=100, hooks=[ dict(type='TextLoggerHook'), dict(type='TensorboardLoggerHook') ]) # yapf:enable # runtime settings dist_params = dict(backend='nccl') cudnn_benchmark = True log_level = 'INFO' load_from = None resume_from = None workflow = [('train', 1)] export = dict(use_jit=False)