提交 d76c53a2 编写于 作者: S sibo2rr

modify documentation according to the standard format

上级 eb9d0088
文件已添加
文件已添加
文件已添加
......@@ -4,7 +4,7 @@
## 简介
本文档介绍了PaddleClas配置文件(`ppcls/configs/*.yaml`)中各参数的含义,以便您更快地自定义或修改超参数配置。
本文档介绍了 PaddleClas 配置文件(`ppcls/configs/*.yaml`)中各参数的含义,以便您更快地自定义或修改超参数配置。
......@@ -12,28 +12,29 @@
### 目录
- [分类模型](#1)
- [1. 分类模型](#1)
- [1.1 全局配置(Global)](#1.1)
- [1.2 结构(Arch)](#1.2)
- [1.3 损失函数(Loss)](#1.3)
- [1.3 损失函数(Loss)](#1.3)
- [1.4 优化器(Optimizer)](#1.4)
- [1.5数据读取模块(DataLoader)](#1.5)
- [1.5数据读取模块(DataLoader)](#1.5)
- [1.5.1 dataset](#1.5.1)
- [1.5.1 sampler](#1.5.2)
- [1.5.1 loader](#1.5.3)
- [1.6 评估指标(Metric)](#1.6)
- [蒸馏模型](#2)
- [1.6 评估指标(Metric)](#1.6)
- [2. 蒸馏模型](#2)
- [2.1 结构(Arch)](#2.1)
- [2.2 损失函数(Loss)](#2.2)
- [2.3 评估指标(Metric)](#2.3)
- [识别模型](#3)
- [2.2 损失函数(Loss)](#2.2)
- [2.3 评估指标(Metric)](#2.3)
- [3. 识别模型](#3)
- [3.1 结构(Arch)](#3.1)
- [3.2 评估指标(Metric)](#3.2)
- [3.2 评估指标(Metric)](#3.2)
<a name="1"></a>
### 1.分类模型
此处以`ResNet50_vd``ImageNet-1k`上的训练配置为例,详解各个参数的意义。[配置路径](../../../ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml)
此处以 `ResNet50_vd``ImageNet-1k` 上的训练配置为例,详解各个参数的意义。[配置路径](../../../ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml)
<a name="1.1"></a>
#### 1.1 全局配置(Global)
......@@ -43,30 +44,30 @@
| checkpoints | 断点模型路径,用于恢复训练 | null | str |
| pretrained_model | 预训练模型路径 | null | str |
| output_dir | 保存模型路径 | "./output/" | str |
| save_interval | 每隔多少个epoch保存模型 | 1 | int |
| save_interval | 每隔多少个 epoch 保存模型 | 1 | int |
| eval_during_train| 是否在训练时进行评估 | True | bool |
| eval_interval | 每隔多少个epoch进行模型评估 | 1 | int |
| 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" |
| 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 |
| ues_dali | 是否使用 dali 库进行图像预处理 | False | True |
**注**`pretrained_model`也可以填写存放预训练模型的http地址。
**注**`pretrained_model` 也可以填写存放预训练模型的 http 地址。
<a name="1.2"></a>
#### 1.2 结构(Arch)
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
| name | 模型结构名字 | ResNet50 | PaddleClas提供的模型结构 |
| name | 模型结构名字 | ResNet50 | PaddleClas 提供的模型结构 |
| class_num | 分类数 | 1000 | int |
| pretrained | 预训练模型 | False | bool str |
| pretrained | 预训练模型 | False | bool, str |
**注**:此处的pretrained可以设置为`True`或者`False`,也可以设置权重的路径。另外当`Global.pretrained_model`也设置相应路径时,此处的`pretrained`失效。
**注**:此处的pretrained可以设置为 `True` 或者 `False`,也可以设置权重的路径。另外当 `Global.pretrained_model` 也设置相应路径时,此处的 `pretrained` 失效。
<a name="1.3"></a>
#### 1.3 损失函数(Loss)
......@@ -74,8 +75,8 @@
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
| CELoss | 交叉熵损失函数 | —— | —— |
| CELoss.weight | CELoss的在整个Loss中的权重 | 1.0 | float |
| CELoss.epsilon | CELoss中label_smooth的epsilon值 | 0.1 | float,0-1之间 |
| CELoss.weight | CELoss 在整个 Loss 中的权重 | 1.0 | float |
| CELoss.epsilon | CELoss 中 label_smooth 的 epsilon 值 | 0.1 | float, 0-1 之间 |
<a name="1.4"></a>
#### 1.4 优化器(Optimizer)
......@@ -83,14 +84,14 @@
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
| name | 优化器方法名 | "Momentum" | "RmsProp"等其他优化器 |
| momentum | momentum值 | 0.9 | float |
| momentum | momentum 值 | 0.9 | float |
| lr.name | 学习率下降方式 | "Cosine" | "Linear"、"Piecewise"等其他下降方式 |
| lr.learning_rate | 学习率初始值 | 0.1 | float |
| lr.warmup_epoch | warmup轮数 | 0 | int,如5 |
| lr.warmup_epoch | warmup 轮数 | 0 | int,如5 |
| regularizer.name | 正则化方法名 | "L2" | ["L1", "L2"] |
| regularizer.coeff | 正则化系数 | 0.00007 | float |
**注**`lr.name`不同时,新增的参数可能也不同,如当`lr.name=Piecewise`时,需要添加如下参数:
**注**`lr.name` 不同时,新增的参数可能也不同,如当 `lr.name=Piecewise` 时,需要添加如下参数:
```
lr:
......@@ -100,53 +101,53 @@
values: [0.1, 0.01, 0.001, 0.0001]
```
添加方法及参数请查看[learning_rate.py](../../../ppcls/optimizer/learning_rate.py)
添加方法及参数请查看 [learning_rate.py](../../../ppcls/optimizer/learning_rate.py)
<a name="1.5"></a>
#### 1.5数据读取模块(DataLoader)
#### 1.5数据读取模块(DataLoader)
<a name="1.5.1"></a>
##### 1.5.1 dataset
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
| name | 读取数据的类的名字 | ImageNetDataset | VeriWild等其他读取数据类的名字 |
| name | 读取数据的类的名字 | ImageNetDataset | VeriWild 等其他读取数据类的名字 |
| image_root | 数据集存放的路径 | ./dataset/ILSVRC2012/ | str |
| cls_label_path | 数据集标签list | ./dataset/ILSVRC2012/train_list.txt | str |
| cls_label_path | 数据集标签 list | ./dataset/ILSVRC2012/train_list.txt | str |
| transform_ops | 单张图片的数据预处理 | —— | —— |
| batch_transform_ops | batch图片的数据预处理 | —— | —— |
| batch_transform_ops | batch 图片的数据预处理 | —— | —— |
transform_ops中参数的意义:
transform_ops 中参数的意义:
| 功能名字 | 参数名字 | 具体含义 |
|:---:|:---:|:---:|
| DecodeImage | to_rgb | 数据转RGB |
| | channel_first | 按CHW排列的图片数据 |
| DecodeImage | to_rgb | 数据转 RGB |
| | channel_first | 按 CHW 排列的图片数据 |
| RandCropImage | size | 随机裁剪 |
| RandFlipImage | | 随机翻转 |
| NormalizeImage | scale | 归一化scale值 |
| NormalizeImage | scale | 归一化 scale 值 |
| | mean | 归一化均值 |
| | std | 归一化方差 |
| | order | 归一化顺序 |
| CropImage | size | 裁剪大小 |
| ResizeImage | resize_short | 按短边调整大小 |
batch_transform_ops中参数的含义:
batch_transform_ops 中参数的含义:
| 功能名字 | 参数名字 | 具体含义 |
|:---:|:---:|:---:|
| MixupOperator | alpha | Mixup参数值,该值越大增强越强 |
| MixupOperator | alpha | Mixup 参数值,该值越大增强越强 |
<a name="1.5.2"></a>
##### 1.5.2 sampler
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
| name | sampler类型 | DistributedBatchSampler | DistributedRandomIdentitySampler等其他Sampler |
| name | sampler 类型 | DistributedBatchSampler | DistributedRandomIdentitySampler 等其他 Sampler |
| batch_size | 批大小 | 64 | int |
| drop_last | 是否丢掉最后不够batch-size的数据 | False | bool |
| shuffle | 数据是否做shuffle | True | bool |
| drop_last | 是否丢掉最后不够 batch-size 的数据 | False | bool |
| shuffle | 数据是否做 shuffle | True | bool |
<a name="1.5.3"></a>
##### 1.5.3 loader
......@@ -157,7 +158,7 @@ batch_transform_ops中参数的含义:
| use_shared_memory | 是否使用共享内存 | True | bool |
<a name="1.6"></a>
#### 1.6 评估指标(Metric)
#### 1.6 评估指标(Metric)
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
......@@ -168,18 +169,18 @@ batch_transform_ops中参数的含义:
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
| infer_imgs | 被infer的图像的地址 | docs/images/whl/demo.jpg | str |
| 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 |
| PostProcess.topk | topk 的值 | 5 | int |
| PostProcess.class_id_map_file | class id 和名字的映射文件 | ppcls/utils/imagenet1k_label_list.txt | str |
**注**:Infer模块的`transforms`的解释参考数据读取模块中的dataset中`transform_ops`的解释。
**注**:Infer 模块的 `transforms` 的解释参考数据读取模块中的 dataset 中 `transform_ops` 的解释。
<a name="2"></a>
### 2.蒸馏模型
**注**:此处以`MobileNetV3_large_x1_0``ImageNet-1k`上蒸馏`MobileNetV3_small_x1_0`的训练配置为例,详解各个参数的意义。[配置路径](../../../ppcls/configs/ImageNet/Distillation/mv3_large_x1_0_distill_mv3_small_x1_0.yaml)。这里只介绍与分类模型有区别的参数。
**注**:此处以 `MobileNetV3_large_x1_0``ImageNet-1k` 上蒸馏 `MobileNetV3_small_x1_0` 的训练配置为例,详解各个参数的意义。[配置路径](../../../ppcls/configs/ImageNet/Distillation/mv3_large_x1_0_distill_mv3_small_x1_0.yaml)。这里只介绍与分类模型有区别的参数。
<a name="2.1"></a>
#### 2.1 结构(Arch)
......@@ -190,48 +191,49 @@ batch_transform_ops中参数的含义:
| class_num | 分类数 | 1000 | int |
| freeze_params_list | 冻结参数列表 | [True, False] | list |
| models | 模型列表 | [Teacher, Student] | list |
| Teacher.name | 教师模型的名字 | MobileNetV3_large_x1_0 | PaddleClas中的模型 |
| Teacher.name | 教师模型的名字 | MobileNetV3_large_x1_0 | PaddleClas 中的模型 |
| Teacher.pretrained | 教师模型预训练权重 | True | 布尔值或者预训练权重路径 |
| Teacher.use_ssld | 教师模型预训练权重是否是ssld权重 | True | 布尔值 |
| infer_model_name | 被infer模型的类型 | Student | Teacher |
| Teacher.use_ssld | 教师模型预训练权重是否是 ssld 权重 | True | 布尔值 |
| infer_model_name | 被 infer 模型的类型 | Student | Teacher |
**注**
1.list在yaml中体现如下:
1.list 在 yaml 中体现如下:
```
freeze_params_list:
- True
- False
```
2.Student的参数情况类似,不再赘述。
2.Student 的参数情况类似,不再赘述。
<a name="2.2"></a>
#### 2.2 损失函数(Loss)
#### 2.2 损失函数(Loss)
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
| DistillationCELoss | 蒸馏的交叉熵损失函数 | —— | —— |
| DistillationCELoss.weight | Loss权重 | 1.0 | float |
| 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"] | —— |
| DistillationGTCELoss.weight | 蒸馏的模型与真实 Label 的交叉熵损失函数 | —— | —— |
| DistillationGTCELos.weight | Loss 权重 | 1.0 | float |
| DistillationCELoss.model_names | 与真实 label 作交叉熵的模型名字 | ["Student"] | —— |
<a name="2.3"></a>
#### 2.3 评估指标(Metric)
#### 2.3 评估指标(Metric)
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
| DistillationTopkAcc | DistillationTopkAcc | 包含model_key和topk两个参数 | —— |
| DistillationTopkAcc | DistillationTopkAcc | 包含 model_key 和 topk 两个参数 | —— |
| DistillationTopkAcc.model_key | 被评估的模型 | "Student" | "Teacher" |
| DistillationTopkAcc.topk | Topk的值 | [1, 5] | list, int |
| DistillationTopkAcc.topk | Topk 的值 | [1, 5] | list, int |
**注**`DistillationTopkAcc`与普通`TopkAcc`含义相同,只是只用在蒸馏任务中。
**注**`DistillationTopkAcc` 与普通 `TopkAcc` 含义相同,只是只用在蒸馏任务中。
<a name="3"></a>
### 3. 识别模型
**注**:此处以`ResNet50``LogoDet-3k`上的训练配置为例,详解各个参数的意义。[配置路径](../../../ppcls/configs/Logo/ResNet50_ReID.yaml)。这里只介绍与分类模型有区别的参数。
**注**:此处以 `ResNet50``LogoDet-3k` 上的训练配置为例,详解各个参数的意义。[配置路径](../../../ppcls/configs/Logo/ResNet50_ReID.yaml)。这里只介绍与分类模型有区别的参数。
<a name="3.1"></a>
#### 3.1 结构(Arch)
......@@ -239,30 +241,30 @@ batch_transform_ops中参数的含义:
| 参数名字 | 具体含义 | 默认值 | 可选值 |
| :---------------: | :-----------------------: | :--------: | :----------------------------------------------------------: |
| 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保持一致 |
| 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 |
| Head.margin | CircleMargin 中的 margin 值 | 0.35 | float |
| Head.scale | CircleMargin 中的 scale 值 | 64 | int |
**注**
1.PaddleClas中,`Neck`部分是Backbone与embedding层的连接部分,`Head`部分是embedding层与分类层的连接部分。
1. PaddleClas 中,`Neck` 部分是 Backbone 与 embedding 层的连接部分,`Head` 部分是 embedding 层与分类层的连接部分。
2.`BackboneStopLayer.name`的获取方式可以通过将模型可视化后获取,可视化方式可以参考[Netron](https://github.com/lutzroeder/netron)或者[visualdl](https://github.com/PaddlePaddle/VisualDL)
2.`BackboneStopLayer.name` 的获取方式可以通过将模型可视化后获取,可视化方式可以参考 [Netron](https://github.com/lutzroeder/netron) 或者 [visualdl](https://github.com/PaddlePaddle/VisualDL)
3.调用`tools/export_model.py`会将模型的权重转为inference model,其中`infer_add_softmax`参数会控制是否在其后增加`Softmax`激活函数,代码中默认为`True`(分类任务中最后的输出层会接`Softmax`激活函数),识别任务中特征层无须接激活函数,此处要设置为`False`
3.调用 `tools/export_model.py` 会将模型的权重转为 inference model,其中 `infer_add_softmax` 参数会控制是否在其后增加 `Softmax` 激活函数,代码中默认为 `True`(分类任务中最后的输出层会接`Softmax`激活函数),识别任务中特征层无须接激活函数,此处要设置为 `False`
<a name="3.2"></a>
#### 3.2 评估指标(Metric)
#### 3.2 评估指标(Metric)
| 参数名字 | 具体含义 | 默认值 | 可选值 |
|:---:|:---:|:---:|:---:|
......
......@@ -94,7 +94,7 @@ cd ../../
<a name="4.1"></a>
### 4.1 使用CPU进行模型训练
由于使用CPU来进行模型训练,计算速度较慢,因此,此处以 ShuffleNetV2_x0_25 为例。此模型计算量较小,在 CPU 上计算速度较快。但是也因为模型较小,训练好的模型精度也不会太高。
由于使用 CPU 来进行模型训练,计算速度较慢,因此,此处以 ShuffleNetV2_x0_25 为例。此模型计算量较小,在 CPU 上计算速度较快。但是也因为模型较小,训练好的模型精度也不会太高。
<a name="4.1.1"></a>
#### 4.1.1 不使用预训练模型进行训练
......@@ -104,7 +104,7 @@ cd ../../
python tools/train.py -c ./ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml
```
- `-c` 参数是指定训练的配置文件路径,训练的具体超参数可查看`yaml`文件
- `-c` 参数是指定训练的配置文件路径,训练的具体超参数可查看 `yaml` 文件
- `yaml``Global.device` 参数设置为`cpu`,即使用CPU进行训练(若不设置,此参数默认为`True`
- `yaml`文件中`epochs`参数设置为20,说明对整个数据集进行20个epoch迭代,预计训练20分钟左右(不同CPU,训练时间略有不同),此时训练模型不充分。若提高训练模型精度,请将此参数设大,如**40**,训练时间也会相应延长
......
......@@ -90,7 +90,7 @@ inference model 的路径默认在当前路径下 `./inference`
<a name="5.2"></a>
### 5.2 基于预测引擎预测
首先进入 deploy 目录下:
首先进入 `deploy` 目录下:
```bash
cd ./deploy
......
......@@ -22,7 +22,7 @@
## 1. 环境配置
* 安装:请先参考[Paddle安装教程](../installation/install_paddle.md) 以及 [PaddleClas安装教程](../installation/install_paddleclas.md) 配置 PaddleClas 运行环境。
* 安装:请先参考 [Paddle安装教程](../installation/install_paddle.md) 以及 [PaddleClas安装教程](../installation/install_paddleclas.md) 配置 PaddleClas 运行环境。
* 进入 `deploy` 运行目录。本部分所有内容与命令均需要在 `deploy` 目录下运行,可以通过下面的命令进入 `deploy` 目录。
......@@ -172,9 +172,9 @@ python3.7 python/predict_system.py -c configs/inference_general.yaml -o Global.u
[{'bbox': [244, 49, 509, 964], 'rec_docs': '农夫山泉-饮用天然水', 'rec_scores': 0.7585664}]
```
其中bbox表示检测出的主体所在位置,rec_docs表示索引库中与检测框最为相似的类别,rec_scores表示对应的置信度。
其中 `bbox` 表示检测出的主体所在位置,`rec_docs` 表示索引库中与检测框最为相似的类别,`rec_scores` 表示对应的置信度。
检测的可视化结果也保存在`output`文件夹下,对于本张图像,识别结果可视化如下所示。
检测的可视化结果也保存在 `output` 文件夹下,对于本张图像,识别结果可视化如下所示。
<div align="center">
<img src="../../images/recognition/drink_data_demo/output/nongfu_spring.jpeg" width = "400" />
......@@ -209,7 +209,7 @@ Inference: 150.06470680236816 ms per batch image
...
```
所有图像的识别结果可视化图像也保存在 `output`文件夹内。
所有图像的识别结果可视化图像也保存在 `output` 文件夹内。
更多地,可以通过修改 `Global.rec_inference_model_dir` 字段来更改识别 inference 模型的路径,通过修改 `IndexProcess.index_dir` 字段来更改索引库索引的路径。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册