端到端的票据类版面分析算法(一)

OCR版面分析痛点

当前OCR之后的版面分析工作大家都是规则写的,自己也深受规则之苦,看到ocr输出的一大堆文字和坐标就头皮发麻。最近受了chineseocr作者模板引擎的启发,做了两个端到端的版面分析算法,希望能够帮到各位ocrer。github

ocr输出

算法设计初衷

最开始的想法是在检测网络上增加类别判断,预测位置的同时加上box类别的判断,但是这样通用性就大大降低了,违背不干预原始的OCR算法的初衷,版面分析的算法应该和OCR算法无缝衔接,所以模型输入应该是OCR输出的box坐标和相应文本。
基于此,延伸出两个思路,一个是忽略box间的位置关系,直接将box坐标和文本编码,送入分类器,即基于xgboost的分类方案。另一个考虑box间的相互关系,将版面分析当成一种翻译任务,即基于seq2seq的翻译方案

数据增广策略

其次标注数据不能太多,如果标注投入过大就有些得不偿失了,算法设计初衷就是希望只标注一些具有代表性的版面,因此增广策略就显得特别重要。增广策略有以下几条:

  • 随机扰动检测框坐标点1~3个像素
  • 随机切分检测框,并随机拆分文本
  • 随机替换 数字、日期等文本内容
  • 随机丢弃3~5检测框
    aug

两种端到端的方案

1、基于xgboost的版面分析算法

  • 编码方案
    • 1)文本使用doc2vec无监督训练句向量50dim(可选)
      将OCR识别后的文本收集起来加上外部数据可以利用gensim的doc2vec训练一个该版面的句向量,也曾尝试用字向量做加权平均,但是感觉上会丢失信息,后续会补上相关实验。向量为度选取50dim,这样每个box的文本都可以编码为50dim的向量。在实验过程中,发现基于机器学习的方法比较吃人工特征,加上句向量后提升大约0.5个点。所以该项是可选项。
    • 2)文本的数字比例、英文比例、符号比例、其他比例4dim
      这部分算是特征工程吧,统计每个单元格数字占比、英文占比、符号占比、其他字符占比一共四个维度信息。还可以根据自身业务提取更多人工特征信息
    • 3)box坐标点8dim
      文字检测输出的四边形,一共四个顶点,8个数值
    • 4)三个类别信息相拼,一共50+4+8=62维信息,作为模型输入
  • 模型输出
    每个格子按照业务需求进行类别划分,将解析问题转化为分类问题。需要注意的是总的类别数需要加1,比如:本次任务一共有18个关键字段,本来是一个18类别的分类问题,但是还需要加上一个无效类别(即干扰项),一共19个类别。
  • 模型选择
    既然是分类问题,可选的方案就很多,线性回归、随机森林、SVM等,这里只尝试了xgboost,大家可以在自己的业务场景多多尝试。鉴于传统机器学习代码过于简单,sklearn几行就可以搞定,这里就不提供开源代码了。

2、基于seq2seq的版面分析算法

刚开始想既然考虑格子的位置关系,那不是用图更合适,最近也有人开源了PICK,正要去尝试,作者撤销了代码,而且工业中基于图的算法应用不多。后来灵机一动,lstm不也是一种图么,只不过是线性图,要做的就是把box拉伸排序成线性,不就可以解决了么, 自然而然的想到了seq2seq,绝配!

  • 编码方案
    • 1)文本编码方案同xgboost,只不过维度增加为100维
    • 2)box坐标点因为维度过小,做了维度拉伸,8个坐标点暴力复制8遍
    • 3)最终每个格子的编码为100+8*8=164维度
    • 4)需要注意的是,xgboost是每一个格子当作一个训练样本模型输入维度为1维(62),seq2seq是整版的格子当作一个训练样本。在发票场景中,整版格子不超过100,所以选取100为最长输入序列,一个样本的维度为2维(100*164)
  • 模型输出
    • 同xgboost
  • seq2seq模型修改
    • 1)不用teacher forcing的训练方式
      最开始尝试的时候,一直使用基于teacher forcing的训练方式,这可是seq2seq的标配,试的过程一直不收敛,一直以为是数据量小的问题。后来抱着试试的想法,把teacher forcing干掉了,索性把上一个格子的类别替换成当前格子编码,损失下降嗖嗖的。想想也是,翻译的时候前一个字对后一个字影响很大,这个场景中依赖就没那么大了,对类别判断影响比较大的是位置信息和文字信息,歪打正着。
    • 2)去除起始符和终止符
      在翻译的场景因为不知道第一个字如何开始,所以加入了起始符号,但是版面分析中是可以提供原始信息的,因此删除了这两个占位符。(可以保留终止符,减少不必要计算)
    • 3) 模型结构示意图
      seq2seq

结语

两种方案目前在发票的版面分析中都取得了不错的结果,其中xgboost的方案在版式比较固定的时候表现比较适用,seq2seq的方案在任意拍照场景中比较适用。需要注意的是,如果文字检测把一些无关的文字和关键字段框到一起的话,还需要稍微做些后处理。

  • 18
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值