专栏首页我爱计算机视觉CVPR 2019 | 文本检测算法PSENet解读与开源实现

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

本文分享自微信公众号 - 我爱计算机视觉(aicvml),作者:刘恒

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 百年古董电影秒变4K高清、60FPS,AI插值,还能着色

    由于技术原因,最早的影像资料都是较为模糊且卡顿的,这就让大大降低了我们的观感体验。

    CV君
  • 完美替代Mask RCNN!BlendMask:实例分割新标杆

    今天新出的论文BlendMask: Top-Down Meets Bottom-Up for Instance Segmentation,提出一种自顶向下和自底...

    CV君
  • 旷视开源了一套图像检索和ReID的PyTorch库

    旷视开源了一套图像检索和 ReID 的 PyTorch 库,论文“PyRetri: A PyTorch-based Library for Unsupervis...

    CV君
  • debian系linux更新时,提示“由于没有公钥,无法验证下列签名”

    此时继续使用sudo apt-get update更新,发现没有公钥错误提示了,但还存在校验问题。

    双面人
  • 【玩转腾讯云】利用腾讯云硬盘给本地机房做数据备份方案

    同时支持虚拟环境和物理环境中的备份数据成功上云。覆盖主流虚拟机、数据库、邮件系统和非结构化文件。

    中云微迅
  • GitHub深度学习框架最新榜单(截至2017年10月)

    李根 发自 大理 量子位 报道 | 公众号 QbitAI Keras作者、Google深度学习研究院François Chollet,今日照例再次发布了Git...

    量子位
  • 初级 Java 的 3 本进阶书

    三哥
  • python3+selenium获取页面加载的所有静态资源文件链接操作

    以上代码为selenium获取页面加载过程中预加载的各类静态资源文件链接,使用该功能获取到链接后,使用其他插件进行可对资源进行下载!

    砸漏
  • kotlin到底好在哪里?

    最近在学kotlin,虽然还没有像其他博主一样立马就爱上它.但是不得不说,kotlin对比起java还是有不少优势的. 1、语法简洁 首先是语法比较简洁,能不简...

    用户1269200
  • 64位Windows 10下如何搭建CUNIT环境

    Windows下如何搭建CUNIT环境资料很多,但是错误不少或者讲解不清晰,很容易让人跌入坑中,现在介绍如下。

    小老鼠

扫码关注云+社区

领取腾讯云代金券