如何用 lstmeval 配合 --traineddata 评估 Tesseract 的 LSTM 训练检查点
2026/9/9 12:28:18 网站建设 项目流程

如何用 lstmeval 配合 --traineddata 评估 Tesseract 的 LSTM 训练检查点

【免费下载链接】tesseractTesseract Open Source OCR Engine (main repository)项目地址: https://gitcode.com/GitHub_Trending/te/tesseract

用 Tesseract 的lstmtraining训练 LSTM 网络时,通常不想等训练全部结束才判断效果,而是需要检查训练输出目录里已经产生的中间检查点。lstmeval就是 Tesseract 为 LSTM 网络提供的独立评估程序:输入一个模型(识别模型或训练检查点)加一份 lstmf 文件列表,输出该模型在评估集上的错误率。关键限制是:当--model给的是训练检查点而不是可直接使用的识别模型时,必须同时给出--traineddata,而且它必须是训练时交给 trainer 的那个 starter traineddata 文件。按 man page 记载,lstmeval自 tesseract 4.00.00alpha 起可用。

准备条件:检查点、starter traineddata 与评估列表文件

运行评估前需要凑齐三样东西,缺一都会导致程序直接报错退出:

  1. 模型文件。可以是识别模型(如lang.lstm),也可以是训练检查点。doc/lstmeval.1.asc 的 synopsis 把--model的合法形式写为'lang.lstm|modelname_checkpoint|modelname_N.NN_NN_NN.checkpoint',并明确说明 "Intermediate training checkpoints can also be used"(中间训练检查点也可以使用)。如果按 doc/lstmtraining.1.asc 示例中的--model_output 'train_output_dir/newlstmmodel'训练,检查点就按newlstmmodel_N.NN_NN_NN.checkpoint的命名落在该输出目录里。
  2. starter traineddata,即lstmtraining --traineddata当时指定的文件。man page 对--traineddata的表述是:若模型是训练检查点,"traineddata must be the traineddata file that was given to the trainer",给错文件评估结果没有意义。
  3. 评估列表文件,即--eval_listfile指向的文本文件,内容为 lstmf 格式样本文件的路径清单(man page:"File listing sample files in lstmf training format."),实现上按行读取文件名(见 src/training/unicharset/lstmtester.cpp)。

可选分支:生成 lstmf 评估样本。手头没有 lstmf 文件时,可以用tesseract配合仓库自带的lstm.train配置生成。doc/tesseract.1.asc 说明该配置的作用是 "Output files used by LSTM training ('OUTPUTBASE'.lstmf)",即执行

tesseract image.png base lstm.train

会生成base.lstmf。该配置文件位于 tessdata/configs/lstm.train,内容是一组参数设置,其中包含tessedit_train_line_recognizer T等开启训练数据输出的项。生成多个.lstmf后,把路径逐行写入一个文本文件作为评估列表。

另外,lstmeval属于随源码构建的训练工具集:Makefile.am 中trainingtools += lstmeval$(EXEEXT),构建 Tesseract 源码后即可获得该可执行文件。

执行 lstmeval 评估命令

man page synopsis 给出的完整形式是:

lstmeval --model 'lang.lstm|modelname_checkpoint|modelname_N.NN_NN_NN.checkpoint' \ [--traineddata lang/lang.traineddata] --eval_listfile 'lang.eval_files.txt' \ [--verbosity N] [--max_image_MB NNNN]

代入检查点场景、并按 doc/lstmtraining.1.asc 示例中的路径写法,实际命令形如:

lstmeval --model 'train_output_dir/newlstmmodel_N.NN_NN_NN.checkpoint' \ --traineddata 'train_output_dir/lang/lang.traineddata' \ --eval_listfile 'train_output_dir/lang.eval_files.txt'

各参数的用途与适用条件:

  • --model:必选。模型文件路径(训练或识别)。检查点文件名中的N.NN_NN_NN是 man page 中的占位形式,需替换为训练输出目录中实际的检查点文件名;train_output_dirlang.lang.traineddatalang.eval_files.txt沿用的是两份 man page 示例中的路径,同样替换为你训练时的实际路径。
  • --traineddata:当--model是训练检查点时必选,必须是交给 trainer 的那个 traineddata;若--model是识别模型(如lang.lstm),则不需要该参数。
  • --eval_listfile:必选,lstmf 文件清单。
  • --verbosity:0–2,默认 1,控制诊断输出量。
  • --max_image_MB:图像使用的最大内存(MB),默认 2000。

如何判读评估结果

评估成功时,最终输出一行结果,格式来自 src/training/unicharset/lstmtester.cpp 中RunEvalSync的实现(lstmeval以 iteration 0、stage 0 调用,因此不会出现迭代前缀):

BCER eval=43.500, BWER eval=76.600

以上数值仅为格式示例,不是预期值。BCER 对应代码中累计的字符级错误(ET_CHAR_ERROR),BWER 对应词级错误(ET_WORD_RECERR),均以百分比表示,固定 3 位小数。由于同一检查点每次评估用的是同一份列表文件,把多个检查点依次用同一--eval_listfile跑一遍,比较 BCER/BWER 的走向,就能观察训练过程中错误率的变化趋势。

--verbosity决定逐样本细节的多少(由实现代码可确认):

  • 0:只输出最终的 BCER/BWER 行;
  • 1(默认):对识别不完美(result != PERFECT)的样本额外打印Truth:OCR两行对照,可直接看到哪一行认错了;
  • 2:所有样本都打印对照行,识别不完整的样本还会附上逐行的 BCER/BWER。

排查:错误消息的出处与含义

lstmeval的所有提示信息都在 src/training/lstmeval.cpp 中,可以按消息逐一定位:

消息含义处理
Must provide a --model!未给--model补上模型路径
Must provide a --eval_listfile!未给--eval_listfile补上评估列表文件
Must supply --traineddata to eval a training checkpoint!模型不是识别模型,但没有给--traineddata补上交给 trainer 的 starter traineddata
%s is not a recognition model, trying training checkpoint...非错误,表示正按训练检查点路径加载等待后续结果
Failed to load language model from %s!--traineddata文件加载失败确认路径正确、文件存在,且确为训练时传给 trainer 的那份
Failed to load model from: %s模型文件读取失败检查检查点路径与文件完整性
Failed to load eval data from: %s评估列表文件加载失败检查列表文件路径与其中列出的 lstmf 文件

两种非报错的特殊输出也值得注意:反序列化失败时输出Deserialize failed(模型数据与训练配置不匹配时会走到这里);列表文件能加载但总页数为 0 时输出No test data at iteration 0,说明列表里没有可用的评估页,需要检查 lstmf 文件本身。

与训练过程中的评估的关系

lstmtraining自身也接受--eval_listfile(见 doc/lstmtraining.1.asc),训练过程中会定期对评估集做评估。lstmeval提供的是一条独立路径:不重跑训练,单条命令即可检查输出目录中任意一个中间检查点,两者使用同一形式的评估列表文件。检查完检查点后,若确认某轮效果可用,后续操作回到lstmtraining的续训选项(--continue_from等),本文不再展开。

【免费下载链接】tesseractTesseract Open Source OCR Engine (main repository)项目地址: https://gitcode.com/GitHub_Trending/te/tesseract

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询