论文地址:https://arxiv.org/abs/1905.05980
论文翻译:https://blog.csdn.net/m0_38007695/article/details/95880162
方法简介
本文方法是一个两阶段的文本检测,第一阶段与Faster R-CNN类似,通过CNN + RPN + ROI 得到 text proposals;第二阶段就是对 text proposals进行细化,使预测的框更加准确。
主干网络使用的是 SE-VGG16(添加了SE block的VGG16),实验证明SE Block可以提升性能。
它的亮点主要是提出了 自适应文本区域表示 \color{red} \text{自适应文本区域表示} 自适应文本区域表示,可以根据文本框的形状使用网络去学习应该使用多少个点来表示文本框,之前的方法都是使用固定的点来表示文本框,但是水平文本、多向文本和弯曲文本的点的个数是不相同的,所以自己学习文本框的点数可以适应各种形状的文本框。实现这个功能的是LSTM,对文本框边界的上边框和下边框的对点进行回归,并且用 continue/stop标签来表示对点的结束标志。
流程
训练:
- 输入图像,使用SE-VGG16提取 feature maps;
- 生成anchor,大小 { 32 , 64 , 128 , 512 } \{32, 64, 128, 512\} {32,64,128,512} ,纵横比 { 0.5 , 1 , 2 } \{0.5, 1, 2\} {0.5,1,2};
- 使用RPN网络和ROI生成 text proposals;
- 通过细化网络验证和微调 text proposals(文本/非文本分类,边框回归,自适应文本区域表示的LSTM)。
预测:
- 输入图像,使用SE-VGG16提取feature maps;
- 使用RON网络和ROI生成text proposals;
- 通过细化网络验证和微调 text proposals;
- 使用多边形NMS得到最后的预测输出。
方法细节
1. 自适应文本区域表示
文中使用有顺序的(从左向右的)上边框和下边框的对点来表示文本框,如下图(b)所示,因为对点有方向的排列更容易使用LSTM学习。
2. Proposal Refinement
对text proposal进行细化微调,包含文本/非文本分类、边框回归和基于自适应文本表示的LSTM等三个分支。
其中,文本/非文本分类和边框回归和其他的两阶段文本检测方法是类似的,通过两个全连接神经网络得到输出。
对于最后一个分支,输入是第一阶段处理后的每一个text proposals的特征,输出是每个文本区域自适应边框点的数量。考虑到输出长度是不同的,所以采用了RNN。对于对点的表示方法,文中采用的表示的方法是使用对点的坐标 ( x i , y i , x i + 1 , y i + 1 ) (x_i, y_i, x_{i+1}, y_{i+1}) (xi,yi,xi+1,yi+1) 来表示。
如果对点使用中心点 ( x i c , y i c ) (x_i^c, y_i^c) (xic,yic) 的坐标,中心点到两个点的距离 h i h_i hi 和他们的旋转角度 θ i \theta_i θi 来表示。目标角度在某些特殊情况下不好确定。例如, 9 0 ∘ 90^\circ 90∘ 和 − 9 0 ∘ -90^\circ −90∘ 在空间中是非常相似的,但是他们的角度是不同的。这个就很难正确的学习。除此之外,方向可以通过 sin θ i \sin \theta_i sinθi 和 cos θ i \cos \theta_i cosθi 来表示,这个可以很好的预测。但是需要很多参数。因此,本文方法使用点的坐标 ( x i , y i , x i + 1 , y i + 1 ) (x_i, y_i, x_{i+1}, y_{i+1}) (xi,yi,xi+1,yi+1) 来作为回归目标
LSTM每个时间点的输入都是相同的,都是相应text proposal的 ROI pooling特征。每个时间点的输出是文本区域框的对点的坐标。由于不同的文本区域使用自适应点数,因此需要停止标签来表示预测网络何时停止。因为停止标签预测是分类问题,而坐标预测是回归问题,所以将他们放在同一分支是不合适的。因此,LSTM的每个时间点有两个分支:一个点的坐标的回归,一个停止标签的预测。在每一个时间点,都预测文本区域的两个对边的点的坐标和标签 stop/continue。如果标签是continue,在下一个时间点将会预测另外两个点的坐标和下一个标签,否则,预测停止,文本区域使用之前所有预测的点坐标来表示。这样,输入图像中的文本区域就可以使用不同的多边形(通过预测的对点组成的)来检测和表示了。
损失函数
由于Text-RPN和Faster R-CNN中的RPN是相似的,所以Text-RPN的训练损失也是以相同的方式计算的。因此,在这一部分,我们只关注微调网络的损失函数。每一个proposal的损失函数定义为文本/非文本分类损失,边框回归损失和边界点回归损失和停止/继续标签分类损失之和。边框回归损失和边界点回归损失都使用 平滑L1损失,文本/非文本分类损失和停止/继续标签分类损失都是一个二分类损失。在每一个proposal上的多任务损失函数定义为:
{
L
s
u
m
=
L
c
l
s
(
p
,
t
)
+
λ
1
t
∑
i
∈
{
x
,
y
,
w
,
h
}
L
r
e
g
(
v
i
,
v
i
∗
)
+
λ
2
t
∑
i
∈
{
x
1
,
y
1
,
x
2
,
y
2
,
.
.
.
,
x
n
,
y
n
}
L
r
e
g
(
u
i
,
u
i
∗
)
+
λ
3
t
∑
i
∈
{
l
1
,
l
2
,
.
.
.
,
x
n
/
2
L
c
l
s
(
l
i
,
l
i
∗
)
\begin{cases} L_{sum} & = L_{cls}(p,t) + \lambda_1 t \sum_{i \in \{x,y,w,h\}}L_{reg}(v_i, v_i^*) \\ & + \lambda_2 t \sum_{i \in \{x_1, y_1, x_2, y_2, ...,x_n, y_n\}}L_{reg}(u_i, u_i^*)\\ & + \lambda_3 t \sum_{i \in \{l_1, l_2, ..., x_{n/2}}L_{cls}(l_i, l_i^*) \end{cases}
⎩⎪⎨⎪⎧Lsum=Lcls(p,t)+λ1t∑i∈{x,y,w,h}Lreg(vi,vi∗)+λ2t∑i∈{x1,y1,x2,y2,...,xn,yn}Lreg(ui,ui∗)+λ3t∑i∈{l1,l2,...,xn/2Lcls(li,li∗)
λ
1
\lambda_1
λ1,
λ
2
\lambda_2
λ2 和
λ
3
\lambda_3
λ3 是这些项的平衡参数,在本文方法中它们设置为1。
对于文本/非文本损失项, t t t 是分类标签的标记。是文本时 t = 1 t=1 t=1,不是文本时 t = 0 t=0 t=0。参数 p = ( p 0 , p 1 ) p = (p_0, p_1) p=(p0,p1) 是softmax计算后的文本和非文本的置信度。 L c l s ( p , t ) = − log p t L_{cls}(p, t) = -\log p_t Lcls(p,t)=−logpt 是真值 t t t对数损失。
对于边框回归损失项, v = ( v x , v y , v w , v h ) v = (v_x, v_y, v_w, v_h) v=(vx,vy,vw,vh) 是边框回归的目标,包括中心点的坐标和宽和高, v ∗ = ( v x ∗ , v y ∗ , v w ∗ , v h ∗ ) v^* = (v_x^*, v_y^*, v_w^*, v_h^*) v∗=(vx∗,vy∗,vw∗,vh∗) 是每个 text proposal的预测值。我们使用 Faster R-CNN 中给出的 v v v 和 v ∗ v^* v∗ 参数化,其中 v v v 和 v ∗ v^* v∗ 指定了一个目标proposal的尺度不变性和对数空间高/宽偏移性。
对于边界点回归项,
u
=
(
u
x
1
,
u
y
1
,
.
.
.
,
u
x
n
,
u
y
n
)
u = (u_{x_1}, u_{y_1},...,u_{x_n},u_{y_n})
u=(ux1,uy1,...,uxn,uyn) 是边界点的真值坐标,
u
=
(
u
x
1
∗
,
u
y
1
∗
,
.
.
.
,
u
x
n
∗
,
u
y
n
∗
)
u = (u_{x_1}^*, u_{y_1}^*,...,u_{x_n}^*,u_{y_n}^*)
u=(ux1∗,uy1∗,...,uxn∗,uyn∗) 是文本的预测值。为了使学习的点适合与不同尺度的文本,还应该处理学习目标使它们成比例不变。参数
(
u
x
i
∗
,
u
y
i
∗
)
(u_{x_i}^*, u_{y_i}^*)
(uxi∗,uyi∗) 根据以下公式处理:
u
x
i
∗
=
(
x
i
∗
−
x
a
)
/
w
a
,
u
y
i
∗
=
(
y
i
∗
−
y
a
)
/
h
a
u_{x_i}^* = (x_i^* - x_a) / w_a, \quad u_{y_i}^* = (y_i^* - y_a) / h_a
uxi∗=(xi∗−xa)/wa,uyi∗=(yi∗−ya)/ha
其中
x
i
∗
x_i^*
xi∗ 和
y
i
∗
y_i^*
yi∗ 表示边框点的坐标,
x
a
x_a
xa 和
y
a
y_a
ya 表示相应text proposal中心点的坐标,
w
a
w_a
wa 和
h
a
h_a
ha 表示这个proposal的宽和高。
用
(
w
,
w
∗
)
(w, w^*)
(w,w∗) 表示
(
v
i
,
v
i
∗
)
(v_i, v_i^*)
(vi,vi∗) 或者
(
u
i
,
u
i
∗
)
(u_i, u_i^*)
(ui,ui∗) ,
L
r
e
g
(
w
,
w
∗
)
L_{reg}(w, w^*)
Lreg(w,w∗) 可以定义为Faster R-CNN中的L1平滑损失:
L
r
e
g
(
w
,
w
∗
)
=
s
m
o
o
t
h
L
1
(
w
−
w
∗
)
L_{reg}(w, w^*) = smooth_{L1}(w-w^*)
Lreg(w,w∗)=smoothL1(w−w∗)
s m o o t h L 1 ( x ) = { 0.5 x 2 if |x| < 1 ∣ x ∣ − 0.5 otherwise smooth_{L1}(x) = \begin{cases} 0.5x^2 & \text {if |x| < 1} \\ |x| - 0.5 & \text {otherwise} \end{cases} smoothL1(x)={0.5x2∣x∣−0.5if |x| < 1otherwise
对于停止/继续标签分类损失项,它也是一个二分类,它的损失格式类似于文本/非文本分类损失。
实现细节
anchor:大小 { 32 , 64 , 128 , 512 } \{32, 64, 128, 512\} {32,64,128,512} ,纵横比 { 0.5 , 1 , 2 } \{0.5, 1, 2\} {0.5,1,2}
迭代步数: 10 × 1 0 4 10 × 10^4 10×104
学习率:从 1 0 − 3 10^{-3} 10−3 开始,分别在 2 × 1 0 4 2 × 10^4 2×104, 6 × 1 0 4 6 × 10^4 6×104 和 8 × 1 0 4 8×10^4 8×104 迭代步数时乘以 1 / 10 1 / 10 1/10
权重衰减:0.0005
多尺度训练:短边 { 400 , 600 , 720 , 1000 , 1200 } \{400, 600, 720, 1000, 1200\} {400,600,720,1000,1200},长边 2000 2000 2000
训练集:CTW1500,TotalText,ICDAR2013,ICDAR2015和MSRA-TD500