NeuralNetsInTesseract4.00 - kana112233/tesseract GitHub Wiki

#Tesseract 4.00中新神经网络系统概述

介绍

Tesseract 4.00包括一个配置为文本行的新神经网络子系统

识别器. 它起源于OCRopus'基于Python的LSTM实现,但是

在C ++中完全重新设计了Tesseract. 神经网络系统

Tesseract早于Tensor Flow,但与之兼容,因为有一个

网络描述语言称为[变量图规范

语言](VGSLSpecs)(VGSL),也可用于Tensor Flow. 看到

https://github.com/tensorflow/models/tree/master/research/street

VGSL的想法是可以构建一个神经网络并对其进行训练

无需学习任何东西. 没有必要学习Python,

Tensor Flow,甚至可以编写任何C ++代码. 它只需要理解

VGSL规范语言足以构建语法正确的网络

说明. 关于各种神经网络层的一些基本知识

类型是什么以及它们如何组合将会有很长的路要走.

#与Tesseract集成

Tesseract 4.00神经网络子系统作为一个集成到Tesseract中

线识别器. 它可以与现有的布局分析一起使用来识别

大文档中的文本,或者它可以与外部文档一起使用

文本检测器,用于识别单个文本行图像中的文本.

神经网络引擎是4.00的默认值. 识别来自的文本

单个文本行的图像,使用SetPageSegMode(PSM_RAW_LINE). 这可以

-psm 13命令行使用

已经集成了神经网络引擎以启用多语言模式

这与Tesseract 3.04一起使用,但在将来的版本中会有所改进.

现在支持中文,日文和韩文的垂直文本,应该是

自动检测.

#硬件和CPU要求

Tesseract 4.00神经网络子系统使用的计算密集程度很高

基础Tesseract的CPU资源的十倍的顺序,但影响

如果您的平台支持它,则会减轻,如下所示:

*如果您的机器有OpenLD,OpenMP允许并行使用四个核心.

*支持SSE和/或AVX的Intel/AMD处理器受益于SIMD      核心矩阵乘法的并行化.

在具有多个内核和AVX的计算机上,简单的英文图像可能需要两次

尽可能多的实时,并使用7倍的CPU作为基础Tesseract,而印地语

需要比基础Tesseract更多的CPU,但实际上运行速度更快

时间.

如果缺少上述组件,则会有一个较慢的普通C ++实现

这使代码仍然可以工作.

Little-endian和big-endian系统都受到支持.

#对于开源贡献者

初始实施缺乏以下内容:

*如果硬件没有SSE和/或AVX,则有C ++实现,      但代码可以从其他硬件的SIMD实现中受益,      比如ARM. 请参阅新的arch目录以了解插入代码的位置.

#实施基础知识

所有网络层类型都源自Network基类. 该

Plumbing子类是操纵其他层的图层的基类

某种方式,例如 通过重塑输入/输出或组织一组图层.

输入/输出数据“Tensor”是“NetworkIO”,权重存储在a中

WeightMatrix,'两者都包含一个TesseractGENERIC_2D_ARRAY`来保存

数据. LSTMRecognizer提供转换的更高级抽象

文本行的图像到tesseractWERD_RES类的序列. LSTMTrainer

同样处理在文本行图像上训练网络的抽象

有一个UTF-8字符串'真相'. NetworkBuilder负责

将VGSL规范语言转换为网络元素图.

#添加新的图层类型

一个新的层类必须从NetworkPlumbing派生并实现

至少以下虚拟方法:

*spec,返回与生成的字符串对应的字符串      这层.

*Serialize/DeSerialize将图层保存到TFile或从TFile恢复图层.

*Forward在向前方向上运行图层.

*Backward在训练期间向后运行图层.

具有权重的图层还必须实现“更新”以更新权重

一组渐变. 还有很多其他方法可能需要

根据新图层的具体要求实施. 看到

network.h有关可能需要实现的方法的更多信息.

*必须修改NetworkBuilder以解析新的规范      类型.

*必须扩展NetworkType枚举以包含新类型.

*必须为新的添加“Network :: kTypeNames”中的相应条目      类型.

*必须修改Network :: CreateFromFile以构造适当的类型      关于反序列化.

*与任何新代码一样,lstm/Makefile.am需要使用new更新      文件名.