论文解析——CRNN算法

news2024/11/14 2:58:47

论文paper地址:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition

本文的主要目的是识别图片中的序列文字的识别。CRNN的主要贡献在于提出了一个网络架构,这种架构具有以下特点:

  1. 集成特征提取(Feature extraction):网络能够自动从输入图像中提取特征,这些特征捕捉了图像中与文本识别相关的信息。这通常由卷积神经网络(CNN)部分完成,它通过一系列卷积层和池化层来提取图像特征。

  2. 序列建模(Sequence modeling):CRNN进一步使用循环神经网络(RNN),尤其是长短期记忆网络(LSTM)或双向LSTM(Bi-LSTM),来处理提取的特征。这些网络擅长处理序列数据,能够捕捉时间序列中的动态特征,适用于文本识别中的字符序列。

  3. 转录(Transcription):在序列建模之后,CRNN使用转录层(例如CTC层)将特征序列转换为最终的文本序列。转录层负责将网络的输出转换为可读的文本形式。

  4. 统一框架(Unified framework):这些组件—特征提取、序列建模和转录—被整合到一个统一的框架中,这意味着它们可以一起训练和优化,而不是分开独立工作。这种端到端的训练方式提高了效率,并且有助于在整个网络中传播知识,从而提高识别性能。

总的来说,CRNN将图像处理、序列分析和文本生成的不同阶段融合在一起,形成了一个协调一致的系统,用于解决场景文本识别问题。这种架构的优势在于其能够处理任意长度的文本序列,无需词典,且具有较好的泛化能力。

与以往的场景文本识别系统相比,CRNN具有四个特点:

(1)与大多数现有算法的多个组成部分单独训练和调优不同,它是端到端可训练的。

(2)能够处理任意长度的序列,不涉及字符分割或水平尺度归一化。

(3)它不局限于任何预定义的词典,在无词典和基于词典的场景文本 识别任务中都取得了显著的成绩。

(4)CRNN的模型更小,更有利于部署。

在包括IIIT-5K、Street View Ttext和ICDAR数据集在内的标准基准上进行的实验表明,该算法优于现有技术。此外,该算法在基于图像的乐谱识别任务中表现良好,验证了算法的通用性。

下面我们来主要介绍一下CRNN的网络结构。

上图是CRNN的网络结构。

CRNN(Convolutional Recurrent Neural Network)的网络架构由三个主要部分组成,每部分负责不同的任务,共同完成图像中文本的识别工作。下面是对这三个部分的详细解释:

  1. 卷积层(Convolutional Layers)

    • 作用:卷积层是网络的第一层,负责从输入的图像中提取特征序列。这些特征序列包含了图像中与文本识别相关的信息,如边缘、角点、纹理等。
    • 操作:通常包括一系列卷积操作和池化操作,这些操作能够自动学习到图像的有效特征表示。
  2. 循环层(Recurrent Layers)

    • 作用:循环层建立在卷积层提取的特征序列之上,用于预测每个特征向量(帧)的标签分布。这一层能够处理序列数据,并能够捕捉时间序列中的动态特征,例如文本字符的序列关系。
    • 操作:通常使用双向长短期记忆网络(Bi-directional Long Short-Term Memory, Bi-LSTM)作为循环层,它能够同时处理前向和后向的信息,从而更好地理解文本序列的上下文。
  3. 转录层(Transcription Layer)

    • 作用:转录层是网络的最后一层,负责将循环层预测的每帧标签分布转换成最终的标签序列,即识别出的文本字符串。
    • 操作:这一层通常使用CTC(Connectionist Temporal Classification)算法,它能够处理不定长的序列输入和输出,并且可以忽略序列中的空白符(blank characters),从而将模型的预测转换为正确的文本序列。

整体来看,CRNN的网络架构是一个端到端的系统,它将图像特征提取、序列建模和文本转录整合在一起,形成了一个统一的框架。这种设计使得CRNN能够有效地处理图像中的文本识别任务,无论是在有词典还是无词典的情况下,都能够实现出色的识别性能。此外,CRNN的设计允许它自然地处理任意长度的文本序列,无需进行字符分割或水平尺度归一化,这使得它在处理场景文本识别问题时具有很大的灵活性和鲁棒性。

我们首先来看卷积层的特征提取模块

特征提取模块使用的是标准的CNN网络,使用了卷积层和max-pooling层,去掉了全连接层。在进入CNN网络之前,输入会被scale到同样的高度,经过CNN网络后,CNN网络的输出的特征图会被切分成序列化的特征图,切分后的序列化的特征图,会作为循环网络的输入。

