Linux 之父出席、干货分享、圆桌讨论,精彩尽在 OpenCloudOS 社区开放日,报名戳 了解详情
写点什么

夺得 ICDAR OCR 竞赛世界第一,360 数科文本识别技术分享

  • 2022 年 6 月 22 日
  • 本文字数:6199 字

    阅读完需:约 20 分钟

夺得ICDAR OCR竞赛世界第一,360数科文本识别技术分享

ICDAR(国际文档分析与识别会议)是 OCR 识别领域最权威的会议之一。近期,360 数科在ICDAR2019-SROIE榜单上斩获第一


OCR(Optical Character Recognition,光学字符识别)技术作为计算机视觉领域一个重要分支。其主要包括三大方面,文本检测、文本识别和视觉信息抽取。文字检测是通过 OCR 算法定位图像中文字,一般是通过四边或者矩形框表示文字的位置。文字识别是通过识别算法或者模型,将给定的文字片段图像中的文字通过字符串的形式转写出来。而视觉信息抽取则是将图像中人们定义的关键信息抽取出来,比如姓名,性别,电话号码等。360 数科希望通过分享在文本识别和语言纠错方面的探索和总结,能对业界带来一些帮助或启发。

1. SROIE2019 赛事介绍


在 ICDAR2019 Robust Reading Competitions 的 6 个赛道上[1~6],SROIE2019 更关注商超小票文本行检测、识别和信息抽取,这也是 OCR 领域中目前的难点所在,ICDAR 竞赛因其极高技术难度和强大实用性,一直是各大科研院校、科技公司的竞逐焦点,吸引国内外众多队伍参赛。

1.1 赛事介绍


SROIE2019 分为三个子任务:文本检测(要求在原图中给出文本区域的位置坐标)、文本识别 (在给定的文本区域裁剪图基础上,将其中的文字内容正确识别出来)、视觉信息抽取(抽取识别出的文本行中的关键信息,比如价格、日期等)。本次比赛我们专注于 SROIE 中的文本行识别任务,其评价指标采用 F1 score 评价模型性能。F1 score 是召回率 Recall 和准确率 Precision 的调和平均值,这三者的计算方式如公式(1) (2) (3)所示。



其中,TP,FP,FN 分别表示 True Positive,False Positive 以及 False Negative。TP,FP,FN 的界定是基于识别出来的文本行与给出来的 GT 逐个单词比较,完全正确判定识别正确。SROIR 文本识别任务数据集包含 33626 张训练集和 19385 张测试集,其中训练集的标注格式是给出给定文本行图像及对应的文本,如图 1 所示[1]。


图 1 训练集数据样张

1.2 赛事难点


  • 文本行字体模糊不清。官方给出的比赛数据集,均来自商超结算小票扫描图像,由于小票均为机打且存放时间过长,导致扫描出来的文本行存在较为严重的磨损和缺失,字体笔画不完整等情形,这给我们 OCR 识别算法带来很大挑战。


  • 文本行图像出现弯曲。给出的文本行图像中出现较大比例的弯曲,现今主流文本行识别算法对水平文本识别较为鲁棒,弯曲文本行识别是 OCR 识别业内难点。


  • 标注歧义。给出来的文本行在对应的文本图像中根本不存在、空格标注错误以及形近字标注错误,这给算法的泛化性带来了很大的冲击。


技术方案


算法,数据和算力是推动深度学习往前演进的三驾马车,本小节我们分别就上述三大块进行详细介绍,以及针对 1.2 提到的赛事难点提出我们的解决方案。针对 SROIE 中的文本行识别,首先我们采用 CRNN[7]技术方案,并对 CRNN 中的 Encoder 和 Decoder 部分做了大量分析和比较实验,得到了一个非常不错的 baseline 模型。其次,针对本次文字模糊不清问题,我们生成了近 5000W 的数据集并在该数据集上训练得到一个预训练模型,基于该预训练模型进行 finetune,模型大幅提升了 5.4%。最后针对文本行弯曲问题我们提出了基于 tps+unet 自学习的预处理模块,模型进一步提升了 2.6%。通过以上技术方案的优化我们最终提交的成绩中 Recall,Precision 和 F1 Score 分别达到了 97.68%97.79%97.74%,这 3 个评价指标均排名第一。此外我们还在语言纠错模型、loss 和训练策略的选择上进行了一些方案的探索,给最终模型效果带来了一定的提升。

