ABINet原理讲解以及运行

news2024/10/6 5:59:20

论文地址:https://arxiv.org/pdf/2103.06495.pdf

代码地址:https://github.com/FangShancheng/ABINet

前言

OCR技术经历了是从传统方法到深度学习方法的一个过程,所以在这里我也简述一下传统的OCR技术方法。传统OCR方法在简单场景下效果良好,但在复杂场景、不同字体、光照条件变化等情况下可能面临挑战。近年来,随着深度学习的发展,基于神经网络的端到端OCR系统逐渐崭露头角,取得了在多种场景下更优越的性能。传统的OCR(Optical Character Recognition,光学字符识别)系统通常包括以下主要步骤:

图像预处理:

灰度化: 将彩色图像转换为灰度图像,简化后续处理。

二值化: 将灰度图像转换为二值图像,通过设定阈值将像素划分为前景(字符)和背景。

去噪: 对图像进行降噪操作,去除一些不必要的细节和干扰。

文本区域检测:

连通区域分析: 通过识别连通区域,找到潜在的文本区域。

边缘检测: 利用边缘检测算法寻找文本的轮廓。

文本分割:

将图像中的文本区域切分成单个字符或单词。

特征提取:

对每个字符或单词提取特征,常用的特征包括垂直投影、水平投影、梯度等。

字符识别:

使用机器学习或模板匹配等方法对提取的字符特征进行识别。

常见的方法包括模板匹配、k-最近邻(k-NN)、支持向量机(SVM)等。

后处理:

对识别结果进行后处理,可能包括纠错、合并或分割字符等操作。

输出结果:

将最终的识别结果输出为文本或其他格式。

在此之前,我做了了一个先CNN再RNN的seq2seq的中文识别的项目练手,当时的目的是为了学习一下seq2seq模型技术,详情可看之前发布的笔记

ABINet介绍

这是一个端到端深度学习场景文本识别网络,利用语言模型帮助场景文本识别,提出了一种基于双向特征表示的双向完形填空网络语言模型(BCN),重点解决低质量图像的文本识别问题。该网络通过明确的语言建模、新型双向完形填空式网络(BCN)、迭代修正等技术,有效处理隐式语言建模、单向特征表示和噪声输入等问题。此外,引入一种基于迭代预测集成的自训练方法,能够从未标记的图像中学习。实验证明,在低质图像上表现优越,在多个基准数据集上取得了SOTA性能,同时通过自训练显著提升了在人类水平识别上的性能。

该网络结构主要关注场景文本识别中如何充分利用语言知识,并指出在端到端深度神经网络中建模语言规则的挑战。

显式语言建模: 通过阻断视觉模型和语言模型之间的梯度流,使得语言的建模过程更为明确。这有助于克服隐式语言建模的局限性,使网络更清晰地学习语言规则。

双向完形填空网络(BCN): 提出了一种新型的语言模型,即双向完形填空网络。该模型基于双向特征表示,使得模型能够更全面地理解文本上下文的语义信息,克服了传统单向特征表示的局限性。

语言模型迭代修正: 引入了一种迭代修正的执行方式,以有效减轻噪声输入对语言模型的影响。这意味着网络能够通过多次迭代不断调整和修正语言模型,逐渐提升对于噪声输入的鲁棒性。

这些创新性的方法共同构成了一种全新的场景文本识别网络,旨在充分利用语言知识,提高对复杂场景文本的识别性能。该网络在多个性能指标上超越了传统方法,并在处理噪声输入、双向特征表示等方面取得了显著的改进。

小辉问:能不能详细讲讲显式语言建模和隐式语言建模,显式和隐式经常听到,但是不是很理解,也介绍一下吧。

小G答:

显式语言建模与隐式语言建模:

1、显式语言建模:

定义明确: 显式语言建模是指在模型中直接引入对语言结构或规则的明确建模。这可以通过特定的网络层、损失函数、或者嵌入来实现。

例子: 在显式语言建模中,可以使用传统的自然语言处理(NLP)技术,如规则引擎、语法分析等,将语言结构直接纳入模型,以帮助模型理解和处理语言信息。

