Multi-Oriented Scene Text Detection via Corner Localization and Region Segmentation发表于2018年的cvpr,该文章通过结合角点检测和图像分割来对图像文字进行定位
Introduction
目前文字定位方法分为两个分支,一是基于物体检测的方法(SSD,YOLO,DenseBox),如TextBoxes,FCRN,EAST等。还一种是基于图像分割的方法。本文是将上述两种方法结合,提出的一种新的检测方法。
通过文章的结果可以看出F-measure会比EAST高一点,但是速度比EAST慢。
Network
文章中的网络结构采用FPN/DSSD的网络结构,如下图所示
1. Feature Extraction
如上图红色框所示,文中采用VGG16,将fc6和fc7层换成卷积层conv6和conv7,并在后面添加了一些卷积层(conv8, conv9, conv10, conv11),用于增加感受野的范围。之后采用DSSD的top-down pathway结构,解卷积采用了从conv11到conv3的feature map(其中conv10到conv3的featrue map被重用),输出的feature命名为
F
3
,
F
4
,
F
7
,
F
8
,
F
9
,
F
10
,
F
11
F_{3},F_{4},F_{7},F_{8},F_{9},F_{10},F_{11}
F3,F4,F7,F8,F9,F10,F11。最后得到的conv11,和所有解卷积的feature maps用于角点和位置敏感图(position-sensitive)的预测
2. Corner Detection
对于一个旋转矩形来讲,可以通过顺时针分布的四个角点
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
(
x
3
,
y
3
)
,
(
x
4
,
y
4
)
}
\{(x_{1},y_{1}),(x_{2},y_{2}),(x_{3},y_{3}),(x_{4},y_{4})\}
{(x1,y1),(x2,y2),(x3,y3),(x4,y4)}来得到,这四个点位置分别为左上,右上,左下,右下。为了更方便的检测角点,文中对角点进行的新的定义,
C
=
(
x
c
,
y
c
,
s
s
,
s
s
)
C=(x_{c},y_{c},ss,ss)
C=(xc,yc,ss,ss),其中
x
c
,
y
c
x_{c},y_{c}
xc,yc代表一个角点如(
x
1
,
y
1
x_{1},y_{1}
x1,y1这个左上角点),同时它也是一个水平矩形的中心点,ss代表的是待检测旋转矩形的短边。这里意思就是将待检测角点用一个水平矩形表示,角点的位置就是这个水平矩形的中心,检测出水平矩形就相当于检测出角点的位置。
通过上面角点的重新定义,检测角点的方法就可以类似于SSD和DSSD,利用定义的default boxes(类似于Faster RCNN中的anchor boxes)来进行矩形的检测。与物体检测有所不同的是,同一个位置可能存在多个角点(例如同一个位置可能同时为左下角点和右上角点)。所以对于大小为 m × n m\times n m×n的feature map同时有k个default boxes的情况,score branch输出的类别分数(是否存在角点)通道数为 k × q × 2 k\times q \times 2 k×q×2,offset branch输出的通道数为 k × q × 4 k\times q \times 4 k×q×4,其中q代表角点的类型,默认为4。这部分如上图中的黄色框所示。
default boxes的scales设置如下表所示,其中default boxes的长宽高比为1。
3. Position-Sensitive Segmentation
这部分如上图中的蓝色框所示
对于一个文本框,可以将框等分为
g
×
g
g\times g
g×g部分,本文中分为
2
×
2
2\times 2
2×2也就是四个区域,这部分的预测用于对上面检测出的框打分使用。下面会说明。
这部分的输出是重用了
F
3
,
F
4
,
F
7
,
F
8
,
F
9
F_{3},F_{4},F_{7},F_{8},F_{9}
F3,F4,F7,F8,F9,上采用至
F
3
F_{3}
F3大小然后相加,最后连续使用两个Conv1x1- BN-ReLU-Deconv2x2 块,得到
g
×
g
g\times g
g×g通道大小与输入图像一样的feature map。
Training and Inference
1.Training-Label Generation
对于每个输入训练样本,首先将标注转换成包围字符区域最小的矩形,然后确定4个角点的位置。
对于一个旋转矩形,4个角点的确定遵循下面两个规则:
- 左上与左下两个点的x坐标小于右上和右下两个点的x坐标
- 左上与右上两个点的y坐标小于右上和右下两个点的y坐标
通过确定好的4个角点就可以确定旋转矩形的位置了,计算旋转矩形的短边就可以使用一个水平正方形重新定义角点了,通过一件确定的旋转矩形可以很方便的求的position-sensitive segmentation掩码,所得的label结果如下图所示
2.Training-Optimization
损失函数如下:
L
=
1
N
L
c
o
n
f
+
λ
1
N
c
L
l
o
c
+
λ
2
N
s
L
s
e
g
L= \frac{1}{N}L_{conf}+\frac{\lambda_{1}}{N_{c}}L_{loc}+\frac{\lambda_{2}}{N_{s}}L_{seg}
L=N1Lconf+Ncλ1Lloc+Nsλ2Lseg
其中, L c o n f L_{conf} Lconf和 L l o c L_{loc} Lloc表示角点检测中score branch和offset branch输出的loss, L s e g L_{seg} Lseg表示position-sensitive segmentation的损失函数。 N c N_{c} Nc表示正例default boxes的个数, N s N_{s} Ns表示分割maps中的像素个数(分割)。 λ 1 \lambda_{1} λ1和 λ 2 \lambda_{2} λ2为loss函数的平衡因子,文中分别取值为1和10。
L
c
o
n
f
L_{conf}
Lconf采用的是交叉熵计算
L
c
o
n
f
=
C
r
o
s
s
E
n
t
r
o
p
y
(
y
c
,
p
c
)
L_{conf}=CrossEntropy(y_{c},p_{c})
Lconf=CrossEntropy(yc,pc)
y
c
y_{c}
yc表示真实标签,
p
c
p_{c}
pc表示预测值
L
l
o
c
L_{loc}
Lloc采用smooth L1 loss计算:
L
l
o
c
=
S
m
o
o
t
h
L
1
(
y
l
,
p
l
)
L_{loc}=SmoothL1(y_{l},p_{l})
Lloc=SmoothL1(yl,pl)
y
l
y_{l}
yl和
p
l
p_{l}
pl定义同Fast RCNN
L
s
e
g
L_{seg}
Lseg采用Dice loss:
L
s
e
g
=
1
−
2
y
s
p
s
y
s
+
p
s
L_{seg}=1-\frac{2y_{s}p_{s}}{y_{s}+p_{s}}
Lseg=1−ys+ps2ysps
y
s
y_{s}
ys表示label值,
y
s
y_{s}
ys表示预测值
3.Inference-Sampling and Grouping
在通过角点检测得到一系列的角点后,将score小于0.5的角点忽略,然后使用NMS得到最终的候选角点信息。
因为一个旋转矩形能通过两个点和垂直与两点连线的一条边确定,在预测各个角点时短边长度已知,这时将所有候选角点与对应短边组合就可以得到一系列的候选矩形了。
在得到候选矩形的过程中有一些过滤的规则:
- 比如左上角点的x坐标是必须小于右上角点的x坐标
- 旋转矩形的短边必须大于某个阈值,文中设为5
- 两个待组合点预测的短边 s s 1 , s s 2 ss_{1},ss_{2} ss1,ss2必须满足 m a x ( s s 1 , s s 2 ) m i n ( s s 1 , s s 2 ) ≤ 1.5 \frac{max(ss_{1},ss_{2})}{min(ss_{1},ss_{2})}\le 1.5 min(ss1,ss2)max(ss1,ss2)≤1.5
4. Inference-Scoring
对于得到的候选矩形,将其划分为
g
×
g
g\times g
g×g,然后利用segmentation maps,将属于每一块(总共
g
×
g
g\times g
g×g块)的segmentation对应的像素相加后求平均,最后将
g
×
g
g\times g
g×g个平均值再求平均值得到候选矩形框的分数,此过程如下图所示。
设定阈值为0.6,旋转矩形分数小于阈值的被过滤
到这基本就是该文章的所有原理了。
欢迎加入OCR交流群:785515057(此群已满)
欢迎加入OCR交流群2:826714963