通过语义分割可以直接从二维空间实现检测和识别。
Spatial Attention Module(SAM)
- Mask TextSpotter 的识别模型对于处理二维空间中的常规文本和不规则文本更通用,并且同时考虑本地和全局文本信息会更有效
- 不同于之前的方法只能处理水平或者旋转文本,本文方法可以处理任意形状的文本
- Mask TextSpotter 是第一个完全可端到端训练以进行文本发现的框架,它具有简单,平滑的训练方案,因此其检测模型和识别模型可充分受益于特征共享和联合优化。
Architecture
特征金字塔网络(FPN)作为主干网络,区域建议网络(RPN)生成文本建议框,Faster R-CNN 做边框回归,执行文本实例分割,字符分割和文本序列识别的mask 分支。
Text Instance and Character Segmentation
给定一个输入 RoI 特征(大小固定位 16 × 64),通过四个卷积核为 3 × 3 的卷积层和一个卷积核为 2 × 2 的反卷积层,然后分别输入到两个模块。通过卷积层生成 1 通道的文本实例图,精确定位文本区域的位置,不管文本实例的形状。字符分割模块,字符分割图直接通过共享特征图生成。输出的字符图为 N s × 32 × 128 N_s × 32 × 128 Ns×32×128 ,其中 N s N_s Ns 表示类别数,设置为37,包含 36 个数组和字母和 1 个背景。
Spatial Attentional Module(SAM)
字符分割图的缺点:首先,字符分割需要字符级别的标注监督训练。第二,需要一个后处理算法从分割图中生成文本序列。第三,字符的顺序不能从分割图中获得。因此,为了解决这些困难,使用 SAM 以端到端的方式从特征图中解码文本序列。
SAM 直接解码为两维的特征图,可以更好的表示任意形状。
首先,给定一个特征图,这个特征图可以是Mask TextSpotter中的 RoI 特征,也可以是独立识别模块中主干网络的特征图,把这个特征图通过双线性插值调整为固定的形状。然后,接着一个卷积层,一个最大池化层,一个卷积层。最后,使用有 RNNs 的空间注意力产生文本序列。
Position Embedding(位置嵌入)
位置嵌入特征图
F
p
e
F_{pe}
Fpe 是
(
W
p
+
H
p
,
H
p
,
W
p
)
(W_p+H_p, H_p, W_p)
(Wp+Hp,Hp,Wp) ,其中
H
P
,
W
p
H_P, W_p
HP,Wp 分别是 8 和 32。位置嵌入计算如下:
F
p
e
x
(
i
,
j
,
:
)
=
o
n
e
h
o
t
(
i
,
W
p
)
F_{pe}^x(i, j, :) = onehot(i, W_p)
Fpex(i,j,:)=onehot(i,Wp)
F p e y ( i , j , : ) = o n e h o t ( j , H p ) F_{pe}^y(i, j, :) = onehot(j, H_p) Fpey(i,j,:)=onehot(j,Hp)
F p e = C o n c a t ( F p e x , F p e y ) F_{pe} = Concat(F_{pe}^x, F_{pe}^y) Fpe=Concat(Fpex,Fpey)
其中 o n e h o t ( i , K ) onehot(i, K) onehot(i,K) 表示长度为 K K K 的向量 V V V ,索引为 i i i 的元素的值设置为 1,其他的设置为 0。我们将位置嵌入特征图与原始输入特征图进行级联。级联特征图 F F F 是 ( C + H p + W p , H p , W p ) (C+H_p+W_p, H_p, W_p) (C+Hp+Wp,Hp,Wp),其中 C C C 是原始输入特征图的通道数,设置为 256。
Spatial Attention with RNNS
与一般注意力机制不同,此注意力在二维空间上学习注意力权重。假设反复执行 T T T 步,则预测出一个序列字符 y = ( y 1 , … , y T ) y = (y_1, \dots, y_T) y=(y1,…,yT)。在 t t t 步的时候,有三个输入:输入特征图,上一个隐藏状态 s t − 1 s_{t-1} st−1,上一个预测的字符 y t − 1 y_{t-1} yt−1 .
首先,把
s
t
−
1
s_{t-1}
st−1 从一个向量扩展为一个特征图
S
t
−
1
S_{t-1}
St−1,大小为
(
V
,
H
p
,
W
p
)
(V, H_p, W_p)
(V,Hp,Wp),其中
V
V
V 是 RNN 的隐藏层大小,设置为256.
S
t
−
1
=
e
x
p
a
n
d
_
d
i
m
(
s
t
−
1
,
H
p
,
W
p
)
S_{t-1} = expand\_dim(s_{t-1}, H_p, W_p)
St−1=expand_dim(st−1,Hp,Wp)
然后,计算注意力向量
α
t
\alpha_t
αt :
e
t
=
W
t
×
tanh
(
W
s
×
S
t
−
1
+
W
f
×
F
+
b
)
e_t = W_t × \tanh(W_s × S_{t-1} + W_f × F + b)
et=Wt×tanh(Ws×St−1+Wf×F+b)
α t ( i , j ) = e x p ( e t ( i , j ) ) / ∑ i ′ = 1 H p ∑ j ′ = 1 W p e x p ( e t ( i ′ , j ′ ) ) \alpha_t(i, j) = exp(e_t(i, j)) / \sum_{i' = 1}^{H_p} \sum_{j'=1}^{W_p} exp(e_t(i', j')) αt(i,j)=exp(et(i,j))/i′=1∑Hpj′=1∑Wpexp(et(i′,j′))
其中 e t e_t et 和 α t \alpha_t αt 大小为 ( H p , W p ) (H_p, W_p) (Hp,Wp) 。 W t , W s , W f , b W_t, W_s, W_f, b Wt,Ws,Wf,b 是训练权重和偏置。
接下来,我们可以通过将注意力权重应用于原始特征图
F
F
F 来获取步骤
t
t
t 的观察
g
t
g_t
gt
g
t
=
∑
i
=
1
H
p
∑
j
=
1
W
p
α
t
(
i
,
j
)
×
F
(
i
,
j
)
g_t = \sum_{i=1}^{H_p}\sum_{j=1}^{W_p} \alpha_t (i,j) × F(i,j)
gt=i=1∑Hpj=1∑Wpαt(i,j)×F(i,j)
RNN 的输入
r
t
r_t
rt 是把
g
t
g_t
gt 和上一个预测字符的字符嵌入
y
t
−
1
y_{t-1}
yt−1 级联起来的
f
(
y
t
−
1
)
=
W
y
×
o
n
e
h
o
t
(
y
t
−
1
,
N
c
)
+
b
y
f(y_{t-1}) = W_y × onehot (y_{t-1}, N_c) + b_y
f(yt−1)=Wy×onehot(yt−1,Nc)+by
r t = c o n c a t ( g t , f ( y t − 1 ) ) r_t = concat(g_t, f(y_{t-1})) rt=concat(gt,f(yt−1))
其中 W y , b y W_y, b_y Wy,by 是训练的线性转换的权重和偏置。 N c N_c Nc 是类别数,文中是 37。
把
r
t
r_t
rt 和上一个隐藏状态
s
t
−
1
s_{t-1}
st−1 输入到 RNN 中,
(
x
t
,
s
t
)
=
r
n
n
(
s
t
−
1
,
r
t
)
(x_t, s_t) = rnn(s_{t-1}, r_t)
(xt,st)=rnn(st−1,rt)
最后,使用线性转换和 softmax 函数计算在
t
t
t 步的条件概率
p
(
y
t
)
=
s
o
f
t
m
a
x
(
W
o
×
x
t
+
b
o
)
p(y_t) = softmax(W_o × x_t + b_o)
p(yt)=softmax(Wo×xt+bo)
y t ∼ p ( y t ) y_t \sim p(y_t) yt∼p(yt)
Standalone Recognition Model(独立识别模块)
Label Generation
将多边形转换为覆盖此多边形的最小面积的矩形。给定 proposal
r
r
r ,找到与之最匹配的水平矩形,也就可以找到对应的多边形和字符位置。然后,匹配的多边形和字符框将移动并调整其大小,以使 proposa l与 H×W 的目标图对齐,如下所示:
B
x
=
(
B
x
0
−
m
i
n
(
r
x
)
)
×
W
/
(
m
a
x
(
r
x
)
−
m
i
n
(
r
x
)
)
B_x = (B_{x_0} - min(r_x)) × W / (max(r_x) - min(r_x))
Bx=(Bx0−min(rx))×W/(max(rx)−min(rx))
B y = ( B y 0 − m i n ( r y ) ) × W / ( m a x ( r y ) − m i n ( r y ) ) B_y = (B_{y_0} - min(r_y)) × W / (max(r_y) - min(r_y)) By=(By0−min(ry))×W/(max(ry)−min(ry))
( B x , B y ) (B_x, B_y) (Bx,By) 和 ( B x 0 , B y 0 ) (B_{x0}, B_{y0}) (Bx0,By0) 分别是更新后的和原始的多边形的顶点, ( r x , r y ) (r_x, r_y) (rx,ry) 是proposal r r r 的顶点。
目标文本实例图
字符定位图
Optimization
L = L r p n + α 1 L r c n n + α 2 L m a s k L = L_{rpn} + \alpha_1 L_{rcnn} + \alpha_2 L_{mask} L=Lrpn+α1Lrcnn+α2Lmask
L
m
a
s
k
L_{mask}
Lmask 包含文本实例分割损失
L
i
n
s
L_{ins}
Lins ,字符分割损失
L
s
e
g
L_{seg}
Lseg 和序列识别损失
L
s
e
q
L_{seq}
Lseq
L
m
a
s
k
=
L
i
n
s
+
β
1
L
s
e
g
+
β
2
L
s
e
q
L_{mask} = L_{ins} + \beta_1 L_{seg} + \beta_2 L_{seq}
Lmask=Lins+β1Lseg+β2Lseq
L
i
n
s
L_{ins}
Lins 是一个平均二进交叉熵损失,
L
s
q
g
L_{sqg}
Lsqg 是权重空间 soft-max 损失
L
s
e
g
=
−
1
N
∑
n
=
1
N
W
n
∑
c
=
0
N
c
−
1
Y
n
,
c
l
o
g
(
e
X
n
,
c
∑
k
=
0
N
c
−
1
e
X
n
,
k
)
)
L_{seg} = - \frac{1}{N} \sum_{n=1}^{N}W_n\sum_{c=0}^{N_c-1}Y_{n,c}log(\frac{e^{X_{n,c}}}{\sum_{k=0}^{N_c -1}e^{X_{n,k}}}))
Lseg=−N1n=1∑NWnc=0∑Nc−1Yn,clog(∑k=0Nc−1eXn,keXn,c))
N
c
N_c
Nc 是类别数,
N
N
N 是每个图的像素的数量,
Y
Y
Y 是输出图
X
X
X 对应的真实值。使用权重
W
W
W 平衡正样本和背景样本的的损失值。使背景像素的数量为
N
n
e
g
N_{neg}
Nneg,背景类索引为 0,权重可以计算:
W
i
=
{
1
if
Y
i
,
0
= 1
,
N
n
e
g
/
(
N
−
N
n
e
g
)
otherwise
W_i = \begin{cases} 1 & \text{if $Y_{i,0}$ = 1}, \\ N_{neg} / (N - N_{neg}) & \text{otherwise} \end{cases}
Wi={1Nneg/(N−Nneg)if Yi,0 = 1,otherwise
L
s
e
q
L_{seq}
Lseq 如下计算:
L
s
e
q
=
−
∑
t
=
1
T
log
(
P
(
y
t
)
)
L_{seq} = - \sum_{t= 1}^{T} \log(P(y_t))
Lseq=−t=1∑Tlog(P(yt))
T
T
T 是序列的长度
α 1 , α 2 , β 1 \alpha_1, \alpha_2, \beta_1 α1,α2,β1 设置为 $1.0, $ β 2 \beta_2 β2 设置为 0.2 0.2 0.2
Inference
首先,输入一张测试图片,获得 Faster R-CNN 的输出,使用 NMS 过滤掉多余的候选框;然后,将剩下的候选框输入到 mask 分支生成文本实例图,字符图,文本序列;最后可以通过计算在文本实例图中的文本区域的轮廓得到预测的多边形。除此之外,文本序列也可以使用解码字符分割图和 SAM 的输出获得。
另外,在用词典进行推理时,提出了一种加权编辑距离算法来寻找最佳匹配词。
Decoding
使用 pixel voting 算法把预测的字符图解码为字符序列。首先,以 0.75 的阈值,二值化背景图。然后根据二值图中的连接区域获得全部字符区域,计算所有字符图中的每个区域的均值,这个值就是这个字符串的置信度。平均值最大的字符类将分配给该区域。之后,根据英语的写作习惯从左到右进行分组。
SAM 两种解码方式:贪婪算法和 Beam Search
因为有两个识别结果,可以选择置信度高的一个作为最终的识别结果
Weighted Edit Distance