【技术干货】第 1 篇:有道实况 OCR 技术
一、实况 OCR 是什么
人工智能发展到今天,OCR(光学字符识别)技术已然成熟,也广为大家所知。所谓 OCR,就是检测到图片中的文字并识别出来。
过去常见的 OCR 应用场景是用户拍摄或扫描一张静态图片,输入 OCR 算法,获得图中的文字位置和内容。这些场景下,自动识别代替了人工识别,文字录入的效率得到了极大提升。
那么有没有办法进一步提升文字录入的效率呢?
试想,当你面对一段文字,只要掏出手机、打开相机、对准文字,这段文字就立即自动躺在了你的输入框中,那该有多方便。
再试想。当你面对一份陌生语言的商品包装,拿出手机对准它,翻译结果就立即显示在眼前,那该有多爽。
有道的实况 OCR 已经可以将这种设想变为现实。
二、有道实况 OCR 又准又快
使用 OCR 功能时,识别准确率是我们最关注的指标。
凭借在自研 OCR 领域多年的积累,有道实况 OCR 在几类主流语种上都能够做到准确识别,离线识别字准率如下表所示👇
既然名叫实况 OCR,那识别速度自然也是重要的评价指标。在高通骁龙 8Gen1 平台上,有道实况 OCR 的端到端耗时只需约 300ms。
常规的印刷场景下,有道实况 OCR 和苹果在 iOS 上提供的实况文本功能都能准确识别,有道的速度略胜一筹。但自然场景中,我们希望识别的文字还可能更复杂,有可能有弯曲的、有多语种混排的、还有手写的,有道依靠多年积累,在这些场景中也能准确识别。
三、离线技术实现
除了准确率和速度外,数据隐私也被日益重视。
一方面,很多场景下,我们都希望数据在识别的全流程中都只存在于移动端本地;另一方面,弱网环境下的可用性也很重要。这就要求 OCR 算法在又快又准的前提下,能被离线部署。
因此有道经过大量的算法和工程优化,实现了完全离线的实况 OCR 及实况翻译算法。
移动端离线硬件算力,是远远弱于服务器硬件算力的。这就要求离线算法模型必须远小于服务端模型。而模型越小,其准确率势必越低。同时离线有限的算力,也对工程方面的优化提出了更高的要求。
这并不是有道首次尝试 OCR 算法的离线化。事实上,有道在离线 OCR 方面已经有多年的积累。有道旗下的词典笔、智能护眼灯、AI 学习机等硬件,均搭载了自然的离线 OCR 算法,准确率和速度均属行业领先水平。
然而,手机端的实况 OCR 并不是简单地把其他硬件上部署过的离线算法照搬过来就大功告成了。相反,手机端面对着更多更大的挑战:场景自由度更高、更复杂,待识别文字行数更多,还需要判断用户意图,且在识别之外还要兼顾渲染。
3.1 文字检测算法
当前主流的 OCR 算法由检测和识别两部分组成。检测算法负责从图片中检测到文本行,识别模型负责逐行完成文本的识别。
有道基于多年在 OCR 实际业务需求场景的积累,在手机拍照这种通用复杂的场景中(多方向文本,弯取文本,手写文本,密集文本,艺术字,非文字图标和背景透字的抑制,极大极小文字,拍照模糊等),自研了精度高、速度快的离线文本检测算法。
面对手机拍照场景过于复杂和手机低算力平台的困难,技术团队对文本检测算法进行了一系列的优化,利用模型剪枝、模型蒸馏使得离线模型在复杂场景下达到接近服务器大模型的文字检测水准。
为了适配手机低算力平台,团队对模型设计进行了包括算子和结构在内的全面优化,让算法达到高精度的同时,可以适配低算力平台的部署需求(比如模型量化加速),极大地榨出平台算力(在高通 8Gen1 上,可以做到一张手机拍照图预测所有文本行,不超过 10ms)。
下图是文字检测的模型结构示意图和算法效果,检测框贴合非常精确。
【图注:检测流程示意图】
3.2 文字识别算法
得到文本检测结果后,需要对每个文本行图像进行字符序列识别。
通常,为了提升 OCR 识别模型的识别准确率,常采用 BiLSTM 等时序模型处理图像文本序列特征,结合 CTC 解码器完成文本识别,此类方案在资源受限的端侧设备部署存在推理延迟高,内存占用大等问题。
有道技术团队为此设计了端侧硬件部署友好的模型结构,同时结合剪枝、蒸馏及量化部署等技术,识别模型能够做到识别准确率高、端侧高效推理、低功耗。有道研发的识别模型支持 CPU/NPU/TPU/DSP/APU 等多端侧设备部署。
【图注:识别流程示意图】
模型训练数据方面,除了真实数据,合成数据也发挥着重要作用。通过收集各类素材背景图片、多语种文本语料和字体,利用渲染工具进行数据合成。
输入为文本语料、字体、背景图像,通过设置渲染文字属性、水平/竖直/弯曲版式等属性,经过渲染将文本和背景图像叠加得到合成训练样本(文字图像和文本行标签序列对)。进一步通过图像增强变换的方式,结合文字风格迁移模型,增加样本多样性和逼真程度。
Text rendering 为模型训练提供丰富多样的大规模训练数据,尤其能够促进多语种识别及中文生僻字、形近字识别准确率提升。
【图注:识别模型训练样本合成示意图】
此外,团队还设计了半监督模型训练框架,从无标签数据中学习有效的特征表示,增强模型泛化性能。同时,主动学习也被用于进行识别模型的难例挖掘,提高人工标注效率。
3.3 段落检测算法
实况 OCR 场景下,相机画面中目标文字的周边往往会出现大量的干扰文字。为了方便用户高效、准确地识别目标文字,还需要一个精准的段落检测算法来辅助目标段落的选取,从而在识别时屏蔽干扰文字,既减少了用户不必要的删除操作、又能够减少对无效文本的识别,降低整体耗时和功耗。
【图注:如图红框所示,目标段落周围有干扰文字时,有道能够准确去除干扰,而苹果不能有效去除;图中红色下划线标示识别错误的字】
段落检测的结果被用于判定相机画面是否稳定,只有稳定时才会触发 OCR 检测与识别。减少不必要的推理和计算,降低功耗。同时段落密集、弯曲时,也要能够精准区分开相邻段落,最好还能区分段落的内容类别属性,因而有道团队将段落检测也建模为实例分割问题。
【图注:段落分割效果,完成分割的同时可以对不同段落进行分类,如标题、诗歌、竖排段落等】
为了兼顾效果和速度,技术团队设计了两阶段方案:一阶段是单阶段的目标检测模型,二阶段结合动态参数生成段落分割结果。基于动态参数的分割方式,相比于 RoIAlign,可谓又快速又强大又灵活。
快速:目标检测之外只需极少的额外参数量与计算量(2%-5%),模型尺寸与推理时间与检测模型几乎一致,而 RoIAlign 则需要更多的额外计算量;
强大:可以针对任意形状的段落,对每个物体动态生成一个全局且高精度的分割图,相比 RoIAlign 的局部 28x28/56x56 预测有更高的分割精度;
灵活:灵活解码,模型推理与分割解码解耦,根据任务可以只解码目标物体的分割图,而 RoIAlign 一次推理即预测全部物体的分割图,有大量无效计算;灵活移植,针对不同算力的硬件可以直接替换不同尺寸的目标检测模型来达到 Speed-Accuracy Trade-off 的目的。
【图注:段落检测模型结构】
针对离线设备,设计了更快速的 backbone:基于 CSPDarknet,替换部分 CSPLayer 为带有 SELayer 的 FusedMBConv 与 MBConv,可以在检测精度不变的情况下减少 20%的模型推理耗时。
训练时也充分利用了无标签数据:首先利用基于对比学习的自监督方法,学到更强的模型特征表示,作为预训练模型得到更好的模型效果。
3.4 工程优化
为了优化功耗和速度,采用 int8 量化,并针对多平台的 DSP/APU/NPU 进行了适配。目前已适配了高通、联发科、以及瑞芯微的旗舰/次旗舰款芯片。
端到端的流程中,涉及大量图片基本操作,比如缩放、通道转换、高斯模糊等等,这些操作都被尽可能放在合适的计算单元上完成,有效提速的同时,降低了 CPU 负载和整体功耗。
画面稳定依赖于段落检测一阶段的 bbox,而在实况 OCR 中,我们希望画面轻微抖动时高亮区域能够严格跟手,但不要反复进行识别。于是工程上通过比段落检测二阶段解码计算开销更低的 Mask Tracking,以极低的计算代价提供了良好的视觉体验。
四、相册模式
除了打开相机对目标文字进行实时识别,另一个常见的 OCR 需求是:对相册中的静态图片,选择性地提取其中的文字。
连实况 OCR 这种接近实时的识别都搞定了,对单张静态图片的迅速识别自然也不在话下。同时,识别模型可以同步完成字符在行中的位置检测,使得用户能够精准地选择目标文字。
【图注:相册模式示意,蓝色区域为被选中文字】
五、结语
网易有道一直致力于用 AI 技术让用户的工作、学习、生活更加方便,未来我们会更精益求精,带来更准确、更高效、更易用的各类 AI 技术,让高效学习从有道开始。
评论