OCR-文字识别(CTC/RNN+Attention)调整汇总

共 1591字,需浏览 4分钟

 ·

2022-02-09 17:41

任务场景

用户上传的药品清单,诊断报告,医疗票据,保险单等,其中药品清单的任务最重,数字准确度要求极高,医疗票据的整体难度最高,字的颜色,不全,印章,水印,重叠现象较为严重

base模型:

CNN+RNN+(CTC或RNN+Attention常见问题:

1.数据量较小,而类别数较大(中文)

2.数据平衡较差

3.CTC结构的尖峰效应,RNN-Attention的长序列效果较差

问题分析

1,2属于数据采集问题

关于3,CTC的结构虽然通过DP的运算,比如图1中的a,输出可以为(a,-,-),(a,a,-),(-,a,-),(-,a,a),(-,-,a),(a,a,a),模型的损失会要求事件熵最小最高,这几种情况概率最高

图1

在CNN中提取的是每一个目标的局部,而每一个字的局部不一定很相似,比如a的前半部分和后半部分的差距较大,并且不同字的局部的相似度也可能较高,虽然CNN的模型可以提高局部的感受野大小,每一个部分在模型中都均有8*32(w*h)的感受野,也不足以覆盖全部的信息,如果调整到32*32的感受野,在一个感受野中存在多个数字和部分英文字母,字符等目标

并且CNN的结构天然会导致对于某一个特征像素的信息来源自图片中心的信息比边缘结构高,除非保证每一个filter的步长和大小相同,保持相同后CNN每一次的特征的细小平移都会导致模型的崩溃,模型都需要重新学习,需要学习的处理方式与size相同,所以CNN结构保持重复采样可以加速模型的学习

虽然DP中很多种路径都可以得到正确的结果,但CNN的上下文预测预测独立,CNN的每一个位置输出都只能是一个值,最终只有一条路径的概率最大,由于类间距离较小,类内距离较大,会导致部分局部位置都被当作-进行处理,会导致很多情况都会是(a,-,-),(-,a,-),(-,-,a),分解面只包含单字最有特色的区域作为边界,每一个类别在源空间中只占有很小中心的一块,其他部分都为-,从而造成尖峰效应

而RNN可以混合上下文信息,可以帮助当前输出位置判断类别,可以让当前输出位置得到全部字的信息,RNN的记忆结构中虽然混合了很多其他位置的信息,通过记忆力的衰减,也能够保证近的信息占比较大,而且模型的输出多样化也是被接受的,而且RNN训练也比较难,比较慢,CNN训练完成后,RNN没有训练完成,而此时保持当前的信息,最终的结果也符合预期,即当只有一个a,其他全为-时,即要求一个和其他类别最不相似的结构为p(a)=1,其他的全为p(-)=1,此时的熵也会最小,所以当两者混合训练时,RNN的结构的影响较小,最终模型会落入CNN的作用的结果中

而在RNN-Attention结构中,RNN结构可以通过Attention对所有局部信息进行提取,一次预测的信息包含对象的全部信息,但是在字间时,序列本身无法提供充足的上下文信息,每一次的上下文都可能存在变化,比如数字,除了0以外不可以随意组合,其他的都可以随意组合,上下文的变化,导致RNN基于上下文推理的方式变得十分困难,导致在短序列情况下,RNN勉强可以进行推理,但是当序列较长时,推理就会失败

解决方案:

针对1:

1)数据增强

2)仿真样本

仿真样本是模拟真实场景的有效方法,虽然最终与真实场景有一定差距,但是在极度缺少数据的情况下,也是一种有效提高样本量的方式

仿真样本有两种生成方式:

标准字体+真实背景

通过网上找到的诊断报告等作为生成的序列,加上随机生成的单字段作为补充,保证数据平衡,生成2000W单字量后进行训练,单字长度限制在30以下,CTC在93~0.5,RNN+Attention结构在92~0.5

GAN生成:




文字识别参考代码:github.com/blink-liu/oc

浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报