写在前面:最近实习阶段做了一些关于OCR相关的内容,在此记录一下

Q1:基于深度学习的文字检测方法有哪几种?各有什么优缺点?

A:常用的基于深度学习的文字检测方法一般可以分为基于回归的、基于分割的两大类,当然还有一些将两者进行结合的方法。
(1)基于回归的方法分为box回归和像素值回归。a. 采用box回归的方法主要有CTPN、Textbox系列和EAST,这类算法对规则形状文本检测效果较好,但无法准确检测不规则形状文本。 b. 像素值回归的方法主要有CRAFT和SA-Text,这类算法能够检测弯曲文本且对小文本效果优秀但是实时性能不够。
(2)基于分割的算法,如PSENet、DBNet,PSENet、PANNet算法不受文本形状的限制,对各种形状的文本都能取得较好的效果,但是往往后处理比较复杂,导致耗时严重。针对后处理复杂的问题,DBNET设计了二值化可导阈值融入训练,从而获取更准确的边界,大大降低了后处理的耗时。

Q2:行文本识别,CTC和Attention哪种更优?

A:(1)Attention:适合英文行文本识别(因为英文26个字母,字典有限,模型能够通过训练数据能够挖掘到这些字符之间的关系,相比较于CTC额外加入了先验知识)、对短语句识别效果不错,对长句子识别比较差
(2)CTC:适合中文行文本识别(由于常用中文汉字三千字以上,字典较多,Attention模型不容易挖掘到字符之间的关系,其模型优势无法体现。相比较于Attention,CTC对长句子识别更好。从训练和预测速度上看,Attention的串行解码结构限制了预测速度,而CTC网络结构更高效,预测速度更快

Q3:弯曲形变的文字识别需要怎么处理?TPS应用场景是什么,是否好用?

A:(1)在大多数情况下,如果遇到的场景弯曲形变不是太严重,检测4个顶点,然后直接通过仿射变换转正识别就足够了。
(2)如果不能满足需求,可以尝试使用TPS(Thin Plate Spline),即薄板样条插值。TPS是一种插值算法,经常用于图像变形等,通过少量的控制点就可以驱动图像进行变化。一般用在有弯曲形变的文本识别中,当检测到不规则的/弯曲的(如,使用基于分割的方法检测算法)文本区域,往往先使用TPS算法对文本区域矫正成矩形再进行识别,如,STAR-Net、RARE等识别算法中引入了TPS模块。 Warning:TPS看起来美好,在实际应用时经常发现并不够鲁棒,并且会增加耗时,需要谨慎使用。
(3)做过个印章识别项目,大体方案是使用DBNet检测印章主体区域,再接个轻量级四点定位网络,再跟个tps,再接个CRNN,针对普通场景,识别效果还可以。相比较将DBNet检测主体区域和四点定位放在一起的网络来看,识别效果会好一点,耗时也会多一些。【使用pytorch重写了opencv的tps,耗时减少了10倍左右,参考:tps改写】

Q4:简单的对于精度要求不高的OCR任务,数据集需要准备多少张呢?

A:训练数据的数量和需要解决问题的复杂度有关系。难度越大,精度要求越高,则数据集需求越大,而且一般情况实际中的训练数据越多效果越好。
(1)对于准确率要求不高的任务,检测需要至少500张图片,识别需要保证识别字典中每个字符出现在不同场景的行文本图像数目需要大于200张。
(2)真实数据不足时,可以使用GAN或数据增强或数据生成去合成。但也要保证一个batch内真实与合成数据比例最好不要低于1:3,若真实图片比例远低于这个比例,就只能先在合成数据集上先训练到最优,再在真实数据集上进行finetune。

Q5:背景干扰的文字(如印章盖到落款上,需要识别落款或者印章中的文字),如何识别?

A:(1)在人眼确认可识别的条件下,对于背景有干扰的文字,首先要保证检测框足够准确,如果检测框不准确,需要考虑是否可以通过过滤颜色等方式对图像预处理并且增加更多相关的训练数据;在识别的部分,注意在训练数据中加入背景干扰类的扩增图像。
(2)如果MobileNet模型不能满足需求,可以尝试ResNet系列大模型来获得更好的效果 。

Q6:OCR领域常用的评估指标是什么?

A:对于两阶段的可以分开来看,分别是检测和识别阶段
(1)检测阶段:常用的检测方法可以划分为基于回归的和基于分割的

  • 基于回归方法:先按照检测框和标注框的IOU评估,IOU大于某个阈值判断为检测准确。这里检测框和标注框不同于一般的通用目标检测框,是采用多边形进行表示。
  • 基于分割方法:将预测的mask按阈值分为正样本点与负样本点,通过预测与标注mask来计算检测准确率与召回率
  • 检测准确率(p):正确的检测框个数在全部检测框的占比,主要是判断检测指标。检测召回率(r):正确的检测框个数在全部标注框的占比,主要是判断漏检的指标。

(2)识别阶段: 常用的识别标准可以分为基于字符水平和基于文本行水平

  • 基于字符:通过计算预测与标注字符之间的编译距离(I、D、S),acc=识别正确/识别出的字符总数,corr=识别正确/标注的字符总数
  • 基于文本行:正确识别的文本行占标注的文本行数量的比例,只有整行文本识别对才算正确识别。

(3)端到端统计: 端到端召回率:准确检测并正确识别文本行在全部标注文本行的占比; 端到端准确率:准确检测并正确识别文本行在检测到的文本行数量 的占比;准确检测的标准是检测框与标注框的IOU大于某个阈值,正确识别的的检测框中的文本与标注的文本相同。

Q7:单张图上多语种并存识别(如单张图印刷体和手写文字并存),应该如何处理?

A:单张图像中存在多种类型文本的情况很常见,典型的以学生的试卷为代表,一张图像同时存在手写体和印刷体两种文本,这类情况下,可以尝试”1个检测模型+1个N分类模型+N个识别模型”的解决方案,有两种思路。
(1)方法1:让不同类型的文本共用同一个检测模型,N分类模型指额外训练一个分类器,将检测到的文本进行分类,如手写+印刷的情况就是二分类,N种语言就是N分类,在识别的部分,针对每个类型的文本单独训练一个识别模型,如手写+印刷的场景,就需要训练一个手写体识别模型,一个印刷体识别模型,如果一个文本框的分类结果是手写体,那么就传给手写体识别模型进行识别,其他情况同理。
(2)方法2:拿DBNet举例,普通检测任务的DBNet在fpn后预测1类mask(pro、thr、bin),通过阈值来卡binary的前景与背景区域。而面对多分类任务(如手写与印刷两种类别任务),fpn后预测2类mask(一组是手写,一组是印刷),然后通过分别对2类binary进行处理从而实现检测与分类。后续再接手写和印刷两种识别模型
(3)区别:方法1检测出区域再分类的方法,使得某个区域的类别之间是互斥的,即某一个区域只能属于一个类别(要不是背景,要不是手写,要不是印刷)。方法2所检测出的区域,它可能属于多个类别,即某一个区域可能是手写的,同时也可能是印刷的。两种方法针对具体场景需要具体使用。


参考1:OCR调参trick
参考2:OCR常见问题汇总

深度学习之OCR相关经验记录相关推荐

  1. 【OCR入门】一、基于深度学习的OCR技术导论和PaddleOCR

    目录 一.OCR简介 1.1.OCR是什么? 1.2.OCR的使用场景 1.3.OCR的技术难点 二.OCR前言技术 2.1.文本检测 2.2.文本识别 2.3.文档的结构化识别 2.4.其他OCR相 ...

  2. 【深度学习】OCR文本识别

    OCR文字识别定义 OCR(optical character recognition)文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程: ...

  3. 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录

    海思NNIE开发系列文章: 海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录 海思NNIE开发(二):FasterRCNN在海思NNIE平 ...

  4. 【AI in 美团】深度学习在OCR中的应用

    背景 计算机视觉是利用摄像机和电脑代替人眼,使得计算机拥有类似于人类的对目标进行检测.识别.理解.跟踪.判别决策的功能.以美团业务为例,在商家上单.团单展示.消费评价等多个环节都会涉及计算机视觉的应用 ...

  5. 【AI in 美团】 深度学习在OCR中的应用

    2019独角兽企业重金招聘Python工程师标准>>> 背景 计算机视觉是利用摄像机和电脑代替人眼,使得计算机拥有类似于人类的对目标进行检测.识别.理解.跟踪.判别决策的功能.以美团 ...

  6. 基于深度学习的OCR技术简介

    1.概述 本文简要介绍基于深度学习的OCR技术,主要分为整体框架流程介绍,文字检测CTPN,文字识别CRNN+CTC,基于windows平台的项目实战,以及遇到的一些问题和解决方案,最后展示一下胜利的 ...

  7. 【深度学习】计算机视觉相关技术探索(一)

    [深度学习]计算机视觉相关技术探索(一) 文章目录 1 计算机视觉概述 2 使用机器学习解决图像分类问题 3 Keras和神经网络简介 4 卷积神经网络(CNN),迁移学习 5 对象检测问题 6 yo ...

  8. 程序如何在两个gpu卡上并行运行_深度学习分布式训练相关介绍 - Part 1 多GPU训练...

    本篇文章主要是对深度学习中运用多GPU进行训练的一些基本的知识点进行的一个梳理 文章中的内容都是经过认真地分析,并且尽量做到有所考证 抛砖引玉,希望可以给大家有更多的启发,并能有所收获 介绍 大多数时 ...

  9. 基于深度学习的OCR

    为了提升用户体验,O2O产品对OCR技术的需求已渗透到上单.支付.配送和用户评价等环节.OCR在美团业务中主要起着两方面作用.一方面是辅助录入,比如在移动支付环节通过对银行卡卡号的拍照识别,以实现自动 ...

最新文章

  1. 听说你要离开大厂去创业公司做CTO?
  2. Java 洛谷 P1219 八皇后
  3. dnastar拼接反向互补序列_一起看流畅的python:序列构成的数组
  4. SAP HANA Cloud 学习教程之二: 如何往SAP BTP 上 HANA Cloud 实例的数据库表里插入数据
  5. 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多,把经历分享给你们!
  6. 利用axios获取数据并渲染到视图层
  7. SQL书写规则30例
  8. redis 慢消费_Redis精进:List的使用和应用场景
  9. mousewheel事件
  10. bc547可以用8050代换吗_常用三极管代换型号
  11. 单片机p1口亮灯实验c语言代码,手把手教你单片机流水灯实验(详解)
  12. 蓝湖怎么切图标注_蓝湖:你们要的“自动切图”功能来了!
  13. C++语言学习笔记15:Clean 垃圾清理插件
  14. python爬取大学生就业分析专科和本科的信息https://edu.jobui.com/major/(上)JSON的存储
  15. 计算机网络——IPV6基础知识
  16. (转)纵观国内外证券公司IT发展史
  17. Polyman 初使用-01
  18. Cent OS 8安装Docker
  19. 高校BBS冷笑话(下)
  20. 软件质量保证与测试PTA作业

热门文章

  1. 《EMCAScript6入门》读书笔记——2.let和const命令
  2. 【转】Cron表达式简介
  3. windows下创建vp9的VS版本
  4. SQL Server 数据库身份认证以及包含数据库
  5. [NFrog]工具(NHibernate)终于成形了
  6. 【SpringBoot】 logback 日志的集成
  7. 【Python笔记】字典
  8. [转]Git:如何在项目提交历史中查找已删除的文件?
  9. django进阶02websocket
  10. python进阶12并发之八多线程与数据同步