2.1 CRNN 模型简介


图 2 CRNN 架构图


对于文本识别模型,我们参照 CRNN 将模型的主体分为了两个部分。分别为对图像数据进行特征编码的 Encoder(对应上图中的 CNN 层)以及对文本序列进行解码的 Decoder(对应上图中 Recurrent Layers 和 Transcription Layers)。


对于 Encoder,我们试验了当前 OCR 技术中主流的 MobileNet[8],EfficientNet[9],ResNet[10]等。最终我们选择了在表现与参数量方面都出色的 ResNet 并对不同层的 ResNet 进行了实验。


对于 Decoder,其可进一步分为对图像切片序列到文本序列进行转换的部分与对文本序列进行解码输出的部分。对于第一部分,我们实验了当前主流的序列模型,如 Transformer[11],LSTM[12]等。最终,我们选择了在表现与稳定性方面都更为出色的 BiLSTM[13]。不同于普通的 LSTM,BiLSTM 可以捕捉序列双向的文本信息,该特性与本次比赛数据所呈现出的富有语义的特点相吻合。


对于 Decode 的第二部分,我们实验了 CTC[14]与受时下热门的 Transformer 等模型的启发所推出的 Attention[15]这两种方式。通过实验结果,我们发现了 CTC 在长文本情况下的表现较为出色,而 Attention 对于短文本的处理表现得更为优异。针对本次比赛数据文本长度分布方差大的特点,我们分别尝试了 CTC 与 Attention 两种模型。

2.2 模型优化

2.2.1 数据预处理

本次比赛的数据为文本行图像,其中每条数据的尺寸都有所不同。为此,我们对所有图像的尺寸进行对齐以保证模型输入的一致性。通过对整体数据集的尺寸分布进行分析,我们实验了不同的图像宽高以及 Resize 和 Padding 两种不同的对齐操作。最终采用 Padding 对齐方式,模型的 F1 score 提升 3.2%。

2.2.2 模型前置预处理模块

本次比赛的图像数据具有模糊,对比度低等特点。为此,我们通过对图像进行增强以保证网络输入图像的清晰性。我们选择使用 U-Net[16]网络以自动地学习出适应于整体模型的图像增强方式。通过与传统的图像显著化以及超分辨率网络等方法的对比试验,采用的 U-Net 能自适应的学习出适合网络学习的图像增强方式。


图 3 U-Net 示意图


此外,本次比赛的部分图像在文本行处呈现出了倾斜的特质。相较于水平文本,倾斜文本的识别更具有挑战性。针对这一情况,我们采用了针对倾斜文本进行处理的 TPS 网络[17]。该网络可以预测出 TPS 矫正所需的 K 个基准点,并基于基准点进行 TPS 变换生成采样网格,最后对采样网格进行双线性插值,达到矫正文本的目的。


图 4 TPS 示意图


最终,输入图像数据在经过了 U-Net 自适应增强和 TPS 的矫正后,模型 F1 score 提升 2.6%。

2.2.3 loss 选择

针对文本识别任务形近字很难识别出来的问题,如"0"和"O"。我们采取了 Center Loss[18],该损失函数可通过缩小各分类编码与其所属类别中心的距离以更好地对相似的类别作出区分。使用 Center Loss 后,模型 F1 score 提升 0.6%。

2.2.4 优化器选择

