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指的是训练模型的保存目录。
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目录后,会在训练开始前自动下载模型参数。
- 设置hdfs文件系统信息,具体参数含义如下:
- 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。
- 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参数的属性信息,请参考参数属性信息。
- 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类的方法,需要通过该类的实例调用,例如:
from plsc import Entry
ins = Entry()
ins.set_class_num(85742)
ins.train()