论文正文
链接:链接,提取码:7tjv
概述
背景 :文本检测当中,主流的两类方法是基于回归的方法和基于分割的方法。前者对于任意形状文本的检测效果较差,后者较好,但是后者容易将接近的文本实例检测为一个文本实例,本文就是为了解决这个问题。 下图中 :a是原图,b是使用基于回归的方法得到的结果,效果很差,c是基于分割的方法得到的结果,d是使用PSENet得到的结果。
细节
整体流程
首先骨干网络是ResNet,接着经过FPN特征金字塔做特征融合得到F,F经过处理得到N个分割图
(
S
1
,
S
2
,
.
.
.
,
S
n
)
(S_1,S_2,...,S_n)
(S1?,S2?,...,Sn?),其中
S
1
S_1
S1?具有最小尺度的文本实例的分割结果(最小的kernels),
S
n
S_n
Sn?具有最大尺度的、也是我们需要的文本实例的分割结果(最大的kernels),根据它得到文本的检测结果。 注 :
- 没看代码,但是讲道理分割图还没这么夸张的,二值化之后才是黑白的,可能因为不是重点,这里就直接省略了二值化的过程了。
- N个分割图不是一步到位产生的,而是先产生具有最小尺度的文本实例的分割结果
S
1
S_1
S1?,然后通过PSE算法慢慢扩张里面的kernels,得到
S
2
,
.
.
.
,
S
n
)
S_2,...,S_n)
S2?,...,Sn?)
Progressive Scale Expansion(PSE)
扩张的过程其实就是使用BFS的思想,kernel内部的像素不断扩张,直到两个kernel的像素产生冲突停止扩张,处理冲突的办法就是先到先得。 已下是算法的形式化的表示 和伪代码
标注
模型要产生N个分割结果,那么我们就得给它N个ground-truth,怎么得到这N个ground-truth呢?首先,我们可以根据文本得到一个标注框,然后根据它得到二值图,这个二值图就是
S
n
S_n
Sn?的监督。然后对它进行shrink得到
S
n
?
1
S_{n-1}
Sn?1?的监督,直到得到
S
1
S_1
S1?的监督。 shrink的大小 :大小为
d
i
d_i
di?,它由已下两个公式决定,其中area为是原来的kernel的面积,permimeter是原来kernel的周长,是已知的,而r也是由于超参数m和n决定的,m是Minimal Kernel Scale,也就是
S
1
S_1
S1?中kernel与
S
n
S_n
Sn?中的kernel的比例,n是分割图的个数。
d
i
=
A
r
e
a
(
p
n
)
?
(
1
?
r
i
2
)
P
e
r
i
m
e
t
e
r
(
p
n
)
d_i=\frac{Area(p_{n})*(1-r_{i}^2)}{Perimeter(p_n)}
di?=Perimeter(pn?)Area(pn?)?(1?ri2?)?,其中
r
i
=
1
?
(
1
?
m
)
?
(
n
?
i
)
n
?
1
r_i=1-\frac{(1-m)*(n-i)}{n-1}
ri?=1?n?1(1?m)?(n?i)? 注 :那么n取几合适一点呢?5比较合适。那么m取几合适一点呢?40%比较合适。以上都是在IC15和CTW-1500数据集上的结果,是针对于label而言的。
损失函数
损失
L
L
L主要包含两部分,包括
S
n
S_n
Sn?这个具有最大尺度的、也是我们需要的文本实例的分割结果的损失
L
c
L_c
Lc?和之前的小尺度的文本实例分割结果的损失和
L
s
L_s
Ls?还有一个平衡系数
λ
\lambda
λ
L
=
λ
?
L
c
+
(
1
?
λ
)
?
L
s
L=\lambda*L_c+(1-\lambda)*L_s
L=λ?Lc?+(1?λ)?Ls? 其中,
L
c
与
L
s
L_c与L_s
Lc?与Ls?用的损失是Dice loss,也就是相似度越高,损失越小。函数D就是计算相似度的,而M表示在训练的时候,使用了Online Hard Example Mining (OHEM)的技术,W表示二值化操作
L
c
=
1
?
D
(
S
n
?
M
,
G
n
?
M
)
L_c=1-D(S_n*M,G_n*M)
Lc?=1?D(Sn??M,Gn??M)
L
s
=
1
?
∑
i
=
1
n
?
1
D
(
S
i
?
W
,
G
i
?
W
)
n
?
1
L_s=1-\frac{\sum_{i=1}^{n-1}D(S_i*W,G_i*W)}{n-1}
Ls?=1?n?1∑i=1n?1?D(Si??W,Gi??W)?
注 :
- 因为使用交叉熵损失函数的话,文本实例占据的区域是在太小,网络会倾向于预测非文本区域。所以选择了dice loss
- dice系数=
2
∣
X
?
Y
∣
∣
X
∣
+
∣
Y
∣
\frac{2|X*Y|}{|X|+|Y|}
∣X∣+∣Y∣2∣X?Y∣?,表示两个集合的交集元素的两倍,比上两个基于并集元素。dice系数是一种集合相似度度量函数,通常用于计算两个样本点的相似度(值范围为[0, 1])。而dice loss=
1
?
2
∣
X
?
Y
∣
∣
X
∣
+
∣
Y
∣
1-\frac{2|X*Y|}{|X|+|Y|}
1?∣X∣+∣Y∣2∣X?Y∣?,两个集合越相似,损失越小。
作者给出的dice系数为: - 作用用的二值化操作是:阈值选的是0.5
|