技术探秘: 360数科夺得ICDAR OCR竞赛世界第一

ICDAR(国际文档分析与识别会议)是OCR识别领域最权威的会议之一。近期,360数科在ICDAR2019-SROIE(Results - ICDAR 2019 Robust Reading Challenge on Scanned Receipts OCR and Information Extraction - Robust Reading Competition) 榜单上斩获第一。

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 赛事难点

  1. 文本行字体模糊不清。官方给出的比赛数据集,均来自商超结算小票扫描图像,由于小票均为机打且存放时间过长,导致扫描出来的文本行存在较为严重的磨损和缺失,字体笔画不完整等情形,这给我们OCR识别算法带来很大挑战。
  1. 文本行图像出现弯曲。给出的文本行图像中出现较大比例的弯曲,现今主流文本行识别算法对水平文本识别较为鲁棒,弯曲文本行识别是OCR识别业内难点。
  1. 标注歧义。给出来的文本行在对应的文本图像中根本不存在、空格标注错误以及形近字标注错误,这给算法的泛化性带来了很大的冲击。
  1. 技术方案

算法,数据和算力是推动深度学习往前演进的三驾马车,本小节我们分别就上述三大块进行详细介绍,以及针对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,更符合实际环境下的语料情况。

  1. 总结与展望

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

  1. 引用