优点: 直观、可解释性强,人为定义的语言规则可以直接影响模型的行为,提高可控性。

2、隐式语言建模:

通过学习获取: 隐式语言建模是指让模型通过学习大量数据来获取语言结构和规律,而非直接引入人为定义的规则。在深度学习中,这通常通过神经网络内部学习到的表示来实现。

例子: 利用深度学习模型(如循环神经网络、Transformer)对大规模语料进行训练,模型通过学习语言数据的统计特性,自动学到语法结构和语义信息。

优点: 更加灵活,适应性强,能够从数据中学到更复杂的语言模式,适用于不同领域和任务。

显式和隐式:

在深度学习中,显式(Explicit)和隐式(Implicit)通常用于描述模型对特定信息的处理方式。

1、显式:

定义明确: 显式方法直接建模或处理目标信息,将其纳入模型的计算过程,并在模型中有明确的表示。这通常通过直接引入相关的特征、规则、或者模型参数来实现。

清晰可见: 相关信息在网络结构或损失函数中的表示是明显可见的,可以通过查看模型的架构或参数来理解模型对该信息的处理过程。

直接控制: 显式方法让我们能够更直接地控制模型对特定信息的处理,提供更多的可解释性和可控性。

2、隐式:

通过学习获取: 隐式方法则通过让模型自己学习目标信息,而非直接引入明确的表示或规则。这可能通过网络的内部学习、嵌入空间、或其他方式实现。

不直观: 对于观察者而言,模型对目标信息的处理方式并不直接可见或清晰,因为这些信息可能以模型内部的参数状态、激活模式等形式存在。

灵活性: 隐式方法通常更加灵活,因为它们可以根据数据自动调整学习到的特征,适应不同任务和数据分布。

显式与隐式的比较:

1、显式的优势:

可解释性: 由于明确引入了语言结构或规则,显式方法通常更容易解释和理解。

可控性: 可以直接通过修改规则或结构来调整模型的行为。

2、隐式的优势:

灵活性: 隐式方法更灵活,能够从大量数据中学到复杂的模式,适应性强。

自适应: 不需要人工干预,模型可以自适应不同的任务和领域。

模型详解

从上图不难看出模型主要分为3部分:视觉模型,语言模型和融合部分。

1、首先输入图像到视觉模型,提取图像特征以及输出预测结果;

2、将视觉模型的预测结果送入语言模型来提取语言特征并预测结果;

3、将视觉模型的视觉特征和语言模型的语言特征进行融合来得到融合的预测结果;

4、融合的预测结果再送入语言模型,迭代地进行细化,以得到最终的预测结果。

BaseVision:这是一个视觉模型的基础部分。它包括了一个ResTranformer,这个ResTranformer包含了一个ResNet和一个Transformer。

ResTranformer:这个部分将ResNet(一个经典的图像分类模型)和Transformer(用于处理序列数据的模型)结合起来,以实现对图像和语言的联合处理。这个结构可以处理输入图像并产生视觉特征,然后将这些特征传递给Transformer来与语言信息进行交互。

ResNet:这是一个残差网络,用于提取图像的特征。它包含了几个残差块(BasicBlock),每个残差块包含了卷积层(Conv2d)和批归一化层(BatchNorm2d)。

Transformer:这是一个用于处理序列数据的模型,通常用于自然语言处理。这里的Transformer被用于对视觉特征进行进一步处理,并将其与语言信息结合起来。

BCNLanguage:这是一个处理语言信息的部分。它包括一个简单的线性投影层(Linear)来将语言信息投影到与视觉特征相同的维度,并且使用了TransformerDecoder来进一步处理语言信息。

BaseAlignment:这是一个对齐模块,用于将视觉和语言信息对齐,以便进行联合训练或联合推理。它包括一个线性投影层(w_att)来对视觉和语言信息进行加权融合,以及一个用于分类的线性层(cls)。

综上所述,这个网络结构通过将ResNet和Transformer相结合,实现了对图像和语言信息的联合处理,从而能够在视觉和语言任务上取得良好的性能。

视觉模型

组成:

视觉模型由两部分组成:主干网(backbone)和位置注意力模块。

