热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

attention文字识别算法_OCR算法(上篇)

总体上分为两部分,detection和recognition,前者的代表是CTPN等一系列模型,后者则主要为CRNNCTCDetectio
66589531a8cea9e0d8a5d472a55d07a6.png

总体上分为两部分,detection和recognition,前者的代表是CTPN等一系列模型,后者则主要为CRNN+CTC


Detection

CTPN(1609)

https://arxiv.org/pdf/1609.03605.pdf​arxiv.org

想法:

文本不同于一般物体,是个Sequence,因而要在CNN后面加上RNN获取上下文信息。

固定宽度,找到不同高度的文字,因为文中认为预测文本竖直边界比较容易。

这是Top-down的方法。

网络结构:

038bbd5290f39ca78e128b241649fcf0.png

Feature Map是CVGG16的conv5,每个点提出10个anchor,长和高分别为

17799245e4680f96ce2ceed3e4237e01.png
92c4e4c47633a32e1a59c0cce0986c91.png

然后过BiDirectionLSTM,过FC之后得到5k个输出(分别为2k纵坐标修正,2k预测概率[相加为1],1k边界修正[在一些复现里将这里换为2k横坐标修正])

后处理很繁琐

  • score阈值设置:0.7 (+NMS)
  • 与真值IoU大于0.7的anchor作为正样本,与真值IoU最大的那个anchor也定义为正样本,这个时候不考虑IoU大小有没有到0.7,这样做有助于检测出小文本。
  • 与真值IoU小于0.5的anchor定义为负样本。
  • 只保留score大于0.7的proposal

损失函数为

17b5986562d9fb2b138b8bf3358dffbe.png

具体的可见 白裳:场景文字检测—CTPN原理与实现

EAST(1704)

https://arxiv.org/pdf/1704.03155.pdf​arxiv.org

想法:是一个简单快速的模型,只有two-stage 其实主要优势只是速度....

778ab61816b712e7b0bf661c00f2d1e7.png

模型结构:

前一部分和FPN一样,后面根据不同label生成5维(有角度的长方形)或8维(四边形)的文本框

203768fc3275d9febcd05a2b94e7921f.png

Label的生成:

对于不同的scale,生成不同的label;对于QUAR提出了一种shrink的方式

损失函数:

,文中λ设为1

其中score map loss由下式计算

83b11241c352268122bc1d0507a55fd6.png

Geometry loss 分为RBOX和QUAD两种情况

RBOX情况下Loss = -log(IOU)+λ(1-cos(θ-θ‘))

QUAD情况下,N_Q是最短边长度

0b5c711376713ce722fd8011e33364d9.png

后处理用来一种改良的NMS:先通过相近的WeightedMerge再通过标准的NMS

PSENet(1806)

https://arxiv.org/pdf/1806.02559.pdf​arxiv.org

想法:指出两个问题:1、原始方法只能处理长方形的文字;2、现有语义分割方法难以区分相临近的文字块

通过语义分割做文本检测,具体预测多个分割结果,然后用小的进行Progressive Scale(基于BFS)扩张到正常文本大小。

网络结构:

9441dd6b0df70e0b6d919fbf5c2d5d2a.png

左边就是FPN,右边是PSE。PSE的具体算法如下

736d804db77a5a4ac8dd34422d7e7980.png

即先找到连通域,然后对连通域进行扩张,由此区分临近文字。

Label生成:

对于不同scale生成不同的ground truth,具体而言就是进行shrink

1cd4a3b4b56a807e79b10f4e693b2d61.png

图中

之间的距离
,

损失函数:

其中

是text loss,定义为
,M为OHEM Mask
是shrink text loss,定义为
,

这个距离D用的是DiceDistance

实验结果:

hypermeter:lambda=0.7,OHEM=3

Augment:rescale&flip&rotation&crop

FPN的效果

5927e629731ba052db5764378d078cdd.png

关于n和m的取值

ea42569ff56a1c8bc75a3bf2ae7e425a.png

总体而言相比之前有较大提升(-4s 是指output 大小为原图1/4)