在卷积层特征提取之后,有一个切分的操作。由于卷积、max-pooling等操作是在图像局部信息上进行处理,它们是平移不变的。所以,在模型结构那张图上,经过卷积计算后的特征层Convolutional feature maps,是可以切分成一条条的特征的,每一条特征对应输入图的一部分,并且是位置对应的,如上图所示。这样切分的好处主要是将输入图转换成序列化的表示,从而可以应对变长的文本识别问题。

再来看循环层

请添加图片描述

循环层使用的是Deep bi-LSTM网络(上图所示),将多个bi-LSTM堆叠在一起,就是deep bi-LSTM。其作用是预测每一个输入xt,对应的标签的分布yt。xt是CNN提取后的特征序列中的一个。在特征预测层,使用循环网络有三个好处:

(1)RNN具有很强的捕获序列中上下文信息的能力。在基于图像的序列识别中,使用上下文线索比单独处理每个符号更稳定、更有帮助。以场景文本识别为例,宽字符可能需要连续几帧才能完全描述。

(2)一些容易混淆的字符,如果能够处理上下文序列的信息,就很容易识别出来。比如识别"il",如果模型能够处理上下文字符的高度信息,就比单独去识别i和l,识别率更高一些。

(3)RNN可以和CNN联合使用,反向传递误差来更新模型。

最后是转录层

转录层的作用是将RNN预测的每块的结果转换成一个label序列。转录层有两种不同的转录模式:无词典模式(Lexicon-free mode)和基于词典模式(Lexicon-based mode)。

  1. 转录的定义

    • 转录是将循环神经网络(RNN)对每一帧(frame)所做的预测转换成最终的标签序列(label sequence)的过程。在数学上,转录是根据每一帧的预测找到具有最高概率的标签序列。
  2. 无词典模式(Lexicon-free mode)

    • 在这种模式下,转录过程中不使用任何词典。词典通常是一个预定义的标签序列集合,例如拼写检查字典。无词典模式意味着预测不受任何预定义词汇的限制,网络可以自由地生成任何可能的标签序列。
  3. 基于词典模式(Lexicon-based mode)

    • 在这种模式下,转录过程中使用词典来约束预测。词典可以是一个包含有效单词或字符序列的集合,例如一个拼写检查字典。基于词典的转录意味着在生成最终标签序列时,网络会选择那些在词典中出现并且具有最高概率的标签序列。
  4. 两种模式的比较

    • 无词典模式提供了更大的灵活性,因为它允许网络识别任何可能的文本序列,而不受预定义词汇的限制。这在处理未知单词或拼写时特别有用。
    • 基于词典模式则利用了词典中的先验知识,可以提高识别的准确性,特别是在处理已知词汇或需要拼写校正的应用中。
  5. 转录的数学基础

    • 转录层通常使用条件概率来定义标签序列的概率。这意味着给定每一帧的预测,转录层会计算所有可能的标签序列的概率,并选择概率最高的序列作为最终输出。

CRNN的转录层是将RNN的逐帧预测转换为最终文本序列的关键步骤,它可以通过无词典模式或基于词典模式来实现。这两种模式提供了不同的权衡,允许CRNN适应不同的应用场景和需求。

在转录层,作者使用Connectionist Temporal Classification (CTC) layer作为条件概率,使用CTC的好处是可以将其作为损失函数统一转录层、RNN和CNN层的反向参数传递,end-to-end的训练整个模型。

(CTC的原理掠过,搞不懂)。

最后来看一下训练过程,数据集的构建形式是X={Ii, Li},Ii是训练的image,Li是GT的标签序列。目标函数是最小化GT的条件概率的负对数似然。

其中,yi是由RNN和CNN生成的序列,输入图像经过网络直接到最后计算这个目标函数的值。因此,整个网络是可以做到端到端训练的。

上图是网络的细节。

从上图的结果中可以看到,在多个数据集上,不管是基于lexicon的场景,还是lexicon free的场景,在多个数据集上都做到了最高的识别率。

请添加图片描述

对于乐谱,也是可以识别的。

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

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

相关文章

基于飞腾平台的Kafka移植与安装

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

java基础 之 集合与栈的使用(一)

文章目录 集合特点(从整体性来看)区别List接口(一)实现类:ArrayList(二)实现类:LinkedList 集合 java集合可分为Set、List、Queue和Map四种体系。其中List、Set、Queue均继承自Coll…

ADC静态误差

0 前言 图1 表示测量数据精密度高,但准确度较差;图2 表示测量数据的准确度高,但精密度差;图3 表示测量数据精密度和准确度都好,即精确度高。 1 简介 模数转换器(ADC)广泛用于各种应用中&…

Spring Cloud开发实战(一)- 搭建一个Eureka+Feign+LoadBalancer 项目

Spring Cloud开发实战(一)- 搭建一个EurekaFeignLoadBalancer 项目 文章目录 Spring Cloud开发实战(一)- 搭建一个EurekaFeignLoadBalancer 项目0.内容简介1.Eureka服务注册与发现1.1.什么是服务注册与发现1.2.Eureka注册中心1.2.…