如上文所述,文本行识别模型由多个部分组成,同时每个部分的学习任务从数据领域(图像/文本)到数据格式(单条/序列)都有较大的差别。为此,我们选用了自适应的优化器 Adadelta[19]来解决。在模型使用 Adadelta 训练到收敛后,在冻结了图像处理的 Encoder 参数的情况下,使用收敛较快的 Adam[20]对 Decoder 部分的参数进行进一步的训练。使用上述策略后模型 F1 score 提升 0.3%。

2.3 超大规模数据集预训练模型训练

本次比赛中我们除了使用官方给出的 33626 张训练集外,还通过对各种字体,各个语料类别(数字/名称/语句)以及各个图片风格(磨损/倾斜/划线)的模拟,生成了数据集 5000 万张,使用 20 张 V100 显卡进行分布式训练,基于该预训练模型进行 finetune,模型 F1 score 得到了大幅提升(5.4%),这也是本次比赛我们取得冠军的关键。

2.4 语言纠错模型

首先,我们融合训练 attention 模型和 ctc 模型。对于置信度较低的结果,我们认为识别错误的可能性较大,需要使用语言模型对其纠错。通过 2.5 的 badcase 分析我们可以看出,除了空格识别错误外,还有约 56%的其它错误。因此我们额外训练了一个不含有空格的 attention 识别模型,并使用该模型的识别结果替换原有融合模型置信度较低的识别结果,尽可能避免空格对识别的干扰。然后,我们对 soft-masked bert[21]进行了拓展,在 Bi-GRU[22]错误检测网络中除了预测每个字符为错别字的概率外,还额外增加了该字符后需要添加字符的概率。若预测为错误,我们会根据概率将该字符的 embedding 与<mask>的 embedding 进行线性组合。若预测为添加,则会在该字符后直接添加<mask>的 embedding。在 bert 纠错网络中,我们添加了<null>标签用于标识需要删除的字符。最后,我们基于 badcase 的分析生成了 100 万的训练数据,使用上述策略后,F1 score 提升了 0.7%。


图 5 soft-masked bert 示意图

2.5 badcase 分析

通过采用 2.1~2.4 的策略,我们的模型已经有了很大的提升。通过对验证集上的 badcase 分析,发现主要有如下几种:空格识别错误、等长样本识别错误和不等长样本识别错误。各错误占比情况如图 6,其中空格识别错误占比达到了 44%,其余两种错误分别是等长和不等长错误。以下对上述情形分别介绍并给出我们的解决方案。


图 6 badcase 分布图


第一,空格识别错误即模型没有将空格识别正确或者我们空格识别成其他字符,如下图。针对该情形我们人为地为语料赋予了很多空格。同时,为了解决空格距离的主观性,我们在往语料中插入空格时使用了不定长的空格以让模型学会对空格距离的把控。此外,我们统计了模型预测空格错误结果中空格前后的字符分布,并根据该分布控制空格在语料中插入的位置。


图 7 空格识别示例


第二,等长错误即模型识别出来的结果与 GT 等长,但是存在部分字符识别错误情形,占比达总识别错误的 33%,这类错误主要还是集中在形近字很难正确识别情形,如下图。GT 为“1 Small Cone”,我们的模型识别为“1 Small C0ne”。为了解决这类成对的字符预测错误,我们统计了字符集合中常见的难区分字符对以及我们的模型所预测错误的字符对。通过成对的形式,我们将一条语料中的部分字符替换为其难分字符对中的字符,如"a0c"与"aOc",并将替换前与替换后的语料都加入我们的数据集中。通过成对的加入难区分字符语料,我们的模型预测结果大幅减少了字符分错的情况。此外,我们发现由于本次数据的文本行在裁剪时左右留白较少,这导致模型预测结果容易在开头与结尾处出错。为此,我们在选取替换字符时会加大开头与结尾位置的权重。


图 8 等长识别错误


