2021SC@SDUSC
我们先来看PaddleOCR-release-2.2->configs->cls中的cls_mv3.yml,即参数配置文件。参数配置文件介绍了一个模块使用的框架、算法和整体结构,是了解模块代码之前必看的内容。我之前的博客内容都是基于PaddleOCR的官方论文,所以介绍的内容只有最重要的几部分,对方向分类器的认识也不够完整。但是现在再看yml文件也不算晚,就算是我理解代码的第一步了。
Global:
字段 | 用途 | 默认值 |
---|---|---|
use_gpu | 设置代码能否在GPU上运行 | true |
epoch_num | 最大训练epoch数 | 100 |
log_smooth_window | log队列长度,每次打印输出队列里的中间值 | 20 |
print_batch_step | print_batch_step | 10 |
save_model_dir | 设置模型保存路径 | ./output/cls/mv3/ |
save_epoch_step | 设置模型保存间隔 | 3 |
eval_batch_step | 设置模型评估间隔 | [0, 1000],表示从0次迭代开始,每1000次评估一次 |
cal_metric_during_train | 设置是否在训练过程中评估指标,此时评估的是模型在当前batch下的指标 | true |
pretrained_model | 设置加载预训练模型路径 | none |
checkpoints | 加载模型参数路径,用于中断后加载参数继续训练 | none |
save_inference_dir | 设置模型保存路径 | none |
use_visualdl | 设置是否启用visualdl进行可视化log展示 | False |
infer_img | 设置预测图像路径或文件夹路径 | doc/imgs_words_en/word_10.png |
label_list | 设置方向分类器支持的角度 | [‘0’,‘180’] |
Architecture:
字段 | 用途 | 默认值 |
---|---|---|
model_type | 网络类型 | cls |
algorithm | 模型名称 | CLS |
Transform | 设置变换方式,目前仅rec类型的算法支持 | none |
Backbone | 设置网络backbone类名 | name: MobileNetV3,scale: 0.35,model_name: small |
Neck | 设置网络neck | none |
Head | 设置网络Head。其中class_dim指ClsHead输出分类数 | name: ClsHead,class_dim: 2 |
Loss:
字段 | 用途 | 默认值 |
---|---|---|
name | 网络loss类名 | ClsLoss |
Optimizer:
字段 | 用途 | 默认值 |
---|---|---|
name | 优化器类名 | Adam |
beta1 | 设置一阶矩估计的指数衰减率 | 0.9 |
beta2 | 设置二阶矩估计的指数衰减率 | 0.999 |
lr | 设置学习率decay方式。其中name指学习率decay类名,learning_rate指基础学习率 | name: Cosine,learning_rate: 0.001 |
regularizer | 设置网络正则化方式。其中name指正则化类名,factor指学习率衰减系数 | name: ‘L2’,factor: 0 |
PostProcess:
字段 | 用途 | 默认值 |
---|---|---|
name | 后处理类名 | ClsPostProcess |
Metric:
字段 | 用途 | 默认值 |
---|---|---|
name | 指标评估方法名称 | ClsMetric |
main_indicator | 主要指标,用于选取最优模型 | acc |
Train和Eval:
字段 | 用途 | 默认值 |
---|---|---|
dataset | 每次迭代返回一个样本 | - |
name | dataset类名 | SimpleDataSet |
data_dir | 数据集图片存放路径 | ./train_data/cls |
label_file_list | 数据标签路径 | train的是./train_data/cls/train.txt,eval的是./train_data/cls/test.txt |
transforms | 对图片和标签进行变换的方法列表 | Train包括DecodeImage: img_mode: BGR,channel_first: False;ClsLabelEncode: RecAug: use_tia: False;RandAugment: ;ClsResizeImg: image_shape: [3, 48, 192];KeepKeys: keep_keys: [‘image’, ‘label’]。Eval包括DecodeImage: img_mode: BGR,channel_first: False;ClsLabelEncode: ;ClsResizeImg:image_shape: [3, 48, 192];KeepKeys:keep_keys: [‘image’, ‘label’] |
loader | dataloader相关 | - |
shuffle | 每个epoch是否将数据集顺序打乱 | Train: True , Eval: False |
batch_size_per_card | 训练时单卡batch size | 512 |
drop_last | 是否丢弃因数据集样本数不能被 batch_size 整除而产生的最后一个不完整的mini-batch | Train: True , Eval: False |
num_workers | 用于加载数据的子进程个数,若为0即为不开启子进程,在主进程中进行数据加载 | Train: 8, Eval: 4 |
从yml配置文件中可知,方向分类器的代码主要分为统一设置代码(与部署相关)、结构代码(包括之前博客中详解的MobileNetV3)、损失函数代码、优化器代码、后处理代码、评估代码、训练和评估代码。我将从以后的博客中具体学习这七部分代码。