用于快速高效场景文本识别的视觉转换器
论文:Vision Transformer for Fast and Efficient Scene Text Recognition
创新点:在关于STR的工作中,重点一直放在准确性上,很少关注速度和计算要求。在准确率与速度、参数数量和计算负载(FLOPS)之间进行权衡,本文提出一种基于计算和参数高效视觉转换器(ViT)构建的简单单级模型架构的STR。
背景
在关于 STR 的工作中,重点一直放在准确性上,很少关注速度和计算要求。在这项工作中,我们试图平衡准确性、速度和效率。准确性是指识别文本的正确性。速度是通过单位时间内处理多少个文本图像来衡量的。效率可以通过处理一张图像所需的参数和计算(FLOPS)的数量来近似。参数的数量反映了内存需求,而 FLOPS 估计完成任务所需的指令数量。理想的STR是准确和快速的,同时只需要很少的计算资源。
最近,ViT证明了在ImageNet1k分类上,在非常大的数据集(如ImageNet21k和JFT-300M)上对其进行预训练,仅使用变压器编码器就有可能击败 ResNet 和 EfficientNet 等深度网络分类的性能。DeiT证明了ViT不需要大的数据集,甚至可以获得更好的结果,但必须使用知识蒸馏进行训练。利用DeiT的预训练权值,ViT是我们提出的快速高效STR (ViTSTR)的基础。
解决问题
为了平衡精度、速度和效率的重要性,我们建议利用视觉转换器(ViT)的简单性和高效性。ViTSTR是一个非常简单的模型,只有一个级,可以很容易地将基于变压器的STR的参数和FLOPS数量减半。
模型框架
ViTSTR的网络架构。输入图像首先转换为补丁。这些补丁被转换为1D矢量嵌入(扁平的2D补丁)。作为编码器的输入,可学习的补丁嵌入与每个嵌入的位置编码一起输入。该网络经过端到端的训练,以预测字符序列。[GO]是一个预先定义的序列符号的开始,而[s]代表一个空格或字符序列的结束。
ViT和ViTSTR之间的唯一区别是预测头。ViTSTR必须识别具有正确序列顺序和长度的多个字符,而不是单一对象类识别。预测是并行进行的。
编码器块内的层
每个输入都经过层归一化(LN)。多头自注意层(MSA)确定特征向量之间的关系。使用多个head可以让模型共同关注来自不同位置的不同表示子空间的信息。head数为h。多层感知器(MLP)进行特征提取。它的输入也是层规范化的。MLP由2层组成,GELU激活。LN的输出与MSA/MLP之间存在残差连接。
编译器的输入:
z
0
=
[
x
c
l
a
s
s
;
x
p
1
E
;
x
p
2
E
;
.
.
.
;
x
p
N
E
]
+
E
p
o
s
z_0 = [x_{class}; x^1_pE; x^2_pE; ...; x^N_pE] + E_{pos}
z0=[xclass;xp1E;xp2E;...;xpNE]+Epos,where
E
∈
R
P
2
C
×
D
E ∈ R^{P^2C×D}
E∈RP2C×D and
E
p
o
s
∈
R
(
N
+
1
)
×
D
E_{pos}∈R^{(N+1)×D}
Epos∈R(N+1)×D。
MSA块的输出:
z
l
′
=
M
S
A
(
L
N
(
z
l
−
1
)
)
+
z
l
−
1
z_l' = MSA(LN(z_{l−1})) + z_{l−1}
zl′=MSA(LN(zl−1))+zl−1,for
l
=
1...
L
l = 1...L
l=1...L。
MLP块的输出:
z
l
=
M
L
P
(
L
N
(
z
l
′
)
)
+
z
l
′
z_l = MLP(LN(z_l' )) + z_l'
zl=MLP(LN(zl′))+zl′,for
l
=
1...
L
l = 1...L
l=1...L。
头部由一系列线性投影组成,形成单词预测:
y
i
=
L
i
n
e
a
r
(
z
L
i
)
y_i = Linear(z^i_L)
yi=Linear(zLi),for
i
=
1...
S
i= 1...S
i=1...S。
数据增强
反转、弯曲、模糊、噪声、扭曲、旋转、拉伸/压缩、透视和收缩。使用专门针对STR的数据增强配方可以显著提高ViTSTR的准确性。
训练结果
数据集
- 训练集:
- MJSynth (MJ):由890万看起来逼真的文字图像合成而成的数据集。
- SynthText (ST):由550万单词图像合成生成的数据集。
- 测试集:
- Regular Dataset
- IIIT5K:包含3000张用于测试的图像。
- SVT:有647个图像用于测试。
- IC03:来自ICDAR2003稳健阅读竞赛的1110张测试图像。在删除长度小于3个字符的单词后,结果是867张图像。
- IC13:使用了两个版本的测试数据集:857和1015。
- Irregular Dataset
- IC15:使用了两个版本:1811和2077图像。
- SVTP:645张来自谷歌街景的测试图片。
- CT:专注于从衬衫和产品标识中捕获的弯曲文本图像,有288张图像。
- Regular Dataset
实验细节
重现了几个强基线模型的结果:CRNN、R2AM、GCRNN、Rosetta、RARE、STAR-Net和TRBA,以便与ViTSTR进行公平比较。使用不同的随机种子对所有模型进行了至少5次的训练。将测试数据集上表现最好的权重保存起来,得到平均评价分数。
对于ViTSTR,使用相同的训练配置,只是输入被调整为224 × 224以匹配预训练DeiT的尺寸。在训练ViTSTR之前,会自动下载DeiT的预训练权值文件。ViTSTR可以在没有参数冻结的情况下进行端到端训练。
指标
准确率 Accuracy:所有的预测正确的占总的比重。
精度 Precision:预测为正的样本中有多少是真正的正样本。
速度 Speed:基于2080Ti GPU上的模型运行时间。
参数数量 Parameters:是指模型训练中需要训练的参数总数。
计算量 FLOPS:每秒浮点运算次数。是一个衡量硬件性能的指标。
实验结果
- 对比其他模型的准确率
- 模型的精度、速度、参数数量和FLOPS
注意力
当注意力适当地集中在每个字符上时,ViTSTR也会关注相邻的字符。也许,上下文是在单个符号预测期间放置的。
性能惩罚
每次在STR模型中添加一个阶段时,精度都会提高,但代价是速度变慢,计算需求增加。与多阶段STR不同,额外的模块需要额外的前向传播顺序层,这些层不能并行化,从而导致显著的性能损失。