手写文本识别系统的最佳实践

手写文本识别系统的最佳实践

  • 摘要
  • Introduction
  • Related Work
  • Proposed HTR System
    • Convolutional Backbone:
    • Flattening Operation:
    • Recurrent Head:
    • CTC shortcut:

Best Practices for a Handwritten Text Recognition System

摘要

手写文本识别在近年来随着深度学习及其应用的兴起而快速发展。尽管深度学习方法在文本识别性能上提供了显著的提升,但是即使在小幅改变预处理或架构/优化元素时,也能检测到性能的非微不足道的偏差。

这项工作遵循“最佳实践”的推理方式;强调简单而有效的实证实践,这些实践可以进一步帮助训练并提供性能优越的手写文本识别系统。

具体来说,作者考虑了深度HTR系统的三个基本方 面,并提出了一些简单而有效的解决方案:

在预处理步骤中保持图像的宽高比;
使用最大池化将CNN输出的3D特征图转换为一组特征序列;
通过额外的CTC损失辅助训练过程,该损失在最大池化的顺序特征上起到捷径的作用。
使用这些提出的简单修改,在考虑基本的卷积-循环>(CNN+LSTM)架构时,人们可以在IAM和RIMES数据集上获得接近最先进的结果。
代码:https://github.com/georgeretsi/HTR-best-practices/

Introduction

手写文本识别(HTR)是一个活跃的研究领域,它结合了计算机视觉和自然语言处理的思想。与机器打印文本的识别不同,手写文本与许多独特特性相关联,这使得这项任务比传统的光学字符识别(OCR)要复杂得多。手写识别的挑战性主要源于个体之间潜在的高度书写变异性。为此,除了将图像视觉解码成字符序列外,一些HTR研究还采用了语言模型来减少手写字符固有的模糊性,利用上下文和语义信息。

通常,设计一个有效且具有泛化能力的学习系统是一个持续的挑战,在不同学习到的书写风格之间的迁移性在大多数情况下并不是理所当然的。在各种各样的学习系统中,神经网络(NNs)很早就已被用于手写识别,其应用范围从较简单的子任务如单个数字识别到完整的、无约束的离线手写文本识别(HTR)。随着深度学习及其应用的兴起,近年来HTR的发展主要集中在深度神经网络(DNNs)上。Graves等人[9]的开创性工作在HTR应用中深度学习的崛起中发挥了关键作用,因为他们实现了在不假设任何先验字符分割的情况下训练循环网络。随后大量针对HTR的工作基于Graves等人的研究,以训练现代且显著有效的DNNs。

这项工作专注于寻找构建现代手写文本识别(HTR)系统的最佳实践。作者探索了一系列用于训练HTR深度神经网络(DNN)的指导原则,重新审视并扩展了作者之前几项工作的想法。作者从一个相当普遍的用于HTR的深度网络架构开始,包括一个卷积神经网络(CNN)主体和一个双向长短时记忆网络(BiLSTM) Head ,并且作者提出了一些简单而有效的架构和训练选择。这些最佳实践建议可以分类和总结如下:

预处理: 保持图像的宽高比,并使用填充图像的批次,以便有效地使用小批量随机梯度下降(SGD)。

架构方面: 用最大池化步骤替换卷积神经网络主干和循环头之间的列向连接步骤。这样的选择不仅减少了所需的参数,而且具有直观的动机:作者只关心字符的存在,而不是它的垂直位置。

训练:在CNN主干网络的输出处添加一个额外的捷径分支,该分支由单个一维卷积层组成。这个分支导致了一个额外的字符序列估计,它与循环分支并行训练。两个分支都使用CTC损失。这种选择的动机源于训练循环层难度的增加。然而,如果存在如此直接的捷径,那么CNN主干的输出应该会收敛到更具辨识性的特征,这对于充分利用循环层的能力来说,相比于端到端训练方案是更为理想的。

本文的贡献在实验部分得到了最好的体现,尽管所使用的网络简单,但作者通过前述选择取得了最先进的结果。此外,其他现有最先进的方法提出了与作者的方法正交的复杂架构和增强方案,这也突显了所建议最佳实践的重要性。

