PaddleClas: 配置文件yaml

说实话,paddle的官网文档,非常的不方便。明明很好的东西,体验却做的很差。

1:找个30分钟上手PaddleClas,都是非常古老的版本,N年不更新。。。

2:训练你得看yaml配置吧,官网竟然都没有介绍,离谱。。。

3:那就去github上看,结果整个页面都是狂推自己的应用。不应该把入门相关的放在最醒目的地方嘛???

配置文件解释:2.5版本

简介

本文档介绍了 PaddleClas 配置文件(ppcls/configs/*.yaml)中各参数的含义,以便您更快地自定义或修改超参数配置。

配置详解

目录

1.分类模型

此处以 ResNet50_vd 在 ImageNet-1k 上的训练配置为例,详解各个参数的意义。配置路径

1.1 全局配置(Global)
参数名字 具体含义 默认值 可选值
checkpoints 断点模型路径,用于恢复训练 null str
pretrained_model 预训练模型路径 null str
output_dir 保存模型路径 "./output/" str
save_interval 每隔多少个 epoch 保存模型 1 int
eval_during_train 是否在训练时进行评估 True bool
eval_interval 每隔多少个 epoch 进行模型评估 1 int
epochs 训练总 epoch 数 int
print_batch_step 每隔多少个 mini-batch 打印输出 10 int
use_visualdl 是否是用 visualdl 可视化训练过程 False bool
image_shape 图片大小 [3, 224, 224] list, shape: (3,)
save_inference_dir inference 模型的保存路径 "./inference" str
eval_mode eval 的模式 "classification" "retrieval"
to_static 是否改为静态图模式 False True
ues_dali 是否使用 dali 库进行图像预处理 False True

pretrained_model 也可以填写存放预训练模型的 http 地址。

1.2 结构(Arch)
参数名字 具体含义 默认值 可选值
name 模型结构名字 ResNet50 PaddleClas 提供的模型结构
class_num 分类数 1000 int
pretrained 预训练模型 False bool, str

:此处的 pretrained 可以设置为 True 或者 False,也可以设置权重的路径。另外当 Global.pretrained_model 也设置相应路径时,此处的 pretrained 失效。

1.3 损失函数(Loss)
参数名字 具体含义 默认值 可选值
CELoss 交叉熵损失函数 —— ——
CELoss.weight CELoss 在整个 Loss 中的权重 1.0 float
CELoss.epsilon CELoss 中 label_smooth 的 epsilon 值 0.1 float, 0-1 之间

1.4 优化器(Optimizer)
参数名字 具体含义 默认值 可选值
name 优化器方法名 "Momentum" "RmsProp"等其他优化器
momentum momentum 值 0.9 float
lr.name 学习率下降方式 "Cosine" "Linear"、"Piecewise"等其他下降方式
lr.learning_rate 学习率初始值 0.1 float
lr.warmup_epoch warmup 轮数 0 int,如 5
regularizer.name 正则化方法名 "L2" ["L1", "L2"]
regularizer.coeff 正则化系数 0.00007 float

lr.name 不同时,新增的参数可能也不同,如当 lr.name=Piecewise 时,需要添加如下参数:

  lr:
    name: Piecewise
    learning_rate: 0.1
    decay_epochs: [30, 60, 90]
    values: [0.1, 0.01, 0.001, 0.0001]

添加方法及参数请查看 learning_rate.py

1.5 数据读取模块(DataLoader)

1.5.1 dataset
参数名字 具体含义 默认值 可选值
name 读取数据的类的名字 ImageNetDataset VeriWild 等其他读取数据类的名字
image_root 数据集存放的路径 ./dataset/ILSVRC2012/ str
cls_label_path 数据集标签 list ./dataset/ILSVRC2012/train_list.txt str
transform_ops 单张图片的数据预处理 —— ——
batch_transform_ops batch 图片的数据预处理 —— ——

transform_ops 中参数的意义:

功能名字 参数名字 具体含义
DecodeImage to_rgb 数据转 RGB
channel_first 按 CHW 排列的图片数据
RandCropImage size 随机裁剪
RandFlipImage 随机翻转
NormalizeImage scale 归一化 scale 值
mean 归一化均值
std 归一化方差
order 归一化顺序
CropImage size 裁剪大小
ResizeImage resize_short 按短边调整大小

batch_transform_ops 中参数的含义:

功能名字 参数名字 具体含义
MixupOperator alpha Mixup 参数值,该值越大增强越强

1.5.2 sampler
参数名字 具体含义 默认值 可选值
name sampler 类型 DistributedBatchSampler DistributedRandomIdentitySampler 等其他 Sampler
batch_size 批大小 64 int
drop_last 是否丢掉最后不够 batch-size 的数据 False bool
shuffle 数据是否做 shuffle True bool

1.5.3 loader
参数名字 具体含义 默认值 可选值
num_workers 数据读取线程数 4 int
use_shared_memory 是否使用共享内存 True bool

1.6 评估指标(Metric)
参数名字 具体含义 默认值 可选值
TopkAcc TopkAcc [1, 5] list, int

1.7 预测(Infer)
参数名字 具体含义 默认值 可选值
infer_imgs 被 infer 的图像的地址 docs/images/whl/demo.jpg str
batch_size 批大小 10 int
PostProcess.name 后处理名字 Topk str
PostProcess.topk topk 的值 5 int
PostProcess.class_id_map_file class id 和名字的映射文件 ppcls/utils/imagenet1k_label_list.txt str

:Infer 模块的 transforms 的解释参考数据读取模块中的 dataset 中 transform_ops 的解释。

2.蒸馏模型

:此处以 MobileNetV3_large_x1_0 在 ImageNet-1k 上蒸馏 MobileNetV3_small_x1_0 的训练配置为例,详解各个参数的意义。配置路径。这里只介绍与分类模型有区别的参数。

2.1 结构(Arch)
参数名字 具体含义 默认值 可选值
name 模型结构名字 DistillationModel ——
class_num 分类数 1000 int
freeze_params_list 冻结参数列表 [True, False] list
models 模型列表 [Teacher, Student] list
Teacher.name 教师模型的名字 MobileNetV3_large_x1_0 PaddleClas 中的模型
Teacher.pretrained 教师模型预训练权重 True 布尔值或者预训练权重路径
Teacher.use_ssld 教师模型预训练权重是否是 ssld 权重 True 布尔值
infer_model_name 被 infer 模型的类型 Student Teacher

1.list 在 yaml 中体现如下:

  freeze_params_list:
  - True
  - False

2.Student 的参数情况类似,不再赘述。

2.2 损失函数(Loss)
参数名字 具体含义 默认值 可选值
DistillationCELoss 蒸馏的交叉熵损失函数 —— ——
DistillationCELoss.weight Loss 权重 1.0 float
DistillationCELoss.model_name_pairs ["Student", "Teacher"] —— ——
DistillationGTCELoss.weight 蒸馏的模型与真实 Label 的交叉熵损失函数 —— ——
DistillationGTCELos.weight Loss 权重 1.0 float
DistillationCELoss.model_names 与真实 label 作交叉熵的模型名字 ["Student"] ——

2.3 评估指标(Metric)
参数名字 具体含义 默认值 可选值
DistillationTopkAcc DistillationTopkAcc 包含 model_key 和 topk 两个参数 ——
DistillationTopkAcc.model_key 被评估的模型 "Student" "Teacher"
DistillationTopkAcc.topk Topk 的值 [1, 5] list, int

DistillationTopkAcc 与普通 TopkAcc 含义相同,只是只用在蒸馏任务中。

3. 识别模型

:此处以 ResNet50 在 LogoDet-3k 上的训练配置为例,详解各个参数的意义。配置路径。这里只介绍与分类模型有区别的参数。

3.1 结构(Arch)
参数名字 具体含义 默认值 可选值
name 模型结构 "RecModel" ["RecModel"]
infer_output_key inference 时的输出值 “feature” ["feature", "logits"]
infer_add_softmax infercne 是否添加 softmax False [True, False]
Backbone.name Backbone 的名字 ResNet50_last_stage_stride1 PaddleClas 提供的其他 backbone
Backbone.pretrained Backbone 预训练模型 True 布尔值或者预训练模型路径
BackboneStopLayer.name Backbone 中的输出层名字 True Backbone 中的特征输出层的 full_name
Neck.name 网络 Neck 部分名字 VehicleNeck 需传入字典结构,Neck 网络层的具体输入参数
Neck.in_channels 输入 Neck 部分的维度大小 2048 与 BackboneStopLayer.name 层的大小相同
Neck.out_channels 输出 Neck 部分的维度大小,即特征维度大小 512 int
Head.name 网络 Head 部分名字 CircleMargin Arcmargin 等
Head.embedding_size 特征维度大小 512 与 Neck.out_channels 保持一致
Head.class_num 类别数 3000 int
Head.margin CircleMargin 中的 margin 值 0.35 float
Head.scale CircleMargin 中的 scale 值 64 int

1.在 PaddleClas 中,Neck 部分是 Backbone 与 embedding 层的连接部分,Head 部分是 embedding 层与分类层的连接部分。

2.BackboneStopLayer.name 的获取方式可以通过将模型可视化后获取,可视化方式可以参考 Netron 或者 visualdl

3.调用 tools/export_model.py 会将模型的权重转为 inference model,其中 infer_add_softmax 参数会控制是否在其后增加 Softmax 激活函数,代码中默认为 True(分类任务中最后的输出层会接 Softmax 激活函数),识别任务中特征层无须接激活函数,此处要设置为 False

3.2 评估指标(Metric)
参数名字 具体含义 默认值 可选值
Recallk 召回率 [1, 5] list, int
mAP 平均检索精度 None None

参考链接:

 

https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5/docs/zh_CN/training/config_description/basic.md

猜你喜欢

转载自blog.csdn.net/lilai619/article/details/131515176