【论文解读】图像序列识别:CRNN技术在场景文本识别中的应用与突破(附论文地址)

论文地址:https://arxiv.org/pdf/1507.05717
这篇文章的标题是《An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition》,作者是Baoguang Shi, Xiang Bai和Cong Yao,来自中国武汉的华中科技大学电子信息与通信学院。文章主要研究了基于图像的序列识别问题,特别是场景文本识别,这是基于图像的序列识别中最重要和最具挑战性的任务之一。以下是对论文内容的解读:
研究背景与动机
该论文主要集中在解决基于图像的序列识别问题,尤其是场景文本识别。以下是研究背景和动机的几个关键点:
-
深度学习在视觉任务中的成功:近年来,深度学习,特别是深度卷积神经网络(DCNN)在各种视觉任务中取得了巨大成功。然而,大多数相关工作集中在对象类别的检测或分类上,而不是序列识别。
-
序列识别的独特挑战:与一般的对象识别不同,序列识别(例如场景文本、手写文本和乐谱)要求系统预测一系列对象标签,而不是单个标签。这些序列对象的长度可能会有显著变化,这使得直接应用DCNN模型变得困难,因为它们通常处理固定尺寸的输入和输出。
-
现有方法的局限性:现有的基于DCNN的场景文本识别方法通常需要先检测单个字符,然后使用DCNN模型进行识别,这要求训练一个强大的字符检测器来准确检测和裁剪原始单词图像中的每个字符。此外,将场景文本识别视为图像分类问题的方法需要一个大型的、包含数百万类别的模型,这难以泛化到其他类型的序列对象。
-
序列建模的需求:序列识别问题需要能够捕捉序列内部的上下文信息,这是传统的DCNN模型所不具备的。递归神经网络(RNN)是为处理序列而设计的,但它们通常需要将输入对象图像转换为图像特征序列的预处理步骤,这限制了现有基于RNN的系统无法以端到端的方式进行训练和优化。
-
端到端训练的需求:为了克服现有方法的局限性,需要一个能够端到端训练的系统,即从输入图像直接到输出序列标签,无需进行复杂的预处理或多个分离的步骤。
-
实际应用的可行性:在现实世界的应用场景中,需要一个既有效又紧凑的模型,以便能够部署在资源受限的设备上。
基于这些背景和动机,论文提出了一种新的神经网络架构——卷积递归神经网络(CRNN),它结合了DCNN和RNN的优势,能够处理任意长度的序列,无需字符分割或水平尺度归一化,并且可以端到端地训练,从而在场景文本识别和其他图像序列识别任务中取得了显著的性能提升。
网络结构

CRNN
文章的主要贡献是提出了一种新的神经网络模型,名为卷积递归神经网络(CRNN),它是深度卷积神经网络(DCNN)和递归神经网络(RNN)的结合。CRNN具有以下几个显著优势:
-
可以直接从序列标签(例如单词)中学习,不需要详细的注释(例如字符)。
-
与DCNN一样,能够直接从图像数据中学习信息丰富的表示,不需要手工特征或预处理步骤。
-
与RNN一样,能够产生标签序列。
-
不受序列对象长度的限制,只需要在训练和测试阶段进行高度归一化。
-
在场景文本(单词识别)上的性能优于或与现有技术相当。
-
包含的参数比标准DCNN模型少得多,占用的存储空间更少。
网络架构

网络架构由卷积层、循环层和转录层三部分组成,卷积层自动从每个输入图像中提取特征序列,循环层对卷积层输出的特征序列的每一帧进行预测,转录层将循环层的逐帧预测转换为标签序列。CRNN可以与一个损失函数一起联合训练。
-
卷积层:使用标准的CNN模型中的卷积和最大池化层(去除全连接层)来从输入图像中提取序列化的特征表示。
-
循环层:构建在卷积层之上,使用深度双向循环神经网络,对特征序列的每一帧进行预测,输出标签分布。
-
转录层:采用Connectionist Temporal Classification (CTC) 层定义的条件概率,将逐帧预测转换为最终的标签序列。
实验结果
该论文使用了包括IIIT-5K、Street View Text和ICDAR数据集在内的标准基准测试,证明了所提出算法相对于先前技术的优势。此外,所提出的算法在基于图像的音乐乐谱识别任务中表现良好,明显验证了其通用性。
-
IIIT-5K:包含3000张从互联网收集的裁剪过的单词图像,每个图像与一个50词的词汇表关联。
-
Street View Text (SVT):包含249张来自Google街景的图像,从中裁剪出647个单词图像,每个图像与一个50词的词汇表关联。
-
ICDAR:有两个数据集,ICDAR 2003 (IC03) 包含251张场景图像和标记的文本边框,ICDAR 2013 (IC13) 继承了IC03的大部分数据,包含1015个地面真实裁剪过的单词图像。
在实验部分,作者使用了合成数据集进行训练,并在多个真实世界的测试数据集上进行了测试,没有在它们的训练数据上进行微调。尽管CRNN模型仅使用合成文本数据进行训练,但它在标准文本识别基准的真实图像上表现良好。

