点击我爱计算机视觉标星,更快获取CVML新技术


作者:刘恒

编辑: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

加群交流

关注文本检测、识别、OCR技术,欢迎加入52CV-OCR群,扫码添加52CV君拉你入群,

(请务必注明:OCR):

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:702781905。

(不会时时在线,如果没能及时通过验证还请见谅)


长按关注我爱计算机视觉

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

  1. pse文本行检测_CVPR 2019 | 文本检测算法PSENet解读与开源实现

    作者:刘恒 编辑:CV君 PSENet文本检测算法来自论文<Shape Robust Text Detection with Progressive Scale Expansion Networ ...

  2. 论文盘点:CVPR 2019 - 文本检测专题

    作者丨燕小花 研究方向丨计算机视觉 CRAFT 论文主要思想 本文的主要思路是先检测单个字符(character region score)及字符间的连接关系(affinity score),然后根据 ...

  3. PSENet PANNet DBNet 三个文本检测算法异同

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 这三个文本检测算法都是segment base算法,通过由下而上的方式,先对text进行seg ...

  4. CVPR 2019 | 目标检测之面向更高精度的包围框回归

    CVPR 2019 | 目标检测之面向更高精度的包围框回归 背景介绍 主要内容 包围框参数化 用于包围框回归的KL loss 测试阶段的方差投票机制 实验分析 实验细节: 实验结果: 总结 参考文献 ...

  5. 4种基于像素分割的文本检测算法

    摘要:文本检测是文本读取识别的第一步,对后续的文本识别有着重大的影响.一般场景下,可以通过对通用目标检测算法进行配置修改,来实现对文本行的检测定位.本文主要介绍基于像素分割的文本检测算法. 本文分享自 ...

  6. 文本检测算法性能对比

    文本检测算法性能对比 1. 任意四边形文本数据集 1.1 ICDAR15[^1] 2. 曲形文本数据集 2.1 CTW1500[^10] 2.2 Total-Text[^11] 本文会一直更新经典的. ...

  7. CVPR 2019 目标检测论文汇总

    CVPR 2019 目标检测论文汇总(0506更新中)极市平台​已认证的官方帐号84 人赞同了该文章前段时间,计算机视觉顶会CVPR 2019 公布了接收结果,极市也对此做了相关报道 ,目前官方公布了 ...

  8. 分割文本_PSENet、PANNet、DBNet三个文本检测算法异同

    点击蓝字关注我们 这三个文本检测算法都是segment base算法,通过由下而上的方式,先对text进行segment,然后再根据segment text,计算出text的instance PSEN ...

  9. 文本检测算法新思路:基于区域重组的文本检测

    摘要:文本检测是文本读取识别的第一步,对后续的文本识别有着重大的影响.本文主要介绍基于区域重组的文本检测算法. 本文分享自华为云社区<技术综述十三:弯曲文本检测算法(一)>,作者: 我想静 ...

最新文章

  1. (已解决)ubuntu20.04 jar xvf XXX.zip报错-java.io.EOFException:Unexpected end of ZLIB input stream
  2. 零的突破!双非高校教师荣获杰青!曾把自己P成女娲,登上学术期刊封面
  3. 微擎 微赞等系统源码模块若干问题解决方法及说明汇总
  4. wordpress使用的插件记录
  5. [Git] 001 初识 Git 与 GitHub 之新建仓库
  6. 集群节点数和分片数关系_完全二叉树的节点数,你真的会算吗?
  7. 如何让Windows任务栏显示多个不同时区的时钟
  8. 一位跨平台开发者的自白
  9. 人脸检测解析json的工具类face_test
  10. 记录console的使用
  11. 【Calcite】Calcite入门
  12. 【绘图】matlab绘制图形
  13. jQuery核心函数
  14. 白盒测试实验报告模板
  15. python爬取相册_如何用python实现爬取微博相册所有图片 - 收获啦
  16. Ratione aspernatur nam dolorem vitae quia.Fumer comme créer passer ailleurs jouer lumière.
  17. 重命名技巧,支持多个文件夹快速重命名
  18. vs2015上安装小番茄插件
  19. 第五章.MyBatis高级映射
  20. vue+elementUI实战之网易云音乐--半月总结!!!

热门文章

  1. linux pae内核安装,Linux 安装PAE内核
  2. php查真实地址,php教程:检查URL地址是否真实存在
  3. python变量后面加星号_计算与变量(一)跟杜老师一起,趣学Python编程
  4. android studio 导入包分不分动态静态,详解Android studio 动态fragment的用法
  5. redis主从配置及无法连接处理
  6. IDEA导入项目笔记
  7. 电脑常见问题_电脑常见问题解决方法(二)
  8. mysql5.7导出数据_mysql5.7导出数据时出现--secure-file-priv选项应对方法
  9. 如何用append连接html文件,jquery append()怎么用?
  10. 备份linux分区到usb,将Linux引导加载程序备份到USB的方法