关于机器学习:宜信OCR技术探索与实践​直播速记

44次阅读

共计 3152 个字符,预计需要花费 8 分钟才能阅读完成。

宜信 OCR 技术摸索与实际 | 残缺视频回放

一、OCR 概述

1.1 OCR 技术演进

  • 传统图像,冈萨雷斯的图像处理。
  • 信号处理、频域剖析以及各类算法:SIFT、HOG、HOUGH、Harris、Canny…都很赞。
  • 从 2016 年当前业界基本上都曾经转向深度了,因为成果真的特地好。

1.2 OCR 技术商业服务

  • 身份证卡证类绝对容易些,然而要做到简单场景的,也不是那么容易。
  • 发票、业务单据绝对简单,除了辨认,更重要的是版面剖析。
  • 最近表格辨认比拟火,各家都在努力实现,微软的凋谢 tablebank 数据集
  • 挪动端 backboneMobileNet,或者是 tesseract+opencv

二、咱们的业务场景

2.1 业务需要

满足业务是第一须要,不同于大厂,对外服务 API,要求大并发那么强,多样性品类齐备,咱们更强调单品要做到尽量达到业务要求,更强调定制化,能够散布走,业务上能够给反馈不断改进。

2.2 辨认过程中须要解决的问题

三、OCR 算法详解

3.1 算法概述——分享准则


大家肯定要本人弄细节,读代码、甚至本人入手撸,本人训练,调参,排错,能力有真正的领会和了解,只讲我认为每个算法外面不太好了解,重点,以及容易疏忽的点,跟同行一起交换,沟通。

一个模型,要全面深刻理解,须要:

  • 指标、目标、意义是啥?
  • 网络结构啥样?
  • loss 是啥?
  • 样本咋做?
  • 后处理干了啥

3.2 算法概述——三大板块

  • 文字检测:把文字框住,放大到最小范畴内,从而升高辨认难度。
  • 文字辨认:检测出文字后,就能够通过辨认工具(算法)来辨认出文字,如两头图。
  • 版面剖析:当文字辨认进去后,咱们得出的是文字和相应的坐标,可是当真正业务中要失去的不仅仅是这个,须要有一个构造,如何通过辨认出的文字排版成为一个有逻辑构造的单据或者内容,这个工作也超级简单。对于版面剖析这方面,前面会有团队外面教训十分丰盛的搭档和大家分享。

3.3 算法概述——检测算法

  • 表中从下往上的检测算法排序依照成果:越来越好
  • 从 anchorbased(也就是左边所示的最上面的那张图),当初逐步转向 pixel-based(像素级别)(左边所示的两头的那张图),次要是语义宰割的技术成果切实是太好了。

CTPN:找框的一个算法。

预测最终后果是:10 个 anchor 的 y 坐标偏移,和高度的调整值,还有它是不是前景的概率。输入是前后景概率 [N,10,2],y、w 调整值 [N,10,2]。它只适宜横向,或者纵向,不能同时。

  • 一个模型次要从以下几个方面了解
  • 亮点和外围思路是:预测框和文本线结构算法
  • loss 是啥(损失函数):anchor 前后景概率、y、w 调整
  • label 怎么做:大框,弄成小框,而后正负样本平衡
  • 后处理

  • 算法被命名为 EAST(Efficient and Accuracy Scene Text),因为它是一个高效和精确的场景文本检测 pipeline。
  • 首先,将图像送到 FCN 网络结构中并且生成单通道像素级的文本分数特色图和多通道几何图形特色图。文本区域采纳了两种几何形态:旋转框(RBOX)和程度(QUAD),并为每个几何形态设计了不同的损失函数;而后,将阈值利用于每个预测区域,其中评分超过预约阈值的几何形态被认为是无效的,并且保留以用于随后的非极大克制。NMS 之后的后果被认为是 pipeline 的最终后果。
  • 最初预测:scoremap,textbox,textrotation
  • 标注是:一个蒙版 mask,一个 4 张图,上下左右的间隔,还有个角度:一共 3 个。
  • 对应就能够出 loss 了。每个点预测进去,加上角度,就是 1 个框,太多了框,所以要做 LANMS(合并算法) 的合并。为何不间接用 socremap,我认为是置信度不够,所以要再加上 bbox 来增强验证。

