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張卡 | 100 | 100 |
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,取值包括:
|
STRING | 無 |
weight_decay | 否 | L2 Regularization的大小。 | FLOAT | 1e-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 | 否 | 是否預測文字行朝向。 | BOOL | false |
text_direction_trainable | 否 | 是否訓練文字行朝向預測。 | BOOL | false |
text_direction_type | 否 | 文字朝向預測的類型,取值包括:
|
STRING | normal |
feature_gather_type | 否 | 文字行特征抽取器類型,取值包括:
|
STRING | fixed_height |
feature_gather_aspect_ratio | 否 | 文字行的寬高比。當feature_gather_type取值為fixed_size時,該參數表示特征被Resize后的寬高比。當feature_gather_type取值為fixed_height時,該參數表示特征Resize的最大寬高比約束。 | FLOAT | 40 |
feature_gather_batch_size | 否 | 用于訓練的文字行Batch_size。 | INT | 160 |
recognition_norm_type | 否 | 編碼器和文字行特征抽取器的Norm類型,取值包括:
|
STRING | group_norm |
recognition_bn_trainable | 否 | 編碼器和文字行特征抽取器的Batch norm是否可以訓練。當norm_type取值為batch_norm時,該參數生效。 | BOOL | false |
encoder_type | 否 | 編碼器類型,取值包括:
|
STRING | crnn |
encoder_cnn_name | 否 | 編碼器中使用的CNN類型,取值包括:
|
STRING | senet5_encoder |
encoder_num_layers | 否 | 編碼器層數(通常指RNN層數,CNN不計算在內)。 | INT | 2 |
encoder_rnn_type | 否 | 編碼器中使用的RNN類型,取值包括:
|
STRING | uni |
encoder_hidden_size | 否 | 編碼器中的隱藏層神經元數量。 | INT | 512 |
encoder_cell_type | 否 | 編碼器中的RNN Cell類型,取值包括:
|
STRING | basic_lstm |
decoder_type | 否 | 解碼器類型,取值包括:
|
STRING | attention |
decoder_num_layers | 否 | 解碼器層數。 | INT | 2 |
decoder_hidden_size | 否 | 解碼器中的隱藏層神經元數量。 | INT | 512 |
decoder_cell_type | 否 | 解碼器中的RNN Cell類型,取值包括:
|
STRING | basic_lstm |
embedding_size | 否 | 字典的Embedding大小。 | INT | 64 |
beam_width | 否 | Beam Search中的Beam Width。 | INT | 0 |
length_penalty_weight | 否 | Beam Search中的Length Penalty,用于避免短序列傾向。 | FLOAT | 0.0 |
attention_mechanism | 否 | 解碼器中的Attention類型,取值包括:
|
STRING | normed_bahdanau |
aspect_ratio_min_jitter_coef | 否 | 訓練時隨機擾動圖像寬高比的最小比例。如果取值為0,則表示關閉隨機擾動圖像寬高比。 | FLOAT | 0.8 |
aspect_ratio_max_jitter_coef | 否 | 訓練時隨機擾動圖像寬高比的最大比例。如果取值為0,則表示關閉隨機擾動圖像寬高比。 | FLOAT | 1.2 |
random_rotation_angle | 否 | 訓練時隨機旋轉圖像的角度,其取值為(-angle, angle)范圍內的隨機值。如果取值為0,則表示關閉隨機旋轉圖像。 | FLOAT | 10 |
random_crop_min_area | 否 | 訓練時隨機裁切圖像的最小面積占比約束。如果取值為0,則表示關閉隨機裁切圖像。 | FLOAT | 0.1 |
random_crop_max_area | 否 | 訓練時隨機裁切圖像的最大面積占比約束。如果取值為0,則表示關閉隨機裁切圖像。 | FLOAT | 1.0 |
random_crop_min_aspect_ratio | 否 | 訓練時隨機裁切圖像的最小寬高比約束。如果取值為0,則表示關閉隨機裁切圖像。 | FLOAT | 0.2 |
random_crop_max_aspect_ratio | 否 | 訓練時隨機裁切圖像的最大寬高比約束。如果取值為0,則表示關閉隨機裁切圖像。 | FLOAT | 5 |
image_min_sizes | 否 | 圖片縮放大小最短邊。為支持Multi-scale Training,如果輸入多個Size,則前N-1個作為訓練配置,最后一個作為評估測試配置。否則,訓練與評估使用相同配置。 | 浮點列表 | 800 |
image_max_sizes | 否 | 圖片縮放大小最長邊。為支持Multi-scale Training,如果輸入多個Size,則前N-1個作為訓練配置,最后一個作為評估測試配置。否則,訓練與評估使用相同配置。 | 浮點列表 | 1200 |
random_distort_color | 否 | 是否在訓練時隨機擾動圖片的亮度、對比度及飽和度。 | BOOL | true |
optimizer | 否 | 優化方法,取值包括:
|
STRING | momentum |
lr_type | 否 | 學習率調整策略,取值包括:
|
STRING | exponential_decay |
initial_learning_rate | 否 | 初始學習率。 | FLOAT | 0.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。 | FLOAT | 0.95 |
staircase | 否 | tf.train.exponential.decay中的staircase。 | BOOL | true |
power | 否 | tf.train.polynomial.decay 中的power。 | FLOAT | 0.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。 | BOOL | false |
lr_warm_up_epochs | 否 | 學習率Warmup的輪數。 | FLOAT | 1 |
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 | 否 | 訓練數據并發讀取線程數。 | INT | 4 |
model_dir | 是 | 訓練使用的OSS目錄。 | oss://path/to/model | 無 |
pretrained_model | 否 | 預訓練模型的OSS路徑。如果指定該參數值,則在此模型基礎上Finetune。 | oss://pai-vision-data-sh/pretrained_models/inception_v4.ckpt | “” |
use_pretrained_model | 否 | 是否使用預訓練模型。 | BOOL | true |
num_epochs | 是 | 訓練迭代輪數。取值1表示對所有訓練數據都進行一次迭代。 | INT,例如40。 | 無 |
num_test_example | 否 | 訓練過程中評估數據條目數。取值 -1表示使用所有測試數據作為評估數據。 | INT,例如2000。 | -1 |
num_visualizations | 否 | 評估過程可視化顯示的樣本數量。 | INT | 10 |
save_checkpoint_epochs | 否 | 保存Checkpoint的頻率,以Epoch為單位。取值為1表示每完成一次訓練就保存一次Checkpoint。 | INT | 1 |
save_summary_epochs | 否 | 保存Summary的頻率,以Epoch為單位。 取值為0.01表示每迭代1%的訓練數據就保存一次Summary。 | FLOAT | 0.01 |
num_train_images | 否 | 總的訓練樣本數。如果使用自己生成的TFRecord,則需要指定該參數。 | INT | 0 |
label_map_path | 否 | 類別映射文件。如果使用自己生成的TFRecord,則需要指定該參數。 | STRING | ”” |