PaddleOCR的方向分类器代码解析(一)

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)、损失函数代码、优化器代码、后处理代码、评估代码、训练和评估代码。我将从以后的博客中具体学习这七部分代码。

你可能感兴趣的:(2021SC@SDUSC,paddlepaddle)