首发于 硅步

基于分割的文本检测算法之PSENet/PAN/DBNet

1. 文本检测难点

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

2. 分割

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

3. PSENet

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

3.1 网络结构

如下图所示,网络结构类似于Fpn,在网络的末尾处选择四个feature map:分别为P2,P3,P4,P5,经上采用后进行concate操作得到F,再经过卷积后最终预测输出n个feature map: S_1,S_2,S_3,······,S_nS_1,S_2,S_3,······,S_n 所代表的意义并不一样,这和本文的渐进尺度扩张算法(PSE)是息息相关的。我们会在下文介绍其来源。


3.2 ground truth

从上面的网络结构图中,可以看到我们需要输出不同尺度范围的文本kernel,这些kernel形状一致,只是胖瘦不一,且尺度逐级递增。其中,S_n 表示的就是原始文本行的大小,对于最小尺度的kernel,就是原始文本行的骨架,不同的文本行之间间距很大,是可以完全分开的,这样子就可以解决分割算法难以区分离得近的文本块。我们如何根据原始样本的标签得到训练时不同尺寸kernel所对应的标签呢?文章中作者采用Vatti Clipping algorithm算法将原多边形 Pn 以步长 di 个像素缩小成 Pi 的,如下图所示,最终可得不同尺度的文本kernel。

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

d_i = \frac{Area(p_n)*(1-r_i^2)}{Perimeter(p_n)} \qquad(1)

Area()代表多边形面积

Perimeter()代表多边形边长



r_i 的定义为:

r_i = 1 - \frac{(1- m ) * (n - i)}{n - 1}\qquad(2)

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

3.3 渐进尺度扩张算法


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

3.4 损失函数

定义: L = \lambda L_c + (1 - \lambda)L_s\qquad(3)

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

Ls 表示缩放后文本实例( S1->Sn-1 )的损失,

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

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

D(S_i,G_i) = \frac{2\sum_{x,y}(S_{i,x,y}*G_{i,x,y})}{\sum_{x,y}S_{i,x,y}^2 + \sum_{x,y}G_{i,x,y}^2}\qquad(4)

其中: S_{i,x,y}、G_{i,x,y} 分别代表分割结果 Si 和ground truth Gi 在(x,y)处的像素值。

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

具体 LcLs 的计算公式为:

L_c = 1 - D(S_n·M,G_n·M)\qquad(5) 其中M即为OHEM的training mask。

L_s = 1- \frac{\sum_{i=1}^{n-1}D(S_i·W,G_i·W)}{n -1},\qquad W_{x,y} =\begin{cases} 1 & \text{if } S_{n,x,y \geq 0.5;}\\ 0& \text{else. } \end{cases} \qquad (6)

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

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

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

4.1网络结构

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

4.2 分割模块

4.2.1.PFEM模块

如上图,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。

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

4.2.2. FFM模块

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.定义:

L = L_{tex} + \alpha · L_{kernel} + \beta · (L_{agg} + L_{dis}) \qquad (7)

其中: \alpha,\beta 分别取值0.5,0.25. L_{tex},L_{kernel} 表示text region的分割损失,kernel 的分割损失。 L_{agg} 表示文本实例与其kernel的loss L_{dis} 表示不同文本实例的kernel的loss.

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

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

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

4.3.2. L_{tex},L_{kernel} 的公式定义与PSENet相同,采用dice loss。

L_{tex} = 1 - \frac{2\sum_{i}(P_{tex}(i)*G_{tex}(i))}{\sum_{i}P_{tex}(i)^2 + \sum_{i}G_{tex}(i)^2}\qquad(8)

L_{kernel} = 1 - \frac{2\sum_{i}(P_{kernel}(i)*G_{kernel}(i))}{\sum_{i}P_{kernel}(i)^2 + \sum_{i}G_{kernel}(i)^2}\qquad(9)

其中:

P_{tex}(i),G_{tex} 分别指text分割结果的第 i 个像素值以及文字区域的 ground truth;

P_{kernel}(i),G_{kernel}(i) 分别指kernel预测结果的第 i 个像素值以及核的 ground truth。

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

L_{agg} = \frac{1}{N} · \sum_{i=1}^N\frac{1}{|T_i|}\sum_{p \in T_i} ln(D(p,K_i) + 1) \qquad(10)

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

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

D(p,Ki) = max(||F(p) - G(Ki)|| - \delta_{agg},0)^2 \qquad(11)

其中, delta_{agg} =0.5;

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

G(Ki) 为Ki的similar vector,计算方式为:

G(Ki) = \sum_{q \in Ki} \frac{F(q)}{|Ki|} , Ki 中所有元素的similar vector的平均值。

4.3.4. L_{dis} 用于保证不同文本实例的kernel距离 > \delta_{dis}

L_{dis} = \frac{1}{N · (N-1)} \sum_{i=1}^N \sum_{j=1,j \neq i}^{N} ln(D(K_i,K_j) + 1)\qquad(12)

其中:

D(K_i,K_j) = max(\delta_{dis} - ||G(K_i) - G(K_j)||,0)^2\qquad(13)

\delta_{dis} =3

4.4 后处理

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

4.5 疑问

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

5. DBNet

5.1 发现问题

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

5.2 DIfferentiable binarization及自适应阈值

可导的二值化过程,通过网络自适应得到像素的阈值。同时将阈值设计为为可导结构,使其也可以监督网络学习,让得到的阈值非常的具有鲁棒性。 传统的固定阈值二值化: B_{i,j} =\begin{cases} 1 & \text{if } P_{i,j} \geq t;\\ 0& \text{else. } \end{cases} \qquad t为阈值,P_{i,j}为像素点(i,j)是文本的概率 \qquad(14)

DB近似二值化: B_{i,j} = \frac{1}{1 + e^{-K (P_{i,j} - T_{i,j})}} 其函数图如下,SB为固定阈值,DB为子适应阈值。


5.3 网络结构图

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

模型经过FPN层后,得到

probability map: 像素点为文本的概率

threshold map:像素点的自适应阈值

binary map: 近似的二值图

5.4 label生成

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

5.5 loss函数

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

L = L_p + \alpha * L_b + \beta * L_t

L_p : 文本区域概率图损失

L_b :二值化图损失

L_t : 阈值图损失

5.6 预测

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

6. 比较(Total-text)

7. 资料

DB

PSENet


PAN

深圳SEO优化公司德阳seo优化价格益阳企业网站制作公司吉安seo推荐唐山seo排名价格濮阳阿里店铺运营价格揭阳设计网站多少钱漳州企业网站改版推荐济宁网站开发哪家好昆明seo网站推广哪家好海南企业网站改版推荐合肥外贸网站制作推荐鹤岗品牌网站设计娄底网站制作设计长沙网站搜索优化推荐沙井百度网站优化排名多少钱黄石至尊标王哪家好福田网站关键词优化多少钱永湖网站制作设计报价濮阳SEO按天计费公司南澳网站推广衡阳网站优化推广价格遵义百度竞价包年推广公司韶关优秀网站设计推荐红河百度关键词包年推广哪家好武威网站推广系统哪家好遂宁网站建设哪家好乐山建站多少钱揭阳网站排名优化哪家好漯河百度网站优化排名推荐淮北网站优化按天扣费歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化