本文档描述了 Tesseract OCR 中 LSTM(长短期记忆)神经网络的训练过程。它涵盖了用于创建基于 LSTM 的识别模型的数据准备、训练工作流程、配置选项和评估方法。有关使用训练好的 LSTM 模型进行识别的信息,请参阅LSTM 识别。
Tesseract 中的 LSTM 训练涉及准备带标签的训练数据、定义网络架构以及迭代训练网络直到达到目标错误率。训练过程由 `LSTMTrainer` 类管理,该类负责加载训练数据、网络初始化、前向-后向传播、错误计算和模型持久化。
来源
Tesseract 中的训练数据使用 LSTMF(LSTM 特征)文件,这些文件包含预处理过的图像及其对应的真实文本。这些文件由 `DocumentCache` 和 `ImageData` 类加载和管理。
训练数据结构支持两种缓存策略:
来源
训练数据需要真实文本,这可以通过 box 文件提供。Box 文件定义了字符/单词的位置及其边界框和相应的文本。
Box 文件格式
<character> <left> <bottom> <right> <top> <page_number>
`ImageData` 类处理这些 box 文件,以创建包含对齐图像和文本数据的训练样本。
来源
训练过程开始于初始化字符集(unicharset)和网络架构。
网络架构由描述层类型和排列的网络规范字符串定义。
来源
核心训练过程包括:
来源
Tesseract 在训练期间跟踪多个误差指标:
| 错误类型 | 描述 |
|---|---|
| ET_RMS | RMS 激活误差 |
| ET_DELTA | delta 中的大误差数量 |
| ET_CHAR_ERROR | 字符错误率 (BCER) |
| ET_WORD_RECERR | 单词错误率 (BWER) |
| ET_SKIP_RATIO | 跳过的样本比例 |
这些指标会持续监控,并用于确定何时保存检查点以及何时停止训练。
来源
检查点会定期保存,以保留训练进度。系统维护:
来源
网络通过描述层结构的字符串进行指定。常见的层类型包括:
| 层类型 | 描述 |
|---|---|
L | LSTM 层 |
F | 全连接层 |
S | Softmax 层 |
C | 卷积层 |
M | 最大池化层 |
网络规范示例
[1,36,0,1 Ct3,3,16 Mp3,3 Lfys48 Lfx96 Lrx96 Lfx256 O1c111]
来源
关键训练参数包括:
| 参数 | 默认 | 描述 |
|---|---|---|
learning_rate | 10.0e-4 | 新 delta 的权重因子 |
momentum | 0.5 | 重复 delta 的衰减因子 |
adam_beta | 0.999 | Adam 优化器的 Beta 参数 |
weight_range | 0.1 | 初始随机权重的范围 |
target_error_rate | 0.01 | 最终错误率(百分比) |
来源
`LSTMTester` 类负责在训练期间和训练后评估 LSTM 模型。
评估可以执行:
来源
在评估期间,系统会在单独的评估数据上计算字符和单词错误率。这些指标提供了对模型性能的无偏评估。
来源
`LSTMTrainer` 实现序列化以保存和加载模型。
序列化过程可以保存:
来源
训练完成后,模型可以被转换
来源
LSTMTrainer 可以使用子训练器——与主训练器并行、但使用不同参数的替代训练器。
子训练器通过探索不同的学习率配置来帮助克服平台期。
来源
训练期间可以调整学习率
来源
用于 LSTM 训练的主要命令行工具是 lstmtraining。这是一个典型的流程:
unicharset_extractor **提取 unicharset**lstmtraining **开始训练**lstmtraining --stop_training **转换为运行时模型**一个训练会话示例
lstmtraining --traineddata eng.traineddata \
--net_spec "[1,36,0,1 Ct3,3,16 Mp3,3 Lfys48 Lfx96 Lrx96 Lfx256 O1c111]" \
--model_output eng \
--learning_rate 10e-4 \
--train_listfile train_files.txt \
--eval_listfile eval_files.txt \
--max_iterations 10000
来源
训练期间的常见问题包括:
发散:错误率突然增加
平台期:错误率停止改进
内存限制:无法加载所有训练数据
max_image_MB 参数限制内存使用来源
Tesseract 中的 LSTM 训练是一个全面的过程,包括数据准备、网络配置、迭代训练和评估。该系统包含用于错误跟踪、检查点管理和自动学习率调整的复杂机制,以实现最佳识别性能。
对于干净、准备充分的训练数据,成功训练通常会导致字符错误率低于 1%,但结果会因语言复杂性和训练数据质量而异。
来源