[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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生时代,软件交付有何不同 | 研发效能提升36计

简介&#xff1a;从今天起&#xff0c;我们将开启一个新的专栏&#xff1a;《研发效能提升36计_持续交付篇》。专栏将通过10-20篇文章&#xff0c;系统分享云原生时代&#xff0c;企业如何落地持续交付。 编者按&#xff1a;从今天起&#xff0c;我们将开启一个新的专栏&#…

php 获取字符串完整拼音,PHP 获取中文字符串的首字符拼音字母

class"php"><?php header(Content-Type: text/html; charsetutf-8);$str"阅谁问君诵&#xff0c;水落清香浮";echo getFirstCharCode($str);function getFirstCharCode($str){$str iconv("UTF-8","gb2312", $str);$targetChar*…

IT人的年夜饭,也太香了吧

简介&#xff1a; 平时的IT人&#xff0c;奋战在修复bug前线&#xff0c;起早与贪黑齐飞&#xff0c;调休共假期待定。到了新春佳节&#xff0c;对于IT人来说&#xff0c;没有什么是比一顿年夜饭更让人熨贴肺腑的了。为了让废寝忘食编程序、闻机起早保运维的IT人过一个安稳的好…

小红书消息中间件的运维实践与治理之路

简介&#xff1a;近年来&#xff0c;消息领域的全面云原生化逐渐走向深入&#xff0c;比如 RocketMQ 5.0 版本的存算分离设计和 raft 模式&#xff0c;再比如 Kafka3.0 引入了分层设计的方式&#xff08;tiered storage&#xff09;和 raft 模式&#xff0c;以及近年来新崛起的…

爆测一周,22年必看最细致代码托管工具测评

简介&#xff1a;网上代码托管选型的文章不少&#xff0c;不过大多内容有点久远&#xff0c;很多最新的平台没有包括进来&#xff0c;个人花了大概一个星期的时间&#xff0c;把目前市面上比较火的代码托管平台&#xff08;开源托管平台&#xff1a;Github、Gitee&#xff1b;企…

read 文件一个字节实际会发生多大的磁盘IO?

作者 | 张彦飞allen来源 | 开发内功修炼在日常开发中一些看似司空见惯的问题上&#xff0c;我觉得可能大多数人其实并没有真正理解&#xff0c;或者理解的不够透彻。不信我们来看以下一段简单的读取文件的代码&#xff1a;上图中的代码仅仅只是对某个文件读取了一个字节&#x…

【指标需求思考】如何做好指标类需求建设

简介&#xff1a;大家一直所说的【需求】究竟有哪些&#xff1f;用户需求、业务需求、系统需求...... 但是今天我要给大家介绍一种我自认为一种别出心裁的需求&#xff01;【指标类需求】在庞大的需求体系里&#xff0c;一个完整的系统设计流程是非常必要的&#xff0c;好则效率…

oracle 12c 低版本,oracle高版本迁移数据到低版本(12c至11g)方法

1.12c版本信息&#xff1a;2.11g版本信息&#xff1a;3.查看12c的字符集编码&#xff1a;select userenv(language) from dual;要迁移的两个数据库字符集编码要保持一致。如果不一致请手工修改&#xff0c;修改方法另行百度。4.查看11g数据库字符集编码&#xff1a;5.查看12c数…

构建信创产业生态,移动云立足全栈自主创新连放大招

信创&#xff0c;即信息技术应用创新&#xff0c;它是数据安全、网络安全的基础&#xff0c;也是“新基建”的重要内容。在国际信息安全形势严峻、国家安全需要和数智时代新要求三重因素作用下&#xff0c;信创生态应运而生。进入2022年&#xff0c;云计算将成为信创主要落地方…

游戏行业搜索实践

简介&#xff1a;本文通过游戏行业客户案例带大家了解游戏内容&#xff0c;游戏论坛等场景搜索特性&#xff0c;以及如何通过开放搜索游戏增强版解决方案轻松快速接入,实现高质量搜索效果,提升业务指标和用户体验。 客户背景 国内知名的文化社区和视频平台&#xff0c;其游戏…

序列特征在推荐算法中的应用

简介&#xff1a;行为序列特征在推荐&#xff0c;广告等领域中有着广泛应用&#xff0c;最近几年涌现了很多有关行为序列的研究论文&#xff0c;讲解如何将行为序列应用到实际场景中。但是论文中的实际思想距离落地还有一段距离&#xff0c;因此本文先介绍一些论文中的序列特征…

BlackBerry 软件全球现已部署超过2.15亿辆汽车

BlackBerry近日宣布&#xff0c;据知名独立调研公司Strategy Analytics统计&#xff0c;目前全球已有超过2.15亿辆汽车搭载BlackBerry QNX软件&#xff0c;较2021年增加了2,000万辆。 作为获得安全认证的嵌入式汽车软件市场领导者&#xff0c;BlackBerry深受众多业内汽车制造商…

从托管到原生,MPP架构数据仓库的云原生实践

简介&#xff1a;本文介绍了云原生数据仓库产品AnalyticDB PostgreSQL从Cloud-Hosted到Cloud-Native的演进探索&#xff0c;探讨为了实现真正的资源池化和灵活售卖的底层设计和思考&#xff0c;涵盖内容包括产品的架构设计&#xff0c;关键技术&#xff0c;性能结果&#xff0c…

做到这4点,才是真正的持续交付| 研发效能提升36计

简介&#xff1a;全线专栏《研发效能提升36计_持续交付篇》上线啦&#xff01;本专栏将通过10-20篇文章&#xff0c;系统分享云原生时代&#xff0c;企业如何落地持续交付。本文是该专栏的第2篇。 什么是真正的持续交付&#xff1f; 编者按&#xff1a;全线专栏《研发效能提升…

oracle打patch,Oracle初学者入门指南-How to get Oracle Patch?

Oracle初学者入门指南-How to get Oracle Patch?怎样获得/找到Oracle的Patch&#xff0c;这是一个朋友在Itpub上问到的问题。他还举了一个生动的例子:比如我要使用oracle的全文检索功能&#xff0c;但是这个全文检索在9201里不支持中文&#xff0c;中文的无法检索&#xff0c;…

e签宝:借助钉钉宜搭变革传统项目管理模式,交付效率显著提升

简介&#xff1a;通过钉钉宜搭&#xff0c;e签宝在半个月内搭建了项目交付管理平台&#xff0c;提升了项目管理的效率和质量&#xff0c;推进了团队核心业务的信息化建设。e签宝在有效梳理了各环节的工作进度、质量、成本、职权后&#xff0c;通过宜搭平台保障了内外通畅&#…

24 张图一次性说清楚 TCP

来源 | 杰哥的IT之旅做IT相关的工作&#xff0c;肯定都离不开网络&#xff0c;网络中最重要的协议是TCP。无论是实际工作还是笔试面试&#xff0c;你看哪里能少得了TCP?我看过RFC中与TCP相关的文档&#xff0c;也看过linux中TCP相关的源码&#xff0c;也看过不少框架中的TCP相…

php 实例化模型出错,实例化model出错了

我是按照老师所说的做的。在function user 中写入了这些<?php namespace Home\Controller;use Think\Controller;class IndexController extends Controller {public function index(){//省略了}public function user(){//其实新版的url应该这么写&#xff1a;http://www.t…

作业帮基于 DeltaLake 的数据湖建设实践

简介&#xff1a;作业帮是一家以科技为载体的在线教育公司&#xff0c;其大数据中台作为基础系统中台&#xff0c;主要负责建设公司级数仓&#xff0c;向各个产品线提供面向业务主题的数据信息。本文主要分享了作业帮基于 DeltaLake 的数据湖建设最佳实践。 作者&#xff1a; 刘…

iLogtail 与Filebeat 性能对比

简介&#xff1a;前段时间, iLogtail 阿里千万实例可观测采集器开源&#xff0c;其中介绍了iLogtail采集性能可以达到单核100MB/s&#xff0c;相比开源采集Agent有5-10倍性能优势。很多小伙伴好奇iLogtail具体的性能数据和资源消耗如何&#xff0c;本文将针对目前业界使用度较高…