主干网采用了 ResNet(残差网络)作为特征提取网络,用于从输入图像中提取视觉特征。

位置注意力模块基于 Transformer 单元,用于序列建模网络,将主干网提取的特征转换为字符概率序列。

工作原理:

对于输入图像 x,通过主干网提取特征,得到大小为 H×W×C 的特征图,其中 H 和 W 分别表示图像的高度和宽度, C 表示特征的通道数。具体公式如下

位置注意力模块基于查询范式(query paradigm),将视觉特征转换为字符概率。这意味着它根据字符的位置对特征进行编码,并将其转换为字符的概率序列。具体地,通过位置编码将字符的顺序信息嵌入到特征中,并使用 Transformer 单元对特征序列进行建模,最终得到每个字符的概率预测。

总体而言,该视觉模型利用了 ResNet 和 Transformer 单元的强大特性,通过主干网提取图像特征,然后通过位置注意力模块将这些特征转换为字符概率序列,从而实现对图像中文本的识别。

语言模型(BCN)

BCN(Bidirectional Context Network)是一个变种的 L 层 Transformer 解码器。每一层 BCN 都由多头注意力和前馈网络组成,接着是残差连接和层归一化。与普通的 Transformer 不同,字符向量被输入到多头注意力模块而不是网络的第一层。此外,多头注意力模块中的注意力 mask 被设计成屏蔽当前字符自身,避免泄露信息。BCN 的注意力操作相关公式如下:

其中,Q是字符顺序的位置编码,在第一层是位置编码,在最后一层是前一层的输出。K,V是从字符概率 P(yi)获得的,而 Wl是线性映射矩阵。M是注意力 mask 矩阵,用于防止当前字符自身进行注意力计算。将 BCN 层堆叠成深层架构后,文本 y 的双向表示 Fl就确定了。

BCN 通过以填空方式指定注意力 mask,能够更优雅地学习到比单向表示更强大的双向表示。此外,由于采用了类似 Transformer 的架构,BCN 可以独立并行地进行计算,并且比集成模型更高效,因为只需要一半的计算量和参数。

小辉问:能不能说说attention mask?

小G答:在Transformer模型中,注意力掩码主要用于确保在解码器部分生成目标序列时不会看到未来的信息。这是因为在解码器中,模型需要逐步生成目标序列的每个元素,并且在每个时间步只能访问已生成的部分。因此,注意力掩码用于限制模型在自注意力计算中只能关注当前和之前的位置,而不能访问未来位置的信息。

需要注意的是,通常情况下只有解码器部分会使用注意力掩码。但是在某些情况下,例如在BERT等双向预训练语言模型中,也会在编码器部分使用注意力掩码,以确保模型在预训练阶段不能“看到”整个输入序列的信息,从而避免信息泄漏。

融合模块

该模型通过门控机制来进行最终决策,以使视觉特征和语言特征保持一致。门控机制是一种常见的技术,用于动态地调节两个输入之间的权重,以产生合成的输出。在这里,门控机制的目的是确定视觉特征和语言特征在最终决策中的贡献程度。具体来说,门控机制的公式如下所示:

其中:

G 是门控向量,表示视觉特征和语言特征的权重;

σ 是sigmoid激活函数,用于确保门控向量中的值在0和1之间;

[Fv,Fl] 表示将视觉特征Fv和语言特征 Fl连接起来,形成一个合并的特征向量;

Wf是一个权重矩阵,用于将合并的特征向量映射到门控向量的维度上。

然后,使用门控向量G 来计算合成特征Ff

其中,⊙ 表示逐元素相乘,用于将门控向量应用于视觉特征和语言特征,以生成最终的合成特征。

迭代矫正

Transformer的并行预测需要噪声输入,噪声输入通常是视觉预测或视觉特征的近似值。具体而言,如模型架构图中,在双向表示下,P(“O”)的期望条件为“SH-WING”。但是由于环境的模糊和遮挡,VM得到的实际情况是“SH-VING”,其中“V”成为噪声,损害了预测的置信度。VM中的错误预测越多,对LM影响就会越大。

