1. 磐创AI-开放猫官方网站首页
  2. Medium

基于ResNet和Transformer的场景文本识别


我们遇到了许多不规则的裁剪图像,其中包含文本表示。已经引入了许多复杂的想法来从图像中提取文本。正如我已经说过的,基于光学字符识别(OCR)、RNN的seq2seq注意方法被发现是从结构图像中提取序列信息的传统方法,但许多研究人员发现它很难与不规则图像一起工作,而且训练时间较长。基于RNN的seq2seq注意方法需要输入的序列表示,不同的输入会有所不同,因此很难训练数百万幅以上的图像。由于我们要处理的是自然场景图像,所以该模型在很大程度上无法预测文本或字符。

基本上,如果我们选择任何一种模式,我们都会发现它们有一个共同点,那就是自我关注。它使模型能够通过位置对计算来绘制序列中不同位置之间的依赖关系。但是自我注意方法在词序上有效,注意机制可以看到一个句子中的所有词序。在将图像转换为文本的情况下,很难理解特征映射,也很难创建依赖关系。简而言之,我将解释两个解决图像文本识别问题的模型,它们使用强大而复杂的方法将二维CNN特征直接连接到以整体表示为指导的基于注意力的序列编码器和解码器,并使用ResNet和Transformer的概念。

目录

1.业务问题

在现实世界中,我们大多数时候都会遇到不同形式的图像。它可以是规则的、不规则的图像以及其中的文本格式。从它们中提取字符串是一项具有挑战性的任务。因此,我们已经得到了一个包含5000幅不规则的自然场景图像的数据集,业务问题是使用最先进的深度学习概念成功地从这些图像中预测字符串。

2.性能指标:

我们使用了一个自定义精度度量,它是给定预测字符串和基本事实字符串的字符序列匹配总数除以基本事实中的字符总数的比率。

3.数据来源:

数据集引用:

@InProceedings{MishraBMVC12,
author = "Mishra, A. and Alahari, K. and Jawahar, C.~V.",
title = "Scene Text Recognition using Higher Order Language Priors",
booktitle = "BMVC",
year = "2012",
}

4.探索性数据分析

我们使用的是IIIT 5K字数据集,它总共包含5000个文本图像及其相应的.mat格式的注释文件。我们必须提取图像及其字符串。

一些随机图像及其基本事实字符串字符如下所示:-

#Displaying iamge with groundtruth string charcters
for
(batch, (inp, tar)) in enumerate(train_batches):
if batch == 3:
break
plt.figure(figsize=(3, 3))
plt.title('Image' )
plt.imshow(tf.keras.preprocessing.image.array_to_img(inp[0][0]))
print(str(tar))
plt.axis('off')
plt.show()

5.ResNet体系结构简介

我们知道,深度学习模型处理训练相当大量的隐藏层。最近的证据表明,在ImageNet数据集中,更深层次的网络是非常重要的,并且取得了显著的效果。训练时间与我们使用的隐藏层数量和激活类型成正比。因此,训练更深层的神经网络更加困难。在大型神经网络中,我们经常会遇到反向传播时梯度消失等问题。

正如我们可以看到的那样,简单地堆叠图层并不能减少训练误差,并且会导致模型过拟合问题。但是为了解决这个问题,我们可以在隐含层之间增加一个中间归一化层来解决收敛问题和反向传播时的过拟合问题。

那么问题就产生了,如果我们可以用中间归一化层解决梯度问题,为什么我们需要ResNet概念?

当我们增加隐藏层时,训练错误会暴露出来,这反过来又会降低模型的性能。研究人员发现,退化与过度拟合无关,只是由于增加了更多的层而导致的,这使得模型很难优化。为了解决这个问题,ResNet在堆叠层的顶部引入了身份映射,使得梯度易于反向传播的干净网络。

F(X)定义堆叠层的输出,其大小可以是2个或更多个层。然后将快捷连接与RELU激活之前的剩余输出一起添加。这种操作既不会增加额外的参数,也不会增加计算复杂度,并且可以很容易地帮助使用随机梯度下降(SGD)进行反向传播。利用这种机制,我们可以在不影响训练精度的情况下训练更深层的神经网络。以这种方式,并添加与身份映射一起堆叠在一起的‘n’个层,从而创建ResNet体系结构。This operation neither add extra parameter nor computational complexity and can easily help in backpropagation using Stochastic Gradient Descent (SGD)

利用残差网络进行单位映射的数学方程式如下:

在上述函数中,F(x,{Wi})表示要在整个堆叠层中学习的残差映射,并且x是要与残数相加的快捷连接,条件是两者应该具有相同的维度。

还有另一种解释这个概念的方式,那就是“公路网”。此机制有点类似于LSTM网络。在高速公路网中,我们可以控制要添加到下一层的信息量。它具有数据依赖性,并且具有不在ResNet体系结构中的参数。但性能方面的RESNET被发现更具适应性,可能会出现撞击质量下降的问题。