Related Work

正如计算机视觉中大多数(如果不是全部)任务的情况一样,现代手写文本识别(HTR)文献以基于神经网络的方法为主。循环神经网络(RNN)已经成为基准[15, 21],因为它们天然适合手写顺序的特性。

基于循环的方法实际上已经超越了以前的艺术水平,后者主要基于隐马尔可夫模型(HMM)方法。自从引入标准的循环网络范式[6, 7]以来,许多关键性进展为高效的汉字识别(HTR)系统铺平了道路。一个典型的例子是将长短期记忆模型(LSTMs)集成到HTR系统中[10],有效地解决了梯度消失问题。更重要的是,Graves等人[9]引入了一种非常有效的算法,用于通过动态编程训练基于序列损失的HTR系统。特别是,这种连接主义时间分类(CTC)方法及其相应的输出层[8],一个可微分的输出层,它将序列输入映射到每个时间单位的softmax输出,允许在适当的解码方案下同时进行序列对齐和识别。多维循环网络已被考虑用于HTR[15],然而有人批评额外的计算开销可能不会转化为效率的相应提高[21]。

尽管在本工作中作者将仅关注基于CTC训练网络的贪心解码,但对解码方案的研究也是活跃的[4],其中束搜索算法是一种流行的方法,能够利用外部词汇作为隐含的语言模型。

序列到序列的方法通常涉及到将一个输入序列转换成一个不同长度的输出序列,在自然语言处理中取得最先进的结果后变得非常流行,并逐渐发展成带有注意力机制的Transformer网络[29]。这类方法后来成功地被HTR社区采用[3, 19, 25, 27, 30]。

近期的研究方向包括复杂的增强方案([14, 16, 31]),新型的网络结构/模块(例如 Seq2Seq/Transformers,空间变换网络[5],可变形卷积[24])以及具有辅助训练输入的多任务损失(例如 n-gram训练[28])。

Proposed HTR System

以下,作者将详细描述所 Proposal 的手写文本识别(HTR)系统,并重点介绍建议的最佳实践修改。所描述的系统接受单词或行图像作为输入,然后根据无约束的贪心CTC解码算法[8]返回预测的字符序列。

Preprocessing
预处理步骤应用于每一张图像,包括如下:

所有图像都被调整为线条图像的1281024像素或64256像素的分辨率。初始图像通过使用图像中值(通常是零)进行填充,以便达到上述固定的尺寸。如果初始图像大于预定义的大小,图像将被重新缩放。填充选项旨在保留文本图像的现有宽高比。

在训练过程中,执行图像增强。每个图像上都应用了一种简单的全局仿射增强,仅考虑小幅度内的旋转和倾斜以生成有效的图像。此外,还对图像添加了高斯噪声。

每个单词/行的转录前后都添加了空格,即把 “He rose from” 改变为 " He rose from "。此操作旨在帮助系统在训练阶段适应大多数图像中存在的边缘空间。在测试阶段,这些额外的空格将被丢弃。

增强操作是每个现代深度学习系统的一部分,并且可以持续提供性能提升,从而实现更好的泛化能力[21]。所使用的增强方案非常基础,试图使这一步骤的开销最小化。

在转录中增加额外的空格并没有明确地参考最近的现有工作,但这是直观的,鉴于第1步中的填充操作生成了较大的空白边缘。这个步骤对作者系统有轻微但积极的影响,因此被作为一个步骤添加。由于这一步骤在整个性能中的重要性降低,因此在实验部分没有进行探讨。

另一方面,作者发现填充操作在许多设置中都是至关重要的。在许多最近的文本识别/检测工作中遇到的一个典型权衡是关于输入大小的定义:使用预定义的固定大小可以辅助卷积神经网络(CNNs)的建筑设计及训练时间的要求,而通过单独处理每张图像(例如[26])保留初始图像大小可能会以牺牲小批量选项为代价带来更好的性能。

