简介
图1:论文原文
前面两篇文章介绍了场景文本检测方法
C
T
P
N
{\rm CTPN}
C T P N 和文本识别方法
C
R
N
N
{\rm CRNN}
C R N N ,它们都是相关领域内比较经典的工作。这两篇文章对应地将场景文本识别分为两大步骤:检测 和识别 。今天介绍的文章是发表在
C
V
P
R
2018
{\rm CVPR\ 2018}
C V P R 2 0 1 8 上的关于端到端 的场景文本识别方法,它可以通过单个网络直接在给定场景中提取可能的文本内容。最终,该模型在多项数据集中均取得了良好的结果。论文原文 源码
0. Abstract
自然场景下的文本识别是最具挑战的工作之一,当前大多数方法都是将其拆分为两个过程:检测和识别。论文提出一种端到端的模型,
F
O
T
S
{\rm FOTS}
F O T S ,它可以同时检测和识别 场景中的文本。特别地,论文提出
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 以共享检测和识别过程中的卷积运算。
论文贡献 :(一)提出一种端到端的场景文本识别模型,它可以共享检测和识别过程的卷积运算;(二)提出
R
o
I
R
o
t
a
t
e
RoIRotate
R o I R o t a t e 算子,它能够基于文本建议区域提取文本特征;(三)
F
O
T
S
{\rm FOTS}
F O T S 在多项数据集上达到了
S
O
T
A
{\rm SOTA}
S O T A ;(四)首次提出将场景文本识别模型以端到端的方式训练,为以后的研究提供了一种可行的思路。
1. Introduction
传统的场景文本识别方法主要通过检测和识别两个单独的阶段完成,且现在深度学习在该领域内占据主动。在文本检测 阶段,首先通常使用卷积神经网络提取特征,然后使用解码器对特征图进行处理;在文本识别 阶段,模型主要是使用循环神经网络顺序地预测单个字符,最后完成整个序列的预测。上述两种方法都不能很好地利用图像信息或序列信息。
论文提出一种端到端的场景文本识别方法,它可以在单个网络中同时检测和识别文本。同时它可以共享检测和识别过程中的卷积运算,这主要得益于
R
O
I
R
o
t
a
t
e
ROIRotate
R O I R o t a t e 。如下图展示了
F
O
T
S
{\rm FOTS}
F O T S 与两阶段场景文本识别模型的对比:
图2:FOTS与两阶段算法
F
O
T
S
{\rm FOTS}
F O T S 的整体流程如下:
图3:FOTS流程
首先 ,使用卷积神经网络提取输入图像特征;其次 ,上面是文本检测分支,它用于检测文本的边界框;然后,
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 结合
C
N
N
{\rm CNN}
C N N 提取的特征和文本检测模块产生的建议区域,产生建议区域的文本特征。接着 ,将
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 的结果送入
R
N
N
{\rm RNN}
R N N 和
C
T
C
{\rm CTC}
C T C 中就构成了下面的文本识别分支。最后 ,综合两个分支的结果得到最终的文本检测和识别结果。
2. Related Work
2.1 Text Detection
大多数基于传统 的文本检测方法都是将文本序列的检测视为单个字符的检测。具体地,首先模型单独地检测每个字符可能的位置,然后使用滑动窗口或连通分量将单个字符连接起来形成最终的序列检测结果。显然,这个过程并没有利用序列间各元素间的语义信息,最终可能会产生诸多不完整的检测结果。
基于深度学习 的文本检测方法首先使用卷积神经网络提取图像特征,然后使用
R
N
N
{\rm RNN}
R N N 等将各检测区域相连。这样,最终的检测结果不仅包含图像的语义信息,也包含了序列的文本信息。这类方法主要基于通用目标检测方法,如
C
T
P
N
{\rm CTPN}
C T P N 、
S
e
g
L
i
n
k
{\rm SegLink}
S e g L i n k 等。
2.2 Text Recognition
文本识别模型的输入通常是感兴趣文本区域,然后将解码序列作为输出。当前文本识别模型主要分为三类:基于字符分类,基于序列到标签解码,基于序列到序列解码。
基于字符分类 的方法首先建立一个字符字典,然后将文本识别问题转化成字符的多分类问题。显然当待检测序列的字符种类足够多时,我们需要建立庞大的字典,这回带来繁琐的操作。基于序列到标签解码 的方法基于输入序列产生最大概率的标签,常与条件随机场相结合。基于序列到序列解码 的方法常用于文本翻译,它的输入序列和输出序列都是可变长的。
2.3 Text Spotting
大多数的场景文本识别首先产生包含文本的感兴趣区域,然后使用文本识别模型提取区域内容作为预测结果输出。后来,也有将二者继承到单个模型中,比如使用经典目标检测算法
S
S
D
{\rm SSD}
S S D 检测文本区域,然后使用
C
R
N
N
{\rm CRNN}
C R N N 进行文本识别。
3. Methodology
3.1 Overalll Architecture
图
3
3
3 展示了
F
O
T
S
{\rm FOTS}
F O T S 的整体结构。在
C
N
N
{\rm CNN}
C N N 部分使用的是
R
e
s
N
e
t
{\rm ResNet}
R e s N e t -
50
{\rm 50}
5 0 ,同时基于
F
P
N
{\rm FPN}
F P N 的思想,这里有一个上采样的过程,将低层语义信息和高层语义信息相融合。在文本检测分支,使用卷积特征作为输入,输出每个像素的预测结果。基于检测分支得到的建议区域以及卷积特征,
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 得到相应维度的向量,且保持区域的宽高比不变。最后由文本检测分支输出文本区域,文本识别分支提取文本内容。整个过程可以看作是
C
N
N
+
L
S
T
M
+
C
T
C
{\rm CNN+LSTM+CTC}
C N N + L S T M + C T C 。文本识别分支的结构如下:
图4:文本识别分支
3.2 Text Detection Branch
在检测分支,首先使全卷积作用于卷积特征图上,该卷积的结果作为密集预测。第一个通道 为该像素为正样本的概率;对于每个正样本,接下来的四个通道 为该像素到对应文本四个边界的距离;最后一个通道 用于预测边界框的方向。最后,使用阈值化和非极大值抑制处理这些正样本,得到预测结果。为应对正负样本的不均衡,实验阶段还加入了在线难例负样本挖掘。
检测分支的损失函数由两部分组成:文本区域分类和边界框回归,及分类损失和回归损失。分类损失为下采样后特征图上相应像素点的分类损失和。分类损失只涉及正样本集合,其具体定义如下:
L
c
l
s
=
1
∣
Ω
∣
∑
x
∈
Ω
H
(
p
x
,
p
x
∗
)
=
1
∣
Ω
∣
∑
x
∈
Ω
(
−
p
x
∗
l
o
g
p
x
−
(
1
−
p
x
∗
)
l
o
g
(
1
−
p
x
)
)
(1)
L_{cls}=\frac{1}{|\Omega|}\sum_{x\in\Omega}{\rm H}(p_x,p_x^*)=\frac{1}{|\Omega|}\sum_{x\in\Omega}(-p_x^*{\rm log}p_x-(1-p_x^*){\rm log}(1-p_x))\tag{1}
L c l s = ∣ Ω ∣ 1 x ∈ Ω ∑ H ( p x , p x ∗ ) = ∣ Ω ∣ 1 x ∈ Ω ∑ ( − p x ∗ l o g p x − ( 1 − p x ∗ ) l o g ( 1 − p x ) ) ( 1 )
这是典型的二分类交叉熵损失函数形式,且所有损失值的计算定义在正样本集合
Ω
\Omega
Ω 内。在回归损失部分,结合
I
o
U
{\rm IoU}
I o U 损失和旋转角度损失后得到的形式如下:
L
r
e
g
=
1
∣
Ω
∣
∑
x
∈
Ω
I
o
U
(
R
x
,
R
x
∗
)
+
λ
θ
(
1
−
cos
(
θ
x
,
θ
x
∗
)
)
(2)
L_{reg}=\frac{1}{|\Omega|}\sum_{x\in\Omega}{\rm IoU}({\bold R}_x,{\bold R}_x^*)+\lambda_{\theta}(1-\cos(\theta_x,\theta_x^*))\tag{2}
L r e g = ∣ Ω ∣ 1 x ∈ Ω ∑ I o U ( R x , R x ∗ ) + λ θ ( 1 − cos ( θ x , θ x ∗ ) ) ( 2 )
则得到的文本检测分支的损失函数如下:
L
d
e
t
e
c
t
=
L
c
l
s
+
λ
r
e
g
L
r
e
g
(3)
L_{detect}=L_{cls}+\lambda_{reg}L_{reg}\tag{3}
L d e t e c t = L c l s + λ r e g L r e g ( 3 )
3.3 RoIRotate
由上面的叙述可知,我们通过文本检测分支得到许多感兴趣文本区域,然后它作为
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 的一部分输入。
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 对输入区域变换,获得坐标轴对齐的特征图。简单来说,它是文本检测和文本识别间的桥梁,通过文本检测得到的各种倾斜的、变化的区域固定为水平的、固定宽的区域,以此作为文本识别分支的输入。这一过程同
S
T
N
{\rm STN}
S T N 类似,整个过程依靠仿射变换完成。如下图:
图5:RoIRotate
在变换过程中固定每个区域的高度以及宽高比,根据输入区域的宽度来动态调整输出区域的宽度。与
R
o
I
P
o
o
l
i
n
g
{\rm RoI\ Pooling}
R o I P o o l i n g 和
R
o
I
A
l
i
g
n
{\rm RoIAlign}
R o I A l i g n 相比,
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 提供了一种更为通用的特征提取方式。同时与
R
R
P
N
{\rm RRPN}
R R P N 中使用最大池化相比,
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 使用双线性插值计算输出。该系列操作避免了感兴趣区域和提取特征间的不对齐,并且使得输出特征长度可变,这更适用于文本识别。
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 的具体过程可以分为两个步骤:首先 ,通过预测或真实文本区域计算仿射变换参数,然后 ,在卷积特征图上应用仿射变换,得到文本区域的水平特征图。其中,第一步可以描述如下:
t
x
=
l
∗
cos
θ
−
t
∗
sin
θ
−
x
(4)
t_x=l*\cos\theta-t*\sin\theta-x\tag{4}
t x = l ∗ cos θ − t ∗ sin θ − x ( 4 )
t
y
=
t
∗
cos
θ
+
l
∗
sin
θ
−
y
(5)
t_y=t*\cos\theta+l*\sin\theta-y\tag{5}
t y = t ∗ cos θ + l ∗ sin θ − y ( 5 )
s
=
h
t
t
+
b
(6)
s=\frac{h_t}{t+b}\tag{6}
s = t + b h t ( 6 )
w
t
=
s
∗
(
l
+
r
)
(7)
w_t=s*(l+r)\tag{7}
w t = s ∗ ( l + r ) ( 7 )
M
=
[
cos
θ
−
sin
θ
0
sin
θ
cos
θ
0
0
0
1
]
[
s
0
0
0
s
0
0
0
1
]
[
1
0
t
x
0
1
t
y
0
0
1
]
=
s
[
cos
θ
−
sin
θ
t
x
cos
θ
−
t
y
sin
θ
sin
θ
cos
θ
t
x
sin
θ
+
t
y
cos
θ
0
0
1
s
]
(8)
\begin{aligned} \bold M &=\left[ \begin{array}{ccc} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{array} \right] \left[ \begin{array}{ccc} s & 0 & 0 \\ 0 & s & 0 \\ 0 & 0 & 1 \end{array} \right] \left[ \begin{array}{ccc} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{array} \right]\\ \\ &=s \left[ \begin{array}{ccc} \cos\theta & -\sin\theta & t_x\cos\theta-t_y\sin\theta \\ \sin\theta & \cos\theta & t_x\sin\theta+t_y\cos\theta \\ 0 & 0 & \frac{1}{s} \end{array} \right]\tag{8} \end{aligned}
M = ⎣ ⎡ cos θ sin θ 0 − sin θ cos θ 0 0 0 1 ⎦ ⎤ ⎣ ⎡ s 0 0 0 s 0 0 0 1 ⎦ ⎤ ⎣ ⎡ 1 0 0 0 1 0 t x t y 1 ⎦ ⎤ = s ⎣ ⎡ cos θ sin θ 0 − sin θ cos θ 0 t x cos θ − t y sin θ t x sin θ + t y cos θ s 1 ⎦ ⎤ ( 8 )
式
(
4
)
(4)
( 4 ) 到式
(
7
)
(7)
( 7 ) 是通过计算得到的放射变换参数。上式
(
8
)
(8)
( 8 ) 中右端第一个矩阵为旋转矩阵 ,第二个矩阵为缩放矩阵 ,第三个矩阵为平移矩阵 。将上述三个矩阵共同作用于一幅图像,就构成了图像的放射变换,即得到式
(
8
)
(8)
( 8 ) 中最后的仿射变换矩阵。其中,
h
t
h_t
h t 和
w
t
w_t
w t 分别表示经仿射变换后特征图的宽度和高度。
(
x
,
y
)
(x,y)
( x , y ) 表示卷积特征图上的点,
(
t
,
b
,
l
,
r
)
(t,b,l,r)
( t , b , l , r ) 表示该点离相应文本边界框四个边界的距离,
θ
\theta
θ 表示框的方向。则经仿射变换后得到的感兴趣区域为:
V
i
j
c
=
∑
n
h
s
∑
m
w
s
U
n
m
c
k
(
x
i
j
s
−
m
;
Φ
x
)
k
(
y
i
j
s
−
n
;
Φ
y
)
(9)
V_{ij}^c=\sum_n^{h_s}\sum_{m}^{w_s}U_{nm}^ck(x_{ij}^s-m;\Phi_x)k(y_{ij}^s-n;\Phi_y)\tag{9}
V i j c = n ∑ h s m ∑ w s U n m c k ( x i j s − m ; Φ x ) k ( y i j s − n ; Φ y ) ( 9 )
其中
U
n
m
c
U_{nm}^c
U n m c 表示位置为
(
n
,
m
)
(n,m)
( n , m ) 、通道
c
c
c 的输入像素值,
V
i
j
c
V_{ij}^c
V i j c 表示位置为
(
i
,
j
)
(i,j)
( i , j ) 、通道
c
c
c 的输出像素值,
Φ
\Phi
Φ 是
k
(
)
k()
k ( ) (双线性插值)的参数,
h
s
h_s
h s 和
w
s
w_s
w s 是输入特征图的高和宽。上式相当于从输入的
(
x
i
j
s
,
y
i
j
s
)
(x_{ij}^s,y_{ij}^s)
( x i j s , y i j s ) 位置确定目标
(
x
i
j
t
,
y
i
j
t
)
(x_{ij}^t,y_{ij}^t)
( x i j t , y i j t ) 的过程,即
(
x
i
s
y
i
s
1
)
=
M
−
1
(
x
i
t
y
i
t
1
)
(10)
\begin{pmatrix} x_i^s\\ y_i^s\\ 1 \end{pmatrix}= \bold M^{-1} \begin{pmatrix} x_i^t\\ y_i^t\\ 1 \end{pmatrix}\tag{10}
⎝ ⎛ x i s y i s 1 ⎠ ⎞ = M − 1 ⎝ ⎛ x i t y i t 1 ⎠ ⎞ ( 1 0 )
式
(
9
)
(9)
( 9 ) 中的
k
(
)
k()
k ( ) 表示双线性插值,实际上我们可以将其写为:
V
i
j
c
=
∑
n
h
s
∑
m
w
s
U
n
m
c
max
(
0
,
1
−
∣
x
i
j
s
−
m
∣
)
max
(
0
,
1
−
∣
y
i
j
s
−
n
∣
)
(11)
V_{ij}^c=\sum_n^{h_s}\sum_{m}^{w_s}U_{nm}^c\max(0,1-|x_{ij}^s-m|)\max(0,1-|y_{ij}^s-n|)\tag{11}
V i j c = n ∑ h s m ∑ w s U n m c max ( 0 , 1 − ∣ x i j s − m ∣ ) max ( 0 , 1 − ∣ y i j s − n ∣ ) ( 1 1 )
最后,我们从图
5
5
5 中可以看到,各感兴趣区域都被填充为固定宽度 的输出,该宽度由最长的序列决定。
3.4 Text Recognition Branch
文本识别分支由卷积序列、一个双向
L
S
T
M
{\rm LSTM}
L S T M 、一个全卷积层和
C
T
C
{\rm CTC}
C T C 组成。首先 ,输入经过几个卷积和池化操作以提供更加丰富的特征,得到特征图
L
∈
R
C
×
H
×
W
\bold L\in \R^{C×H×W}
L ∈ R C × H × W ;接着 ,将特征图按时间形式展开作为
R
N
N
{\rm RNN}
R N N 的输入,为
l
1
,
.
.
.
,
l
W
∈
R
C
×
H
{\bm l_1},...,{\bm l_W} \in \R^{C×H}
l 1 , . . . , l W ∈ R C × H 。这里使用的是双向
L
S
T
M
{\rm LSTM}
L S T M ,
D
=
256
D=256
D = 2 5 6 。隐藏层状态为
h
1
,
.
.
.
,
h
W
∈
R
D
{\bm h_1},...,{\bm h_W} \in \R^{D}
h 1 , . . . , h W ∈ R D 。产生的结果为
x
t
∈
R
∣
S
∣
x_t\in\R^{|S|}
x t ∈ R ∣ S ∣ ,
S
S
S 为字符类别;然后 ,将
L
S
T
M
{\rm LSTM}
L S T M 产生的结果送入全连接层,并通过加入
D
r
o
p
o
u
t
{\rm Dropout}
D r o p o u t 防止过拟合;最后,使用
C
T
C
{\rm CTC}
C T C 将单个字符的预测结果连接成最后整个序列的预测结果,其中
C
T
C
{\rm CTC}
C T C 在上文
C
R
N
N
{\rm CRNN}
C R N N 中已经介绍。
基于
S
S
S 的隐藏状态
h
t
{\bm h}_t
h t 得到的分布的概率为
x
t
{\bm x}_t
x t ,真实值为
y
∗
=
{
y
1
,
.
.
.
,
y
T
}
{\bm y}^*=\{y_1,...,y_T\}
y ∗ = { y 1 , . . . , y T } ,得到条件概率:
p
(
y
∗
∣
x
)
=
∑
π
∈
B
−
1
(
y
∗
)
p
(
π
∣
x
)
(12)
p({\bm y}^*|{\bm x})=\sum_{\pi\in B^{-1}({\bm y}^*)}p(\pi|{\bm x})\tag{12}
p ( y ∗ ∣ x ) = π ∈ B − 1 ( y ∗ ) ∑ p ( π ∣ x ) ( 1 2 )
该公式的含义同
C
R
N
N
{\rm CRNN}
C R N N 中的类似,具体内容可以参考上文。则文本识别分支对应的损失函数为:
L
r
e
c
o
g
=
−
1
N
∑
n
=
1
N
log
p
(
y
n
∗
∣
x
)
(13)
L_{recog}=-\frac{1}{N}\sum_{n=1}^N\log p({\bm y}_n^*|{\bm x})\tag{13}
L r e c o g = − N 1 n = 1 ∑ N log p ( y n ∗ ∣ x ) ( 1 3 )
最后,
F
O
T
S
{\rm FOTS}
F O T S 的总的损失函数定义为:
L
=
L
d
e
t
e
c
t
+
λ
r
e
c
o
g
L
r
e
c
o
g
(14)
L=L_{detect}+\lambda_{recog}L_{recog}\tag{14}
L = L d e t e c t + λ r e c o g L r e c o g ( 1 4 )
4. Experiments
图6:ICDAR2015数据集上实验结果对比
图7:ICDAR2017数据集上实验结果对比
图8:ICDAR2013数据集上实验结果对比
图9:FOTS的实时性
5. Conclusion
F
O
T
S
{\rm FOTS}
F O T S 是一种端到端的场景文本识别方法,它通过
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 将文本检测分支和文本识别分支融合,以实现共享卷积。而
R
o
I
R
o
t
a
t
e
{\rm RoIRotate}
R o I R o t a t e 主要基于
S
T
N
{\rm STN}
S T N 的思想,将候选文本区域校正、固定后作为文本识别分支的输入。由结果可知,
F
O
T
S
{\rm FOTS}
F O T S 在输入大小为
1280
×
720
1280×720
1 2 8 0 × 7 2 0 时的最大
F
P
S
{\rm FPS}
F P S 为
22.6
22.6
2 2 . 6 。
参考
Liu X, Liang D, Yan S, et al. Fots: Fast oriented text spotting with a unified network[C]// Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 5676-5685.
https://blog.csdn.net/qq_39422642/article/details/78870629.
完