端到端的OCR版面分析算法

OCR版面分析痛点

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

ocr输出

算法设计初衷

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

数据增广策略

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

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

增广效果

两种端到端的方案

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

  • 编码方案
    • 文本使用doc2vec无监督训练句向量50dim(可选)
    • 文本的数字比例、英文比例、符号比例、其他比例4dim
    • box坐标点8dim
  • 模型输出
    • onehot编码

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

  • 编码方案
    • 文本使用doc2vec无监督训练句向量100dim
    • box坐标点因为维度过小,做了维度拉伸8dim*8
  • 模型输出
    • onehot编码
  • 模型修改
    • 不用teacher forcing
    • 解码输入: 对应Box编码 + Attention向量

结语

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