mirror of https://github.com/open-mmlab/mmyolo.git
137 lines
3.9 KiB
Python
137 lines
3.9 KiB
Python
_base_ = '../yolox_s_fast_8xb32-300e-rtmdet-hyp_coco.py'
|
|
|
|
load_from = 'https://download.openmmlab.com/mmyolo/v0/yolox/yolox_s_fast_8xb32-300e-rtmdet-hyp_coco/yolox_s_fast_8xb32-300e-rtmdet-hyp_coco_20230210_134645-3a8dfbd7.pth' # noqa
|
|
|
|
num_keypoints = 17
|
|
scaling_ratio_range = (0.75, 1.0)
|
|
mixup_ratio_range = (0.8, 1.6)
|
|
num_last_epochs = 20
|
|
|
|
# model settings
|
|
model = dict(
|
|
bbox_head=dict(
|
|
type='YOLOXPoseHead',
|
|
head_module=dict(
|
|
type='YOLOXPoseHeadModule',
|
|
num_classes=1,
|
|
num_keypoints=num_keypoints,
|
|
),
|
|
loss_pose=dict(
|
|
type='OksLoss',
|
|
metainfo='configs/_base_/pose/coco.py',
|
|
loss_weight=30.0)),
|
|
train_cfg=dict(
|
|
assigner=dict(
|
|
type='PoseSimOTAAssigner',
|
|
center_radius=2.5,
|
|
oks_weight=3.0,
|
|
iou_calculator=dict(type='mmdet.BboxOverlaps2D'),
|
|
oks_calculator=dict(
|
|
type='OksLoss', metainfo='configs/_base_/pose/coco.py'))),
|
|
test_cfg=dict(score_thr=0.01))
|
|
|
|
# pipelines
|
|
pre_transform = [
|
|
dict(type='LoadImageFromFile', backend_args=_base_.backend_args),
|
|
dict(type='LoadAnnotations', with_keypoints=True)
|
|
]
|
|
|
|
img_scale = _base_.img_scale
|
|
|
|
train_pipeline_stage1 = [
|
|
*pre_transform,
|
|
dict(
|
|
type='Mosaic',
|
|
img_scale=img_scale,
|
|
pad_val=114.0,
|
|
pre_transform=pre_transform),
|
|
dict(
|
|
type='RandomAffine',
|
|
scaling_ratio_range=scaling_ratio_range,
|
|
border=(-img_scale[0] // 2, -img_scale[1] // 2)),
|
|
dict(
|
|
type='YOLOXMixUp',
|
|
img_scale=img_scale,
|
|
ratio_range=mixup_ratio_range,
|
|
pad_val=114.0,
|
|
pre_transform=pre_transform),
|
|
dict(type='mmdet.YOLOXHSVRandomAug'),
|
|
dict(type='RandomFlip', prob=0.5),
|
|
dict(type='FilterAnnotations', by_keypoints=True, keep_empty=False),
|
|
dict(
|
|
type='PackDetInputs',
|
|
meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape'))
|
|
]
|
|
|
|
train_pipeline_stage2 = [
|
|
*pre_transform,
|
|
dict(type='Resize', scale=img_scale, keep_ratio=True),
|
|
dict(
|
|
type='mmdet.Pad',
|
|
pad_to_square=True,
|
|
pad_val=dict(img=(114.0, 114.0, 114.0))),
|
|
dict(type='mmdet.YOLOXHSVRandomAug'),
|
|
dict(type='RandomFlip', prob=0.5),
|
|
dict(type='FilterAnnotations', by_keypoints=True, keep_empty=False),
|
|
dict(type='PackDetInputs')
|
|
]
|
|
|
|
test_pipeline = [
|
|
*pre_transform,
|
|
dict(type='Resize', scale=img_scale, keep_ratio=True),
|
|
dict(
|
|
type='mmdet.Pad',
|
|
pad_to_square=True,
|
|
pad_val=dict(img=(114.0, 114.0, 114.0))),
|
|
dict(
|
|
type='PackDetInputs',
|
|
meta_keys=('id', 'img_id', 'img_path', 'ori_shape', 'img_shape',
|
|
'scale_factor', 'flip_indices'))
|
|
]
|
|
|
|
# dataset settings
|
|
dataset_type = 'PoseCocoDataset'
|
|
|
|
train_dataloader = dict(
|
|
dataset=dict(
|
|
type=dataset_type,
|
|
data_mode='bottomup',
|
|
ann_file='annotations/person_keypoints_train2017.json',
|
|
pipeline=train_pipeline_stage1))
|
|
|
|
val_dataloader = dict(
|
|
dataset=dict(
|
|
type=dataset_type,
|
|
data_mode='bottomup',
|
|
ann_file='annotations/person_keypoints_val2017.json',
|
|
pipeline=test_pipeline))
|
|
test_dataloader = val_dataloader
|
|
|
|
# evaluators
|
|
val_evaluator = dict(
|
|
_delete_=True,
|
|
type='mmpose.CocoMetric',
|
|
ann_file=_base_.data_root + 'annotations/person_keypoints_val2017.json',
|
|
score_mode='bbox')
|
|
test_evaluator = val_evaluator
|
|
|
|
default_hooks = dict(checkpoint=dict(save_best='coco/AP', rule='greater'))
|
|
|
|
visualizer = dict(type='mmpose.PoseLocalVisualizer')
|
|
|
|
custom_hooks = [
|
|
dict(
|
|
type='YOLOXModeSwitchHook',
|
|
num_last_epochs=num_last_epochs,
|
|
new_train_pipeline=train_pipeline_stage2,
|
|
priority=48),
|
|
dict(type='mmdet.SyncNormHook', priority=48),
|
|
dict(
|
|
type='EMAHook',
|
|
ema_type='ExpMomentumEMA',
|
|
momentum=0.0002,
|
|
update_buffers=True,
|
|
strict_load=False,
|
|
priority=49)
|
|
]
|