File size: 15,476 Bytes
7b7527a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
**# config yaml配置项说明**

KeyPoint 使用时config文件配置项说明,以[tinypose_256x192.yml](../../configs/keypoint/tiny_pose/tinypose_256x192.yml)为例

```yaml
use_gpu: true                                                                                  #是否使用gpu训练

log_iter: 5                                                                                    #打印log的iter间隔

save_dir: output                                                                               #模型保存目录

snapshot_epoch: 10                                                                             #保存模型epoch间隔

weights: output/tinypose_256x192/model_final                                                   #测试加载模型路径(不含后缀“.pdparams”)

epoch: 420                                                                                     #总训练epoch数量

num_joints: &num_joints 17                                                                     #关键点数量

pixel_std: &pixel_std 200                                                                      #变换时相对比率像素(无需关注,不动就行)

metric: KeyPointTopDownCOCOEval                                                                #metric评估函数

num_classes: 1                                                                                 #种类数(检测模型用,不需关注)

train_height: &train_height 256                                                                #模型输入尺度高度变量设置

train_width: &train_width 192                                                                  #模型输入尺度宽度变量设置

trainsize: &trainsize [*train_width, *train_height]                                            #模型输入尺寸,使用已定义变量

hmsize: &hmsize [48, 64]                                                                       #输出热力图尺寸(宽,高)

flip_perm: &flip_perm [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12], [13, 14], [15, 16]]  #左右关键点经图像翻转时对应关系,例如:图像翻转后,左手腕变成了右手腕,右手腕变成了左手腕





\#####model

architecture: TopDownHRNet                                                                     #模型框架结构类选择



TopDownHRNet:                                                                                  #TopDownHRNet相关配置

  backbone: LiteHRNet                                                                          #模型主干网络

  post_process: HRNetPostProcess                                                               #模型后处理类

  flip_perm: *flip_perm                                                                        #同上flip_perm

  num_joints: *num_joints                                                                      #关键点数量(输出通道数量)

  width: &width 40                                                                             #backbone输出通道数

  loss: KeyPointMSELoss                                                                        #loss函数选择

  use_dark: true                                                                               #是否使用DarkPose后处理



LiteHRNet:                                                                                     #LiteHRNet相关配置

  network_type: wider_naive                                                                    #网络结构类型选择

  freeze_at: -1                                                                                #梯度截断branch id,截断则该branch梯度不会反传

  freeze_norm: false                                                                           #是否固定normalize层参数

  return_idx: [0]                                                                              #返回feature的branch id



KeyPointMSELoss:                                                                               #Loss相关配置

  use_target_weight: true                                                                      #是否使用关键点权重

  loss_scale: 1.0                                                                              #loss比率调整,1.0表示不变



\#####optimizer

LearningRate:                                                                                  #学习率相关配置

  base_lr: 0.002                                                                               #初始基础学习率

  schedulers:

  \- !PiecewiseDecay                                                                           #衰减策略

​    milestones: [380, 410]                                                                     #衰减时间对应epoch次数

​    gamma: 0.1                                                                                 #衰减率

  \- !LinearWarmup                                                                             #Warmup策略

​    start_factor: 0.001                                                                        #warmup初始学习率比率

​    steps: 500                                                                                 #warmup所用iter次数



OptimizerBuilder:                                                                              #学习策略设置

  optimizer:

​    type: Adam                                                                                 #学习策略Adam

  regularizer:

​    factor: 0.0                                                                                #正则项权重

​    type: L2                                                                                   #正则类型L2/L1





\#####data

TrainDataset:                                                                                  #训练数据集设置

  !KeypointTopDownCocoDataset                                                                  #数据加载类

​    image_dir: ""                                                                              #图片文件夹,对应dataset_dir/image_dir

​    anno_path: aic_coco_train_cocoformat.json                                                  #训练数据Json文件,coco格式

​    dataset_dir: dataset                                                                       #训练数据集所在路径,image_dir、anno_path路径基于此目录

​    num_joints: *num_joints                                                                    #关键点数量,使用已定义变量

​    trainsize: *trainsize                                                                      #训练使用尺寸,使用已定义变量

​    pixel_std: *pixel_std                                                                      #同上pixel_std

​    use_gt_bbox: True                                                                          #是否使用gt框





EvalDataset:                                                                                   #评估数据集设置

  !KeypointTopDownCocoDataset                                                                  #数据加载类

​    image_dir: val2017                                                                         #图片文件夹

​    anno_path: annotations/person_keypoints_val2017.json                                       #评估数据Json文件,coco格式

​    dataset_dir: dataset/coco                                                                  #数据集路径,image_dir、anno_path路径基于此目录

​    num_joints: *num_joints                                                                    #关键点数量,使用已定义变量

​    trainsize: *trainsize                                                                      #训练使用尺寸,使用已定义变量

​    pixel_std: *pixel_std                                                                      #同上pixel_std

​    use_gt_bbox: True                                                                          #是否使用gt框,一般测试时用

​    image_thre: 0.5                                                                            #检测框阈值设置,测试时使用非gt_bbox时用



TestDataset:                                                                                   #纯测试数据集设置,无label

  !ImageFolder                                                                                 #数据加载类,图片文件夹类型

​    anno_path: dataset/coco/keypoint_imagelist.txt                                             #测试图片列表文件



worker_num: 2                                                                                  #数据加载worker数量,一般2-4,太多可能堵塞

global_mean: &global_mean [0.485, 0.456, 0.406]                                                #全局均值变量设置

global_std: &global_std [0.229, 0.224, 0.225]                                                  #全局方差变量设置

TrainReader:                                                                                   #训练数据加载类设置

  sample_transforms:                                                                           #数据预处理变换设置

​    \- RandomFlipHalfBodyTransform:                                                            #随机翻转&随机半身变换类

​        scale: 0.25                                                                            #最大缩放尺度比例

​        rot: 30                                                                                #最大旋转角度

​        num_joints_half_body: 8                                                                #关键点小于此数不做半身变换

​        prob_half_body: 0.3                                                                    #半身变换执行概率(满足关键点数量前提下)

​        pixel_std: *pixel_std                                                                  #同上pixel_std

​        trainsize: *trainsize                                                                  #训练尺度,同上trainsize

​        upper_body_ids: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]                                     #上半身关键点id

​        flip_pairs: *flip_perm                                                                 #左右关键点对应关系,同上flip_perm

​    \- AugmentationbyInformantionDropping:

​        prob_cutout: 0.5                                                                       #随机擦除变换概率

​        offset_factor: 0.05                                                                    #擦除位置中心点随机波动范围相对图片宽度比例

​        num_patch: 1                                                                           #擦除位置数量

​        trainsize: *trainsize                                                                  #同上trainsize

​    \- TopDownAffine:

​        trainsize: *trainsize                                                                  #同上trainsize

​        use_udp: true                                                                          #是否使用udp_unbias(flip测试使用)

​    \- ToHeatmapsTopDown_DARK:                                                                 #生成热力图gt类

​        hmsize: *hmsize                                                                        #热力图尺寸

​        sigma: 2                                                                               #生成高斯核sigma值设置

  batch_transforms:

​    \- NormalizeImage:                                                                         #图像归一化类

​        mean: *global_mean                                                                     #均值设置,使用已有变量

​        std: *global_std                                                                       #方差设置,使用已有变量

​        is_scale: true                                                                         #图像元素是否除255.,即[0,255]到[0,1]

​    \- Permute: {}                                                                             #通道变换HWC->CHW,一般都需要

  batch_size: 128                                                                              #训练时batchsize

  shuffle: true                                                                                #数据集是否shuffle

  drop_last: false                                                                             #数据集对batchsize取余数量是否丢弃



EvalReader:

  sample_transforms:                                                                           #数据预处理变换设置,意义同TrainReader

​    \- TopDownAffine:                                                                          #Affine变换设置

​        trainsize: *trainsize                                                                  #训练尺寸同上trainsize,使用已有变量

​        use_udp: true                                                                          #是否使用udp_unbias,与训练需对应

  batch_transforms:

​    \- NormalizeImage:                                                                         #图片归一化,与训练需对应

​        mean: *global_mean

​        std: *global_std

​        is_scale: true

​    \- Permute: {}                                                                             #通道变换HWC->CHW

  batch_size: 16                                                                               #测试时batchsize



TestReader:

  inputs_def:

​    image_shape: [3, *train_height, *train_width]                                              #输入数据维度设置,CHW

  sample_transforms:

​    \- Decode: {}                                                                              #图片加载

​    \- TopDownEvalAffine:                                                                      #Affine类,Eval时用

​        trainsize: *trainsize                                                                  #输入图片尺度

​    \- NormalizeImage:                                                                         #输入图像归一化

​        mean: *global_mean                                                                     #均值

​        std: *global_std                                                                       #方差

​        is_scale: true                                                                         #图像元素是否除255.,即[0,255]到[0,1]

​    \- Permute: {}                                                                             #通道变换HWC->CHW

  batch_size: 1                                                                                #Test batchsize

  fuse_normalize: false                                                                        #导出模型时是否内融合归一化操作(若是,预处理中可省略normalize,可以加快pipeline速度)
```