现代深度神经网络训练依赖于创建包含多幅图像的批次,因为批量处理图像可以显著地通过充分利用GPU资源来影响训练时间。因此,在涉及深度神经网络(DNN)的任何视觉问题中,图像大小调整通常是一个广泛使用的首要步骤。相反,当处理大小不同的图像时,如果逐一处理每幅图像,并在预定义数量的图像之后更新网络的权重,就像处理了一个批次一样,这会导致即使是轻量级的DNN也出现不切实际且耗时的训练过程,使得现有硬件未能充分利用。

在这项工作中,与大多数现有方法相反,作者提出了一种简单而优雅的解决方案:作者旨在保持图像的宽高比,同时将它们组织成批处理。如果可能的话,图像在不改变尺寸的情况下转换为相同的预定义形状。具体来说,如果图像尺寸小于预定义尺寸,作者会相应地填充图像。填充操作在每个方向上均匀进行,将原始图像置于新图像的中心,使用固定值,即初始图像的中值。如果图像大于预定义尺寸,它将被调整大小,这会影响宽高比。为了辅助所提出的方法,作者可以计算初始图像集的平均高度和宽度,并选择一个合适的尺寸,以很少进行上述调整大小操作(仅对非常大的单词/句子)从而避免由于频繁违反宽高比而产生的变形。

Network Architecture
作者将要用来测试所提出技术的模型可以被描述为一个卷积-循环架构(架构概览如图1所示)。卷积-循环架构可以广泛定义为卷积 Backbone 网络后面跟着一个循环 Head ,通常连接到CTC损失。卷积-循环的变体已经为HTR [5, 21] 常规性地提供了非常好的结果。
在这里插入图片描述

Convolutional Backbone:

在作者的模型中,卷积Backbone 网络由标准卷积层和ResNet块[12]组成,并穿插了最大池化和dropout层。特别是,第一层是一个7×7卷积,输出32个通道,随后是一系列3× 3的ResNet块[12]级联:2个输出通道为64的ResNet块,4个输出通道为128的ResNet块以及4个输出通道为256的ResNet块。标准卷积和ResNet块后面都跟着ReLU激活函数、批量归一化和dropout。在块级联之间,作者用步长为2的2×2最大池化操作缩小产生的特征图,如图1所示。总体上,卷积Backbone 网络接受一行图像并输出一个尺寸为h x w × d的张量(例如,在行图像的情况下,张量的尺寸为16×128 ×256)。

Flattening Operation:

卷积Backbone 网的输出应该被转换成一系列特征序列,以便由循环神经网络进行处理。典型的手写文本识别(HTR)方法,假设采用按列处理的方式(朝向书写方向),以理想地模拟逐字符处理。在作者的工作中,通过列向的最大池化操作来展平CNN的输出。如果使用广泛应用的连接操作来展平提取的特征图,将得到长度为w的特征向量序列,其特征向量大小为hd,而最大池化则会产生大小为d的缩减特征向量。除了明显的计算优势之外,列向最大池化还能使模型在垂直方向上具有平移不变性。实际上,最大池化的背后的原理是,作者只关心特征的存在,而不关心其具体位置。

Recurrent Head:

循环组件由3个堆叠的双向长短时记忆(BiLSTM)单元组成,隐藏层大小为256。这之后是一个线性投影层,将序列转换成与可能的字符标记数相等的大小,即 (包括由CTC要求的空字符)。循环部分的最终输出可以通过应用softmax操作转换成一系列概率分布。在评估过程中,前面提到的贪心解码是通过在每一步选择概率最高的字符,然后从结果序列中移除空字符来执行的[8]。

Training Scheme
HTR系统的训练是通过Adam[13]优化器进行的,初始学习率为0.001,并逐步使用多步调度器降低。总的训练轮次为240,调度器在120和180轮次时将学习率降低10倍。

这个优化方案经过少量修改后,通常用于HTR系统。然而,作者假设了一种端到端的训练方法,其中系统的卷积和循环部分都通过最终的CTC损失进行优化。尽管这种典型方法能够产生表现良好的解决方案,但LSTM Head 可能会阻碍整个训练过程,因为循环模块已知会表现出收敛困难。

