Skip to content

Commit 79da717

Browse files
committed
update simota to adopt oks
1 parent d5e1c7c commit 79da717

File tree

8 files changed

+397
-39
lines changed

8 files changed

+397
-39
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
_base_ = './yolox-pose_s_8xb32-300e_coco.py'
2+
3+
# model
4+
model = dict(
5+
train_cfg=dict(
6+
assigner=dict(
7+
type='PoseSimOTAAssigner',
8+
oks_weight=20.0,
9+
vis_weight=1.0,
10+
pose_ratio=0.0,
11+
)))
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
_base_ = 'mmyolo::yolox/yolox_s_fast_8xb32-300e-rtmdet-hyp_coco.py'
2+
3+
img_scale = (960, 960)
4+
custom_imports = dict(imports=['models', 'datasets'])
5+
6+
# visualizer
7+
visualizer = dict(
8+
type='mmpose.PoseLocalVisualizer',
9+
vis_backends=_base_.vis_backends,
10+
name='visualizer')
11+
12+
# model
13+
model = dict(
14+
init_cfg=dict(
15+
_delete_=True,
16+
type='Pretrained',
17+
checkpoint='https://download.openmmlab.com/mmyolo/v0/yolox/'
18+
'yolox_s_fast_8xb32-300e-rtmdet-hyp_coco/yolox_s_fast_'
19+
'8xb32-300e-rtmdet-hyp_coco_20230210_134645-3a8dfbd7.pth'),
20+
data_preprocessor=dict(
21+
type='mmdet.DetDataPreprocessor',
22+
batch_augments=[
23+
dict(
24+
type='PoseBatchSyncRandomResize',
25+
random_size_range=(720, 1200),
26+
size_divisor=32,
27+
interval=1)
28+
]),
29+
bbox_head=dict(
30+
type='YOLOXPoseHead',
31+
head_module=dict(
32+
type='YOLOXPoseHeadModule',
33+
num_classes=1,
34+
num_keypoints=17,
35+
),
36+
loss_pose=dict(
37+
type='OksLoss',
38+
metainfo='configs/_base_/datasets/coco.py',
39+
loss_weight=10),
40+
),
41+
test_cfg=dict(score_thr=0.1, multi_label=False))
42+
43+
# pipelines
44+
pre_transform = [
45+
dict(type='LoadImageFromFile', file_client_args=_base_.file_client_args),
46+
dict(type='PoseToDetConverter')
47+
]
48+
49+
train_pipeline_stage1 = [
50+
*pre_transform, *_base_.train_pipeline_stage1[2:-2],
51+
dict(type='FilterDetPoseAnnotations', keep_empty=False),
52+
dict(
53+
type='PackDetPoseInputs',
54+
meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape'))
55+
]
56+
57+
for transform in train_pipeline_stage1:
58+
if 'pre_transform' in transform:
59+
transform['pre_transform'] = pre_transform
60+
if 'img_scale' in transform:
61+
transform['img_scale'] = img_scale
62+
# if 'MixUp' in transform['type']:
63+
# transform['prob'] = 0.1
64+
if transform['type'] == 'mmdet.RandomAffine':
65+
transform['scaling_ratio_range'] = (0.7, 1.1)
66+
transform['border'] = (-img_scale[0] // 2, -img_scale[1] // 2)
67+
# transform['max_translate_ratio'] = 0.1
68+
69+
train_pipeline_stage2 = [
70+
*pre_transform, *_base_.train_pipeline_stage2[2:-2],
71+
dict(type='FilterDetPoseAnnotations', keep_empty=False),
72+
dict(type='PackDetPoseInputs')
73+
]
74+
75+
for transform in train_pipeline_stage2:
76+
if 'scale' in transform:
77+
transform['scale'] = img_scale
78+
79+
for hook in _base_.custom_hooks:
80+
if hook['type'] == 'YOLOXModeSwitchHook':
81+
hook['new_train_pipeline'] = train_pipeline_stage2
82+
83+
test_pipeline = [
84+
*pre_transform, *_base_.test_pipeline[1:-2],
85+
dict(
86+
type='PackDetPoseInputs',
87+
meta_keys=('id', 'img_id', 'img_path', 'ori_shape', 'img_shape',
88+
'scale_factor', 'flip_indices'))
89+
]
90+
for transform in test_pipeline:
91+
if 'scale' in transform:
92+
transform['scale'] = img_scale
93+
94+
# dataset settings
95+
dataset_type = 'CocoDataset'
96+
data_mode = 'bottomup'
97+
data_root = 'data/coco/'
98+
99+
train_dataloader = dict(
100+
dataset=dict(
101+
type=dataset_type,
102+
data_root=data_root,
103+
data_mode=data_mode,
104+
ann_file='annotations/person_keypoints_train2017.json',
105+
pipeline=train_pipeline_stage1))
106+
_base_.train_dataloader.pop('collate_fn')
107+
108+
val_dataloader = dict(
109+
dataset=dict(
110+
type=dataset_type,
111+
data_root=data_root,
112+
data_mode=data_mode,
113+
test_mode=True,
114+
ann_file='annotations/person_keypoints_val2017.json',
115+
pipeline=test_pipeline))
116+
test_dataloader = val_dataloader
117+
118+
# evaluators
119+
val_evaluator = dict(
120+
_delete_=True,
121+
type='mmpose.CocoMetric',
122+
ann_file=data_root + 'annotations/person_keypoints_val2017.json',
123+
)
124+
test_evaluator = val_evaluator
125+
default_hooks = dict(checkpoint=dict(save_best='coco/AP', rule='greater'))

projects/yolox-pose/configs/yolox-pose_s_8xb8-300e_coco.py renamed to projects/yolox-pose/configs/yolox-pose_s_8xb32-300e_coco.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
1-
# Directly inherit the entire recipe you want to use.
2-
_base_ = 'mmyolo::yolox/yolox_s_fast_8xb8-300e_coco.py'
1+
_base_ = 'mmyolo::yolox/yolox_s_fast_8xb32-300e-rtmdet-hyp_coco.py'
32

4-
# This line is to import your own modules.
53
custom_imports = dict(imports=['models', 'datasets'])
64

7-
# Modify the model to use your own head and loss.
5+
# visualizer
6+
visualizer = dict(
7+
type='mmpose.PoseLocalVisualizer',
8+
vis_backends=_base_.vis_backends,
9+
name='visualizer')
10+
11+
# model
812
model = dict(
913
init_cfg=dict(
1014
_delete_=True,
1115
type='Pretrained',
12-
checkpoint='https://download.openmmlab.com/mmyolo/'
13-
'v0/yolox/yolox_s_8xb8-300e_coco/'
14-
'yolox_s_8xb8-300e_coco_20220917_030738-d7e60cb2.pth'),
16+
checkpoint='https://download.openmmlab.com/mmyolo/v0/yolox/'
17+
'yolox_s_fast_8xb32-300e-rtmdet-hyp_coco/yolox_s_fast_'
18+
'8xb32-300e-rtmdet-hyp_coco_20230210_134645-3a8dfbd7.pth'),
1519
data_preprocessor=dict(
1620
type='mmdet.DetDataPreprocessor',
1721
batch_augments=[
1822
dict(
1923
type='PoseBatchSyncRandomResize',
2024
random_size_range=(480, 800),
2125
size_divisor=32,
22-
interval=10)
26+
interval=1)
2327
]),
2428
bbox_head=dict(
2529
type='YOLOXPoseHead',
@@ -31,10 +35,11 @@
3135
loss_pose=dict(
3236
type='OksLoss',
3337
metainfo='configs/_base_/datasets/coco.py',
34-
loss_weight=50),
38+
loss_weight=10),
3539
),
36-
test_cfg=dict(multi_label=False))
40+
test_cfg=dict(score_thr=0.1, multi_label=False))
3741

