2021SC@SDUSC
目录
一、前情回顾和背景介绍
1.1 PP-OCR文字识别策略回顾
1.2 CRNN-CTC模型概述
二、CRNN-CTC模型策略详解
2.1 模型流程
代码结构
数据
数据示例
数据准备
模型训练
测试
三、CTC model VS attention model
预测
预训练模型
总结
策略的选用主要是用来增强模型能力和减少模型大小。下面是PP-OCR文字识别器所采用的九种策略:
CRNN-CTC 使用CTC model识别图片中单行英文字符,用于端到端的文本行图片识别方法。
识别图片中单行英文字符,可以使用CTC model和attention model两种不同的模型来完成该任务。
这两种模型的有相同的编码部分,首先采用卷积将图片转为特征图, 然后使用im2sequence op
将特征图转为序列,通过双向GRU
学习到序列特征。
两种模型的解码部分和使用的损失函数区别如下:
├── data_reader.py # 下载、读取、处理数据。
├── crnn_ctc_model.py # 定义了OCR CTC model的网络结构。
├── attention_model.py # 定义了OCR attention model的网络结构。
├── train.py # 用于模型的训练。
├── infer.py # 加载训练好的模型文件,对新数据进行预测。
├── eval.py # 评估模型在指定数据集上的效果。
└── utils.py # 定义通用的函数。
数据的下载和简单预处理都在data_reader.py
中实现。
使用的训练和测试数据如图1
所示,每张图片包含单行不定长的英文字符串,这些图片都是经过检测算法进行预框选处理的。
训练集准备
把所有参与训练的图片放入同一个文件夹,暂且记为train_images
。然后用一个list文件存放每张图片的信息,包括图片大小、图片名称和对应的label,这里暂记该list文件为train_list。
最终文件结构组织如下:
|-train_data
|- train_list
|- train_imags
|- 00508_0215.jpg
|- 00197_1893.jpg
|- 00007_0219.jpg
| ...
测试集和评估集
测试集、评估集的准备方式与训练集相同。 在训练时,测试集的路径通过train.py的选项--test_images
和 --test_list
来设置。 在评估时,评估集的路径通过eval.py的选项--input_images_dir
和--input_images_list
来设置。
待预测数据集
预测支持三种形式的输入:
第一种:设置--input_images_dir
和--input_images_list
, 与训练集类似, 只不过list文件中的最后一列可以放任意占位字符或字符串。
第二种:仅设置--input_images_list
, 其中list文件中只需放图片的完整路径,如下所示:
data/test_images/00000.jpg
data/test_images/00001.jpg
data/test_images/00003.jpg
第三种:从stdin读入一张图片的path,然后进行一次inference。
图2为使用默认参数在默认数据集上训练CTC model
的收敛曲线,其中横坐标轴为训练迭代次数,纵轴为样本级错误率。其中,蓝线为训练集上的样本错误率,红线为测试集上的样本错误率。
相比于CTC model,attention model
的收敛曲线如下:
通过以下命令调用评估脚本用指定数据集对模型进行评估:
env CUDA_VISIBLE_DEVICES=0 python eval.py \
--model_path="./models/model_0" \
--input_images_dir="./eval_data/images/" \
--input_images_list="./eval_data/eval_list"
CTC model VS attention model
1.从标准输入读取一张图片的路径,并对其进行预测:
env CUDA_VISIBLE_DEVICES=0 python infer.py \
--model_path="models/model_00044_15000"
2.从文件中批量读取图片路径,并对其进行预测:
env CUDA_VISIBLE_DEVICES=0 python infer.py \
--model_path="models/model_00044_15000" \
--input_images_list="data/test.list"
模型 | 错误率 |
CTC model |
22.3% |
attention model |
15.8% |
今天对PP-OCR的CRNN-CTC和Attention模型进行进行了整个实现流程的介绍,并比较了两个模型实现单行中英文语句的识别效率。