第三,不等长错误即模型识别出来的结果与 GT 不等长。这里面主要集中在标注错误、文本行过长和样本极不均衡导致。针对文本行过长问题,我们对部分语料选取少量字符进行人为的重复并输入到模型训练,以此让模型获得一定的去重能力。针对类别不均衡问题,我们在生成语料抽取字符时,对低频字符赋予了更大的权重,高低频字符的出现比率提升到了 10:1,更符合实际环境下的语料情况。

总结与展望

计算机视觉在金融领域的应用主要包括人脸识别、活体检测、OCR、AI 数字人和图像篡改等。通过本次挑战赛在某种程度上验证了我们 OCR 算法的有效性,以及对我们现有算法进行查漏补缺。目前 OCR 在 360 数科内部落地的业务场景主要包括学历认证、执业证书认证、票据识别、行驶证识别、驾驶证识别和营业执照等,另外我们还针对上述业务场景开发了配套的图像反欺诈识别算法。展望未来,计算机视觉团队将持续跟进业内最新动态以保持技术的先进性,来更好的服务公司业务团队。


引用

[1] Huang Z, Chen K, He J, et al. Icdar2019 competition on scanned receipt ocr and information extraction[C]//2019 International Conference on Document Analysis and Recognition (ICDAR). IEEE, 2019: 1516-1520.

[2] Y. Sun, J. Liu, W. Liu, J. Han, E. Ding, “Chinese Street View Text: Large-scale Chinese Text Reading with Partially Supervised Learning”, in Proc. of ICCV 2019.

[3] Ali Furkan Biten, Ruben Tito, Andres Mafla, Lluis Gomez, Marçal Rusiñol, Ernest Valveny, C.V. Jawahar, Dimosthenis Karatzas, "Scene Text Visual Question Answering", ICCV 2019.

[4] C. Chng, Y. Liu, Y. Sun, et al, “ICDAR 2019 Robust Reading Challenge on Arbitrary-Shaped Text-RRC-ArT”, in Proc. of ICDAR 2019.

[5] Zhang R, Zhou Y, Jiang Q, et al. Icdar 2019 robust reading challenge on reading chinese text on signboard[C]//2019 international conference on document analysis and recognition (ICDAR). IEEE, 2019: 1577-1581.

[6] Nayef N, Patel Y, Busta M, et al. ICDAR2019 robust reading challenge on multi-lingual scene text detection and recognition—RRC-MLT-2019[C]//2019 International conference on document analysis and recognition (ICDAR). IEEE, 2019: 1582-1587.

[7] Shi, Baoguang, Xiang Bai, and Cong Yao. "An end-to-end trainable neural network for image-based sequence recognition and its application to scene text recognition." IEEE transactions on pattern analysis and machine intelligence 39.11 (2016): 2298-2304.

[8] Howard A G, Zhu M, Chen B, et al. Mobilenets: Efficient convolutional neural networks for mobile vision applications[J]. arXiv preprint arXiv:1704.04861, 2017.

[9] Tan M, Le Q. Efficientnet: Rethinking model scaling for convolutional neural networks[C]//International conference on machine learning. PMLR, 2019: 6105-6114.

[10] He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

[11] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.

[12] Graves A. Long short-term memory[J]. Supervised sequence labelling with recurrent neural networks, 2012: 37-45.

[13] Zhang, Shu, et al. "Bidirectional long short-term memory networks for relation classification." Proceedings of the 29th Pacific Asia conference on language, information and computation. 2015.

[14] Graves A. Connectionist temporal classification[M]//Supervised sequence labelling with recurrent neural networks. Springer, Berlin, Heidelberg, 2012: 61-93.

[15] Sun, Chao, et al. "A convolutional recurrent neural network with attention framework for speech separation in monaural recordings." Scientific Reports 11.1 (2021): 1-14.

[16] Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. "U-net: Convolutional networks for biomedical image segmentation." International Conference on Medical image computing and computer-assisted intervention. Springer, Cham, 2015.

[17] Shi, Baoguang, et al. "Robust scene text recognition with automatic rectification." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

