An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
Baoguang Shi, Xiang Bai and Cong Yao
该论文提出了一种CRNN的架构,用于基于图像的场景文本识别(scene text recognition),该架构如下:
先使用CNN提取input image的特征图,然后所有特征图从左到右地将每一列元素串联,得到一个特征向量 x i x_i xi(即一帧,一个像素的宽度, i ∈ { 1 , . . . , T } i\in\left\{1,...,T\right\} i∈{1,...,T})。
原文摘要:This means the i-th feature vector is the concatenation of the i-th columns of all the maps. The width of each column in our settings is fixed to single pixel
将每一个特征向量
x
i
x_i
xi整合成序列,CNN最终得到一个特征序列
x
=
(
x
1
,
x
2
,
.
.
.
,
x
i
,
.
.
.
,
x
T
)
x=\left(x_1,x_2,...,x_i,...,x_T \right)
x=(x1,x2,...,xi,...,xT)
CNN所提取的特征序列
x
=
(
x
1
,
x
2
,
.
.
.
,
x
i
,
.
.
.
,
x
T
)
x=\left(x_1,x_2,...,x_i,...,x_T \right)
x=(x1,x2,...,xi,...,xT)中的每一帧特征向量都对应则原始图像中的一块感受野(receptive field)。
*对于英文scene text而言,一共有26个字母
(
a
−
z
)
\left(a-z \right)
(a−z) .
将该长度为
T
T
T帧特征序列,将其输入至双向深度LSTM网络中,计算出每一帧的各个字母的概率分布。
特征序列 x = ( x 1 , x 2 , . . . , x i , . . . , x T ) x=\left(x_1,x_2,...,x_i,...,x_T \right) x=(x1,x2,...,xi,...,xT)在经过LSTM的过程可以抽象为如下映射:
(由于英文有26个字母,再算上一个空白字符,故
n
=
27
n=27
n=27)
则LSTM的输出为:
y
y
y作为LSTM的输出序列,其与输入序列
x
x
x一样都有
T
T
T帧:
y
=
(
y
1
,
.
.
.
,
y
t
,
.
.
.
,
y
T
)
,
t
≤
T
y=\left(y_1,...,y_t,...,y_T\right), t\leq{T}
y=(y1,...,yt,...,yT),t≤T
对于每一帧输出向量
y
t
y_t
yt的大小为
n
×
1
n\times{1}
n×1,输出向量
y
t
y_t
yt中的每个元素为该位置上的对于的字母的概率。
y
=
[
P
(
a
)
P
(
a
)
⋯
P
(
a
)
P
(
b
)
P
(
b
)
⋯
P
(
b
)
P
(
c
)
P
(
c
)
⋯
P
(
c
)
⋮
⋮
⋯
⋮
P
(
z
)
P
(
z
)
⋯
P
(
z
)
P
(
−
)
P
(
−
)
⋯
P
(
−
)
]
y=\begin{bmatrix} P(a) & P(a) & \cdots &P(a) \\ P(b) & P(b) & \cdots & P(b) \\ P(c) & P(c) & \cdots & P(c) \\ \vdots & \vdots & \cdots & \vdots\\ P(z) & P(z) & \cdots & P(z) \\ P(-) & P(-) & \cdots & P(-) \\ \end{bmatrix}
y=⎣⎢⎢⎢⎢⎢⎢⎢⎡P(a)P(b)P(c)⋮P(z)P(−)P(a)P(b)P(c)⋮P(z)P(−)⋯⋯⋯⋯⋯⋯P(a)P(b)P(c)⋮P(z)P(−)⎦⎥⎥⎥⎥⎥⎥⎥⎤
其中
P
(
−
)
P(-)
P(−)表示该帧识别为空白字符的概率。
设字母集合为
L
=
{
a
,
b
,
c
,
.
.
.
,
z
}
L=\left\{a,b,c,...,z\right\}
L={a,b,c,...,z},则
y
k
t
,
k
∈
L
y_k^t, k\in{L}
ykt,k∈L表示第t帧被判为字母
k
k
k的概率。
对于字母集合
L
=
{
a
,
b
,
c
,
.
.
.
,
z
}
L=\left\{a,b,c,...,z\right\}
L={a,b,c,...,z},定义
L
T
L^T
LT为所有可能的长度为
T
T
T的字母序列所组成的集合,设
∣
L
∣
\begin{vmatrix} L \end{vmatrix}
∣∣L∣∣为集合
L
L
L的大小,则有:
∣
L
∣
=
26
,
∣
L
T
∣
=
2
6
T
\begin{vmatrix} L \end{vmatrix} = 26, \begin{vmatrix} L^T \end{vmatrix} = 26^T
∣∣L∣∣=26,∣∣LT∣∣=26T
设加入空白字符后的新集合为
L
′
=
L
⋃
{
b
l
a
n
k
}
L' = L\bigcup{\left\{blank\right\}}
L′=L⋃{blank},则同样有:
∣
L
′
∣
=
27
,
∣
L
′
T
∣
=
2
7
T
\begin{vmatrix} L' \end{vmatrix} = 27, \begin{vmatrix} L'^T \end{vmatrix} = 27^T
∣∣L′∣∣=27,∣∣L′T∣∣=27T
对于序列集合
L
′
T
L'^T
L′T中的任一个序列
π
\pi
π而言,即
∀
π
∈
L
′
T
\forall{\pi}\in{ L'^T }
∀π∈L′T,它都是一个
T
T
T帧长度的序列,其每一帧为
L
′
L'
L′中27个字符的其中一个, 如果基于LSTM模型输出的各帧字母的概率分布序列
y
=
(
y
1
,
.
.
.
,
y
t
,
.
.
.
,
y
T
)
,
t
≤
T
y=\left(y_1,...,y_t,...,y_T\right), t\leq{T}
y=(y1,...,yt,...,yT),t≤T来计算
L
′
T
L'^T
L′T 中所有可能的字符序列
π
\pi
π的概率,则其概率为为:
P
(
π
∣
x
)
=
∏
i
=
1
T
y
π
t
t
,
∀
π
∈
L
′
T
P(\pi|x) = \prod_{i=1}^T y_{{\pi}_t}^t, \forall{\pi}\in{ L'^T }
P(π∣x)=i=1∏Tyπtt,∀π∈L′T
假如对scene text image “hello”的最终识别得到的序列为“_hh_e_l_ll_oo”,需要将该序列中重复的字母以及空白字符"_"去除,故引入一个“去重去空”函数映射:
B
\mathscr{B}
B ,即:
h
  
h
e
  
l
  
l
l
  
o
o
→
B
h
e
l
l
o
h\;h e\;l\;ll\;oo \xrightarrow{\mathscr{B}} hello
hhelllooBhello
设
l
=
B
(
π
)
l=\mathscr{B}(\pi)
l=B(π),
l
l
l为去重去空后的字符序列,
π
∈
L
′
T
\pi\in{L'^T}
π∈L′T为未去重去空的字符序列,
l
l
l可以是一个或者多个
π
\pi
π作
B
\mathscr{B}
B映射后的结果。
因此基于LSTM模型输出的各帧字母的概率分布序列
y
=
(
y
1
,
.
.
.
,
y
t
,
.
.
.
,
y
T
)
,
t
≤
T
y=\left(y_1,...,y_t,...,y_T\right), t\leq{T}
y=(y1,...,yt,...,yT),t≤T,某个字符序列可能出现的概率为:
*转录的定义:从LSTM输出的各帧字母的概率分布序列 y = ( y 1 , . . . , y t , . . . , y T ) , t ≤ T y=\left(y_1,...,y_t,...,y_T\right), t\leq{T} y=(y1,...,yt,...,yT),t≤T,判决出最终输出字符序列结果的过程,字符序列结果是经 l = B ( π ) l=\mathscr{B}(\pi) l=B(π)去重去空的结果。
1. 对于无词典的转录
对于最终输出的字符序列没有范围的限定,故最终识别的结果可以直接取
y
=
(
y
1
,
.
.
.
,
y
t
,
.
.
.
,
y
T
)
,
t
≤
T
y=\left(y_1,...,y_t,...,y_T\right), t\leq{T}
y=(y1,...,yt,...,yT),t≤T的各帧中概率最大的字母所组成的序列的
B
\mathscr{B}
B映射,即:
l
∗
=
B
(
a
r
g
m
a
x
π
P
(
π
∣
y
)
)
l^* = \mathscr{B}(\rm{argmax}_{\pi}P({\pi}|y))
l∗=B(argmaxπP(π∣y))
2. 对于有词典约束的转录
对于最终输出的字符序列(转录的结果)必须存在于词典当中。
<1> 设词典集合为
D
D
D,对于
D
D
D中所有的序列
l
l
l,可以取是的
P
(
l
∣
y
)
P(l|y)
P(l∣y)最大的序列作为最终的识别结果,即:
l
∗
=
a
r
g
m
a
x
l
∈
D
P
(
l
∣
y
)
l^* = \rm{argmax}_{l\in{D}}P(l|y)
l∗=argmaxl∈DP(l∣y)
但是这种做法需对整个词典遍历一遍,耗时巨大。
<2> 一般情况下,无词典转录所得到的结果
l
′
l'
l′已经较为接近真实结果了,故可以用BK_tree算法寻找出
l
′
l'
l′在词典中与之最邻近的
δ
\delta
δ个字符序列,取其中概率
P
(
l
∣
y
)
P(l|y)
P(l∣y)最大的作为最终识别结果
l
∗
l^*
l∗,即: