1. STR任务简介
许多场景图像中包含着丰富的文本信息,对理解图像信息有着重要作用,能够极大地帮助人们认知和理解场景图像的内容。场景文字识别是在图像背景复杂、分辨率低下、字体多样、分布随意等情况下,将图像信息转化为文字序列的过程,可认为是一种特别的翻译过程:将图像输入翻译为自然语言输出。场景图像文字识别技术的发展也促进了一些新型应用的产生,如通过自动识别路牌中的文字帮助街景应用获取更加准确的地址信息等。
在场景文字识别任务中,我们介绍如何将基于CNN的图像特征提取和基于RNN的序列翻译技术结合,免除人工定义特征,避免字符分割,使用自动学习到的图像特征,完成端到端地无约束字符定位和识别。
本例将演示如何用 PaddlePaddle 完成 场景文字识别 (STR, Scene Text Recognition) 。任务如下图所示,给定一张场景图片,STR 需要从中识别出对应的文字"keep"。
图 1. 输入数据示例 "keep"
|2. 使用 PaddlePaddle 训练与预测
[1]安装依赖包
pip install -r requirements.txt
[2]修改配置参数
config.py 脚本中包含了模型配置和训练相关的参数以及对应的详细解释,代码片段如下:
class TrainerConfig(object):
# Whether to use GPU in training or not.
use_gpu = True
# The number of computing threads.
trainer_count = 1
# The training batch size.
batch_size = 10
...
class ModelConfig(object):
# Number of the filters for convolution group.
filter_num = 8
...
修改 config.py 脚本可以实现对参数的调整。例如,通过修改 use_gpu 参数来指定是否使用 GPU 进行训练。
[3]模型训练
训练脚本 ./train.py 中设置了如下命令行参数:
Options:
--train_file_list_path TEXT
The path of the file which contains path list
of train image files. [required]
--test_file_list_path TEXT
The path of the file which contains path list
of test image files. [required]
--label_dict_path TEXT
The path of label dictionary. If this parameter
is set, but the file does not exist, label
dictionay will be built from the training data
automatically. [required]
--model_save_dir TEXT
The path to save the trained models (default:
'models').
--help
Show this message and exit.
- train_file_list :训练数据的列表文件,每行由图片的存储路径和对应的标记文本组成,格式为:
word_1.png, "PROPER" word_2.png, "FOOD"
- test_file_list :测试数据的列表文件,格式同上。
- label_dict_path :训练数据中标记字典的存储路径,如果指定路径中字典文件不存在,程序会使用训练数据中的标记数据自动生成标记字典。
- model_save_dir :模型参数的保存目录,默认为./models。
[4]具体执行的过程
1.从官方网站下载数据[2](Task 2.3: Word Recognition (2013 edition)),会有三个文件: Challenge2_Training_Task3_Images_GT.zip、Challenge2_Test_Task3_Images.zip 和 Challenge2_Test_Task3_GT.txt。 分别对应训练集的图片和图片对应的单词、测试集的图片、测试数据对应的单词。然后执行以下命令,对数据解压并移动至目标文件夹:
mkdir -p data/train_data
mkdir -p data/test_data
unzip Challenge2_Training_Task3_Images_GT.zip -d data/train_data
unzip Challenge2_Test_Task3_Images.zip -d data/test_data
mv Challenge2_Test_Task3_GT.txt data/test_data
2.获取训练数据文件夹中 gt.txt 的路径 (data/train_data)和测试数据文件夹中Challenge2_Test_Task3_GT.txt的路径(data/test_data)。
3.执行如下命令进行训练:
python train.py
--train_file_list_path 'data/train_data/gt.txt'
--test_file_list_path 'data/test_data/Challenge2_Test_Task3_GT.txt'
--label_dict_path 'label_dict.txt'
4.训练过程中,模型参数会自动备份到指定目录,默认会保存在 ./models 目录下。
[5]预测
预测部分由 infer.py 完成,使用的是最优路径解码算法,即:在每个时间步选择一个概率最大的字符。在使用过程中,需要在 infer.py 中指定具体的模型保存路径、图片固定尺寸、batch_size(默认为10)、标记词典路径和图片文件的列表文件。执行如下代码:
python infer.py
--model_path 'models/params_pass_00000.tar.gz'
--image_shape '173,46'
--label_dict_path 'label_dict.txt'
--infer_file_list_path 'data/test_data/Challenge2_Test_Task3_GT.txt'
即可进行预测。
[6]其他数据集
- SynthText in the Wild Dataset(41G)
(http://www.robots.ox.ac.uk/~vgg/data/scenetext/)
- ICDAR 2003 Robust Reading Competitions
(http://www.iapr-tc11.org/mediawiki/index.php?title=ICDAR_2003_Robust_Reading_Competitions)
注意事项
- 由于模型依赖的 warp CTC 只有CUDA的实现,本模型只支持 GPU 运行。
- 本模型参数较多,占用显存比较大,实际执行时可以通过调节 batch_size 来控制显存占用。
- 本例使用的数据集较小,如有需要,可以选用其他更大的数据集[3]来训练模型。
【参考文献】
- Google Now Using ReCAPTCHA To Decode Street View Addresses
- Focused Scene Text
- SynthText in the Wild Dataset
end