为了绕开这一训练障碍,作者引入了一个辅助分支,如图1所示。作者将这个额外的模块称为“CTC快捷通道”。以下,作者将详细描述这个模块及其功能。

CTC shortcut:

在架构方面,CTC捷径模块仅包含一个1D卷积层,其核大小为3。其输出通道数等于可能的字符标记数(nclasses)。因此,这个1D卷积层直接负责编码上下文信息,并提供一条替代的解码路径。请注意,作者力求这个辅助组件简单化,因为其目的是辅助主分支的训练,因此对于这项任务来说,仅有一层的浅卷积部分是理想的。作者不期望CTC分支能产生精确的解码结果。
CTC捷径与主架构一同通过添加两个分支相应的CTC损失并赋予适当的权重来使用多任务损失进行训练。具体来说,如果fenn表示卷积Backbone,frec表示循环部分,而f shortcut表示所提出的捷径分支,同时I是输入图像,s是其相应的转录,那么多任务损失可写为:
L c T c ( f r e e ( f e n n ( T ) ) ; s ) + 0.1 L c T r c ( f s h o r t c u t ( f e n n ( I ) ) ; s ) LcTc(free(fenn(T)); s) + 0.1 LcTrc(fshortcut(fenn(I)); s) LcTc(free(fenn(T));s)+0.1LcTrc(fshortcut(fenn(I));s)
由于CTC捷径仅作为一条辅助训练路径,其权重被设置为0.1,以减少它对整体损失的相对贡献。
这个额外分支背后的动机非常简单:通过直接的1D卷积路径,在CNN主干网络的顶部快速生成判别性特征,辅助整体收敛,从而简化循环部分的训练任务。由于其面向训练的辅助性质,CTC捷径仅在训练期间使用,在评估时省略。因此,这个提出的捷径在推理过程中不会引入任何额外开销。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件夹惊变文件?揭秘原因及解决方案

在日常工作和生活中,电脑已经成为我们不可或缺的助手。然而,有时我们会遇到一些令人困惑的问题,比如,文件夹突然变成了文件。这听起来可能有些匪夷所思,但它确实会发生,而且给用户带来了不小的麻烦。当熟悉…

java-spring-mvc(知识点讲解-第一天)-欢迎各位大佬提建议

目录 🎃MVC定义 🧨创建工程 🎨SpringMVC处理请求 请求分类及处理方式 静态请求 处理静态前端页面方式 动态请求 处理动态前端页面方式 ⚙小试牛刀 🏆常见问题 📌HTTP协议 超文本传输协议 请求 🎃MVC…

Web前端开发 小实训(二) 简易计算器

实训目的 学生能够使用函数完成简易计算器编写 操作步骤 1、请将加减乘除四个方法生成为以下函数,且有返回值 中文英语加法add减法subtract乘法multi除法division次幂pow()平方根sqrt() 提示: 除法中的除数不能为0! 参考代码&#xff1…

在线培训考试系统在线考试功能注意事项

在线培训考试系统在线考试功能注意事项 考试前务必注意是否开启防切屏、摄像头监考等防作弊措施,系统一旦检测到触发了疑似作弊行为会立刻自动交卷,考试终止; 答题者准备好后,可点击“开始答题”按钮进入考试,注意考…

代码随想录第49天|121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一…

#C++里的引用#

目录 引用概念 定义引用类型 引用特性 常引用 传引用传参 传引用做返回值 1.引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 比如&#xff1a…

【AI】一文介绍索引增强生成RAG的原理和结构

今天向大家介绍一下关于RAG的一些知识和经验。 这里说的RAG可以理解为目前针对企业知识库问答等AI应用场景的解决方案,这个场景就是利用自然语言大模型LLM与用户自有的文件进行对话的能力。 【RAG的优势】 首先,讲一讲RAG的优势特征。 如果把AI想象成一个待上岗的人类助手,…

1、Flink DataStreamAPI 概述(上)

