专栏首页PaddlePaddle【场景文字识别】场景文字识别

【场景文字识别】场景文字识别

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]来训练模型。

【参考文献】

  1. Google Now Using ReCAPTCHA To Decode Street View Addresses
  2. Focused Scene Text
  3. SynthText in the Wild Dataset

end

本文分享自微信公众号 - PaddlePaddle(PaddleOpenSource)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【点击率预估】Wide&deep 点击率预估模型

    导语 PaddlePaddle提供了丰富的运算单元,帮助大家以模块化的方式构建起千变万化的深度学习模型来解决不同的应用问题。这里,我们针对常见的机器学习任务,提...

    用户1386409
  • 走进机器阅读理解的世界,飞桨开源升级版 BiDAF模型解读

    导读:飞桨(PaddlePaddle)致力于让深度学习技术的创新与应用更简单。在重要的机器阅读领域,基于DuReader数据集,飞桨升级并开源了一个经典的阅读理...

    用户1386409
  • EasyDL专业版上线百度超大规模预训练模型,模型效果显著提升

    在深度学习领域,有一个名词正在被越来越多地关注:迁移学习。它相比效果表现好的监督学习来说,可以减去大量的枯燥标注过程,简单来说就是在大数据集训练的预训练模型上进...

    用户1386409
  • Android6.0权限控制

      随着android6.0的更新,最大的变化莫过于新的权限控制规则。以前可以直接通过AndroidManifest配置需要的权限。而更新后,为了保证用户隐私的...

    饮水思源为名
  • Linux 命令使用:cat与tac、more与less、head与tail

    Linux系统中有许多命令提供查看文件内容的功能,无所谓哪个命令更好,在具体工作中,根据需求选择具有不同功能特点的命令。

    zhipingChen
  • XCode调试技巧–设置全局断点快速定位问题代码

    且行且珍惜_iOS
  • 使用卷积网络做手写数字识别

    上篇博文《使用循环神经网络做手写数字识别》介绍了利用LSTM做手写数字的识别,想着好事成双,也写一个姊妹篇卷积网络实现手写数字的识别。

    卡尔曼和玻尔兹曼谁曼
  • Java 类机制(3)---- 类文件结构

    ​ 在上一篇文章中我们一起来看了一下 Java 虚拟机的类加载过程,包括虚拟机加载、验证、准备、解析和初始化 5 个大步骤,同时我们还讨论了 Java 虚拟机...

    指点
  • 偷学Python第四天|分支结构,附练习案例

    为了照顾基础阶段的读者,本文带来的是偷学Python第四天,分支结构的学习。其他内容将在近期更新完毕。本文目录如下:

    刘早起
  • Android 6.0 运行时权限处理问题

    序 自从升级到Android M以来,最大的改变就是增加了运行时权限RuntimePermission,6.0以上的系统如果没有做适配,运行了targetSDK...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券