研究人员分别用平面网络和残差网络与身份映射神经网络进行了实验,发现ResNet模型在增加额外层数的情况下仍有较好的性能。我们可以比较平面网和残差网,它们具有相同的参数数量、深度、宽度和计算量,但却给出了更好的结果,有利于ResNet。

有不同类型的ResNet。一些示例是ResNet 32、ResNet 50、ResNet 101等。它们之间的共同区别是堆叠层内的层数和彼此添加的堆叠层的数目。

现在的问题是,为什么我们需要重新构建网络架构,而不是预先训练好的VGG来进行特征提取?

由于我们知道深度学习网络的深度较大,可能需要很高的计算能力,并且随着网络深度的增加,模型过拟合和训练误差增加的可能性也会增加。在图像到文本的任务中,我们需要一个既能深入又不会耗费大量计算的网络,并提供更好的准确率增益。RESNET战胜了所有其他模型,战胜了ImageNet检测、ImageNet本地化、COCO检测和COCO分段挑战。

ResNet最大的独特之处在于,即使增加了层数,它的复杂度仍然低于VGG-16/19。

6.变压器结构简介

在变压器发展之前,序列模式是使用称为RNN网络的概念进行训练的。但是RNN对长单词序列的过去信息记忆能力很差,因此无法预测下一个连续单词。为了解决这一问题,引入了具有内部遗忘门和加法门的长短期存储器(LSTM)。忽略门只允许来自前一时间点的部分信息传递到下一时间点,而添加门允许将来自当前时间点的信息量与先前信息的一部分相加。这个概念可以通过额外增加注意力概念来解决词之间的长期依存关系。它仍然不能捕捉到大句子的依存关系,比方说1000个单词的句子。此外,我们知道句子的长度随着句子的不同而不同,所以训练时间也随着句子的不同而不同。因为在反向传播梯度时,我们必须为每个输入句子展开LSTM网络,并在每个时间步长计算梯度,从而导致训练时间较长。

因此,为了解决所有这些问题,研究人员提出了强大而简单的网络结构,即“变形金刚”,它是一种基于注意力的机制,具有与递归模型相同的特征。最重要的是,我们可以在可行的时间内将并行化应用于训练。

这篇名为“注意力就是你所需要的一切”的研究论文引入了被称为自我注意的概念,这种概念审视了整个输入句子,并创建了单词依赖关系,即使是在长句子中也能很好地发挥作用。注意机制在进行阅读理解、机器翻译、问题和回答建模等任务时是成功的。它是一种简单的重复性注意机制,具有端到端的记忆网络。它不需要序列比对的RNN或卷积网络,并且提供了更好的结果。

Transfmer的完整架构如下所示:-

不要害怕上面的架构。我将把体系结构分成几个部分,并简要说明每个内部部分的合理性。

整个体系结构分为编码器和解码器两部分。左半部分是“编码器”,右半部分是“解码器”。

编码器:它有N个堆叠的相同层,其中N可以是超参数。它又细分为多头机构和位置前馈网络两部分。对于每个叠加层,位置编码的输入矢量通过多头和捷径连接并行传递,多头的输出与捷径连接相加,然后进行层归一化。然后,输出将通过前馈网络,该前馈网络分别且相同地应用于每个位置。在每一子层引入残差网络,以便于反向传播时的收敛。

解码器:-它也是N层堆叠的相同层,其中N可以是超参数。将其细分为掩蔽多头机构、二维多头机构和位置前馈网络3个部分。对于每个叠加层,位置编码得到的输入矢量通过掩蔽多头和捷径连接并行传递,掩蔽多头的输出与捷径连接相加,然后进行层归一化。然后,输出将通过下一个2D多头注意,其中还引入了编码层的输出。然后,输出将通过前馈网络,该前馈网络分别且相同地应用于每个位置。在每一子层引入残差网络,以便于反向传播时的收敛。

让我们按时间顺序讨论整个架构。为简单起见,我们假设一个编码器和一个解码器层。

与按顺序传递输入词的RNN模型不同,我们不需要执行相同的过程。我们将一次传递完整的一句或一批句子,然后再嵌入单词。

单词嵌入将为每个边学习边训练的单词分配一个‘d’维向量。为确保每个单词按顺序排列,嵌入层的输出将通过位置编码。

位置编码确保每个单词都在其位置上。它管理输入句子或一批句子的顺序模式。

x轴是单词位置,y轴是每个单词的512维。如果我们放大上面的图片,我们会发现每个单词的位置都不一样。位置编码的输出输入到多头注意和快捷连接。

多头注意是“m”头注意机制,其中m是一个超参数。在这篇研究论文中,他们使用了8个标度的点积注意,每个词内部给出了8个头512维的向量,每个标度的点积的结果与(8*512)*k维权重矩阵相连并进行点积。这些权重通过反向传播学习。

把多头注意力想象成一个函数,它内部有8个尺度的点积注意力,它需要的自变量是3个向量。这3个矢量只是上一层的输出,所有三个矢量都是相同的。它们称为查询、键和值。Scaled Dot-Product Attify的输出为

你可以参考Jay Alammar的博客来获得详细的解释。Jay Alammar’s

