language version
    智能前台
    智能前台

    360数科夺得OCR国际技术竞赛冠军商超小票文本行识别如何做

    时间:2022-07-10 01:08:36 | 作者:华体会网页链接 | 来源:华体会官方

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

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

      ICDAR 竞赛因其极高技术难度和强大实用性,一直是各大科研院校、科技公司的竞逐焦点,吸引国内外众多队伍参赛。

      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]。

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

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

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

      算法、数据和算力是推动深度学习往前演进的三驾马车,本小节我们分别就上述三大块进行详细介绍,以及针对 1.2 提到的赛事难点提出相应的解决方案。

      针对 SROIE 中的文本行识别,我们首先采用 CRNN [7] 技术方案,并对 CRNN 中的 Encoder 和 Decoder 部分做了大量分析和比较实验,得到了一个非常不错的 baseline 模型。

      其次,针对本次文字模糊不清问题,我们生成了近 5000W 的数据集并在该数据集上训练得到一个预训练模型,基于该预训练模型进行 finetune,模型大幅提升了 5.4%。最后针对文本行弯曲问题,我们提出了基于 tps+unet 自学习的预处理模块,模型进一步提升了 2.6%。

      此外,我们还在语言纠错模型、loss 和训练策略的选择上进行了一些方案的探索,给最终模型效果带来了一定的提升。

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

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

      针对本次比赛数据文本长度分布方差大的特点,我们分别尝试了 CTC 与 Attention 两种模型。

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

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

      此外,本次比赛的部分图像在文本行处呈现出了倾斜的特质。相较于水平文本,倾斜文本的识别更具有挑战性。

      针对这一情况,我们采用了针对倾斜文本进行处理的 TPS 网络 [17]。该网络可以预测出 TPS 矫正所需的 K 个基准点,并基于基准点进行 TPS 变换生成采样网格,最后对采样网格进行双线性插值,达到矫正文本的目的。图 4:TPS 示意图。

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

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

      如上文所述,文本行识别模型由多个部分组成,同时每个部分的学习任务从数据领域 (图像 / 文本) 到数据格式 (单条 / 序列) 都有较大的差别。

      为此,我们选用了自适应优化器 Adadelta [19] 来解决。在模型使用 Adadelta 训练到收敛后,在冻结了图像处理的 Encoder 参数的情况下,使用收敛较快的 Adam [20] 对 Decoder 部分的参数进行进一步的训练。使用上述策略后模型 F1 score 提升 0.3%。

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

      首先,我们融合训练 attention 模型和 ctc 模型。对于置信度较低的结果,我们认为识别错误的可能性较大,需要使用语言模型对其纠错。通过 2.5 的 badcase 分析,我们可以看出,除了空格识别错误外,还有约 56% 的其它错误。因此,我们额外训练了一个不含有空格的 attention 识别模型,并使用该模型的识别结果替换原有融合模型置信度较低的识别结果,尽可能避免空格对识别的干扰。

      然后,我们对 soft-masked bert [21] 进行了拓展,在 Bi-GRU [22] 错误检测网络中除了预测每个字符为错别字的概率外,还额外增加了该字符后需要添加字符的概率。若预测为错误,我们会根据概率将该字符的 embedding 与 mask 的 embedding 进行线性组合。若预测为添加,则会在该字符后直接添加 mask 的 embedding。在 bert 纠错网络中,我们添加了 null 标签用于标识需要删除的字符。

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

      第一,空格识别错误即模型没有将空格识别正确或者我们空格识别成其他字符,如下图。针对该情形我们人为地为语料赋予了很多空格。同时,为了解决空格距离的主观性,我们在往语料中插入空格时使用了不定长的空格以让模型学会对空格距离的把控。

      此外,我们统计了模型预测空格错误结果中空格前后的字符分布,并根据该分布控制空格在语料中插入的位置。

      第二,等长错误即模型识别出来的结果与 GT 等长,但是存在部分字符识别错误情形,占比达总识别错误的 33%,这类错误主要还是集中在形近字很难正确识别情形,如下图。GT 为 “1 Small Cone”,我们的模型识别为 “1 Small C0ne”。

      为了解决这类成对的字符预测错误,我们统计了字符集合中常见的难区分字符对以及我们的模型所预测错误的字符对。通过成对的形式,我们将一条语料中的部分字符替换为其难分字符对中的字符,如 a0c 与 aOc,并将替换前与替换后的语料都加入我们的数据集中。

      通过成对地加入难区分字符语料,我们的模型预测结果大幅减少了字符分错的情况。此外,我们发现由于本次数据的文本行在裁剪时左右留白较少,这导致模型预测结果容易在开头与结尾处出错。为此,我们在选取替换字符时会加大开头与结尾位置的权重。

      第三,不等长错误即模型识别出来的结果与 GT 不等长。这里面主要集中在标注错误、文本行过长和样本极不均衡导致。

      针对文本行过长问题,我们对部分语料选取少量字符进行人为的重复并输入到模型训练,以此让模型获得一定的去重能力。

      针对类别不均衡问题,我们在生成语料抽取字符时,对低频字符赋予了更大的权重,高低频字符的出现比率提升到了 10:1,更符合实际环境下的语料情况。

      计算机视觉在金融领域的应用主要包括人脸识别、活体检测、OCR、AI 数字人和图像篡改等。通过本次挑战赛在某种程度上验证了我们 OCR 算法的有效性,以及对我们现有算法进行查漏补缺。

      目前 OCR 在 360 数科内部落地的业务场景主要包括学历认证、执业证书认证、票据识别、行驶证识别、驾驶证识别和营业执照等,还针对上述业务场景开发了配套的图像反欺诈识别算法。展望未来,计算机视觉团队将持续跟进业内最新动态以保持技术的先进性,来更好的服务公司业务团队。

      原标题:《360数科夺得OCR国际技术竞赛冠军,商超小票文本行识别如何做到最佳?》

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

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

      ICDAR 竞赛因其极高技术难度和强大实用性,一直是各大科研院校、科技公司的竞逐焦点,吸引国内外众多队伍参赛。

      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]。

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

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

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

      算法、数据和算力是推动深度学习往前演进的三驾马车,本小节我们分别就上述三大块进行详细介绍,以及针对 1.2 提到的赛事难点提出相应的解决方案。

      针对 SROIE 中的文本行识别,我们首先采用 CRNN [7] 技术方案,并对 CRNN 中的 Encoder 和 Decoder 部分做了大量分析和比较实验,得到了一个非常不错的 baseline 模型。

      其次,针对本次文字模糊不清问题,我们生成了近 5000W 的数据集并在该数据集上训练得到一个预训练模型,基于该预训练模型进行 finetune,模型大幅提升了 5.4%。最后针对文本行弯曲问题,我们提出了基于 tps+unet 自学习的预处理模块,模型进一步提升了 2.6%。

      此外,我们还在语言纠错模型、loss 和训练策略的选择上进行了一些方案的探索,给最终模型效果带来了一定的提升。

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

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

      针对本次比赛数据文本长度分布方差大的特点,我们分别尝试了 CTC 与 Attention 两种模型。

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

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

      此外,本次比赛的部分图像在文本行处呈现出了倾斜的特质。相较于水平文本,倾斜文本的识别更具有挑战性。

      针对这一情况,我们采用了针对倾斜文本进行处理的 TPS 网络 [17]。该网络可以预测出 TPS 矫正所需的 K 个基准点,并基于基准点进行 TPS 变换生成采样网格,最后对采样网格进行双线性插值,达到矫正文本的目的。图 4:TPS 示意图。

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

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

      如上文所述,文本行识别模型由多个部分组成,同时每个部分的学习任务从数据领域 (图像 / 文本) 到数据格式 (单条 / 序列) 都有较大的差别。

      为此,我们选用了自适应优化器 Adadelta [19] 来解决。在模型使用 Adadelta 训练到收敛后,在冻结了图像处理的 Encoder 参数的情况下,使用收敛较快的 Adam [20] 对 Decoder 部分的参数进行进一步的训练。使用上述策略后模型 F1 score 提升 0.3%。

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

      首先,我们融合训练 attention 模型和 ctc 模型。对于置信度较低的结果,我们认为识别错误的可能性较大,需要使用语言模型对其纠错。通过 2.5 的 badcase 分析,我们可以看出,除了空格识别错误外,还有约 56% 的其它错误。因此,我们额外训练了一个不含有空格的 attention 识别模型,并使用该模型的识别结果替换原有融合模型置信度较低的识别结果,尽可能避免空格对识别的干扰。

      然后,我们对 soft-masked bert [21] 进行了拓展,在 Bi-GRU [22] 错误检测网络中除了预测每个字符为错别字的概率外,还额外增加了该字符后需要添加字符的概率。若预测为错误,我们会根据概率将该字符的 embedding 与 mask 的 embedding 进行线性组合。若预测为添加,则会在该字符后直接添加 mask 的 embedding。在 bert 纠错网络中,我们添加了 null 标签用于标识需要删除的字符。

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

      第一,空格识别错误即模型没有将空格识别正确或者我们空格识别成其他字符,如下图。针对该情形我们人为地为语料赋予了很多空格。同时,为了解决空格距离的主观性,我们在往语料中插入空格时使用了不定长的空格以让模型学会对空格距离的把控。

      此外,我们统计了模型预测空格错误结果中空格前后的字符分布,并根据该分布控制空格在语料中插入的位置。

      第二,等长错误即模型识别出来的结果与 GT 等长,但是存在部分字符识别错误情形,占比达总识别错误的 33%,这类错误主要还是集中在形近字很难正确识别情形,如下图。GT 为 “1 Small Cone”,我们的模型识别为 “1 Small C0ne”。

      为了解决这类成对的字符预测错误,我们统计了字符集合中常见的难区分字符对以及我们的模型所预测错误的字符对。通过成对的形式,我们将一条语料中的部分字符替换为其难分字符对中的字符,如 a0c 与 aOc,并将替换前与替换后的语料都加入我们的数据集中。

      通过成对地加入难区分字符语料,我们的模型预测结果大幅减少了字符分错的情况。此外,我们发现由于本次数据的文本行在裁剪时左右留白较少,这导致模型预测结果容易在开头与结尾处出错。为此,我们在选取替换字符时会加大开头与结尾位置的权重。

      第三,不等长错误即模型识别出来的结果与 GT 不等长。这里面主要集中在标注错误、文本行过长和样本极不均衡导致。

      针对文本行过长问题,我们对部分语料选取少量字符进行人为的重复并输入到模型训练,以此让模型获得一定的去重能力。

      针对类别不均衡问题,我们在生成语料抽取字符时,对低频字符赋予了更大的权重,高低频字符的出现比率提升到了 10:1,更符合实际环境下的语料情况。

      计算机视觉在金融领域的应用主要包括人脸识别、活体检测、OCR、AI 数字人和图像篡改等。通过本次挑战赛在某种程度上验证了我们 OCR 算法的有效性,以及对我们现有算法进行查漏补缺。

      目前 OCR 在 360 数科内部落地的业务场景主要包括学历认证、执业证书认证、票据识别、行驶证识别、驾驶证识别和营业执照等,还针对上述业务场景开发了配套的图像反欺诈识别算法。展望未来,计算机视觉团队将持续跟进业内最新动态以保持技术的先进性,来更好的服务公司业务团队。

      原标题:《360数科夺得OCR国际技术竞赛冠军,商超小票文本行识别如何做到最佳?》

    姓名:*
    手机:*
    邮箱:
    留言内容:*
    验证码*
      
    智能门锁
    show more
    更多产品
    show more