PAI端到端文字识别训练

更新时间:
复制 MD 格式

PAI-EasyVision提供端到端文字识别模型的训练及预测功能,本文为您介绍如何通过PAI命令进行端到端文字识别模型训练。

PAI-EasyVision对配置进行了简化,您通过-Dparam_config即可配置常用参数,无需了解PAI-EasyVision的配置文件规则和逻辑。 如果需要尝试更复杂的模型配置,您可以通过PAI-EasyVision命令中的-Dconfig直接传递配置文件进行端到端文字识别模型训练。端到端文字识别模型的主要算法框架如下图所示。算法框架

端到端文字识别训练

pai -name easy_vision_ext
           -Dbuckets='oss://{bucket_name}.{oss_host}/{path}'
           -Darn='acs:ram::*********:role/aliyunodpspaidefaultrole'
           -DgpuRequired=100
           -Dcmd train
           -Dparam_config '
             --model_type TextEnd2End
             --backbone  resnet_v1_50
             --num_classes 1
             --use_pretrained_model true
             --train_batch_size 1
             --test_batch_size 1
             --image_min_sizes 960
             --image_max_sizes 1440
             --initial_learning_rate 0.0001
             --optimizer adam
             --lr_type exponential_decay
             --decay_epochs 40
             --decay_factor 0.5
             --num_epochs 10
             --staircase true
             --predict_text_direction true
             --text_direction_trainable true
             --text_direction_type smart_unified
             --feature_gather_type fixed_height_pyramid
             --train_data oss://pai-vision-data-sh/data/recipt_text/end2end_tfrecords/train_*.tfrecord
             --test_data oss://pai-vision-data-sh/data/recipt_text/end2end_tfrecords/test.tfrecord
             --model_dir oss://pai-vision-data-sh/test/recipt_text/text_end2end_krcnn_resnet50_attn
           '

参数说明

参数是否必选描述参数值格式默认值
buckets是OSS Bucket地址。oss://{bucket_name}.{oss_host}/{path}无
arn是访问OSS的授权,其获取方式请参见PAI-TF任务参数介绍的IO相关参数说明部分。acs:ram::*:role/aliyunodpspaidefaultrole无
cluster否分布式训练参数相关配置。JSON格式字符串“”
gpuRequired否标识是否使用GPU,默认使用一张卡。如果取值200,则一个Worker申请2张卡100100
cmd是EasyVision任务类型。模型训练时,该参数应取值为train。train无
param_config是模型训练参数,其格式与Python Argparser参数格式一致,详情请参见param_config说明。STRING无

param_config说明

param_config包含若干模型配置相关参数,格式为Python Argparser,示例如下。
-Dparam_config = '
--backbone resnet_v1_50
--model_dir oss://your/bucket/exp_dir
'
说明 所有字符串类型的参数,其取值均不加引号。
参数是否必选描述参数值格式默认值
model_type是训练模型类型。进行端到端文字识别训练时,该参数的取值为TextEnd2End。STRING无
backbone是端到端文字识别模型使用的Backbone,取值包括:
  • resnet_v1_50
  • resnet_v1_101
STRING无
weight_decay否L2 Regularization的大小。FLOAT1e-4
num_classes否检测类别数量,默认通过分析数据集获得该参数值。21-1
anchor_scales否Anchor框大小,与Resize后的输入图片尺度相同。仅支持为该参数指定一个值,表示分辨率最高Layer的Anchor大小,共5个Layer,后面每个Layer的Anchor大小为前一Layer的2倍。例如32,64,128,256,512。浮点列表,例如32(单一尺度)。24
anchor_ratios否Anchor宽高比。浮点列表0.2 0.5 1 2 5
predict_text_direction否是否预测文字行朝向。BOOLfalse
text_direction_trainable否是否训练文字行朝向预测。BOOLfalse
text_direction_type否文字朝向预测的类型,取值包括:
  • normal:贪婪预测文字行方向。
  • unified:预测时将所有文字行朝向进行投票,得到统一的文字行方向。
  • smart_unified:预测时将除高大于宽两倍的文字行朝向进行投票,得到统一的文字行方向
