antd 文本域超长问题_基于分割的文本检测算法之PSENet/PAN/DBNet

1. 文本检测难点

文本内包含文本,艺术字体,任意方向 ,曲线文字 ,多语言,其他环境因素等是文本检测中的难点

2. 分割

问题1: 语义分割模型是对pixel进行分类,所以理论上讲,可以检测不规则的文本,但是其很难分离靠得近的文字块,难以区分到底是一个文本还是多个文本

3. PSENet

针对相邻文本的难区分性提出了PSE算法来解决这个问题

3.1 网络结构

如下图所示,网络结构类似于Fpn,在网络的末尾处选择四个feature map:分别为P2,P3,P4,P5,经上采用后进行concate操作得到F,再经过卷积后最终预测输出n个feature map:

所代表的意义并不一样,这和本文的渐进尺度扩张算法(PSE)是息息相关的。我们会在下文介绍其来源。

b51b294bc6dafd455c84bb046d613a4d.png

3.2 ground truth

从上面的网络结构图中,可以看到我们需要输出不同尺度范围的文本kernel,这些kernel形状一致,只是胖瘦不一,且尺度逐级递增。其中,

表示的就是原始文本行的大小,对于最小尺度的kernel,就是原始文本行的骨架,不同的文本行之间间距很大,是可以完全分开的,这样子就可以解决分割算法难以区分离得近的文本块。我们如何根据原始样本的标签得到训练时不同尺寸kernel所对应的标签呢?文章中作者采用Vatti Clipping algorithm算法将原多边形
以步长
个像素缩小成
的,如下图所示,最终可得不同尺度的文本kernel。

5ee22f1462631047fc106a5057b7100f.png

对于Pn和Pi之间的间距di定义为:

Area()代表多边形面积

Perimeter()代表多边形边长

的定义为:

其中n不是不同尺度kernel的个数,论文中取n=6,m代表最小缩放比例,范围(0,1),文章中m=0.5,即

的kernel大小是原始文本的一半。

3.3 渐进尺度扩张算法

26a05a854980df7efd672563f3f43ac4.png

现在网络输出了

,简单起见,我们假设n=3,现在有
,首先我们从S1中使用CC(CC为一个寻找连通分量的方法)方法,将不同区域合并得到b,如图,b中有四个连通区域,(小kernel,不同文本之间的margin很大,很容易分开)。我们知道
中的kernel是比
大的,两者是包含关系,现在我们的任务就是将属于
中的kernel的但不属于
中的kernel的像素点(即图g左图中的灰色的部分,蓝色和橘色部分分别表示
中的两个连通域)进行分配。如图所示,在灰色区域(
的kernel范围)内,将b图所找到的连通域的每个pixel以BFS(广度优先搜索算法)的方式,逐个向上下左右扩展,即相当于把
中预测的文本行的区域逐渐变宽(或者换种说法:对于
中kernel的每个像素点,把它们都分别分配给
中的某个连通域)。这里还有一个问题,如图g右图所示,图中值为2的点为冲突点,例子中的两个连通域都可能扩展到这个pixel,论文中对这种冲突的解决方法就是“先到先得”原则,这对最后的结果没什么影响。后面的
同理,最终我们抽取图d中不同颜色标注的连通区域作为最后的文本行检测结果。

3.4 损失函数

定义:

表示整个文本实例(
)的损失,

表示缩放后文本实例(
)的损失,

用于平衡
,论文中设置为0.7。

通常文本实例占自然场景比例较小,采用二进制的交叉熵损失会遇到类别不平衡的问题,造成结果偏向非文本区域。本文采用dice coefficient损失函数:

其中:

分别代表分割结果
和ground truth
在(x,y)处的像素值。

文本区域和栅栏、栅格很相似,论文采用OHEM,使模型更好的区分文本和一些难例,正负样本比例为1:3.

具体

的计算公式为:

其中M即为OHEM的training mask。

主要是缩放后文本区域的损失,考虑到缩放尺度后的文本区域被原始文本区域包围,即
中的负样本在
~
中肯定是负样本,而
中的正样本在
~
中有部分是正样本,有部分是负样本,为了避免像素冗余(
中的负样本loss比例太大),所以设置W,用来代表
中文本区域的mask,过滤掉部分像素。注意,W是
中的文本区域。

4. PSENet改进版:PAN-不降精度,极大加快速度

PSENet问题,速度较慢,后处理人工处理太多,效率低。PAN针对这两个问题,提出了低成本的分割模块和可学习的后处理办法。

4.1网络结构

e254a89157aded4d0adc52a58f5b4c74.png

采用resnet18的轻量化网络作为backbone,该主干网络感受野较小,表达能力欠缺,所以提出了一个可高效修正的分割head.他有两个部分组成:特征金字塔增强模块(FPEM)和特征融合模块(FFM)。 如上图所示,FPEM可级联且被设计得计算量很小,连接在 backbone 后面让不同尺寸的特征有更深、更具表征能力。在 FPEM 模块后面,使用特征融合模块(FFM)来将不同层级的 FPEM 所产生的特征融合为最终用于分割任务的特征。

4.2 分割模块

4.2.1.PFEM模块

c900c925e81a0d895af21ea7dec5ccde.png

如上图,FPEM呈现U型状,由up-scale 增强、down-scale 增强两个阶段,up-scale输入是backbone输出的特征金字塔,步长分别 32,16,8,4 。 down-scale 阶段,输入的是由 up-scale 增强生成的特征金字塔,增强的步长从 4 到 32,同时,down-scale 增强输出的的特征金字塔就是FPEM 的输出。 和FPN结构类似,FPEM能够融合低级和高级信息来增强不同scale的特征,且设计成了一个可级联结构,使不同scale的特征能够更好的融合在一起,特征感受野也增大。同时,FPEM由可分离卷积构成,计算量为FPN1/5。

f4b735e89af55aa35ba3db898245dd7a.png

这个表格可以看出,FPEM模块数量从0到4,F(F-measure)提高了将近3个点。

4.2.2. FFM模块

2d8b97b57dac80d6674f3f0c25a6c907.png

FFM模块用于融合FPEM的特征,因为FPEM是级联结构,输出的多个尺度的feature map。为了减少特征通道量,加快速度,论文并没有采用将不同sacle的特征图upsample后全部concate的思路,(因为这样会有scales_numstage_num128:每个scale的特征图被1*1卷积降维成128个channel的特征)。论文针对性的提出了如上图的融合方法,同一尺度的feature map通过逐元素相加,再对其进行upsample操作后使特征图具有相同的 size,最后concate起来,得到了模型的输出特征。

最后,使用1x1 conv得到6通道的输出。网络的输出包括: text region: 1个通道 kernel: 1个通道 similar vector: 4个通道(每个位置学习一个4维的特征向量,使用这个特征向量来聚类,这是一个无监督学习方法)

4.3 loss损失函数

4.3.1.定义:

其中:

分别取值0.5,0.25.
表示text region的分割损失,kernel 的分割损失。
表示文本实例与其kernel的loss
表示不同文本实例的kernel的loss.

用于保证同一实例的像素的similar vector与其kernel的similar vector离得近,与不同kernel的similar vector离得远。(类内距离小,类间距离大)。

执行OHEM(比例正负=1:3),忽略简单的负样本。

的标签生成方法和PSENet一样,比例设置: ICDAR2015 r = 0.5;other dataset r = 0.7
在计算时只计算ground truth中文本区域的像素点。

4.3.2.

的公式定义与PSENet相同,采用dice loss。

其中:

分别指text分割结果的第 i 个像素值以及文字区域的 ground truth;

分别指kernel预测结果的第 i 个像素值以及核的 ground truth。

4.3.3.

用于保证文本实例的kernel与同一文本实例像素的距离 <
让同一个文本实例的像素similar vector距离尽量小,同时设置距离常数
用于过滤简单样本。

N:文本实例数量 Ti表示第i个文本实例,

