手写文本识别系统的最佳实践
- 摘要
- 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捷径仅在训练期间使用,在评估时省略。因此,这个提出的捷径在推理过程中不会引入任何额外开销。