42+
# pipelines
3843
pre_transform = [
3944
dict(type='LoadImageFromFile', file_client_args=_base_.file_client_args),
4045
dict(type='PoseToDetConverter')
@@ -51,13 +56,21 @@
5156
for transform in train_pipeline_stage1:
5257
if 'pre_transform' in transform:
5358
transform['pre_transform'] = pre_transform
59+
# if 'MixUp' in transform['type']:
60+
# transform['prob'] = 0.1
61+
if transform['type'] == 'mmdet.RandomAffine':
62+
transform['scaling_ratio_range'] = (0.75, 1)
5463

5564
train_pipeline_stage2 = [
5665
*pre_transform, *_base_.train_pipeline_stage2[2:-2],
5766
dict(type='FilterDetPoseAnnotations', keep_empty=False),
5867
dict(type='PackDetPoseInputs')
5968
]
6069

70+
for hook in _base_.custom_hooks:
71+
if hook['type'] == 'YOLOXModeSwitchHook':
72+
hook['new_train_pipeline'] = train_pipeline_stage2
73+
6174
test_pipeline = [
6275
*pre_transform, *_base_.test_pipeline[1:-2],
6376
dict(
@@ -66,7 +79,7 @@
6679
'scale_factor', 'flip_indices'))
6780
]
6881

69-
# base dataset settings
82+
# dataset settings
7083
dataset_type = 'CocoDataset'
7184
data_mode = 'bottomup'
7285
data_root = 'data/coco/'
@@ -95,10 +108,6 @@
95108
_delete_=True,
96109
type='mmpose.CocoMetric',
97110
ann_file=data_root + 'annotations/person_keypoints_val2017.json',
98-
nms_mode='none',
99-
# score_mode='keypoint',
100111
)
101112
test_evaluator = val_evaluator
102-
103-
# hooks
104113
default_hooks = dict(checkpoint=dict(save_best='coco/AP', rule='greater'))

projects/yolox-pose/datasets/transforms.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ class PackDetPoseInputs(PackDetInputs):
5858
def __init__(self,
5959
meta_keys=('id', 'img_id', 'img_path', 'ori_shape',
6060
'img_shape', 'scale_factor', 'flip',
61-
'flip_direction', 'flip_indices', 'raw_ann_info')):
61+
'flip_direction', 'flip_indices', 'raw_ann_info'),
62+
pack_transformed=False):
6263
self.meta_keys = meta_keys
6364

6465
def transform(self, results: dict) -> dict:

projects/yolox-pose/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from .assigner import * # noqa
12
from .data_preprocessor import * # noqa
23
from .oks_loss import * # noqa
34
from .utils import * # noqa

0 commit comments

Comments
 (0)