STRINGnormal
feature_gather_type否文字行特征抽取器类型,取值包括:
  • fixed_size:固定宽高抽取。
  • fixed_height:固定高度并保持宽高比抽取。
  • fixed_height_pyramid:从多尺度的特征中固定高度并保持宽高比抽取。
STRINGfixed_height
feature_gather_aspect_ratio否文字行的宽高比。当feature_gather_type取值为fixed_size时,该参数表示特征被Resize后的宽高比。当feature_gather_type取值为fixed_height时,该参数表示特征Resize的最大宽高比约束。FLOAT40
feature_gather_batch_size否用于训练的文字行Batch_size。INT160
recognition_norm_type否编码器和文字行特征抽取器的Norm类型,取值包括:
  • batch_norm
  • group_norm
STRINGgroup_norm
recognition_bn_trainable否编码器和文字行特征抽取器的Batch norm是否可以训练。当norm_type取值为batch_norm时,该参数生效。BOOLfalse
encoder_type否编码器类型,取值包括:
  • crnn:CNN+RNN编码器。
  • cnn_line:CNN编码器。
  • cnn_spatial:CNN编码器,用于Spatial Attention。
STRINGcrnn
encoder_cnn_name否编码器中使用的CNN类型,取值包括:
  • conv5_encoder
  • senet5_encoder
STRINGsenet5_encoder
encoder_num_layers否编码器层数(通常指RNN层数,CNN不计算在内)。INT2
encoder_rnn_type否编码器中使用的RNN类型,取值包括:
  • bi:双向RNN Encoder。
  • uni:单向RNN Encoder。
STRINGuni
encoder_hidden_size否编码器中的隐藏层神经元数量。INT512
encoder_cell_type否编码器中的RNN Cell类型,取值包括:
  • basic_lstm
  • gru
  • layer_norm_basic_lstm
  • nas
STRINGbasic_lstm
decoder_type否解码器类型,取值包括:
  • attention
  • ctc
STRINGattention
decoder_num_layers否解码器层数。INT2
decoder_hidden_size否解码器中的隐藏层神经元数量。INT512
decoder_cell_type否解码器中的RNN Cell类型,取值包括:
  • basic_lstm
  • gru
  • layer_norm_basic_lstm
  • nas
STRINGbasic_lstm
embedding_size否字典的Embedding大小。INT64
beam_width否Beam Search中的Beam Width。INT0
length_penalty_weight否Beam Search中的Length Penalty,用于避免短序列倾向。FLOAT0.0
attention_mechanism否解码器中的Attention类型,取值包括:
  • luongscaled_luongbahdanau
  • normed_bahdanau
STRINGnormed_bahdanau
aspect_ratio_min_jitter_coef否训练时随机扰动图像宽高比的最小比例。如果取值为0,则表示关闭随机扰动图像宽高比。FLOAT0.8
aspect_ratio_max_jitter_coef否训练时随机扰动图像宽高比的最大比例。如果取值为0,则表示关闭随机扰动图像宽高比。FLOAT1.2
random_rotation_angle否训练时随机旋转图像的角度,其取值为(-angle, angle)范围内的随机值。如果取值为0,则表示关闭随机旋转图像。FLOAT10
random_crop_min_area否训练时随机裁切图像的最小面积占比约束。如果取值为0,则表示关闭随机裁切图像。FLOAT0.1
random_crop_max_area否训练时随机裁切图像的最大面积占比约束。如果取值为0,则表示关闭随机裁切图像。FLOAT1.0
random_crop_min_aspect_ratio否训练时随机裁切图像的最小宽高比约束。如果取值为0,则表示关闭随机裁切图像。FLOAT0.2
random_crop_max_aspect_ratio否训练时随机裁切图像的最大宽高比约束。如果取值为0,则表示关闭随机裁切图像。FLOAT5
image_min_sizes否图片缩放大小最短边。为支持Multi-scale Training,如果输入多个Size,则前N-1个作为训练配置,最后一个作为评估测试配置。否则,训练与评估使用相同配置。浮点列表800
image_max_sizes否图片缩放大小最长边。为支持Multi-scale Training,如果输入多个Size,则前N-1个作为训练配置,最后一个作为评估测试配置。否则,训练与评估使用相同配置。浮点列表1200
random_distort_color否是否在训练时随机扰动图片的亮度、对比度及饱和度。BOOLtrue
optimizer否优化方法,取值包括:
  • momentum:指sgd。
  • adam
