EasyCV/configs/edge_models/yolox_edge.py
wuziheng 9aaa600f79
Yolox improve with REPConv/ASFF/TOOD (#154)
* add attention layer and more loss function

* add attention layer and various loss functions

* add siou loss

* add tah,various attention layers, and different loss functions

* add asff sim, gsconv

* blade utils fit faster

* blade optimize for yolox static & fp16

* decode output for yolox control by cfg

* add reparameterize_models for export

* e2e trt_nms plugin export support and numeric test

* split preprocess from end2end+blade, speedup from 17ms->7.2ms

Co-authored-by: zouxinyi0625 <zouxinyi.zxy@alibaba-inc.com>
2022-08-24 18:11:15 +08:00

200 lines
5.9 KiB
Python

#!/usr/bin/env python
# this config is used by unittest
# model settings
# models tiny
model = dict(
stage='EDGE',
type='YOLOX_EDGE',
model_type='customized',
test_conf=0.01,
nms_thre=0.65,
depth=1.0,
width=1.0,
max_model_params=-1,
max_model_flops=-1,
activation='relu',
head=dict(
type='YOLOXHead',
model_type='customized',
num_classes=1,
reg_loss_type='iou',
width=1.0))
# train setting
samples_per_gpu = 16 # batch size per gpu
test_samples_per_gpu = 16 # test batch size per gpu
gpu_num = 2 # gpu number for one worker
total_epochs = 11 # train epoch
interval = 5 # eval interval
# tiny nano without mixup
img_scale = (256, 256)
random_size = (8, 10)
scale_ratio = (0.8, 1.25)
# class list; default: coco class list
CLASSES = ['person']
# 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
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='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',
mean=img_norm_cfg['mean'],
std=img_norm_cfg['std'],
to_rgb=img_norm_cfg['to_rgb']),
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',
mean=img_norm_cfg['mean'],
std=img_norm_cfg['std'],
to_rgb=img_norm_cfg['to_rgb']),
dict(type='DefaultFormatBundle'),
dict(type='Collect', keys=['img'])
]
data = dict(
imgs_per_gpu=samples_per_gpu,
workers_per_gpu=gpu_num,
train=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=dict(
type='DetImagesMixDataset',
imgs_per_gpu=test_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))
# additional hooks
custom_hooks = [
dict(
type='YOLOXModeSwitchHook',
no_aug_epochs=15,
skip_type_keys=('MMMosaic', 'MMRandomAffine'),
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=5,
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)
# oss io config
# oss_io_config = dict(ak_id='xxx',
# ak_secret='xxx',
# hosts='oss-cn-zhangjiakou.aliyuncs.com',
# buckets=['your_bucket_2'])