为了解决噪声输入的问题,我们提出迭代LM,LM重复执行M次,对y进行不同的分配。对于第一次迭代,yi=1是VM的概率预测。在后续迭代中,yi≥2为上次迭代中融合模型的概率预测。通过这种方法,LM能够迭代校正视觉预测。

另一个观察结果是基于Transformer的方法通常存在长度不对齐的问题,即如果字符数与ground truth不对齐,Transformer很难纠正视觉预测。填充掩码是用来过滤文本长度以外的上下文的固定格式,这让填充掩码在实现上不可避免的会造成长度无法对齐的问题。我们的迭代LM可以缓解这一问题,通过将视觉特征和语言特征多次融合,逐步细化预测的文本长度。

模型训练

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1456695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法沉淀——BFS 解决最短路问题(leetcode真题剖析)

算法沉淀——BFS 解决最短路问题(leetcode真题剖析) 01.迷宫中离入口最近的出口02.最小基因变化03.单词接龙04.为高尔夫比赛砍树 BFS(广度优先搜索)是解决最短路径问题的一种常见算法。在这种情况下,我们通常使用BFS来…

智胜未来,新时代IT技术人风口攻略-第五版(弃稿)

文章目录 前言鸿蒙生态科普调研人员画像高校助力鸿蒙高校鸿蒙课程开设占比教研力量并非唯一原因 企业布局规划全盘接纳仍需一段时间企业对鸿蒙的一些诉求 机构入场红利机构鸿蒙课程开设占比机构对鸿蒙的一些诉求 鸿蒙实际体验高校用户群体场景分析企业用户群体场景分析培训机构…

东方博宜 1395. 小丽找数?

东方博宜 1395. 小丽找数&#xff1f; #include<iostream> using namespace std; int main() {int x ;cin >> x ;int cnt 0 ;for (int i 1 ; i < x ; i){ int y i ;int sum 0;while(y > 0){sum y%10 ;y / 10 ;}if(sum%5!0 &&sum%2!0)cnt 1 …

多线程---乐观锁、悲观锁

乐观锁&#xff08;Optimistic Locking&#xff09; 乐观锁则是一种假定数据在并发访问时很少会发生冲突的锁定策略。因此&#xff0c;乐观锁在访问数据时不会立即对数据进行加锁&#xff0c;而是在更新数据时检查数据是否被其他线程修改过。如果数据没有被修改过&#xff0c;则…

shell脚本文本三剑客grep,sed,awk

1. 正则表达式&#xff0c;又称正规表达式、常规表达式 使用字符串来描述、匹配一系列符合某个规则的字符串 正则表达式组成&#xff1a; 普通字符包括大小写字母、数字、标点符号及一些其他符号。 元字符是指在正则表达式中具有特殊意义的专用字符 man 7 regex 可以使用man手…

达梦数据库——数据迁移sqlserver-dm报错问题_未完待续

记录SQL server到达梦数据迁移过程中遇到的问题&#xff0c;持续更新中... 报错情况一&#xff1a;Sql server迁移达梦连接报错’驱动程序无法通过使用安全套接字Q层(SSL)加密与SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted b…

2024开工大吉,便宜寄快递该怎么选呢?

随着春节的结束&#xff0c;大部分人回到了工作的岗位&#xff0c;相信许多人还沉浸在过年的喜悦的氛围中呢&#xff0c;但是我们可以期盼下一个春节的到来了&#xff0c;言归正传&#xff0c;工作中总会收发快递了&#xff0c;尤其是最近&#xff0c;需要联络客户的感情了&…

vtkBoarderWidget及图片坐标包含计算

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example demo解决问题&#xff1a;移动图片到坐标轴的中心&#xff0c;创建一个vtkBoarderWidget控件&#xff0c;移动控件&#xff0c;计算控件与图片的包含关系 关键点…

【linux网络的综合应用】补充网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录

实验拓朴图&#xff1a; 1&#xff09;网关服务器&#xff1a;ens36&#xff1a;12.0.0.254/24&#xff0c;ens33&#xff1a;192.168.100.254/24&#xff1b;Server1&#xff1a;192.168.100.101/24&#xff1b;PC1和server2&#xff1a;自动获取IP&#xff1b;交换机无需配置…

SSL数据加密一定能保证数据的完整性吗?