PSENet 是一种新的实例宰割网络,它有两方面的劣势。首先,psenet 作为一种基于宰割的办法,可能对任意形态的文本进行定位. 其次,该模型提出了一种渐进的尺度扩大算法,该算法能够胜利地辨认相邻文本实例。

  • FPN,右面用 resnet50。为何是 resnet50,起因是成果不错,参数适中。
  • 论文里是 6 个尺度,一个不行么?我了解是彻底离开不同行,逐步扩充,渐进尺度能够避免彼此穿插哈
  • FPN 和 UNET 都是 concat,FCN 是 add,这个细节。

  • 应用 DB 模块之后,二值化操作就变成了可微的,能够加到网络里一起训练。

网络输入

  • probabilitymap,代表像素点是文本的概率
  • thresholdmap,每个像素点的阈值
  • binarymap,由 1,2 计算失去,计算公式为 DB 公式

label 制作

  • probabilitymap, 依照 pse 的形式制作即可,膨胀比例设置为 0.4
  • thresholdmap, 将文本框别离向外向外膨胀和扩张 d(依据第一步膨胀时计算失去) 个像素,而后计算膨胀框和扩张框之间差集局部里每个像素点到原始图像边界的归一化间隔。

3.4 算法概述——辨认算法

  • Atttenion:Attention-basedExtraction of Structured Information from Street View Imagery-2017 最早的尝试

十分经典的算法,次要的外围是 CTC 算法:Connectionist Temporal Classification (CTC) 适宜那种不晓得输入输出是否对齐的状况应用的算法,所以 CTC 适宜语音辨认和手写字符识别的工作。

毛病:不能准确地分割特征向量与输出图像中对应的指标区域,这种景象称为 attention drift。

Muturaltraining:

  • 咱们晓得什么?什么字符,第几个?这个信息!
  • 哪个字符? 找到那个字符,第几个?而后和样本里的程序比
  • 第几个是啥字符?和对应地位的字符比
  • 所以样本中不能存在反复字符。

四、咱们的实际

4.1 实际之路

  • 非单据:宽高比,白像素比例等
  • 旋转角整:后面讲过了,通过旋转模型,以及投影散布
  • 多单据:多张单据在一起,通过投影,阈值超参配置
  • 表格辨认:采纳 mask-rcnn 的办法,来找出大表边缘
  • 后处理:通过 NLP 纠错,前面会具体的讲

4.2 实际之路——旋转模型

大方向判断

第一版:

  • VGG 做 backbone,全连贯,四分类
  • 样本:人工标注、加强
  • 正确率 90%

第二版:

  • 做切割,256×256
  • 应用 MSER 找备选
  • 训练小图
  • 众数选出最可能方向
  • 正确率 99.7%

微调

  • 每旋转 1°做纵向投影
  • 方差最大的角度为微调角度

4.3 咱们遇到的坑

  • 把 crnn 论文论文中的自定义 cnn 网络,换成 resnet,然而 resnet 是放大 32 倍,所以要拉长一些,到 512。
  • 首先是:样本集是 1000 万 (50 万张,置信度单字 95%+)100 万实在 +100 万常用字(造)+ 200 万数字工夫英文(造)+ 600 万其余汉字(造)大略须要 3 - 4 天
  • 接下来进行训练:Resnet50,5- 6 天;Resize 扩充,1024,=>512×8,256×8

过程中须要对 greedy 算法进行改良:

    =>beam_search/merge_repeated=True

    独自测是有问题,然而在置信度很高的状况下,两者差距很小,然而失去了极大的速度改良,28 秒 =>10 秒,batch=128,size 是 512x32

  • 因为有 crnn 的 prob,所以纠错就对症下药,把狐疑的字,替换成某个字,
  • Prob 有个细节,如果是挨着的字,“__ 我 我 __”,就取最大的 prob,
  • 是依据一个字画相近度,对狐疑字替换的准则,是和原来识别字笔画最相近的,又是通过编辑间隔。

4.4 咱们的教训

1、开发教训

2、生产教训

Tensorflow 容器

  • 模型部署应用官网举荐的 tensorflowserving,容器形式
  • 没有开启 Batching,本人管制 batch
  • 宿主机只须要显卡驱动•容器内蕴含 CUDA、cuDNN,免去版本适配

服务容器:

  • 本人定义了 Web 容器根底镜像
  • 主动构建容器、动静编排

本文作者:宜信技术学院 刘创

正文完
 0