一、DataStream API 1、概述 1)Flink程序剖析 1.Flink程序组成 a)Flink程序基本组成 获取一个执行环境(execution environment);加载/创建初始数据;指定数据相关的转换;指定计算结果的存储…

模型 AIPL(认知、兴趣、购买、忠诚)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。品牌营销的量化与链路化。 1 AIPL模型的应用 1.1 耐克如何利用AIPL模型来推广其运动鞋和服装产品? 耐克利用AIPL模型来推广其运动鞋和服装产品,具体如下: 认知(…

为什么总说抖店做不好?做抖店需要注意这些问题,是不是都占了?

大家好,我是电商花花。 今天给大家总结了4个新手不注意又常犯的几个原因,这些建议都是我们做店这些年的实操经验,可以帮助大家做店自查,有责改之,无责加冕。 1、抖店核心是选品而不是玩法 很多新手在刚开始做店抖音小…

8K+/月!学习就业一把梭,祝贺誉天数通陈同学收获心仪offer !

大家好,我是誉天数通的陈同学。 在武汉,网络运维圈的人应该都会听过誉天的名字。作为华为的授权培训合作伙伴,誉天不仅提供专业全面的工程师培训,还以其独特的环境和氛围吸引着无数有志于在网络领域发展的朋友。 一年前的我&#…

用坐标与碰撞检测效果

用pygame碰撞检测子弹 与 子弹 格子检查是否在墙内 结果差不了多少 输出的是碰撞点坐标 在计算角色与强的距离是 你用了几条射线 2024/4/26 13:20:48 在代码中,用于计算角色与墙之间距离的部分是通过投射多条射线来实现的。具体来说,在循环中&#xf…

IDEA插件

POJO to JSON —— 实体转Json Smart Input —— 自动切换中英文 Translation —— 翻译 Maven Helper —— 依赖管理 .ignore —— 忽略提交文件 enum-quick-generate —— 枚举代码生成 粘贴到项目包下

前端更优雅的使用 jsonp

前端更优雅的使用 jsonp 背景:最近项目中又使用到了 jsonp 这一项跨域的技术,(主要还是受同源策略影响),下面有为大家提供封装好的函数及对应使用示例,欢迎大家阅读理解 文章目录 前端更优雅的使用 jsonp同…

基于车载点云数据的城市道路特征目标提取与三维重构

作者:邓宇彤,李峰,周思齐等 来源:《北京工业大学学报》 编辑:东岸因为一点人工一点智能公众号 基于车载点云数据的城市道路特征目标提取与三维重构本研究旨在弥补现有研究在处理复杂环境和大数据量上的不足&#xf…

Qt设置可执行程序图标,并打包发布

一、设置图标 图标png转ico: https://www.toolhelper.cn/Image/ImageToIco设置可执行程序图标 修改可执行程序图标 添加一个rc文件,操作如下,记得后缀改为rc 打开logo.rc文件添加代码IDI_ICON1 ICON DISCARDABLE "logo.ico"在项目pro后缀名的文件中添加代码 RC_…

系统盘空间不足调优方式1-APPData/大文件清理

作者:私语茶馆 1.前言 Windows系统盘(C盘)很容易剩余空间不足,这种情况下会非常影响Windows系统的运行,系统盘约束非常多,不方便在线扩容,因此规划和利用好系统盘是保障整体运行效率的关键。包…

机器人系统开发ros2-基础实践01-学会自定义一个机器人动作aciton实体类

您之前在了解操作教程中了解了action 。与其他通信类型及其各自的接口(主题/消息和服务/srv)一样,您也可以在包中自定义操作。本教程向您展示如何定义和构建可与您将在下一个教程中编写的action服务器和action 客户端一起使用的操作。 需要理…

Rust 实战练习 - 12. Axum Web 简单demo

Rust Web 历程 Rust 的异步框架tokio非他莫属,而web框架一直是悬而未决,说到底还是因为没有官方成熟的方案指引,大家各玩各的,互不兼容,白白浪费精力。 这个事情一直等到半官方组织tokio推出axum有了改善。但是市场上…

LeetCode455:分发饼干

题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个…