SSL数据加密是一种常见的网络安全措施&#xff0c;用于保护数据在传输过程中的安全。它通过使用加密算法将数据转换为密文&#xff0c;然后在传输过程中对数据进行保护&#xff0c;以防止数据被窃取或篡改。然而&#xff0c;尽管SSL数据加密可以提供一定程度的数据保密性&#…

光流方向以及 remap 重映射的理解

Date: 2023-09-07 省流&#xff1a;光流法计算prev 到next 的flow&#xff0c;之后flow &#xff08;加上当前位置坐标&#xff09;生成flow_map&#xff0c;利用flow_map 和OpenCV remap 函数&#xff0c;可以将next remap 得到 prev&#xff0c;即remap 后一帧得到前一帧图像…

spring boot学习第十三篇:使用jsonrpc

因为我学习spring boot会有很多内容&#xff0c;所以和spring boot有关的文章使用的pom.xml和application.yml这2个文件的内容就全列出来&#xff0c;不用再单独抽出来了&#xff0c;单独抽出来有点麻烦也不方便学习。 1、pom.xml文件内容如下&#xff1a; <?xml version…

[深度学习] 卷积神经网络“卷“在哪里?

​ &#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[深度学习] ❤️ 热门学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…

【HTML】SVG实现炫酷的描边动画

前沿 今天闲来无事&#xff0c;看到Antfu大佬的个性签名&#xff0c;觉得还是非常炫酷的&#xff0c;于是也想要搞一个自己的个性签名用来装饰自己的门面&#xff0c;不过由于手写的签名太丑了&#xff0c;遂放弃。于是尝试理解原理&#xff0c;深入研究此等密法&#xff0c;终…

读写分离的利器——MySQL Proxy

0 引言 MySQL Proxy是一个位于客户端和MySQL服务器端之间的程序&#xff0c;通过它可以实现监听和管理客户端与MySQL服务器端之间的通信&#xff0c;最大的作用是实现数据库的读写分离&#xff0c;从而达到负载均衡的目的。 MySQL Proxy的常用用途包括负载平衡、故障分析、查…

纯前端低代码平台demo,vue框架,nodejs,简单的pm2纯前端部署实践

文章目录 目录结构说明本地运行项目启动后的页面demo前端部署打包pm2nginx 后话 前段时间开发了一个纯前端的低代码平台demo&#xff0c;vue框架&#xff0c;nodejs&#xff0c;pm2纯前端部署实践。为此记录一下开发过程以及各方面遇到的问题&#xff0c;并作说明。 表单用了若…

74VHC4040使用方法

74VHC4040芯片是一款12位异步二进制计数器 Q:数据输出引脚。 CP:计数引脚。当CP引脚接收到下降沿&#xff08;从高电平电平变为低电平&#xff09;时&#xff0c;计数器的输出Q会加一。MR:复位输入。当MR引脚接收到高电平时&#xff0c;计数器的所有输出都会变为低电平&#…

特征提取匹配方案不止SuperPoint

局部特征匹配在计算机视觉领域广泛应用&#xff0c;涵盖图像检索、3D重建和目标识别等领域。然而&#xff0c;由于视点和光照变化等因素&#xff0c;改进匹配的准确性和鲁棒性仍然面临挑战。近年来&#xff0c;深度学习模型的引入引发了对局部特征匹配技术的广泛探索。这些方法…

MoonBit新增functional for loop控制流支持

1. 增加functional for loop控制流支持 与传统的命令式for loop 不同&#xff0c;循环变量是不可变的。这样的设计将来也容易抽取出来做形式化验证&#xff1a; fn init {for i 0; i < 5; i i 1 {debug(i)// i i 4 error: The variable i is not mutable.} }输出&am…

基于物联网的工业企业能耗监控系统

上海安科瑞电气股份有限公司 胡冠楠 咨询家&#xff1a;“Acrelhgn”&#xff0c;了解更多产品资讯 摘要&#xff1a;针对工业制造企业存在高能耗、高污染的问题&#xff0c;提出了一种用于工业企业能耗监控的多层级网络系统。本系统可完成企业内部电力、水资源以及燃气等能源…