多头注意的输出将与快捷连接相加,然后是层归一化。然后,它通过位置前馈网络,随后进行层归一化,因此它是来自1个编码器的最终输出。

现在我们来谈谈解码器,

与RNN不同,我们将解码器输入一次发送到单词嵌入层。这是一种教学力技术,这意味着我们从Softmax获得的输出不会反馈给解码器,而是假设它预测了正确的序列,并要求预测下一个单词序列。它允许模型快速训练,并且具有较少的计算成本。

除了一个额外的多头注意之外,解码器层具有几乎相同的子层。第一个关注层是掩蔽的多头注意,其中掩蔽是指向前看掩蔽,这意味着它限制了单词序列向前看,因为我们必须预测下一个单词。编码器的输出将提供给第二个多头注意,其余过程保持不变。来自解码器的输出通过最后的2D致密层,紧随其后的是大小等于VONAB大小的SoftMax层。

我已经使用了2个模型成功地实现了字符串的提取。我将详细讨论这两种模式。

7.型号:一款

浅谈以ResNet为编码器,以Transformer为解码器的体系结构

整个体系结构被细分为2个部分。左半部分是编码器,右半部分是解码器。

让我们先来了解一下编码器的细节。

编码器:

RESNET类型34用作特征映射和特征提取机制。从修改的ResNet34输出三维特征地图。在我的实验中,我尝试了改进的ResNet50用于更深层次的网络,与ResNet34相比,它可以给出更好的结果。特征映射进一步同时通过(1*1)卷积层和瓶颈的两个网络。来自(1*1)卷积层的输出馈送到解码子层,即第二多注意机制,并将其作为查询和关键字向量。

在本文中,研究人员使用6个堆叠的普通ResNet34作为具有剩余连接的瓶颈。来自最后一个堆栈瓶颈的输出进一步通过平均池,随后是大小为512的完全连接的致密层。密集层的输出是二维的,它被视为输入图像的字嵌入。

解码器:

解码器嵌入层的输入是字符串。输入字符串是使用附加的“”作为字符串结尾的字符标记化的。我没有使用“”,因为在位置编码之后,来自编码器最后一个致密层的输出被引入到字符嵌入中,作为字符串的开始。在本文中,他们将密集层图像字嵌入的编码器输出与位置编码连接在一起,而不是这样,我在连接之后进行位置编码,以确保图像字嵌入放在第一位,并用作“”索引。

来自前一层的输出被馈送到掩蔽的多层注意力模型,然后通过添加残差网络进行层归一化。掩码与前瞻掩码相关联。然后将输出与来自特征映射的输出一起馈送到2维注意力层,然后通过添加残差网络进行层归一化。层归一化的输出被馈入位置前馈网络,然后通过加入残差网络进行层归一化,最后通过Softmax激活的二维致密层。

实验:

我已经用修改后的ResNet50和正常ResNet50的瓶颈试用了上述架构。从最后一个瓶颈层出来的输出,然后是平均池,被重塑为2维,然后传递到大小为512的致密层。我还尝试使用自定义学习率,温暖步长等于4000,同时使用Adam作为优化器。我还尝试了光束搜索,以预测更好的产量。对该模型进行了2 32个历时的训练,发现该模型的预测正确率为87%,损失降至0.0903。

下面是关于第一模型架构的代码。

预测样本如下所示:

相应的关注度图如下图所示:

8.型号:两个

简要说明由ResNet101作为变压器编码器的输入和作为解码器的变压器的组合架构:

我们在第一个模型中已经看到,ResNet被视为编码器,而变压器被视为解码器。第二个模型的模型体系结构非常不同。这里,ResNet用于特征映射提取,并且来自图像字嵌入的输出被输入到编码器变压器。除此之外,所有内容都与我们在Transformer架构基础知识中讨论的内容相同。

术语Partial ResNet101指的是瓶颈模型,它可以进一步简化到期望的层,从而得到三维卷积特征图。它被进一步重塑为2维特征地图,随后是完全连接的2维致密层。对于输入到编码层的每幅图像,最终输出被视为字嵌入。我们使用4层堆叠的编码器和解码器,具有8个头多头注意机制。

在这里,我还尝试使用自定义学习率,温暖步长等于4000,同时使用Adam作为优化器。我还尝试了光束搜索,以预测更好的产量。我对该模型进行了500个历时的训练,发现与第一个模型相比,该模型的预测准确率为51%,损失降低到0.37,这意味着它无法预测。

下面是关于第一模型架构的代码。

预测样本如下所示:

相应的关注度图如下图所示:

我只展示了前两个头部结果。有关详细信息,请查看GitHub存储库。

9.下一步工作:

我想用不同的ResNet架构进行实验,并以更多的时代运行该模型。我还没有做过我想要试验的数据增强。

10.编号:

您可以通过My GitHub链接查看所有详细信息,该链接如下所示:

我的LinkedIn:

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/01/%e5%9f%ba%e4%ba%8eresnet%e5%92%8ctransformer%e7%9a%84%e5%9c%ba%e6%99%af%e6%96%87%e6%9c%ac%e8%af%86%e5%88%ab/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息