Skip to content

Latest commit

 

History

History
120 lines (100 loc) · 6.88 KB

File metadata and controls

120 lines (100 loc) · 6.88 KB

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
  • 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)
  • 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()