mirror of
https://github.com/alibaba/EasyCV.git
synced 2025-06-03 14:49:00 +08:00
* 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>
200 lines
5.9 KiB
Python
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'])
|