Files
fcb_photo_review/paddle_detection/docs/tutorials/KeyPointConfigGuide_cn.md
2024-08-27 14:42:45 +08:00

15 KiB
Raw Blame History

# config yaml配置项说明

KeyPoint 使用时config文件配置项说明tinypose_256x192.yml为例

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_unbiasflip测试使用

    \- 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速度