STRINGmomentum
lr_type否学习率调整策略,取值包括:
  • exponential_decay:指数衰减。
  • polynomial_decay:多项式衰减。

    其中num_steps自动配置为总训练迭代次数,end_learning_rate为initial_learning_rate的千分之一

  • manual_step:手动指定各阶段的学习率。

    通过decay_epochs 指定需要调整学习率的迭代轮数,通过learning_rates指定对应迭代轮数使用的学习率。

  • cosine_decay

    通过余弦曲线调整lr,详情请参见论文。通过decay_epochs指定需要调整学习率的迭代轮数。

STRINGexponential_decay
initial_learning_rate否初始学习率。FLOAT0.01
decay_epochs否如果使用exponential_decay,该参数对应tf.train.exponential.decay中的decay_steps,系统会自动根据训练数据总数将decay_epochs转换为decay_steps。例如,取值为10,通常是总Epoch数的1/2。 如果使用manual_step,该参数表示需要调整学习率的迭代轮数。例如16 18表示在16 Epoch和18 Epoch对学习率进行调整。通常将这两个值配置为总Epoch的8/10和9/10。整数列表,例如20 20 40 60。20
decay_factor否tf.train.exponential.decay中的decay_factor。FLOAT0.95
staircase否tf.train.exponential.decay中的staircase。BOOLtrue
power否tf.train.polynomial.decay 中的power。FLOAT0.9
learning_rates否manual_step学习率调整策略中使用的参数,表示在指定Epoch中学习率的取值。 如果您指定的调整Epoch有两个,则需要在此指定两个Epoch对应的学习率。例如,如果decay_epoches为20 40,则该将参数配置为0.001 0.0001,表示在20 Epoch学习率调整为0.001,40 Epoch学习率调整为0.0001。建议几次调整的学习率依次为初始学习率的1/10、1/100及1/1000。浮点列表无
lr_warmup否是否对学习率进行Warmup。BOOLfalse
lr_warm_up_epochs否学习率Warmup的轮数。FLOAT1
train_data是训练数据文件的OSS路径。oss://path/to/train_*.tfrecord无
test_data是训练过程中评估数据的OSS路径。oss://path/to/test_*.tfrecord无
train_batch_size是训练的Batch_size。INT,例如32。无
test_batch_size是评估的Batch_size。INT,例如32。无
train_num_readers否训练数据并发读取线程数。INT4
model_dir是训练使用的OSS目录。oss://path/to/model无
pretrained_model否预训练模型的OSS路径。如果指定该参数值,则在此模型基础上Finetune。oss://pai-vision-data-sh/pretrained_models/inception_v4.ckpt“”
use_pretrained_model否是否使用预训练模型。BOOLtrue
num_epochs是训练迭代轮数。取值1表示对所有训练数据都进行一次迭代。INT,例如40。无
num_test_example否训练过程中评估数据条目数。取值 -1表示使用所有测试数据作为评估数据。INT,例如2000。-1
num_visualizations否评估过程可视化显示的样本数量。INT10
save_checkpoint_epochs否保存Checkpoint的频率,以Epoch为单位。取值为1表示每完成一次训练就保存一次Checkpoint。INT1
save_summary_epochs否保存Summary的频率,以Epoch为单位。 取值为0.01表示每迭代1%的训练数据就保存一次Summary。FLOAT0.01
num_train_images否总的训练样本数。如果使用自己生成的TFRecord,则需要指定该参数。INT0
label_map_path否类别映射文件。如果使用自己生成的TFRecord,则需要指定该参数。STRING””