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的特征图,然后所有特征图从左到右地将每一列元素串联,得到一个特征向量 xix_ixi(即一帧,一个像素的宽度, 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
将每一个特征向量xix_ixi整合成序列,CNN最终得到一个特征序列x=(x1,x2,...,xi,...,xT)x=\left(x_1,x_2,...,x_i,...,x_T \right)x=(x1,x2,...,xi,...,xT)
CNN所提取的特征序列x=(x1,x2,...,xi,...,xT)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) .
将该长度为TTT帧特征序列,将其输入至双向深度LSTM网络中,计算出每一帧的各个字母的概率分布。
特征序列x=(x1,x2,...,xi,...,xT)x=\left(x_1,x_2,...,x_i,...,x_T \right)x=(x1,x2,...,xi,...,xT)在经过LSTM的过程可以抽象为如下映射:
(由于英文有26个字母,再算上一个空白字符,故n=27n=27n=27)
则LSTM的输出为:
yyy作为LSTM的输出序列,其与输入序列xxx一样都有TTT帧:y=(y1,...,yt,...,yT),t≤Ty=\left(y_1,...,y_t,...,y_T\right), t\leq{T}y=(y1,...,yt,...,yT),t≤T
对于每一帧输出向量yty_tyt的大小为n×1n\times{1}n×1,输出向量yty_tyt中的每个元素为该位置上的对于的字母的概率。
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},则ykt,k∈Ly_k^t, k\in{L}ykt,k∈L表示第t帧被判为字母kkk的概率。
对于字母集合L={a,b,c,...,z}L=\left\{a,b,c,...,z\right\}L={a,b,c,...,z},定义LTL^TLT为所有可能的长度为TTT的字母序列所组成的集合,设
∣L∣\begin{vmatrix} L \end{vmatrix}∣∣L∣∣为集合LLL的大小,则有:
∣L∣=26,∣LT∣=26T
\begin{vmatrix} L \end{vmatrix} = 26, \begin{vmatrix} L^T \end{vmatrix} = 26^T
∣∣L∣∣=26,∣∣LT∣∣=26T
设加入空白字符后的新集合为L′=L⋃{blank}L' = L\bigcup{\left\{blank\right\}}L′=L⋃{blank},则同样有:
∣L′∣=27,∣L′T∣=27T
\begin{vmatrix} L' \end{vmatrix} = 27, \begin{vmatrix} L'^T \end{vmatrix} = 27^T
∣∣L′∣∣=27,∣∣L′T∣∣=27T
对于序列集合L′TL'^TL′T中的任一个序列π\piπ而言,即 ∀π∈L′T\forall{\pi}\in{ L'^T }∀π∈L′T,它都是一个TTT帧长度的序列,其每一帧为L′L'L′中27个字符的其中一个, 如果基于LSTM模型输出的各帧字母的概率分布序列y=(y1,...,yt,...,yT),t≤Ty=\left(y_1,...,y_t,...,y_T\right), t\leq{T}y=(y1,...,yt,...,yT),t≤T来计算L′TL'^TL′T 中所有可能的字符序列π\piπ的概率,则其概率为为:
P(π∣x)=∏i=1Tyπtt,∀π∈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  he  l  ll  oo→Bhello
h\;h e\;l\;ll\;oo \xrightarrow{\mathscr{B}} hello
hhelllooBhello
设l=B(π)l=\mathscr{B}(\pi)l=B(π), lll为去重去空后的字符序列, π∈L′T\pi\in{L'^T}π∈L′T为未去重去空的字符序列,lll可以是一个或者多个π\piπ作B\mathscr{B}B映射后的结果。
因此基于LSTM模型输出的各帧字母的概率分布序列y=(y1,...,yt,...,yT),t≤Ty=\left(y_1,...,y_t,...,y_T\right), t\leq{T}y=(y1,...,yt,...,yT),t≤T,某个字符序列可能出现的概率为:
*转录的定义:从LSTM输出的各帧字母的概率分布序列y=(y1,...,yt,...,yT),t≤Ty=\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=(y1,...,yt,...,yT),t≤Ty=\left(y_1,...,y_t,...,y_T\right), t\leq{T}y=(y1,...,yt,...,yT),t≤T的各帧中概率最大的字母所组成的序列的B\mathscr{B}B映射,即:
l∗=B(argmaxπP(π∣y))
l^* = \mathscr{B}(\rm{argmax}_{\pi}P({\pi}|y))
l∗=B(argmaxπP(π∣y))
2. 对于有词典约束的转录
对于最终输出的字符序列(转录的结果)必须存在于词典当中。
<1> 设词典集合为DDD,对于DDD中所有的序列lll,可以取是的P(l∣y)P(l|y)P(l∣y)最大的序列作为最终的识别结果,即:
l∗=argmaxl∈DP(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∗,即: