【文本检测】PSENet

论文正文

链接:链接,提取码: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个分割图做PSE操作,训练的时候,n个分割图与n个对应的ground-truth进行损失计算;检测的时候,直接根据分割图 S n S_n Sn得到二值图,然后得到检测结果。

  1. 分割图不是黑白的吧,这里可能为了视觉效果,弄成黑白了。
    在这里插入图片描述

Progressive Scale Expansion(PSE)

每个分割图中,文本实例对应的分割结果称为kernel,扩张的过程其实就是使用BFS的思想,kernel内部的像素不断扩张,直到两个kernel的像素产生冲突停止扩张,处理冲突的办法就是先到先得。
已下是算法的形式化的表示伪代码
在这里插入图片描述
在这里插入图片描述

标注

模型要产生N个分割结果,那么我们就得给它N个ground-truth,怎么得到这N个ground-truth呢?
首先,我们可以根据文本手工得到一个标注框,然后根据它得到二值图,这个二值图就是 S n S_n Sn的监督。然后对它按照距离 d i d_i di进行shrink得到 S i S_{i} Si的监督.
在这里插入图片描述
shrink的大小:大小为 d i d_i di,它由已下两个公式决定,其中 P n P_n Pn是我们根据文本手工得到的标注框中对应的那些kernel,area为它对应的的面积,permimeter是它对应的周长,是已知的,而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)(1ri2),其中 r i = 1 − ( 1 − m ) ∗ ( n − i ) n − 1 r_i=1-\frac{(1-m)*(n-i)}{n-1} ri=1n1(1m)(ni)
:那么n取几合适一点呢?那么m取几合适一点呢?根据数据集而定。

损失函数

损失 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 LcLs用的损失是Dice loss,也就是相似度越高,损失越小。函数D就是计算相似度的,而M表示在训练的时候,使用了Online Hard Example Mining (OHEM)的技术得到的mask;W表示二值化操作作为mask,只使用文本区域计算损失,非文本区域不计算。
L c = 1 − D ( S n ∗ M , G n ∗ M ) L_c=1-D(S_n*M,G_n*M) Lc=1D(SnM,GnM)
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=1n1i=1n1D(SiW,GiW)

  1. 因为使用交叉熵损失函数的话,文本实例占据的区域是在太小,网络会倾向于预测非文本区域。所以选择了dice loss。但是以往都是用交叉熵损失函数呀?我觉得这里应该是分割图比较多的缘故吧。
  2. dice系数= 2 ∣ X ∗ Y ∣ ∣ X ∣ + ∣ Y ∣ \frac{2|X*Y|}{|X|+|Y|} X+Y2XY,表示两个集合的交集中元素的两倍,比上两个集合元素个数得和。dice系数是一种集合相似度度量函数,通常用于计算两个样本点的相似度(值范围为[0, 1])。而dice loss= 1 − 2 ∣ X ∗ Y ∣ ∣ X ∣ + ∣ Y ∣ 1-\frac{2|X*Y|}{|X|+|Y|} 1X+Y2XY,两个集合越相似,损失越小。
    作者给出的dice系数为:
    在这里插入图片描述
  3. 作用用的二值化操作是:阈值选的是0.5
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值