Android 系统与SDK和JDK版本对照表

Android 系统与SDK和JDK版本对照表 传说中的兼容问题是指在高版本 SDK 平台开发的软件,可能在低版本 Android 系统中运行时出现各种问题。而低版本 SDK 开发的软件在高版本 Android 系统中运行时基本没有兼容问题的。 Android版本SDK/API版本JDK版本备注Android 14…

springboot宠物相亲平台-计算机毕业设计源码16285

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库的介绍 2.2 B/S架构的介绍 2.3 Java语言 2.4 SpringBoot框架 3 宠物相亲平台系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济…

unplugin-vue-components 插件配置 忽略 部分目录下的组件自动导入

背景 vue3 项目 为了省略 第三方库ui 组件 全局组件的注册代码,使用了 unplugin-vue-components 插件 原理 组件识别 在编译阶段,unplugin-vue-components 会扫描 Vue 单文件组件(.vue 文件)的模板部分,识别出所有使…

从零开始掌握进程间通信:管道、信号、消息队列、共享内存大揭秘

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米,今天我们来聊一聊操作系统中的一个重要话题——进程间通信(Inter-Process Communication,简称IPC)。IPC是指在不同进程间传递数据…

01.docker安装、配置、常用命令、dockerfile、镜像上传下载和Harbor仓库搭建

1.docker安装 1.1移除旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine1.2安装yum-utils获取yum-config-manager [rootlocalhost ~]# yum install -y yum-utils …

图论之最短路径问题(朴素Dijksra算法\堆优化版Dijksra算法\Bellman-Ford\SPFA)

朴素Dijskra算法 时间复杂度:,适用于稠密图,需要用邻接矩阵来存储。 算法描述 设起点为s,dist[v] 表示起点到v点的最短距离。 a)初始化 dist[v]INF(v!s),dist[s] 0 这里一共有n个点,第一个点(起点)初始化为0,其余都初始化为in…

COFFEE AI PARTNER -- 神奇的AI工具,相当我雇佣了一个AI员工,淘汰你的是会使用AI的人

COFFEE AI PARTNER介绍 COFFEE AI PARTNER是由 AI JAVA开发的一款生成式人工智能工具(又名AI助手),尝试一下。 首先域名似乎正在备案中,企业邮箱似乎正在采购,目前服务地址是:COFFEE AI PARTNER-官网 官网…

基于JSP技术的教学质量评价系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:JSP 数据库:MySQL 技术:JSPJavaBeans 工具:MyEclipse、Tomcat、Navicat 系统展示 首页 管理员功能模块 学生功…

前端面试:八股文系列(一)

更多详情:爱米的前端小笔记(csdn~xitujuejin~zhiHu~Baidu~小红shu)同步更新,等你来看!都是利用下班时间整理的,整理不易,大家多多👍💛➕🤔哦!你们…

大学新生入门编程的最佳路径

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

微服务架构三大利器:限流、降级与熔断

文章目录 前言一、限流(Rate Limiting)二、降级(Degradation)三、熔断(Circuit Breaker)四、三者关系总结 前言 限流、降级和熔断是分布式系统中常用的容错策略,它们各自承担着不同的角色&#…

5.Gateway-微服务统一网关

5.Gateway-微服务统一网关 1.为什么需要网关2.Spring Cloud Gateway2.1 引入依赖2.2 编写启动类2.3 配置路由规则2.4 路由断言(Predicates)2.5 过滤器(Filters)2.6 熔断机制 1.为什么需要网关 统一访问入口:在微服务架…

【微分方程——高数】

7.二阶常系数非齐次线性微分方程(重点) 8.欧拉方程(重点)

Prompt提示工程上手指南:基础原理及实践-Prompt个性知识库引导

前言 Prompt系列的第二期文章已经将所有的Prompt工程主流策略讲解完毕,共涉及到六种Prompt类别模型以及具体生产内容详解。再结合系列第一篇文章具体对Prompt工程的详细介绍,也就可以达到Prompt工程师的初步入门,现在如果掌握了这些基础技能…

缓存击穿

概念 缓存击穿问题也叫热点key问题,指的是一个被高并发访问并且缓存重建业务较为复杂的key突然失效了,大量的请求会到达数据库给数据库带来巨大的冲击。 常见解决方法有两种:互斥锁,逻辑过期。 优缺点 : 基于互斥锁的…

Python多进程:如何在不依赖Queue的情况下传递结果

随着数据的爆炸式增长,网络爬虫成为获取信息的强大工具。在爬取大量数据时,多进程技术可以显著提高效率。然而,如何在多进程中传递结果,而不依赖Queue,成为了一个值得探讨的问题。本文将以采集抖音短视频为案例&#x…