SVTR:Scene Text Recognition with a Single Visual Model

传统的文本识别算法是CNN+RNN,但是由于LSTM的效率较低,很多移动设备对LSTM的加速效果并不好,所以在实际的应用场景中也存在诸多限制,SVTR利用swin transformer替代构建局部和全局混合块,提取多尺度的特征,使得不需要RNN去构建序列依赖也能实现更好的效果

什么是 SVTR ?

  • a-d 代表 4 类文本识别模型,分别是传统 CRNN+CTC、CNN/多头自注意力模型+多头注意力、视觉语言模型、SVTR
  • 传统的文本识别算法是CNN+RNN,但是由于LSTM的效率较低,很多移动设备对LSTM的加速效果并不好,所以在实际的应用场景中也存在诸多限制,SVTR利用swin transformer替代构建局部和全局混合块,提取多尺度的特征,使得不需要RNN去构建序列依赖也能实现更好的效果

SVTR 的网络结构?

  • 输入:输入是已经检测好的文本区域
  • Patch Embedding:对输入图像序列化,看图输出是(H/4, W/4),所以取输入的 4 x 4 区域作为一个 token,但是这里又做个改变,通过两层 CBR 取重叠的 3 x 3 卷积对其进行两次下采样,也可得到输出
  • Mixing Block:对输入的 tokens 加自注意力机制,输入输出均是 hw×di1hw\times d_{i-1}
  • mergin:将 tokens 转为卷积输入的 4 D 形式,并使用卷积对其进行下采样,输入是 hw×di1hw\times d_{i-1},输出是 h2×w×di1\frac {h} {2}\times w\times d_{i-1}
  • Combing:使用"自适应全局平均池化"将高度 H 变为1,然后对每个 tokens 的隐变量变换 (D2->D3)

SVTR 的 Patch Embedding?

  • 已知 swin 是直接使用一个步长为4的4×4卷积进行无重叠的 patch embedding,而svtr则是使用两个步长为2的3×3卷积进行有重叠的patch embedding(延续的CNN的作风,感受野更大,提取局部信息的表达能力也会比swin的patch embedding要好)

SVTR 的 Mixing Block?

  • 上图 (a)、(b)分别表示 Global Mixing、Local Mixing
  • Global Mixing:类似 transformer ,在全部 tokens 上构建自注意力,首先特征图经过线性变换投影到三个空间,然后 q 矩阵和 k 矩阵的转置进行矩阵乘法、softmax 操作得到 attention 矩阵,最后和 v 矩阵进行矩阵乘法得到输出
  • Local Mixing:类似 swin-transformer,在一个固定窗口建立自注意力,这样可以降低计算成本同时获取更多局部注意力。注意:swin 是通过 reshape 这种类似的方式来进行滑窗,并将不同的窗口累加到通道维度上,而 SVTR 则是直接使用值为0的 mask 操作。SVTR 这种做法和 swin 相比,计算复杂度还是比较高

SVTR 和 swin-transformer 的区别?

  • svtr 是一个三级逐步下采样的网络(和 swin transformer 一样,下采样三次),和 CNN 架构一样,由 block + 下采样模块组成
  • 其 block 模块和普通的 swin 中的 block 模块一致,都是 self-attention + mlp。不同的是,SVTR 中 self-attention 的方式和 swin 的滑动窗口有一定的差异

参考:

  1. SVTR论文学习 - 知乎
  2. 《SVTR: Scene Text Recognition with a Single Visual Model》解读 - 知乎