为了进一步了解与其它文本识别方法相比,我们所提出算法的优点,我们提供了在一些特性上的综合比较,这些特性名称为E2E Train,Conv Ftrs,CharGT-Free,Unconstrained和Model Size,如下表所示。

-
E2E Train:这一列是为了显示某种文字阅读模型是否可以进行端到端的训练,无需任何预处理或经过几个分离的步骤,这表明这种方法对于训练是优雅且干净的。
-
Conv Ftrs:这一列表明一个方法是否使用从训练图像直接学习到的卷积特征或手动特征作为基本的表示。
-
CharGT-Free:这一列用来表明字符级标注对于训练模型是否是必要的。由于CRNN的输入和输出标签是序列,因此字符级标注是不必要的。
-
Unconstrained:这一列用来表明训练模型是否受限于一个特定的字典,是否不能处理字典之外的单词或随机序列。注意尽管最近通过标签嵌入和增强学习学习到的模型取得了非常有竞争力的性能,但它们受限于一个特定的字典。
-
Model Size:这一列报告了学习模型的存储空间。在CRNN中,所有的层有权重共享连接,不需要全连接层。因此,CRNN的参数数量远小于CNN变体所得到的模型。我们的模型有830万个参数,只有33MB RAM(每个参数使用4字节单精度浮点数),因此可以轻松地移植到移动设备上。
评估指标
准确率:在不同数据集上,CRNN模型识别正确的单词或字符的比率。
编辑距离:在音乐符号识别任务中,预测的音高序列与真实标签序列之间的平均编辑距离。
应用案例
论文探讨了CRNN在光学音乐识别(OMR)问题上的应用,展示了CRNN在不同类型数据集(Clean, Synthesized, Real-World)上的性能。