|Ti|表示第i个文本实例像素个数 Ki表示第i个文本实例kernel D定义了Ti内的像素p与Ki的距离,计算方式如下:

其中,

=0.5;

为像素p的similat vector,||···||表示2范数;

为Ki的similar vector,计算方式为:

,
中所有元素的similar vector的平均值。

4.3.4.

用于保证不同文本实例的kernel距离 >

其中:

=3

4.4 后处理

原理就是利用学习到的similar vector 1. 通过连通阈获得初始的kernel(即文本实例的骨架)及其实例可能的像素 2. 对于Ki,按四个方向融合像素,判断依据为该像素p与Ki的similar vector之间的距离d = 6, 则认为该像素属于该类。 3. 重复2操作,直至Ki都融合到自己的像素。

4.5 疑问

  1. 为何测试阶段距离阈值d=6,比
    =3还大,d>3在训练阶段是被认为属于不同实例??? 经与作者联系后确认为3.

5. DBNet

5.1 发现问题

在基于分割的文本检测网络中,最终的二值化map都是使用的固定阈值来获取,并且阈值不同对性能影响较大。 后处理的过程时间复杂度很高,很耗时。例如,pan,要先二值化,接下去还要进行聚类,不优雅。

5.2 DIfferentiable binarization及自适应阈值

可导的二值化过程,通过网络自适应得到像素的阈值。同时将阈值设计为为可导结构,使其也可以监督网络学习,让得到的阈值非常的具有鲁棒性。 传统的固定阈值二值化:

DB近似二值化:

其函数图如下,SB为固定阈值,DB为子适应阈值。

a83d0a5e94bc8fff3a8ce0e6343b88a5.png

5.3 网络结构图

如下图,图中“1/2”, “1/4”, ... and “1/32” 表示feature和输入图像的缩放比

692d5dc959daf47fb7a9538998d96a77.png

模型经过FPN层后,得到 probability map: 像素点为文本的概率 threshold map:像素点的自适应阈值 binary map: 近似的二值图

5.4 label生成

  1. probability map的制作方式和psenet等是一致的,利用pse算法制作即可
  2. threshold map: 将文本框分别向内和向外扩张d(上述pse算法中的d)个像素,然后计算收缩框和扩张框这个区域
    内像素点距离其最近文本框边界的归一化距离D,1-D即得到threshold map在该点的值。对于处于两个文本框
    的区域的像素点,其threshold map的值选择离它距离最近文本框的归一化距离。 同时设置threshold map值的上下限,最小值为0.3。对于非文本区域probability很容易学习,其概率值一般接近于0,同理,文本区域的骨架也是如此,其概率一般都很高。最难的就是边界的学习了,所以对threshold map着重于边界处阈值的学习。可以看到,在
    区域内,离文本框越远,则意味着其阈值越高,要想被预测为文本区域,则其probability map对应位置的score得非常高。而probability map对应区域的位置label 为0。我们就可以看的很清楚了,在学习过程中,文本框骨架的边界外沿的这部分像素,网络在拼命拉低probability map的预测值,threshold map在拼命拉高其阈值,两者相互写协作,使DBNet的边界学习的非常好。

5.5 loss函数

本文的loss函数主要有三个部分:

: 文本区域概率图损失

:二值化图损失

: 阈值图损失

5.6 预测

因为threshold map分支的监督作用,probability map的边界会学习的很好。因此,可以直接按照收缩的方法将预测得到的文本骨架框扩张回去(Vatti cliipping algorithm)扩张回去。大大简化了后处理的步骤。

6. 比较(Total-text)

61575b767afd868a4901b87762e2e678.png

7. 资料

DB

https://arxiv.org/pdf/1911.08947.pdf​arxiv.org https://github.com/MhLiao/DB​github.com https://github.com/WenmuZhou/DBNet.pytorch​github.com

PSENet

狼牙:论文分享——PSENET​zhuanlan.zhihu.com
a4356b57d4202c38b23e8b606c93b568.png

PAN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值