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,'两者都包含一个Tesseract
GENERIC_2D_ARRAY`来保存
数据.
LSTMRecognizer
提供转换的更高级抽象
文本行的图像到tesseractWERD_RES
类的序列.
LSTMTrainer
同样处理在文本行图像上训练网络的抽象
有一个UTF-8字符串'真相'.
NetworkBuilder
负责
将VGSL规范语言转换为网络元素图.
#添加新的图层类型
一个新的层类必须从Network
或Plumbing
派生并实现
至少以下虚拟方法:
*spec
,返回与生成的字符串对应的字符串
这层.
*Serialize/DeSerialize
将图层保存到TFile或从TFile恢复图层.
*Forward
在向前方向上运行图层.
*Backward
在训练期间向后运行图层.
具有权重的图层还必须实现“更新”以更新权重
一组渐变. 还有很多其他方法可能需要
根据新图层的具体要求实施. 看到
network.h
有关可能需要实现的方法的更多信息.
*必须修改NetworkBuilder
以解析新的规范
类型.
*必须扩展NetworkType
枚举以包含新类型.
*必须为新的添加“Network :: kTypeNames”中的相应条目 类型.
*必须修改Network :: CreateFromFile
以构造适当的类型
关于反序列化.
*与任何新代码一样,lstm/Makefile.am
需要使用new更新
文件名.