api_reference.md 6.9 KB
Newer Older
L
lilong12 已提交
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
# API参考

## 默认配置信息

PLSC大规模提供了默认配置参数,用于设置模型训练、验证和模型参数等信息,如训练数据集目录、训练轮数等。

这些默认参数位于plsc.config中,下面给出这些参数的含义和默认值。

### 模型训练相关信息

| 参数名称          | 参数含义            | 默认值                  |
| :-------         | :-------           | :-----                 |
| train_batch_size | 训练阶段batch size值 | 128                   |
| dataset_dir      | 数据集根目录         | './train_data'        |
| train_image_num  | 训练图像的数量       | 5822653               |
| train_epochs     | 训练轮数            | 120                   |
| warmup_epochs    | warmup的轮数        | 0                     |
| lr               | 初始学习率           | 0.1                   |
| lr_steps         | 学习率衰减的步数     | (100000,160000,220000) |

### 模型验证相关信息

| 参数名称         | 参数含义                                | 默认值   |
| :-------        | :-------                               | :-----  |
| val_targets     | 验证数据集名称,以逗号分隔,如'lfw,cfp_fp' | lfw      |
| test_batch_size | 验证阶段batch size的值                   | 120     |
| with_test       | 是否在每轮训练之后开始验证模型效果          | True     |

### 模型参数相关信息

| 参数名称        | 参数含义                            | 默认值                |
| :-------       | :-------                           | :-----               |
| model_name     | 使用的模型的名称                     | 'RestNet50'           |
| checkpoint_dir | 预训练模型(checkpoint)目录         | "",表示不使用预训练模型 |
| model_save_dir | 训练模型的保存目录                   | "./output"            |
| loss_type      | loss计算方法,                      | 'dist_arcface'        |
| num_classes    | 分类类别的数量                       | 85742                |
| image_shape    | 图像尺寸列表,格式为CHW               | [3, 112, 112]        |
| margin         | dist_arcface和arcface的margin参数   | 0.5                   |
| scale          | dist_arcface和arcface的scale参数    | 64.0                  |
| emb_size       | 模型最后一层隐层的输出维度            | 512                   |

备注:

* checkpoint_dir和model_save_dir的区别:
    * checkpoint_dir指用于在训练/验证前加载的预训练模型所在目录;
    * model_save_dir指的是训练模型的保存目录。

## 参数设置API

PLSC的Entry类提供了下面的API,用于修改默认参数信息:

* set_val_targets(targets)
    * 设置验证数据集名称,以逗号分隔,类型为字符串。
* set_train_batch_size(size)
    * 设置训练batch size的值,类型为int。
* set_test_batch_size(size)
    * 设置验证batch size的值,类型为int。
* set_mixed_precision(use_fp16,init_loss_scaling=1.0,incr_every_n_steps=2000,decr_every_n_nan_or_inf=2,incr_ratio=2.0,decr_ratio=0.5,use_dynamic_loss_scaling=True,amp_lists=None)
    * 设置是否使用混合精度训练,以及相关的参数。
* set_hdfs_info(fs_name,fs_ugi,fs_dir_for_save,fs_checkpoint_dir)
    * 设置hdfs文件系统信息,具体参数含义如下:
        * fs_name: hdfs地址,类型为字符串;
        * fs_ugi: 逗号分隔的用户名和密码,类型为字符串;
        * fs_dir_for_save: 模型的上传目录,当设置该参数时,会在训练结束后自动将保存的模型参数上传到该目录;
        * fs_checkpoint_dir: hdfs上预训练模型参数的保存目录,当设置该参数和checkpoint目录后,会在训练开始前自动下载模型参数。
* set_model_save_dir(dir)
    * 设置模型保存路径model_save_dir,类型为字符串。
* set_dataset_dir(dir)
    * 设置数据集根目录dataset_dir,类型为字符串。
* set_train_image_num(num)
    *  设置训练图像的总数量,类型为int。
* set_calc_acc(calc)
    * 设置是否在训练时计算acc1和acc5值,类型为bool,在训练过程中计算acc值会占用额外的显存空间,导致支持的类别数下降,仅在必要时设置。
* set_class_num(num)
    * 设置分类类别的总数量,类型为int。
* set_emb_size(size)
    * 设置最后一层隐层的输出维度,类型为int。
* set_model(model)
    * 设置用户自定义模型类实例,BaseModel的子类的实例。
* set_train_epochs(num)
    * 设置训练的轮数,类型为int。
* set_checkpoint_dir(dir)
    * 设置用于加载的预训练模型的目录,类型为字符串。
* set_warmup_epochs(num)
    * 设置warmup的轮数,类型为int。
* set_loss_type(loss_type)
    * 设置模型loss值的计算方法,可选项为'arcface','softmax', 'dist_softmax'和'dist_arcface',类型为字符串;
    * 'arcface'和'softmax'表示只使用数据并行,而不是用分布式FC参数,'distarcface'和'distsoftmax'表示使用分布式版本的arcface和softmax,即将最后一层FC的参数分布到多张GPU卡上;
    * 关于arcface的细节请参考[ArcFace: Additive Angular Margin Loss for Deep Face Recognition](https://arxiv.org/abs/1801.07698)
* set_image_shape(size)
    * 设置图像尺寸,格式为CHW,类型为元组或列表。
* set_optimizer(optimizer)
    * 设置训练阶段的optimizer,值为Optimizer类或其子类的实例。
* set_with_test(with_test)
    * 设置是否在每完成一轮训练后验证模型效果,类型为bool。
* set_distfc_attr(param_attr=None, bias_attr=None)
    * 设置最后一层FC的W和b参数的属性信息,请参考[参数属性信息](https://www.paddlepaddle.org.cn/documentation/docs/zh/api_cn/fluid_cn/ParamAttr_cn.html#paramattr)
* convert_for_prediction()
    * 将预训练模型转换为预测模型。
* test()
    * 模型验证。
* train()
    * 模型训练。

备注:set_warmup_epochs和set_image_num函数的附加说明:

默认的,我们认为训练过程中总的batch size为1024时可以取得较好的训练效果。例如,当使用8张GPU时,每张GPU卡上的batch size为128。当训练过程中总的batch size不等于1024时,需要根据batch size调整初始学习率的大小,即:lr = total_batch_size / 1024 * lr。这里,lr表示初始学习率大小。另外,为了保持训练的稳定性,通常需要设置warmup_epochs,即在最初的warmup_epochs轮训练中,学习率有一个较小的值逐步增长到初始学习率。为了实现warmup过程,我们需要根据训练数据集中图像的数量计算每轮的训练步数。

当需要改变这种逻辑设定时,可以自定义实现Optimizer,并通过set_optimizer函数设置。

本节介绍的API均为PLSC的Entry类的方法,需要通过该类的实例调用,例如:

```python
from plsc import Entry

ins = Entry()
ins.set_class_num(85742)
ins.train()
```