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断点模型路径,用于恢复训练nullstr
pretrained_model预训练模型路径nullstr
output_dir保存模型路径"./output/"str
save_interval每隔多少个 epoch 保存模型1int
eval_during_train是否在训练时进行评估Truebool
eval_interval每隔多少个 epoch 进行模型评估1int
epochs训练总 epoch 数int
print_batch_step每隔多少个 mini-batch 打印输出10int
use_visualdl是否是用 visualdl 可视化训练过程Falsebool
image_shape图片大小[3, 224, 224]list, shape: (3,)
save_inference_dirinference 模型的保存路径"./inference"str
eval_modeeval 的模式"classification""retrieval"
to_static是否改为静态图模式FalseTrue
ues_dali是否使用 dali 库进行图像预处理FalseTrue

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

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

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

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

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

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读取数据的类的名字ImageNetDatasetVeriWild 等其他读取数据类的名字
image_root数据集存放的路径./dataset/ILSVRC2012/str
cls_label_path数据集标签 list./dataset/ILSVRC2012/train_list.txtstr
transform_ops单张图片的数据预处理————
batch_transform_opsbatch 图片的数据预处理————

transform_ops 中参数的意义:

功能名字参数名字具体含义
DecodeImageto_rgb数据转 RGB
channel_first按 CHW 排列的图片数据
RandCropImagesize随机裁剪
RandFlipImage随机翻转
NormalizeImagescale归一化 scale 值
mean归一化均值
std归一化方差
order归一化顺序
CropImagesize裁剪大小
ResizeImageresize_short按短边调整大小

batch_transform_ops 中参数的含义:

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

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

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

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

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

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

2.蒸馏模型

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

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

1.list 在 yaml 中体现如下:

  freeze_params_list:
  - True
  - False

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

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

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

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

3. 识别模型

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

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

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平均检索精度NoneNone

参考链接:

 

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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微风❤水墨

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值