论文笔记 - Multi-Granularity Prediction for Scene TextRecognition
前言
本篇论文提出了一种可以隐式融入语言模型信息的多粒度预测策略,来进行文本识别。与其他使用语言模型的文本识别算法不同,该方法不需要在视觉模型以外显式的训练一个语言模型,而是通过NLP中常见的subword reprewsentation来构建除字符以外的监督信息,从而隐式的引入语言模型信息,并提高文本识别精度。
论文:Multi-Granularity Prediction for Scene TextRecognition
代码:MGP-STR
背景
文本识别领域最近出现较多使用语言信息的算法,如SRN,ABINet等,这些方法需要显式的增加语言模型并进行训练,增加模型参数并减慢模型运行速度,为此,本文提出了一种可以隐式融入语言模型信息方法。首先,本文基于ViT,设计一种用于学习token表达的$A^3$模块,用于预测文本序列中的字母,作为一个baseline。并在基础上,提出一种多粒度预测策略,在预测字母之外,增加2个分支,用于预测subword representation(BPE和WordPiece),从而构成一种mult-task学习范式。在推理阶段,三个分支的结果进行融合,得到最终的文本识别结果,本文的贡献如下:
- 基于ViT和$A^3$模块构建文本识别模型,已经超出现有文本识别算法
- 提出了一种可以隐式融入语言模型信息的多粒度预测策略
框架
ViT backbone
作者对ViT backbone进行修改,将原有的224x224输入尺寸修改为32x128,并将patch size设置为4,经过实验验证,调整后的ViT在文本识别任务上效果更好
$A^3$(Adaptive Addressing and Aggregation)模块
在标准ViT模型中,会在patches构成的序列前增加一个可学习的token来作为整个图片的representation,进而完成图片分类。
对于文本识别而言,需要从图片中预测一个序列,因此1个token无法完成,ViTSTR算法采取的策略是使用encoder输出的token序列$\mathbf{z}_L \in \mathbb{R}^{(N+1) \times D}$中的前$T$个来预测字符序列,$T$即为最长的文本序列长度,但这样会浪费剩余的token。
因此,本文提出$A^3$模块,来从$z_L$中学习并通过加权形成$T$个token,来完成文本序列识别,由以下公式完成:
$$
\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
$$
其中$\mathbf{U} \in \mathbb{R}^{D \times D}$为一个线性映射矩阵,可以将$\mathbf{z}_L$进行映射。$\alpha_i$为group conv,卷积核尺寸为1x1,得到的$\mathbf{m}_i \in \mathbb{R}^{(N+1) \times 1}$可以视为spatial attention mask,由此,可以通过一个函数$A_i$从token序列$\mathbf{z}_L$中学习到一个token $y{i} \in \mathbb{R}^{1 \times D}$,通过$T$个函数的学习,即可获得用于文本识别的token序列$\mathbf{Y}=\left[\mathbf{y}i\right]{i=1}^T$,经过一个全连接层以后即可完成字符序列识别
多粒度预测
上述工作仅能逐个预测字符,无法使用语言信息,因此本文引入两种拆解算法:BPE和WordPiece,将文本拆解为有语义的subword,作为监督信息,从而在不引入语言模型的同时隐式的引入语言信息。在文本识别时,字符序列识别可以基本的准确率,在遇到较难识别的图片时,通过语义信息,可以改善识别结果
在不同粒度上,字符为38分类,此时$\mathbf{m}_i$基本为各个字符的attention,BPE和WordPiece会拆解为subword,类别个数为所有subword的个数,分别为50,257和30,522,此时$\mathbf{m}_i$基本为各个subword的attention。
融合策略
本文采取决策层面的融合,即通过三个分支的置信度,通过2种方式之一,即计算整个输出序列置信度的均值或累积,然后取最大的分支结果作为最终预测文本
$$
\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和$A^{3}$模块的影响
对比$\text { MGP-STR }{\text {P=16 }}$和$\text { MGP-STR }{\text {P=4 }}$可以发现,32x128的输入尺寸以及4x4的patch size更适合文本识别
对比$\text { MGP-STR }{\text {P=4 }}$和$\text { MGP-STR }{Vision}$可以发现,$A^{3}$模块性能更好
融合策略影响
对比了纯粹使用字符分支结果,计算均值并取最大分支,以及计算累积并取最大分支,发现累积效果更好
对比三个分支的效果,发现不管是单独引入BPE或者WordPiece,采用Fuse策略后,识别效果都有所提升,甚至会提升字符序列分支的性能,说明引入的语言信息可以帮助模型训练。
backbond的影响
对比ViT的tiny,small,base三种结构,fuse策略都能提高文本识别性能。且backbone越大,效果越好
与SOTA对比
与现有的SOTA算法对比,不引入语言信息的情况下,MGP-STR模型已经超过了所有的模型,包括使用语言模型的算法。引入语言信息后,算法性能进一步提升
多粒度预测的效果
在图片1-3中,字符分支无法准确识别,但依靠另外2个分支的预测,可以得到正确的识别效果
在图片4-6中,字符分支可以准确识别,但另外2个分支更倾向于将文本预测为相近的常见单词
Attention可视化
通过可视化,可以看出字符分支的attention集中于每个字母,另外2个分支则集中于subword或整个word
速度对比
通过对比可以看出,显式地引入语言模型(ABINet)会降低模型计算速度,本文算法的参数有很大一部分集中在BPE分支和WordPiece分支(类别较多),如果考虑速度可以仅使用字符分支