CVPR 2019 | 文本检测算法PSENet解读与开源实现

作者:刘恒

编辑:CV君

 

PSENet文本检测算法来自论文Shape Robust Text Detection with Progressive Scale Expansion Network》,2018年7月发表于arxiv,已被CVPR 2019 接收。

 

论文作者来自南京理工大学和南京大学,其中第一作者来自南理工杨健老师PCALab组。

原作者代码地址:https://github.com/whai362/PSENet

目前该仓库没有给出源码,只有一些原理图和实验结果。

笔者的实现:https://github.com/liuheng92/tensorflow_PSENet

该方法的速度较快,使用resnet作为主干网络,在ICDAR2015数据集上的最快能达到12.38fps,此时的f值为85.88%,而且该方法适用于弯曲文字的检测。

文章思想

文章认为其提出的方法能避免现有bounding box回归的方法产生的对弯曲文字的检测不准确的缺点(如下图b所示),也能避免现有的通过分割方法产生的对于文字紧靠的情况分割效果不好的缺点(如下图c所示)。该文章的网络框架是从FPN中受到启发采用了U形的网络框架,先通过将网络提取出的特征进行融合然后利用分割的方式将提取出的特征进行像素的分类,最后利用像素的分类结果通过一些后处理得到文本检测结果。

 

一、网络结构

文中的主干网络采用resnet,网络框架类似于FPN的结构,如下图所示。

 

上图中先利用resnet提取出四层feature maps(),将得到的四层特征图进行融合得到特征图用F表示,融合的方式用下面公式表示:

上式中,“||”表示的是concatenation操作,分别表示的是将feature map进行上采样,上采样的倍数分别是2,4,8倍。

特征图F送入3*3大小的卷积中输出通道数为256的特征图,将此特征图再送入1*1大小的卷积层中输出n个最终的结果,这n个结果用表示。

最后将n个输出结果通过一定的后处理得到最终的文字检测结果。

这里还要说明的是 的区别,是图像文字的分割结果,他们的不同点在于他们分割出的文字区域大小不同,例如给出的是最小的文字区域分割结果,而给出的是最大的文字区域分割结果(理想情况下就是GroundTruth)。

二、后处理算法

Progressive Scale Expansion Algorithm-PSE

看这个名字就很容易理解为什么这篇文章被称为PSENet了。

该后处理算法如下图所示:

            

 实际文章中n=6,但是为了更方便解释,这里假设n=3,即网络最终输出了3张分割结果,首先从最小的分割结果开始,如上图(a)所示,能够找出四个分割区域。这四个分割区域用四种不同的颜色表示,这样能得到所有文本的中心区域,然后将这些区域与进行合并得到最终结果,结果分别如上图(c)和图(d)所示。上述依次合并的规则如上图(g)所示(Breadth-First-Search algorithm)。在合并的过程中可能会遇到如上图(g)中的冲突情况,在遇到冲突的情况下,采用”先到先得”的方式。

更为详细的合并规则用下面的伪代码表示,其中T,P表示的中间结果,Q表示的是队列,表示像素的邻域,表示属于某一类的中间结果的label。表示预测的 中的像素q是文字。

三、标签的生成

因为网络输出有n个分割结果,所以对于一张输入图片来说groundtruth也要有n个。这里groundtruth就是简单的将标定的文本框进行不同尺度的缩小,如下图所示。下图中(b)就是标定框也是最大的groundtruth  ,如下图(c)的最右侧图所示。为了获得下图(c)中的其他图,文章采用Vatti clipping算法将原多边形缩小个像素得到。最终得到的n个groundtruth用表示。需要缩小的像素通过下面式子得到:

 

 

上式中, 表示要缩小的像素值,表示多边形的面积,表示多边形的周长,表示缩小的比例。

缩小比例 的计算方式如下所示:

 

上式中,m表示最小的缩放比例,是一个超参数,取值范围为(0,1],本文取m=0.5。n为最终输出多少个尺度的分割结果,文章设为6。

四、损失函数的定义

损失函数的定义如下:

 

其中,表示没有进行缩放时候的损失函数,即相对于原始大小的groundtruth的损失函数,表示的是相对于缩放后的框的损失函数。

关于损失函数文章没有采用交叉熵而是采用的分割常用的dice coefficient,使用公式表示如下

 

 

上式中分别表示在位置(x,y)处分割结果和groundtruth 的值。

文章使用了OHEM的方法,对于OHEM给出的训练mask为M的情况下, 的计算方法如下:

 

 

因为其他缩小框的分割结果会被原始大小的框包围,文章说为了避免冗余,在计算缩小框的损失函数时去除了结果中为非文本的区域,所以计算方式如下:

 

 

               

上式中Sn,x,y表示在 中像素(x,y)的值。

五、实验结果

下表是原文在数据库ICDAR 2015, ICDAR 2017 MLT 和 SCUT-CTW1500上测得的结果。表中“P”,“R”和“F”分别表示准确率,召回率和F值。“1s”, “2s” and “4s”表示输出的featuremap的宽和高分别为输入测试图像宽高的 1/1, 1/2 and 1/4。F值最好和次好的结果分别用红色和蓝色标出。 

这个结果已经相当优秀了,尤其是在IC17-MLT、SCUT-CTW1500数据集上大幅超越之前的state-of-the-art的结果(2018年7月)。

文章还有一些试验细节的说明和讨论,详情可以查阅原文。

检测结果示例:

 

论文代码下载

论文地址:

https://arxiv.org/pdf/1806.02559.pdf

笔者复现:

https://github.com/liuheng92/tensorflow_PSENet

转载请注明:《CVPR 2019 | 文本检测算法PSENet解读与开源实现