2445ba5a29e03b87c565ccaeae141482.png

Recognition

https://arxiv.org/pdf/1507.05717v1.pdf​arxiv.org

任务的输入就是识别出的文字区域,因此可以认为resize到固定高度之后,文字大小相差不大

CRNN+CTC(1507)

CRNN首先把图像resize到32*W*3,然后通过CNN后变为1*W/4*512,concat之后经过深层双向LSTM得到结果。

模型结构:

注意最后一个卷积 padding=0相当于高度2->1,Map-to-Seq就是concatenate。

5d8e89288f93e92f9159dbe329fb39a3.png

CTC:

CTC是可以认为是一种Loss function。考虑到字之间宽度不定,所以先构建函数B将预测结果转换为最终输出,比如

B maps “--hh-e-l-ll-oo--” (’-’ represents ’blank’) onto “hello"。

然后可以计算得分(y为上面的输出,D*W/4,D为要识别的字符数量)

CTC运用了backward-forward加速这一计算。

如果是lexicon-based CTC,考虑BK Tree来获得

SAR (1811)

https://arxiv.org/pdf/1811.00751.pdf​arxiv.org

想法:想要识别irregular文本

已有的方法分为三类:rectification-based,难以处理复杂形状;attention-based,需要字符级的标注来训练; multi-direction 需要encode arbitrarily-oriented text in four directions

主要贡献:1、easy and strong recognization;2、not rely on sophisticated designs to handle text distortions; 3、保证了regular text的效果

网络结构:

height 设定为 48 pixel, width限定48-160 pixel

31层ResNet + LSTM encoder-decoder + 2d attention

62dc2e6d4a896d116f7f935122c032bf.png

注意这里有个1*2的max-pooling是为了更好地处理i和l之类的

然后按列max-pooling输入LSTM(大哥:为什么能work?)

e5decb492d49ac16e59f9334fbbf8e10.png

如上,encoder是2-layer 512-hidden-state LSTM

6a9a243a670e5eb5767ea6ca893e3b98.png

如上,decoder是另一个2-layer 512-hidden-state LSTM,

LSTM的输入为 one-hot

经过线性变换

LSTM输出之后

output为94个class,包括10个数字、52个字母和31个标点

训练中input 的y被ground truth代替(能保证1-1对应?)

上图中的attention是“tailored attention” 具体流程如下

48b42dbb20e73ef0b1de2ad5f179fd8a.png

其中

是(i,j)的local feature vector,
是相邻的八个点
(其实相当于是个卷积)
406c344be7b122f9f43900867ac089ed.png

实验结果:

使用cross-entropy loss,(大哥:这里和CRNN的CTC完全)

使用几个数据集randomly sample构建distinct data groups训练

结果在irregular text方面提升较大

7044fdc9cc2ae2eb041b06f3f2042ff6.png

ablation study: Tailored Attention比传统Attention提高了约2个点

(怎么inference?)



推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 浙江大学2005–2006学年秋冬季学期《大学计算机基础》课程期末考试试卷开课学院:计算中心,考试形式:闭卷,允许带入场考试 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 如何找到并加速缓慢的代码,提高性能
    本文讲述了如何找到并加速缓慢的代码,提高系统性能。作者通过优化内部循环、利用多处理器运行内部循环以及减少内部循环运行次数等方式来提高代码的执行效率。以一个游戏开发中的案例为例,作者介绍了如何通过调查和排查问题,找到导致帧率下降的设计缺陷,并进行修复。文章总结了优化代码的关键点,并提供了一些实用的方法和技巧。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • LINUX学习之centos7营救模式
    今天卸载软件的时候,不小心把GNOME的一些组件给卸了,导致桌面无法正常开启,会卡在启动过程中,而我的开机启动模式又是设置为图形界面,所以一开LINUX就卡住了,进入不了命令行界面 ... [详细]
  • 我用Tkinter制作了一个图形用户界面,有两个主按钮:“开始”和“停止”。请您就如何使用“停止”按钮终止“开始”按钮为以下代码调用的已运行功能提供建议 ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
author-avatar
mobiledu2502861593
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有