Exploring Font-independent Features for Scene Text Recognition —— 论文阅读笔记

Paper:https://arxiv.org/pdf/2009.07447.pdf

Code:https://github.com/Actasidiot/EFIFSTR

目前的场景文本识别方法没有特别关注字体的风格,因此在不同风格的字体识别会有差异,识别效果不是特别好。针对这个问题,文章提出了使用空间注意力机制和字体风格嵌入向量来学习字体无关特征,通过重建同种类别、其他多种风格的标准形态文字,使得CNN学习的特征尽可能地只与本身字符类别有关,与其本身的风格尽可能解耦。

EFIFSTR

在这里插入图片描述

EFITSTR 由三部分组成:CNN Feature Extractor,Sequence Encoder-Decoder and Attention Module,Multi-font Glyph Generation

首先输入图像 x x x,通过CNN提取视觉特征 F ( x ) F(x) F(x)

然后把提取到的特征送入 Sequence Encoder 和 Decoder 中,在每个解码步 t t t 得到解码后的结果 h ( x , t ) h(x,t) h(x,t),把 F ( x ) F(x) F(x) h ( x , t ) h(x,t) h(x,t) 一起送入到 Attention Module 中计算注意力掩模 M ( x , t ) M(x,t) M(x,t) ,代表 F ( x ) F(x) F(x) 的每个位置在当前时刻的重要性。之后,视觉特征 F ( x ) F(x) F(x) 和注意力掩模 M ( x , t ) M(x,t) M(x,t) 通过点乘得到权重向量 c ( x , t ) c(x,t) c(x,t),称为 glimpse 向量。

下一步,利用 glimpse 向量生成多字体字形,同时预测字符。使用基于GAN的字体生成器生成字体。与此同时,Sequence Decoder的 输出 h ( x , t ) h(x,t) h(x,t) 和权重向量预测当前步的字符。上下两个分支同时进行。

CNN Feature Extractor

网络结构基于 ASTER,不同的是 F ( x ) F(x) F(x) 的高度不会下采样到1。

Sequence Encoder-Decoder and Attention Module

使用 2D-Attention 机制。Sequence Encoder 和 Decoder 都使用512隐藏状态的2层LSTM。在每个编码的时间步, F ( x ) F(x) F(x) 在宽度 W W W 方向的每个特征会沿着高度 H H H 方向进行池化,然后送入到LSTM 编码器,更新隐藏状态 h e ( x , t ) h_e(x,t) he(x,t);编码器的最终状态 h e ( x , W ) h_e(x,W) he(x,W)作为解码器的初始状态。解码的时刻 t t t,LSTM解码器的隐藏状态 h ( x , t ) h(x,t) h(x,t) F ( x ) F(x) F(x) 一起送入到注意力模块,用于计算注意力掩膜矩阵(Attention Mask) M ( x , t ) M(x, t) M(x,t)
M ( x , t ) = A t t e n t i o n ( F ( x ) , h ( x , t ) ) M(x,t) = Attention(F(x), h(x,t)) M(x,t)=Attention(F(x),h(x,t))

M i j ′ ( x , t ) = t a n h ( ∑ p , q ∈ N ( i , j ) W F F p q ( x ) + W h h ( x , t ) ) M'_{ij}(x, t) = tanh(\sum_{p,q\in N(i,j)} W_FF_{pq}(x) + W_hh(x,t)) Mij(x,t)=tanh(p,qN(i,j)WFFpq(x)+Whh(x,t))

