Bidirectional Scene Text Recognition with a Single Decoder
最后更新于
最后更新于
Transformer被提出以来,几乎刷榜了NLP的所有任务,自然而然的大伙会想到使用Transformer来做场景文字的识别。而Transformer的特点使其具有了识别弧形文字,二维文字的天然优势。这篇文章提出的Bi-STR算法便是在卷积特征之后加入了Transformer同时作为编码器和解码器,同时加入了位置编码和方向编码来作为额外的特征。Bi-STR大幅刷新了ASTER的识别准确率,尤其是长文本的识别准确率。
图1:Bi-STR网络结构图
Bi-STR的网络结构如图1所示,从图1左侧的高层架构我们可以看出它是由3个主要部分组成:
残差网络:用作图像的像素编码,用于计算其Feature Map;
由个编码层组成的编码器;
个解码层组成的解码器,解码器有两个输出,分别是从左向右(ltr)以及从右想左(rtl)。
ResNet被广泛的用于文字识别的骨干网络,这里采用了一个45层的残差网络。通过这个网络,我们可以得到输入图像的特征表示,这里表示为,或者表示为长度为的特征序列,即, 其中 。
从图1的中间部分我们可以看出,ResNet得到的特征层加上位置编码信息直接给到由自注意力机制组成的Transformer编码层,这里使用的是多头的Self-Attention。关于Transformer的详细讲解,可以看我的另外一篇文章,这里只对网络流程做一下梳理。
1: 使用不同的3个特征矩阵乘以图像特征,我们得到3个不同的向量,他们分别是Query向量(),Key向量()和Value向量()。 2: 根据我们可以得到Self-Attention的矩阵表示:
3: 多头自注意力机制
Multi-Head Self Attention是由多个Single-Head Self拼接而成的,表示为
多头Self-Attention表示为
4:与Feature Map一起提供给编码器的位置向量,它的编码方式和Transformer论文提供的方式相同。
图1右侧的是Bi-STR的解码层,它的输入一个是编码器的输出,还有三个分别是方向嵌入,词位置嵌入以及词嵌入。
首先方向嵌入是为了模拟双向RNN结构引入的编码器,作用是告诉模型是从左向右编码还是从右向左编码,关于方向编码具体的实现细节,论文中没有给出。另外两个向量分别是词向量和词位置向量,比较简单不再赘述。
解码器可以拆分成两个主要模块,第一个是Masked Multi-Head Self-Attention也叫做decoder self-attention, 他的输入是1.3.1中的所有Embeddings。它之所以叫Masked是因为输入给他的只有已经解码得到的序列的内容。解码器的第二个模块是一个Multi-Head Self Attention,也叫做decoder cross-attention,他的输入是上个解码器的输出以及图像的Feature Map。
Bi-STR的两个解码结构分别侧重于对文本和图像编码,而不是像其它的解码器笼统的把文本和图像一起输入。这种解耦的结构使得不同的模块侧重于不同的内容,更有利于网络学习不同的特征。
这篇文章介绍了使用Transformer来做文字识别,通过添加不同的embedding层来保证模型和任务的适配性,但遗憾的是几个编码器的细节作者并没有给与特别详细的解释。笔者之前也尝试过使用Transformer来进行二维文字的识别,但是考虑到Transformer的自回归的特性,导致网络的运行时间非常漫长,所以如何提升Transformer的测试速度是下一步急需解决的问题。
其中 以及是参数矩阵。