结论与贡献
文章的结论部分强调了CRNN作为一种新型神经网络架构的优势,它结合了CNN和RNN的优点,能够处理不同尺寸的输入图像,并产生不同长度的预测。CRNN不需要详细的个体元素注释,且由于放弃了传统神经网络中使用的全连接层,因此模型更紧凑、效率更高。这些特性使得CRNN成为基于图像的序列识别问题的优秀方法。作者还指出,提高CRNN的速度并使其在实际应用中更加实用是未来值得探索的方向。
相关文章:
【论文解读】图像序列识别:CRNN技术在场景文本识别中的应用与突破(附论文地址)
论文地址:https://arxiv.org/pdf/1507.05717 这篇文章的标题是《An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition》,作者是Baoguang Shi, Xiang Bai和Cong Yao,…...
Vue3+CesiumJS相机定位camera
new Cesium.Camera (scene) 摄像机由位置,方向和视锥台定义。 方向与视图形成正交基准,上和右视图x上单位矢量。 视锥由6个平面定义。每个平面都由 Cartesian4 对象表示,其中x,y和z分量定义垂直于平面的单位矢量,w分量…...
turbo译码算法MAX, MAX_SCALE and MAX_STAR的比较
在Turbo码的译码算法中,MAX、MAX_SCALE和MAX_STAR是涉及对数似然比(LLR)计算时,对MAP(最大后验概率)算法或其变种Log-MAP算法中分支度量计算的几种不同处理方式。下面是对这三种方法的比较: 1.…...
关于HarmonyOS的学习
day31 购物车案例 一、加入购物车 1、点击按钮后,把当前这个列表的数据拿到,应该存储到一个数组里面 --- 数据结构,把数据存储进行数组2、假如已经把所有的数据添加数组完毕,最终应该存储进购物车里面,所谓的购物车说…...
【雅特力AT32】搭建模板工程及GPIO点灯操作
目录 AT32模板工程建立及点灯操作 建立AT32模板工程 AT32点灯操作 LED原理图GPIO寄存器LED源码分析 建立AT32模板工程 从0到编译运行详细搭建保姆教程: 【雅特力AT32】Keil 环境:搭建标准库模板工程、使用 AT-Link、Debug 里选择 CMSIS-DAP调试器 下面做…...
实战千问2大模型第三天——Qwen2-VL-7B(多模态)视频检测和批处理代码测试
画面描述:这个视频中,一位穿着蓝色西装的女性站在室内,背景中可以看到一些装饰品和植物。她双手交叉放在身前,面带微笑,似乎在进行一场演讲或主持活动。她的服装整洁,显得非常专业和自信。 一、简介 阿里通义千问开源新一代视觉语言模型Qwen2-VL。其中,Qwen2-VL-72B在大…...
数据库索引底层数据结构之B+树MySQL中的页索引分类【纯理论干货,面试必备】
目录 1、索引简介 1.1 什么是索引 1.2 使用索引的原因 2、索引中数据结构的设计 —— B树 2.1 哈希 2.2 二叉搜索树 2.3 B树 2.4 最终选择之——B树 2.4.1 B树与B树的对比(面向索引)【面试题】 3、MySQL中的页 3.1 页的使用原因 3.2 页的结构 3.2.1 页文件头和页文件…...
编译QT源码时的configure参数须知
文章目录 一、configure help原文二、configure help机译三、features 执行命令得到configure帮助文件 qtsrc/configure --help一、configure help原文 Usage: configure [options] [-- cmake-options]This is a convenience script for configuring Qt with CMake. Options…...
如何利用人工智能大模型来进行数字化营销?
这是一本关于如何利用人工智能大模型来进行数字化营销并驱动业绩增长的书。人工智能大模型是指那些具有超大规模的参数和数据的人工智能模型,它们能够在各种复杂的任务上表现出惊人的能力。 在本书中,你将学习到如何在电商、广告和用户增长等数字化营销业…...
【MRI基础】回波序列长度-echo train length ETL概念
回波序列长度 回波序列长度 (echo train length, ETL) 是磁共振成像 (MRI) 中的一个重要参数,它对图像采集时间和图像质量有显著影响。ETL 是指在单个激励脉冲之后的 MRI 序列中采集的回波数量。通过增加 ETL,可以在一个重复时间 (TR) 内收集多个回波&a…...
(179)时序收敛--->(29)时序收敛二九
1 目录 (a)FPGA简介 (b)Verilog简介 (c)时钟简介 (d)时序收敛二九 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域…...
[Visual Stuidio 2022使用技巧]2.配置及常用快捷键
使用vs2022开发WPF桌面程序时常用配置及快捷键。 语言:C# IDE:Microsoft Visual Studio Community 2022 框架:WPF,.net 8.0 一、配置 1.1 内联提示 未开启时: 开启后: 开启方法: 工具-选…...
每日奇难怪题(持续更新)
1.以下程序输出结果是() int main() {int a 1, b 2, c 2, t;while (a < b < c) {t a;a b;b t;c--;}printf("%d %d %d", a, b, c); } 解析:a1 b2 c2 a<b 成立 ,等于一个真值1 1<2 执行循环体 t被赋值为1 a被赋值2 b赋值1 c-- c变成1 a<b 不成立…...
江协科技STM32学习- P13 TIM定时器中断
🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝…...
git github仓库管理
原文链接:git github仓库管理 拉取镜像 github的仓库有两种下载方式,http和ssh,http是对外公开的,可以直接clone,ssh的一般是自己的或内部的仓库,仓库需要配置ssh-key才能使用git clone. 或者直接网页下载 #https git clone https://github.com/git/git.git #ssh…...
【JavaEE】线程安全性问题,线程不安全是怎么产生的,该如何应对
产生线程不安全的原因 在Java多线程编程中,线程不安全通常是由于多个线程同时访问共享资源而引发的竞争条件。以下是一些导致线程不安全的常见原因: 共享可变状态:当多个线程对共享的可变数据进行读写时,如果没有适当的同步机制&…...
低代码-赋能新能源汽车产业加速前行
在“双碳”战略目标的引领下,全球新能源汽车产业正经历着前所未有的发展和变革,新能源汽车整车制造成为绿色低碳转型的重要领域。在政府的大力扶持下,新能源整车制造领域蓬勃发展,已成为全球汽车产业不可逆转的重要趋势。新能源汽…...
基于UDP的简易网络通信程序
目录 0.前言 1.前置知识 网络通信的大致流程 IP地址 端口号(port) 客户端如何得知服务器端的IP地址和端口号? 服务器端如何得知客户端的IP地址和端口号? 2.实现代码 代码模块的设计 服务器端代码 成员说明 成员实现 U…...
AI大模型在知识管理平台上的应用:泛微·采知连实现自动采集.精准搜索.智能问答.主动推荐
AI技术的发展,正在推动组织知识管理模式发生变革。知识管理系统通过各种应用实现知识体系落地,当前聚焦于整合生成式AI技术,以提升业务效率。 组织在数字化进程中面临着知识增量增多、知识更新频率变快、知识与业务结合更紧密等挑战ÿ…...
JavaEE:文件内容操作(一)
文章目录 文件内容的读写---数据流字节流和字符流打开和关闭文件文件资源泄漏try with resources 文件内容的读写—数据流 文件内容的操作,读文件和写文件,都是操作系统本身提供了API,在Java中也进行了封装. Java中封装了操作文件的这些类,我们给它们起了个名字,叫做"文…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