M ( x , t ) = s o f t m a x ( W M M ′ ) M(x, t) = softmax(W_MM') M(x,t)=softmax(WMM)

其中 W f , W h , W M W_f, W_h, W_M Wf,Wh,WM 是要学习的参数, N ( i , j ) N(i,j) N(i,j) ( i , j ) (i,j) (i,j) 的邻域( i − 1 ≤ p ≤ i + 1 , j − 1 ≤ q ≤ j + 1 , 1 ≤ i ≤ H , 1 ≤ j ≤ W i-1\leq p\leq i+1,j-1\leq q\leq j+1, 1\leq i \leq H, 1 \leq j \leq W i1pi+1,j1qj+1,1iH,1jW

之后,视觉特征 F ( x ) F(x) F(x) 和注意力掩模 M ( x , t ) M(x,t) M(x,t) 通过点乘得到权重向量 c ( x , t ) c(x,t) c(x,t),称为 glimpse 向量。
c ( x , t ) = M ( x , t ) ⋅ F ( x ) c(x,t) = M(x,t) \cdot F(x) c(x,t)=M(x,t)F(x)

Multi-font Glyph Generation

使用基于反卷积的字形生成网络(Glyph Generator),由 glimpse 向量和 Font Embedding 引导,来生成不同风格的目标字。

Trainable font embeddings

g ^ k ( x , t ) = G l y p h G e n ( [ c ( x , t ) ; z k ] ) , 1 ≤ k ≤ m \hat{g}_k(x,t) = GlyphGen([c(x,t);z_k]), 1 \leq k \leq m g^k(x,t)=GlyphGen([c(x,t);zk]),1km
其中 z k z_k zk 是字体向量,决定目标字体的字体风格; [ ⋅ ] [\cdot] [] 表示拼接; m m m 是选择的目标字体的数量。 z 1 , … , z m z_1, \dots, z_m z1,,zm 是当做训练参数,使用梯度下降不断优化,使得 Font Embedding 更加符合字体的风格特征。

Font-aware attentional skip connection

在这里插入图片描述

利用CNN的多尺度特征可以更准确的重建字体的形状。使用索引 i ( 1 ≤ i ≤ l ) i(1\leq i \leq l) i(1il) 表示CNN的不同尺度。使用 F i ( x ) F^i(x) Fi(x) 与其对应的注意力掩模 M i ( x , t ) M^i(x,t) Mi(x,t) 点乘,得到 glimpse 向量,然后通过全连接层或者对全通道求和进行转换,再与font embedding z k i z_k^i zki 进行拼接,最终送入生成器中。 M i ( x , t ) M^i(x,t) Mi(x,t) z k i z_k^i zki 是通过原始的 M ( x , t ) M(x,t) M(x,t) z k z_k zk 上采样得到的,注意力掩模的上采样是通过二次插值得到的,font embedding 的上采样是通过重复得到的。

Glyph Discriminator

字形辨别器:轻量级的CNN + 全连接层 + sigmoid 激活函数

给定一个字体(gt 或生成的),输出字形为真的概率
p ( y d = 1 ∣ g k ( x , t )    o r    g ^ k ( x , t ) ) p(y_d=1|g_k(x,t) \; or \; \hat{g}_k(x,t)) p(yd=1gk(x,t)org^k(x,t))
字形生成器最大化 p ( y d = 1 ∣ g ^ k ( x , t ) ) p(y_d=1|\hat{g}_k(x,t)) p(yd=1g^k(x,t)),字形辨别器最小化 p ( y d = 1 ∣ g ^ k ( x , t ) ) p(y_d=1|\hat{g}_k(x,t)) p(yd=1g^k(x,t)) 并且最大化 p ( y d = 1 ∣ g k ( x , t ) ) p(y_d=1|g_k(x,t)) p(yd=1gk(x,t))
p ( y t ) = s o f t m a x ( W o [ h ( x , t ) ; c ( x , t ) ] + b o ) p(y_t) = softmax(W_o[h(x,t); c(x,t)] + b_o) p(yt)=softmax(Wo[h(x,t);c(x,t)]+bo)

Glyph Generator and Discriminator 的具体网络结构

在这里插入图片描述

Loss Functions

由两部分损失组成(交叉熵和L1损失)
L = − ∑ t = 1 T log ⁡ p ( y t ∣ x ) + ∑ t = 1 T ∣ ∣ g ^ i t ( x , t ) − g i t ( x , t ) ∣ ∣ L = - \sum_{t=1}^T \log p(y_t|x) + \sum_{t=1}^T ||\hat{g}_{i_t}(x,t) - g_{i_t}(x, t)|| L=t=1Tlogp(ytx)+t=1Tg^it(x,t)git(x,t)
y 1 , . . . , y T y_1, ..., y_T y1,...,yT 是图像 x x x 的字符 label, i t i_t it 是从 { 1 , 2 , . . . , m } \{1, 2, ..., m\} { 1,2,...,m} 中随机采样的; g i t g_{i_t} git 是图像 x x x 的第 t 个字符对应的第 i t i_t it 个字体的字形。这种字形生成的采样方法不仅降低了计算成本,而且有助于实现良好的性能。

使用对抗训练的时候,需要迭代地优化两个损失函数:
L G = − ∑ t = 1 T [ log ⁡ p ( y t ∣ x ) + α log ⁡ p ( y d = 1 ∣ g ^ i t ( x , t ) ) ] + ∑ t = 1 T ∣ ∣ g ^ i t ( x , t ) − g i t ( x , t ) ∣ ∣ L_G = - \sum_{t=1}^T[\log p(y_t|x) + \alpha \log p(y_d=1|\hat{g}_{i_t}(x,t))] + \sum_{t=1}^T||\hat{g}_{i_t}(x,t) - g_{i_t}(x,t)|| LG=t=1T[logp(ytx)+αlogp(yd=1g^it(x,t))]+t=1Tg^it(x,t)git(x,t)

L D = − α ∑ t = 1 T [ log ⁡ p ( y d = 0 ) ∣ g ^ i t ( x , t ) + log ⁡ p ( y d = 1 ∣ g i t ∗ x , t ( ) ) ) ] L_D = -\alpha \sum_{t=1}^T [\log p(y_d=0)| \hat{g}_{i_t}(x,t) + \log p(y_d=1|g_{i_t}*x,t()))] LD=αt=1T[logp(yd=0)g^it(x,t)+logp(yd=1gitx,t()))]

α \alpha α 是超参数,设置为 0.01

Experiments

在这里插入图片描述

GG 表示 Glyph Generation

在 NFST 数据集上的结果

在这里插入图片描述

与其他方法的比较

在这里插入图片描述


仅供自己学习记录,如有侵权请联系删除。


猜你喜欢

转载自blog.csdn.net/m0_38007695/article/details/111991288