使用计算机视觉和深度学习创建现代OCR管道( 三 )


合成数据管道由三部分组成:
· 包含要使用的单词的语料库
· 用于绘制单词的字体集合
· 一组用于模拟真实世界扭曲的几何和光度变换
生成算法只是从每个样本中抽取样本,以创建一个独特的训练示例 。
合成生成的单词图像
从这三个字体开始,单词来自19世纪的古腾堡计划书籍,大约有一千种字体,以及一些简单的扭曲,如旋转,下划线和模糊 。生成了大约一百万个合成单词,训练了深度网络,然后测试了准确性,大约是79% 。这没关系但还不够好 。
通过多次迭代,最终以多种方式发展了合成数据管道的每一部分,以提高识别准确性 。一些亮点:
· 注意到在收据上做得不好,所以我们扩展了单词语料库,以包括统一产品代码(UPC)数据库,该数据库包含诸如“24QTPAPER”之类的条目,这些条目通常出现在收据上 。
· 网络在处理具有断开连接的片段的字母时遇到了困难 。这揭示了一个更深层次的问题:收据通常使用带有斑点,断开连接或墨水污迹的字母的热敏字体打印,但是我们的网络只获得了具有平滑连续字体(如来自激光打印机)或轻度位映射字符(如屏幕截图)的训练数据 。为了解决这一缺点,最终找到了中国的一家字体供应商,他们提供了具有代表性的古代热敏打印机字体 。
使用不同的热敏打印机字体合成生成的单词,在收据中很常见
· 最终手工选择了大约2000种字体 。并非所有字体都得到同等使用 。因此对世界上排名前50位的字体进行了研究并创建了一个字体频率系统,使我们能够更频繁地从常见字体(如或Times New Roman)中采样,同时仍然保留长尾稀有字体(例如一些华丽的徽标字体) 。此外,某些字体的符号不正确或支持有限,导致只有正方形,或者它们的小写或大写字母不匹配,因此不正确 。必须手动遍历所有两千种字体,并标记那些具有无效符号,数字或大小写的字体,这样不会无意中用不正确的数据训练网络 。
· 上游单词检测器(稍后描述)经过调整,可提供高召回率和低精度 。在图像中查找文本过于热心,这样它就不会错过任何实际文本(高召回率),而牺牲了经常“找到”实际上不存在的单词(低精度) 。这意味着Word Deep Net必须处理大量具有噪声的基本上空白的图像 。因此让合成数据管道生成具有代表性的负训练示例,其中包含空的地面真值字符串,包括常见的纹理背景,如木材、大理石台面等 。
合成生成的否定训练示例
· 从合成生成的单词的直方图中,许多符号被低估了,例如/或& 。通过合成生成具有代表性的日期、价格、URL 等,人为地提高了合成语料库中这些内容的频率 。
· 添加大量视觉转换,例如翘曲、假阴影和假折痕等等 。
假阴影效果
数据与使用的机器学习模型一样重要,需花费了大量时间来优化此数据生成管道 。将开源并发布这些合成生成的数据,供其他人训练、验证系统和研究 。
我们在EC2 G2 GPU 实例上训练了网络,并行启动了许多实验 。所有实验都放在一个实验室笔记本中,其中包括复制实验所需的一切,以便跟踪意外的准确性凸起或损失 。
实验室笔记本包含编号实验,最新的实验是第一个 。它跟踪了机器学习可重复性所需的所有内容,例如所用代码的唯一 git 哈希、指向 S3 的指针以及生成的数据集和结果、评估结果、图形、该实验目标的高级描述等 。当构建合成数据管道和训练网络时,还构建了许多专用工具来可视化字体、调试网络猜测等 。
示例早期实验跟踪错误率与我们的Word Deep Net训练了多长时间,与仅由单个单词组成的评估数据集(单字准确性)