FOTS: Fast Oriented Text Spotting with a Unified Network
Abstract
自然场景下的文本定位是被认为是文档分析领域中最困难和最有价值的挑战之一。现有的大多数方法都将文本检测和识别作为单独的任务。在这项工作中,我们提出了一个统一的端到端可训练的快速定向文本定位(FOTS)网络,用于同时检测和识别,在两个互补的任务之间共享计算和视觉信息。特别地,RoIRotate被引入来共享定义和识别之间的卷积特征。得益于卷积的权值共享,我们的FOTS与baseline的文本检测网络相比,计算cost更小,并且联合(detection和recognition)训练方法学习了更多的通用特征,使我们的方法比这two-stage方法表现得更好。实验于ICDAR2015,ICDAR2017 MLT和ICDAR2013数据集,表现出的结果是该方法可以得到sota的效果,同时可以作为real-time的系统的模型。最终效果是比ICDAR2015 text spotting task acc高5%,同时有22.6fps的速度。
Introduction
在自然图像中阅读文本,因其在文档分析、场景理解、机器人导航和图像检索等方面的大量实际应用,越来越受到计算机视觉界的关注[49、43、53、44、14、15、34]。 虽然已有的研究在文本检测和文本识别两方面都取得了很大的进展,但由于文本模式的多样性和背景的复杂性,文本识别仍然具有一定的挑战性。
场景文本阅读中最常见的方法是将场景文本分为文本检测和文本识别两部分,并将其作为两个独立的任务进行处理[20,34]。基于深度学习的方法在这两方面都占主导地位。在文本检测中,通常使用卷积神经网络从场景图像中提取特征图,然后使用不同的解码器对区域进行解码[49,43,53]。而在文本识别中,序列预测网络是在文本区域上逐个进行的[44,14]。这将导致大量的时间开销,特别是对于带有大量文本区域的图像。另一个问题是它忽略了检测和识别过程中视觉线索的相关性。单个检测网络不能由文本识别的标签进行监督,反之亦然。
在本文中,我们建议同时考虑文本检测和识别。该方法实现了面向文本的快速定位系统(FOTS)。与之前的两阶段文本识别相比,我们的方法通过卷积神经网络学习更多的通用特征,这些特征在文本检测和文本识别之间是共享的,并且这两个任务的监督是互补的。由于特征提取通常花费大部分时间,因此它将计算缩小到单个检测网络,如图1所示。ROIRotate是连接检测和识别的关键,它根据面向检测的边界框从特征图中获得适当的特征。
网络结构如figure 2所示,先由 shared convolutions 提取特征。在特征图的基础上,建立基于全卷积网络的面向文本检测分支,预测检测边界框。RoIRotate操作符从特征图中提取与检测结果对应的文本正特征。然后将文本建议特征输入递归神经网络(RNN)Encode和(CTC)decode [9]进行文本识别。由于网络中的所有模块都是可微 (可bp) 的,因此整个系统可以端到端的训练。据我们所知,这是第一个面向文本检测和识别的端到端的可训练框架。我们发现,不需要复杂的后处理和超参数调整,网络可以很容易地进行训练。
贡献如下:
1.我们提出了一个端到端的可训练框架,用于快速定向文本定位。通过共享卷积特征,网络可以同时检测和识别文本,同时减少了计算量,提高了实时性。
2.介绍了一种新的可微算子RoIRotate,用于从卷积特征图中提取面向文本区域。该操作将文本检测和识别统一到一个端到端pipline中。
3.没有附加的花里胡哨,FOTS在许多文本检测和文本定位基准上显著地超越了最先进的方法,包括ICDAR 2015[26]、ICDAR 2017 MLT[1]和ICDAR 2013[27]。
Related work
文本定位是计算机视觉和文档分析中的一个活跃课题。在这一节中,我们将简要介绍相关的工作,包括文本检测、文本编码和文本识别方法。
Text Detection
大多数传统的文本检测方法都将文本视为字符的组合。这些基于字符的方法首先本地化图像中的字符,然后将它们组合为单词或文本行。
基于滑动窗口的方法[22,28,3,54]和基于连接组件的方法[18,40,2]是传统方法中有代表性的两类。近年来,有许多基于深度学习的方法来直接检测图像中的单词。
~pass
text recognition
一般情况下,场景文本识别目的是从规则crop (crop出image中的text部分) 但是不定长的text image中decode一个label序列。以前的大多数方法[8,30]捕获单个字符,然后对错误分类的字符进行细化。除了字符级方法外,近年来的文本区域识别方法可分为三类:基于单词分类的方法、基于序列到标签解码的方法和基于序列到序列模型的方法。
Jaderberg[19]等人提出单词识别问题是一个传统的多类分类任务,有大量的类标签(大约90K个单词)。Su et.al[48] 提出方法是帧文本识别是一个序列标记问题,其中RNN基于HOG特征,采用CTC作为解码器。Shi等人[44]和He等人[14]提出了深度递归模型对max-out CNN特征进行编码,并采用CTC对编码序列进行解码。Fujii等人提出了一种编码器和summarizer网络来生成CTC的输入序列。Lee等人使用基于注意力的序列-序列结构自动聚焦于提取的CNN特征,并隐式学习RNN中包含的字符级语言模型。为了处理不规则输入图像,Shi等人[45]和Liu等人[37]引入空间注意机制,将扭曲的文本区域转换为适合识别的规则姿态。
text spotting
大多数以前的文本识别方法首先使用文本检测模型生成文本建议,然后使用单独的文本识别模型识别它们。Jaderberg[20]等人首先使用集成模型生成高召回率的整体文本建议,然后使用单词分类器进行单词识别。Gupta等人[10]训练了一个全卷积回归网络用于文本检测,并采用[19]中的单词分类器进行文本识别。Liao等人使用基于SSD[36]的文本检测方法和CRNN[44]的文本识别方法。
最近,Li等人提出了一种端到端的文本点对点方法,该方法利用受RPN[41]启发的文本建议网络进行文本检测,并利用LSTM的注意机制进行文本识别[38,45,3]。我们的方法有两个优势相比较于之前的方法:
1.我们引入了RoIRotate方法,同时使用不同的文本检测法方法来解决更为复杂的情况,而他们的方法只能解决垂直文本。
2.该method在效果与速度上都要好得多,特别的,几乎没有cost的步骤保证我们可以允许在于实时系统。在600*800的图像中,运行时间为900ms。
Methodology
FOTS是一个端到端的可训练框架,它可以实时地检测和识别自然场景图像中的所有单词。它由四个部分组成:共享卷积、文本检测分支、RoIRotate操作和文本识别分支。
Overall Architecture
架构如figure2 figture3.
共享网络工作的backbone是resnet-50[12]。受FPN[35]的启发,我们将低层特征映射和高层语义特征映射串联起来。共享卷积产生的特征图的分辨率是输入图像的1/4。文本检测分支使用共享卷积产生的特征输出 dense的逐像素预测。通过detection branch提取的text region proposals 。使用RoIRotate翻转相关共享特征到fixed-height 关系同时保持原有的高宽比。最后,text recognition branch 识别在这些region proposals。 CNN和LSTM被适用于encode 文本序列信息,采用CTC来进行decode。网络结构在table1
Text Detection Branch
受到[53,15]的启发,我们采用全卷积网络作为文本检测器。由于在自然场景图像中有大量的小文本框,所以我们在共享卷积中对原输入图像的1/32到1/4大小的feature maps进行了提升。在提取出共享特征后,一个 卷积层输出密集的每像素单词预测。第一个通道计算每个像素为正样本的概率。与[53]类似,原始文本区域缩小后的像素被认为是postive的。对于每个positive sample,以下4个通道分别预测其到包含该像素的包围盒的顶、底、左、右的距离,最后一个通道预测相关包围盒的方向。最后的检测结果是通过对这些postive sample应用阈值和NMS得到的。
在我们的实验中,我们观察到许多类似于文字笔画的模式是很难分类的,如栅栏、网格等。我们应用了online hard example mining(OHEM)方法来更好的区分这些patten(和栅栏、网格类似的等与文本样子较为类似的). 该方法将F-measure提升了2%在ICDAR 2015中。detection branch 的loss 由文本分类项和边界框回归项两部分组成。文本分类项可以看做为下采样的score map 中的pixel-wise的分类loss。只有缩小后的原始文本区域被认为是positive area,而边界框与缩小后的文本之间的区域被认为是**“NOT CARE”**的区域,不会对分类造成损失。
作为回归loss,应用了IoU loss[52] 和rotation nagle loss [53],其对object的shape scale 和orientation之间的差异都有较好的rebust.
注意这个通过OHEM选择出来的positive elemens在score map标记为
Ω
\Omega
Ω ,对应的loss function可以定义为:
L
c
l
s
=
1
∣
Ω
∣
∑
x
∈
Ω
H
(
p
x
,
p
x
∗
)
=
1
∣
Ω
∣
∑
x
∈
Ω
(
−
p
x
∗
log
p
x
−
(
1
−
p
x
∗
)
log
(
1
−
p
x
)
)
(
1
)
\begin{aligned} L_{\mathrm{cls}} &=\frac{1}{|\Omega|} \sum_{x \in \Omega} \mathrm{H}\left(p_{x}, p_{x}^{*}\right) \\ &=\frac{1}{|\Omega|} \sum_{x \in \Omega}\left(-p_{x}^{*} \log p_{x}-\left(1-p_{x}^{*}\right) \log \left(1-p_{x}\right)\right) \end{aligned} (1)
Lcls=∣Ω∣1x∈Ω∑H(px,px∗)=∣Ω∣1x∈Ω∑(−px∗logpx−(1−px∗)log(1−px))(1)
其中 ∣ . ∣ |.| ∣.∣ 是一个集合的元素个数。 H ( p x , p x ∗ ) \mathrm{H}(p_x, p^*_x) H(px,px∗) 代表score map的预测值: p x p_x px 和binary label**(是否有text)** p x ∗ p^*_x px∗ 的cross entorpy loss
作为回归loss,应用了IoU loss[52] 和rotation nagle loss [53],其对object的shape scale 和orientation之间的差异都有较好的rebust.
L
r
e
g
=
1
∣
Ω
∣
∑
x
∈
Ω
IoU
(
y
,
x
)
+
λ
θ
(
1
−
cos
(
θ
x
,
θ
x
∗
)
)
(
2
)
L_{\mathrm{reg}}=\frac{1}{|\Omega|} \sum_{x \in \Omega} \operatorname{IoU}(y,x)+\lambda_{\theta}(1-\cos (\theta_x, \theta_x^*)) (2)
Lreg=∣Ω∣1x∈Ω∑IoU(y,x)+λθ(1−cos(θx,θx∗))(2)
此处的
IoU
(
R
x
,
R
x
∗
)
\operatorname{IoU}(\mathbf{R}_x, \mathbf{R}_x^*)
IoU(Rx,Rx∗) 是预测的bbox
R
x
R_x
Rx 和ground truth
R
x
∗
R^*_x
Rx∗ 的IoU loss. 第二项是rotation angle loss,
θ
x
\theta_x
θx 和
θ
x
∗
\theta^*_x
θx∗ 分别表示预测的orientation和ground truth.设置超参数
λ
θ
\lambda_{\theta}
λθ为10在实验中,因此总的detection loss可以写为
L
d
e
t
e
c
t
=
L
c
l
s
+
λ
r
e
g
L
r
e
g
(
3
)
L_{\mathrm{detect}}=L_{\mathrm{cls}}+{\lambda_{\mathrm{reg}}L_{\mathrm{reg}}} (3)
Ldetect=Lcls+λregLreg(3)
L r e g = 1 ∣ Ω ∣ ∑ x ∈ Ω IoU ( R x , R x ∗ ) L_{\mathrm{reg}}=\frac{1}{|\Omega|} \sum_{x \in \Omega} \operatorname{IoU}(\mathbf{R}_x,\mathbf{R}^*_x) Lreg=∣Ω∣1x∈Ω∑IoU(Rx,Rx∗)
超参数 λ r e g \lambda_{reg} λreg 平衡两个loss,在实验中设置为1.
RoIRotate
RoIRotate对oriented的特征区域进行变换,得到axis-aligned的特征图,如Figure 4所示,在这项工作中,我们固定输出高度,并保持长宽比不变,以处理文本长度的变化。相比较于RoI pooling和RoIAlign,RoIRotate 提供一种更为通用的操作,用于提取感兴趣区域的特征。同时我们与RRPN中提出的RRoI池进行了比较。RRoI池通过max-pooling将旋转后的区域转化为固定大小的区域,同时我们使用双线性插值来计算输出的值。该操作避免了RoI与提取的特征之间的不匹配,并且使得输出特征的长度可变,更适合于文本识别。
该process可以分为两个步骤:
1.仿射变换参数可通过预测或者text proposals的ground truth的坐标计算。
2.然后分别对每个区域的共享特征映射进行仿射变换,得到文本区域的正则水平特征映射。
第一步的公式如下**(做仿射变换的过程,其实就是将斜或者怎不规则的文字区域矫正为规则的,对其坐标做仿射变换)**:
t x = l ∗ cos θ − t ∗ sin θ − x ( 4 ) t_x=l * \cos \theta-t * \sin \theta-x (4) tx=l∗cosθ−t∗sinθ−x(4)
t y = t ∗ cos θ + l ∗ sin θ − y ( 5 ) t_{y}=t * \cos \theta+l * \sin \theta-y(5) ty=t∗cosθ+l∗sinθ−y(5)
s = h t t + b ( 6 ) s=\frac{h_{t}}{t+b}(6) s=t+bht(6)
w t = s ∗ ( l + r ) ( 7 ) w_t=s *(l+r) (7) wt=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} \mathbf{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] \end{aligned}(8) M=⎣⎡cosθsinθ0−sinθcosθ0001⎦⎤⎣⎡s000s0001⎦⎤⎣⎡100010txty1⎦⎤=s⎣⎡cosθsinθ0−sinθcosθ0txcosθ−tysinθtxsinθ+tycosθs1⎦⎤(8)
对应的参数如下 :
M M M: 仿射变换矩阵,包含旋转,缩放,平移
h t h_t ht: 表示仿射变换后特征图的高度,实验中为8
w t w_t wt: 表示仿射变换后特征图宽度
( x , y ) (x,y) (x,y)表示shared feature maps的坐标点
( t , b , l , r ) (t,b,l,r) (t,b,l,r)表示特征图中的点距离旋转的框的上下左右的距离
θ \theta θ: 表示检测框的旋转角
有了变换参数,利用仿射变换很容易得到最终的RoI特征:
有了变换参数,利用仿射变换很容易得到最终的RoI特征:
(
x
i
s
y
i
s
1
)
=
M
−
1
(
x
i
t
y
i
t
1
)
(
9
)
\left(\begin{array}{l}x_{i}^{s} \\ y_{i}^{s} \\ 1\end{array}\right)=\mathbf{M}^{-1}\left(\begin{array}{l}x_{i}^{t} \\ y_{i}^{t} \\ 1\end{array}\right) (9)
⎝⎛xisyis1⎠⎞=M−1⎝⎛xityit1⎠⎞(9)
对于
∀
i
∈
[
1
…
h
t
]
,
∀
j
∈
[
1
…
w
t
]
,
∀
c
∈
[
1
…
C
]
\forall i \in\left[1 \ldots h_{t}\right], \forall j \in\left[1 \ldots w_{t}\right], \forall c \in[1 \ldots C]
∀i∈[1…ht],∀j∈[1…wt],∀c∈[1…C]有
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
)
(
10
)
V_{i j}^{c}=\sum_{n}^{h_{s}} \sum_{m}^{w_{s}} U_{n m}^{c} k\left(x_{i j}^{s}-m ; \Phi_{x}\right) k\left(y_{i j}^{s}-n ; \Phi_{y}\right)(10)
Vijc=n∑hsm∑wsUnmck(xijs−m;Φx)k(yijs−n;Φy)(10)
V i j c V^c_{ij} Vijc是location ( i , j ) (i,j) (i,j)在c通道的输出值
U n m c U^c_{nm} Unmc是 ( n , m ) (n,m) (n,m)在c通道的输入值
h s , w S h_s,w_S hs,wS:代表输入的高和宽
Φ x , Φ y \Phi_x,\Phi_y Φx,Φy是双线性插值的核 k ( ) k() k() 的参数
k ( ) k() k()其中定义了插值方法,具体为双线性插值。由于文本建议的宽度可能不同,在实践中,我们将特征映射填充到最长的宽度,而忽略了识别损失函数中的填充部分。
STN[21]采用相似的仿射变换,但通过不同的方法得到变换参数,主要用于图像域,即图像本身的变换。RoIRotate以共享卷积生成的feature map为输入,生成所有text proposals的feature map,高度固定,长宽比不变。
与目标分类不同,文本识别对检测噪声非常敏感。预测文本区域的一个小错误就可能切断几个字符,不利于网络训练,因此在训练中我们使用了ground truth文本区域而不是预测文本区域。测试时,使用阈值和NMS对预测文本区域进行过滤。在RoIRotate之后,转换后的特征映射被提交给text recognition branch。
Text Recogntion Branch
text recogntion branch目的于使用共享卷积提取以及RoIRotate转换后的region feature来预测文本label。
未完待续。。。