[18] Wen, Yandong, et al. "A discriminative feature learning approach for deep face recognition." European conference on computer vision. Springer, Cham, 2016.

[19] Zeiler, Matthew D. "Adadelta: an adaptive learning rate method." arXiv preprint arXiv:1212.5701 (2012).

[20] Kingma D P, Ba J. Adam: A method for stochastic optimization[J]. arXiv preprint arXiv:1412.6980, 2014.

[21] Zhang S, Huang H, Liu J, et al. Spelling error correction with soft-masked BERT[J]. arXiv preprint arXiv:2005.07421, 2020.

[22] Wang Q, Xu C, Zhou Y, et al. An attention-based Bi-GRU-CapsNet model for hypernymy detection between compound entities[C]//2018 IEEE International Conference on Bioinformatics and Biomedicine (BIBM). IEEE, 2018: 1031-1035.

 

2022 年 6 月 22 日 11:301

评论

发布
暂无评论
发现更多内容

面试官问我什么是扩展自适应机制

Java 程序员 后端

双十一揭秘 1 :如何保证流量激发的时候不宕机?

青云技术社区

云计算 PaaS SaaS 云平台

2021年11月数据库排行解读:openGauss跃居第三,人大金仓晋身前十

墨天轮

MySQL 数据库 oracle TiDB 国产数据库

首全网发!2021最新版字节面经刷题笔记,已霸榜GitHub

Java 程序员 后端

高可用延迟队列设计与实现

Java 程序员 后端

面试官:Java-线程池中的线程复用是如何实现的?

Java 程序员 后端

面试官:小伙子你给我说说MySql并发事务处理细节

Java 程序员 后端

高并发负载均衡:网络协议原理(三)

Java 程序员 后端

面试官再问分布式事务,求你看完这份至尊级分布式笔记,给年轻的面试官上一课

Java 程序员 后端

面试官:小伙子先来说一下可能引起Java内存泄露的场景吧

Java 程序员 后端

面试被问Tomcat整体架构设计,我哭的像个孩子

Java 程序员 后端

面试过阿里的P7大佬分享:180+道Java面试题目!含答案解析!

Java 程序员 后端

面试官求你别再问我hook了

CRMEB

面试官最喜欢问的Spring Boot知识点整理【附解答】(下)

Java 程序员 后端

面试官:多线程环境下,HashMap为什么会出现死循环?

Java 程序员 后端

面试官:如何提升TCP三次握手的性能?(1)

Java 程序员 后端

面试官:如何提升TCP三次握手的性能?

Java 程序员 后端

面试时通过volatile关键字,全面展示线程内存模型的能力

Java 程序员 后端

面试官一口气问了MySQL事务、锁和MVCC,

Java 程序员 后端

面试官都爱问的Spring源码:Spring与Mybatis高级整合

Java 程序员 后端

面试官:你如何利用-MySQL-Cluster-实现整体高可用?

Java 程序员 后端

面试官:数据库自增 ID 用完了会咋样?

Java 程序员 后端

面试被吊打系列:气得我直接把简历上的精通数据库给删掉了

Java 程序员 后端

高并发下Mysql主从延迟处理方案

Java 程序员 后端

面试官:数据库自增 ID 用完了会咋样?(1)

Java 程序员 后端

高可用RabbitMQ集群的搭建及原理分析

Java 程序员 后端

面试官:小伙子我们先来唠唠并发编程的几大核心知识点

Java 程序员 后端

面试官:谈谈你对线程池的理解

Java 程序员 后端

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

Java 程序员 后端

面试:第六章:面试题收集

Java 程序员 后端

项目构建系统之 Maven

Java 程序员 后端

面向体验的视频云-火山引擎增长沙龙

面向体验的视频云-火山引擎增长沙龙

夺得ICDAR OCR竞赛世界第一,360数科文本识别技术分享_AI_360数科数据智能部_InfoQ精选文章