今天是进入公司实习的第三周了,在小组内负责的工作主要是和自然场景文本检测相关的内容。这里把看过的论文做一下翻译和整理,也方便自己日后查看。
Paper:STN-OCR: A single Neural Network for Text Detection and Text Recognition
Github地址:https://github.com/Bartzi/stn-ocr
检测和识别自然场景图像中的文本是一项具有挑战性但尚未完全解决的任务。近年来,已经提出了几种试图解决两个子任务(文本检测和文本识别)中的至少一个的新系统。在本文中,我们提出了STN-OCR,这是迈向场景文本识别的半监督神经网络的一步,可以进行端到端的优化。与大多数由多个深度神经网络和几个预处理步骤组成的现有作品相比,我们建议使用单个深度神经网络,该网络学习以半监督方式从自然图像中检测和识别文本。 STN-OCR是一个集成并共同学习空间变换器网络的网络[16],可以学习检测图像中的文本区域,以及文本识别网络,它采用识别的文本区域并识别其文本内容。我们研究了我们的模型在一系列不同任务(行为的检测和识别以及文本行)上的行为方式。公共基准数据集的实验结果显示了我们的模型处理各种不同任务的能力,而整体网络结构没有实质性变化。
文本在我们的日常生活中无处不在。文本可以在文档,道路标志,广告牌和其他对象(如汽车或电话)上找到。自动检测和读取自然场景图像中的文本是系统的重要组成部分,可用于几个具有挑战性的任务,如基于图像的机器翻译,自动驾驶汽车或图像/视频索引。近年来,在自然场景中检测文本和识别文本的任务已经引起了计算机视觉和文档分析社区的极大兴趣。此外,在计算机视觉的其他领域最近的突破[10,16,25,26]使得能够创建比以前更好的场景文本检测和识别系统[5,9,28]。
尽管可以看出光学字符识别(OCR)的问题已经解决了打印文档文本,但是检测和识别自然场景图像中的文本仍然是具有挑战性的。包含自然场景的图像表现出大量的光照变化,透视扭曲,图像质量,文本字体,不同的背景等。大多数现有的研究工作开发了端到端的场景文本识别系统,包括复杂的两步,其中第一步是检测图像中的文本区域,第二步是识别该识别区域的文本内容。大多数现有作品只关注这两个步骤中的一个。
在本文中,我们提出了一个解决方案,该解决方案由单个深度神经网络(DNN)组成,可以学习以半监督的方式检测和识别文本。这与现有作品相反,在现有作品中,文本检测和文本识别系统以完全监督的方式单独训练。最近的工作[3]表明,卷积神经网络(CNNs)能够学习如何解决复杂的多任务问题,同时以端到端的方式进行训练。
我们的动机是利用CNN的这些功能,创建一个端到端的场景文本识别系统,通过将任务划分为更加像人类一样的行为,分成较小的子任务并相互独立地解决这些子任务。为了实现这一行为,我们学习了一个DNN,它能够将输入图像划分为子任务(单个字符,单词甚至文本行)并相互独立地解决这些子任务。这是通过联合学习使用循环空间变换器[16,31]作为注意机制和文本识别网络的定位网络来实现的(参见图1,系统的示意图)。 在此设置中,网络仅接收图像和该图像中包含的文本的标签作为输入。 文本的本地化是由网络本身学习的,使这种方法成为半监督。
我们的贡献如下:(1)我们提出了一个系统,该系统是通过集成空间变换器网络来解决端到端场景文本识别的一个步骤。 (2)我们以半监督的方式训练我们提出的端到端系统。(3)我们证明我们的方法能够在一系列标准场景文本检测和识别基准上达到最先进的有竞争力的水平。 (4)我们向研究界提供代码1和训练模型2。
本文的结构如下:在第2节中,我们概述了与我们相关的其他研究人员的工作。第3节详细描述了我们提出的系统,并提供了如何训练这样一个系统的最佳实践。 我们在第4节中展示和讨论我们在标准基准数据集上的结果,并在第5节中总结我们的发现。
多年来,已经开发并发布了用于场景文本检测和识别的不同方法的丰富环境。 几乎所有系统都使用两步过程来执行场景文本的端到端识别。 第一步是检测文本区域并从输入图像中提取这些区域。 第二步是识别文本内容并返回这些提取的文本区域的文本字符串。
还可以将这些方法分为三大类:(1)依赖手工制作和人类先验知识所提取出特征的系统用于文本检测和文本识别。 (2)系统使用深度学习方法和手工制作的功能,或两个不同的深度网络用于这两个步骤中的每一步。 (3)系统不包括两步法,而是使用单个深度神经网络进行文本检测和识别。 我们将在下面讨论每个类别的一些系统。
手工制作的特征
在开始时,基于手工制作的特征和人类知识的方法已被用于执行文本检测。这些系统使用MSER [24],Stroke Width Transforms [4]或HOG-Features [32]等功能来识别文本区域并将它们提供给系统的文本识别阶段。 在文本识别阶段,使用滑动窗口分类器[21]和使用HOG特征[33]的SVM [34]或k-最近邻分类器的集合。 所有这些方法都使用手工制作的功能,这些功能具有多种超级参数,需要专业知识才能正确调整它们以获得最佳效果。
深度学习方法
最近的系统通过使用DNN的方法在端到端识别系统的一个或两个步骤中基于手工制作的特征交换方法。 Gómez和Karatzas [5]提出了一种特定于文本的选择性搜索算法,该算法与DNN一起可用于检测自然场景图像中的(扭曲的)文本区域。 古普塔等人。 [9]提出了一种基于YOLO-Architecture [25]的文本检测模型,该模型使用完全卷积深度神经网络来识别文本区域。 然后,通过这些方法识别的文本区域可以用作基于执行文本识别的DNN的其他系统的输入。
Bissacco等人提出了一个完整的端到端架构,使用手工制作的功能执行文本检测。识别的文本区域被二值化,然后用作深度完全连接的神经网络的输入,该神经网络独立地对每个找到的字符进行分类。 Jaderberg等人[15,17]提出了几种使用深度神经网络进行文本检测和文本识别的系统。[17] Jader-berg等人提出了一种滑动窗口文本检测方法,该方法以多种分辨率在图像上滑动卷积文本检测模型。文本识别阶段使用单个字符CNN,它跨越确定的文本区域。该CNN与用于文本检测的CNN共享其权重。在[15] Jaderberg等人。建议使用具有用于文本检测的额外边界框回归CNN的区域提议网络和将整个文本区域作为输入并且在预定义的单词词典上执行分类的CNN,使得该方法仅适用于一种给定语言。
Goodfellow等人。 [6]提出了一个房屋号码的文本识别系统,由Jaderberg等人提炼。 [18]用于无约束的文本识别。该系统使用单个CNN,它将完整提取的文本区域作为输入,并提供该文本区域中包含的文本。这是通过为给定单词中的每个可能字符设置一个独立分类器来实现的。基于这个想法,他等人。 [11]和Shi等人。 [27,28]提出了将从提取的文本区域中识别字符作为序列识别问题的文本识别系统。他等人。 [11]使用一种朴素的滑动窗口方法,创建文本区域的切片,用作其文本识别CNN的输入。由文本识别CNN产生的特征用作预测字符序列的递归神经网络(RNN)的输入。在我们关于纯场景文本识别的实验中(参见4.3节了解更多信息)我们使用了类似的方法,但是我们的系统使用了更复杂的滑动窗口方法,其中滑动窗口的选择由网络自动学习而不是由手。施等人。 [27]利用CNN,该CNN使用完整文本区域作为输入并产生一系列特征向量,这些特征向量被馈送到RNN,RNN预测提取的文本区域中的字符序列。该方法基于文本区域的宽度生成固定数量的特征向量。这意味着对于仅包含几个字符但与文本区域具有足够多字符的宽度相同的文本区域,此方法将生成用作RNN输入的相同数量的特征向量。在我们的纯文本识别实验中,我们利用我们的方法的力量来学习在提取的文本区域中处理最重要的信息,因此只产生尽可能多的特征向量。施等人。 [28]通过首先添加额外的步骤来改进他们的方法,该步骤利用空间变压器网络[16]的整流能力来纠正提取的文本行。 其次,他们在网络中添加了一种软关注机制,有助于在输入图像中生成字符序列。 在他们的工作中,Shi等人。 利用空间变换器作为额外的预处理步骤,使识别网络更容易识别图像中的文本。 在我们的系统中,我们使用空间变换器作为核心构建块,以半监督的方式检测文本。
端到端的可训练方法
所提出的系统总是使用两步法来检测和识别场景文本图像中的文本。 虽然最近的方法利用深度神经网络,但他们仍然在任一步骤中或在两个步骤的结果融合在一起的时刻使用大量手工制作的知识。 史密斯等人。 [30]提出了一种端到端的可训练系统,能够使用单个DNN检测和识别法国街道名称标志上的文本。 与我们的系统相比,系统不可能提供图像中文本的位置,只能提取文本内容。 此外,我们的方法中使用的注意机制显示出更像人类的行为,因为它依次本地化并识别来自给定图像的文本。
试图查找和阅读文本的人将以顺序方式这样做。 第一个动作是将注意力放在一行文本上,按顺序读取每个字符,然后处理下一行文本。 大多数用于场景文本识别的当前端到端系统不以这种方式运行。 这些系统试图通过一次从图像中提取所有信息来解决问题。 我们的系统首先尝试按顺序参加图像中的不同文本区域,然后识别每个文本区域的文本内容。为此,我们创建了一个简单的DNN,包括两个阶段:(1)文本检测(2)文本识别。 在本节中,我们将介绍文本检测阶段使用的注意概念和所提出系统的整体结构。 我们还报告了成功培训此类系统的最佳实践。
Jaderberg等人提出的空间变换器[16]是DNN的可微分模块,它采用输入特征映射I并对该特征映射应用空间变换,产生输出特征映射O.这种空间变换器模块是三个部分的组合。 第一部分是计算函数f( loc)的定位网络,其预测要应用的空间变换的参数θ。 在第二部分中使用这些预测参数来创建采样网格,该采样网格定义输入要素图的哪些要素应映射到输出要素图。 第三部分是可微分插值方法,它采用生成的采样网格并生成空间变换的输出特征映射O.我们将在以下段落中简要描述每个组件。
关于STN网络结构的构成以及原理如下:
1、Localisation Network
Localisation Network的输入是特征图U,输出是变换参数θ,即θ=floc(U),该层的结构通常是一个全连接网络或者卷积网络后接一个回归层来训练参数θ。θ的规模取决于具体的变换,当变换取二维仿射变换时,θ是一个6维(2*3)的向量。
2、Grid Generator
该层利用Localisation 层输出的变换参数θ,将输入的特征图进行变换,以仿射变换为例,这里就需要上一篇博客里介绍的双线性插值了,即输出特征图上某一位置(xti,yti)根据变换参数θ映射到输入特征图上某一位置(xsi,ysi),具体如下:
但此时往往(xsi,ysi)会落在原始输入特征图的几个像素点中间部分,所以需要利用双线性插值来计算出对应该点的灰度值。需要补充的是,文中在变幻时用都都是标准化坐标,即xi,yi∈[−1,1]。(如果不太理解仿射变换和双线性插值,可以参考我的上一篇博客 Spatial Transformer Networks论文笔记(一)——仿射变换和双线性插值),文中给出了该层两个例子,如下图:
## 标题 ##
3、Sampler
在讲过上面两个部分后,我们可以知道,对于输出特征图上的每一个点,都可以和输入特征图上的某些像素点灰度值建立具体的联系,具体表示成如下公式:
上式中,Vci为输出特征图上第c个通道某一点的灰度值,Ucnm为输入特征图上第c个通道点(n,m)的灰度值,该点的灰度是由某种插值方法确定,k()为具体的采样核,它定义了输入和输出特征图的重要关系。可以这样理解:(1)输出特征图上某一点Vci的灰度对应于输入特征图上某一点(xsi,ysi)的灰度值,而这点的灰度值由周围的若干点的灰度值Ucnm共同确定并且距离(xsi,ysi)越近(距离关系由xsi−m和ysi−m确定),影响越大(权重越大);(2)具体的灰度插值方法由k()中Φx和Phiy确定。当采用双线性插值方法时,公式如下:
与公式(3)不同的是,(5)中定义的双线性插值使得目标灰度值只与(xsi,ysi)
周围4个点的灰度有关。具体来说,当|xsi−m|或者|ysi−m|大于1时,对应的max()项将取0,也就是说,只有(xsi,ysi)周围4个点的灰度值决定目标像素点的灰度并且当1−|xsi−m|和1−|ysi−m|越小,影响越大(即离点(xsi,ysi))越近,权重越大。
我们工作中使用的网络包括两个主要部分。 第一个是定位网络,它采用输入图像并预测N个变换矩阵,它们应用于N个相同的网格,形成N个不同的采样网格。 生成的采样网格以两种方式使用:
(1)用于计算所识别的文本区域的边界框
(2)用N个采样网格对输入图像进行采样,提取N个文本区域。 然后,在识别网络中使用N个提取的文本图像来执行文本识别。 通过仅提供关于每个文本区域的文本标签的信息来对端到端的整个系统进行训练。
用于训练模型的训练集X由一组输入图像I和一组用于每个输入图像的文本标签L I组成。我们不使用任何标签来训练文本检测阶段。这个阶段只是通过使用通过计算交叉熵损失或CTC损失获得的误差梯度来学习检测文本区域。在我们的实验中,我们发现,当从头开始训练时,一个检测和识别两个以上文本行的网络不会收敛。该问题的解决方案是执行一系列预训练步骤,其中难度逐渐增加。此外,我们发现选择用于训练网络的优化算法对网络的收敛有很大影响。我们发现使用随机梯度下降(SGD)在较简单的任务上预训练网络是有益的,而Adam [20]则用于在具有更多文本行的图像上微调已经预先训练好的网络。我们认为SGD在预训练期间表现更好,因为学习率η在较长时间内保持不变,这使得文本检测阶段能够探索输入图像并更好地找到文本区域。随着学习速率的降低,检测阶段的更新变得更小,并且文本检测阶段(理想地)落在已经找到的文本区域上。同时,文本识别网络可以开始使用提取的文本区域并学习识别该区域中的文本。在使用SGD训练网络时,重要的是要注意选择过高的学习率会导致模型早期出现分歧。我们发现,使用1-5和5-7之间的初始学习率几乎适用于所有情况,除非网络只能进行微调。在这里,我们发现使用Adam是更可靠的选择,因为Adam以自适应方式选择每个参数的学习率,因此不允许检测网络像使用SGD时那样彻底地进行探索。
后面的内容由于篇幅原因这里就不提及了。主要就是针对不同的数据集,实验的效果比对。