论文笔记 - Multi-Granularity Prediction for Scene TextRecognition

前言

本篇论文提出了一种可以隐式融入语言模型信息的多粒度预测策略,来进行文本识别。与其他使用语言模型的文本识别算法不同,该方法不需要在视觉模型以外显式的训练一个语言模型,而是通过NLP中常见的subword reprewsentation来构建除字符以外的监督信息,从而隐式的引入语言模型信息,并提高文本识别精度。

论文:Multi-Granularity Prediction for Scene TextRecognition

代码:MGP-STR

背景

文本识别领域最近出现较多使用语言信息的算法,如SRN,ABINet等,这些方法需要显式的增加语言模型并进行训练,增加模型参数并减慢模型运行速度,为此,本文提出了一种可以隐式融入语言模型信息方法。首先,本文基于ViT,设计一种用于学习token表达的A3A^3模块,用于预测文本序列中的字母,作为一个baseline。并在基础上,提出一种多粒度预测策略,在预测字母之外,增加2个分支,用于预测subword representation(BPE和WordPiece),从而构成一种mult-task学习范式。在推理阶段,三个分支的结果进行融合,得到最终的文本识别结果,本文的贡献如下:

  • 基于ViT和A3A^3模块构建文本识别模型,已经超出现有文本识别算法
  • 提出了一种可以隐式融入语言模型信息的多粒度预测策略

框架

Pipeline

ViT backbone

作者对ViT backbone进行修改,将原有的224x224输入尺寸修改为32x128,并将patch size设置为4,经过实验验证,调整后的ViT在文本识别任务上效果更好

A3A^3(Adaptive Addressing and Aggregation)模块

在标准ViT模型中,会在patches构成的序列前增加一个可学习的token来作为整个图片的representation,进而完成图片分类。

对于文本识别而言,需要从图片中预测一个序列,因此1个token无法完成,ViTSTR算法采取的策略是使用encoder输出的token序列zLR(N+1)×D\mathbf{z}_L \in \mathbb{R}^{(N+1) \times D}中的前TT个来预测字符序列,TT即为最长的文本序列长度,但这样会浪费剩余的token。

因此,本文提出A3A^3模块,来从zLz_L中学习并通过加权形成TT个token,来完成文本序列识别,由以下公式完成:

yi=Ai(zL)=miTz~L=softmax(αi(zL))T(zLU)T\mathbf{y}_i=A_i\left(\mathbf{z}_L\right)=\mathbf{m}_i^T \tilde{\mathbf{z}}_L=\operatorname{softmax}\left(\alpha_i\left(\mathbf{z}_L\right)\right)^T\left(\mathbf{z}_L \mathbf{U}\right)^T

其中URD×D\mathbf{U} \in \mathbb{R}^{D \times D}为一个线性映射矩阵,可以将zL\mathbf{z}_L进行映射。αi\alpha_i为group conv,卷积核尺寸为1x1,得到的miR(N+1)×1\mathbf{m}_i \in \mathbb{R}^{(N+1) \times 1}可以视为spatial attention mask,由此,可以通过一个函数AiA_i从token序列zL\mathbf{z}_L中学习到一个token yiR1×Dy_{i} \in \mathbb{R}^{1 \times D},通过TT个函数的学习,即可获得用于文本识别的token序列Y=[yi]i=1T\mathbf{Y}=\left[\mathbf{y}_i\right]_{i=1}^T,经过一个全连接层以后即可完成字符序列识别

多粒度预测

上述工作仅能逐个预测字符,无法使用语言信息,因此本文引入两种拆解算法:BPE和WordPiece,将文本拆解为有语义的subword,作为监督信息,从而在不引入语言模型的同时隐式的引入语言信息。在文本识别时,字符序列识别可以基本的准确率,在遇到较难识别的图片时,通过语义信息,可以改善识别结果

在不同粒度上,字符为38分类,此时mi\mathbf{m}_i基本为各个字符的attention,BPE和WordPiece会拆解为subword,类别个数为所有subword的个数,分别为50,257和30,522,此时mi\mathbf{m}_i基本为各个subword的attention。

融合策略

本文采取决策层面的融合,即通过三个分支的置信度,通过2种方式之一,即计算整个输出序列置信度的均值或累积,然后取最大的分支结果作为最终预测文本

fMean ([c1,c2,,ceos])=1ni=1eoscifCumprod([c1,c2,,ceos])=i=1eosci\begin{aligned} &f_{\text {Mean }}\left(\left[c_1, c_2, \ldots, c_{e o s}\right]\right)=\frac{1}{n} \sum_{i=1}^{e o s} c_i \\ &f_{C u m p r o d}\left(\left[c_1, c_2, \ldots, c_{e o s}\right]\right)=\prod_{i=1}^{e o s} c_i \end{aligned}

实验

ViT和A3A^{3}模块的影响

对比 MGP-STR P=16 \text { MGP-STR }_{\text {P=16 }} MGP-STR P=4 \text { MGP-STR }_{\text {P=4 }}可以发现,32x128的输入尺寸以及4x4的patch size更适合文本识别

对比 MGP-STR P=4 \text { MGP-STR }_{\text {P=4 }} MGP-STR Vision\text { MGP-STR }_{Vision}可以发现,A3A^{3}模块性能更好

对比实验-vit

融合策略影响

对比了纯粹使用字符分支结果,计算均值并取最大分支,以及计算累积并取最大分支,发现累积效果更好

对比实验-融合策略

对比三个分支的效果,发现不管是单独引入BPE或者WordPiece,采用Fuse策略后,识别效果都有所提升,甚至会提升字符序列分支的性能,说明引入的语言信息可以帮助模型训练。

对比实验-subword

backbond的影响

对比ViT的tiny,small,base三种结构,fuse策略都能提高文本识别性能。且backbone越大,效果越好

对比实验-backbone

与SOTA对比

与现有的SOTA算法对比,不引入语言信息的情况下,MGP-STR模型已经超过了所有的模型,包括使用语言模型的算法。引入语言信息后,算法性能进一步提升

对比实验-SOTA

多粒度预测的效果

在图片1-3中,字符分支无法准确识别,但依靠另外2个分支的预测,可以得到正确的识别效果

在图片4-6中,字符分支可以准确识别,但另外2个分支更倾向于将文本预测为相近的常见单词

对比实验-mgp

Attention可视化

通过可视化,可以看出字符分支的attention集中于每个字母,另外2个分支则集中于subword或整个word

对比实验-Attention

速度对比

通过对比可以看出,显式地引入语言模型(ABINet)会降低模型计算速度,本文算法的参数有很大一部分集中在BPE分支和WordPiece分支(类别较多),如果考虑速度可以仅使用字符分支

对比实验-速度