文档章节

大话文本检测经典模型:SegLink

雪饼
 雪饼
发布于 05/15 09:32
字数 2150
阅读 94
收藏 1

在自然场景中,例如灯箱广告牌、产品包装盒、商标等,要检测出其中的文字会面临着各种复杂的情况,例如角度倾斜、变形等情况,这时就需要使用基于深度学习的方法进行文字检测。在之前的文章中,介绍了基于卷积神经网络和循环神经网络的CTPN文本检测方法(见文章:大话文本检测经典模型 CTPN),该方法能在自然场景下较好地实现对文字的检测,但在CTPN中给出的文本检测效果是基于水平方向的,对于非水平的文本检测效果并不好,而在自然场景中,很多的文本信息都是带有一定的旋转角度的,例如用手机拍街道上的指示牌,如下图。如果文本检测的结果只有水平方向的,没有带角度信息,那么下图指示牌检测出来的就是红色框结果,而其实绿色框才是理想的检测目标,可见检测的结果误差太大。

 

那要怎样才能实现对各种角度的灵活检测呢?一个最直接的思路就是让模型不仅能学习和输出边框的位置(x, y, w, h),还要能输出一个文本框的旋转角度参数θ。本文要介绍的文本检测模型SegLink,便是采用了这个思路,也即SegLink检测模型能检测有旋转角度的文本,如下图:

一、SegLink模型的主要思想

SegLink模型的检测过程主要如下:

1、首先是检测生成一个一个的segment(切片),如上图黄色框,这些segment(切片)是文本行(或单词)的一部分,可能是一个字符,或者是一个单词,或者是几个字符

2、通过link(链接)将属于同一个文本行(或者单词)的segment(切片)连接起来,如上图绿色线条。link(链接)是在两个有重叠segment的中心点进行相连,如下图

3、通过合并算法,将这些segment(切片)、link(链接)合并成一个完整的文本行,得出完整文本行的检测框位置和旋转角度。

 

其中,segment(切片)、link(链接)是SegLink模型的创新之处,该模型不但学习了segment的位置信息,也学习了segment之间的link关系,以表示是否属于同一文本行(或者单词)。

 

二、SegLink模型的网络结构

SegLink模型的网络结构如下:

该模型以VGG16作为网络的主要骨干,将其中的全连接层(fc6, fc7)替换成卷积层(conv6, conv7),后面再接上4个卷积层(conv8, conv9, conv10, conv11),其中,将conv4_3,conv7,conv8_2,conv9_2,conv10_2,conv11这6个层的feature map(特征图)拿出来做卷积得到segments(切片)和links(链接)。这6个层的feature map(特征图)尺寸是不同的,每一层的尺寸只有前一层的一半,从这6个不同尺寸的层上得到segment和link,就可以实现对不同尺寸文本行的检测了(大的feature map擅长检测小物体,小的feature map擅长检测大物体)。

1、segment检测

整个架构采取了SSD的思路,在segment(切片)检测上,与SSD模型检测过程类似,通过“套框”的方式,对结果进行回归,每个feature map(特征图)经过卷积后输出的通道数为7,其中两个表示segment是否为文字的置信度值为(0, 1),剩下的五个为segment相对于对应位置的default box的五个偏移量。每个segment表示为:

2、link检测

在segment与segment的link(链接)方面,主要存在两种情况,一种是层内链接检测、另一种是跨层链接检测。如下图:

其中,层内链接检测表示同一特征层,每个segment与8邻域内的segment的连接状况,每个link有两个分数:正分、负分,正分表示二者属于同一个文本(应该连接);负分表示二者属于不同文本(应该断开连接)。而跨层链接检测,主要是为了解决同一文本的segment在不同层被检测到,造成重复检测、冗余的问题,在相邻两层的feature map上,后面那层的segment的邻居除了是本层的邻居外,在前一层也有它的邻居,但后一层却不是前一层的邻居,在后面的合并算法中会将这种冗余消除掉。

3、合并算法

合并算法的思想如下:

  • 将同一行的segment取出来
  • 对这些segment的中心点作最小二乘法线性回归,得到一条直线
  • 每个segment的中心点往这条直线做垂直投影
  • 从所有投影点中取出距离最远的两个点,记为(xp,yp)、(xq,yq)
  • 那么最终合并的文本框,(1)中心点位置为( (xp+xq)/2 , (yp+yq)/2 ),(2)宽度为两个最远的点(xp,yp)、(xq,yq)的距离加上所在segment宽度的一半(Wp/2 + Wq/2),(3)高度为所有segment的高度平均值

 

如下图所示,中间橙色直线表示最小二乘法回归后的直线,红点表示segment的中心点,黄点表示红点在直线上的垂直投影,绿色边框就是经过以上合并算法处理后的完整本文框。

 

三、小结

SegLink增加了角度的检测,对于各种角度的文本检测具有很强的鲁棒性,而CTPN主要用于检测水平的文本行,如下图所示:

但该模型也存在不足之处,例如不能检测间隔很大的文本行,因为相邻segment之间主要是通过link来连接,文本相距太远时就会效果不好。另外,不能检测形变或者曲线文本,这是因为最后在做合并算法时采用的是线性回归的方式,只能拟合直线,无法拟合曲线,但也可以通过修改合并算法,来实现对变形、曲线文本的检测。

 

墙裂建议

2017年,Baoguang Shi 等人发表了关于SegLink的经典论文《 Detecting Oriented Text in Natural Images by Linking Segments 》,在论文中详细介绍了SegLink的技术原理,建议阅读该论文以进一步了解该模型。

 

关注本人公众号“大数据与人工智能Lab”(BigdataAILab),然后回复“论文”关键字可在线阅读经典论文的内容

 

推荐相关阅读

© 著作权归作者所有

雪饼

雪饼

粉丝 277
博文 53
码字总数 105689
作品 0
广州
私信 提问
【AI实战】训练第一个AI模型:MNIST手写数字识别模型

在上篇文章中,我们已经把AI的基础环境搭建好了(见文章:Ubuntu + conda + tensorflow + GPU + pycharm搭建AI基础环境),接下来将基于tensorflow训练第一个AI模型:MNIST手写数字识别模型。...

雪饼
2018/08/11
0
0
【AI实战】手把手教你训练自己的目标检测模型(SSD篇)

目标检测是AI的一项重要应用,通过目标检测模型能在图像中把人、动物、汽车、飞机等目标物体检测出来,甚至还能将物体的轮廓描绘出来,就像下面这张图,是不是很酷炫呢,嘿嘿 在动手训练自己...

雪饼
2018/08/14
0
0
【AI实战】快速掌握TensorFlow(二):计算图、会话

在前面的文章中,我们已经完成了AI基础环境的搭建(见文章:Ubuntu + Anaconda + TensorFlow + GPU + PyCharm搭建AI基础环境),以及初步了解了TensorFlow的特点和基本操作(见文章:快速掌握...

雪饼
2018/08/20
0
1
【AI实战】快速掌握TensorFlow(三):激励函数

到现在我们已经了解了TensorFlow的特点和基本操作(见文章:快速掌握TensorFlow(一)),以及TensorFlow计算图、会话的操作(见文章:快速掌握TensorFlow(二)),接下来我们将继续学习掌握...

雪饼
2018/08/30
0
0
【AI实战】动手实现人脸识别程序

人脸识别在现实生活中有非常广泛的应用,例如iPhone X的识别人脸解锁屏幕、人脸识别考勤机、人脸识别开门禁、刷脸坐高铁,还有识别人脸虚拟化妆、美颜,甚至支付宝还推出了刷脸支付、建设银行...

雪饼
2018/08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

约瑟夫环(报数游戏)java实现

开端 公司组织考试,一拿到考题,就是算法里说的约瑟夫环,仔细想想 以前老师将的都忘了,还是自己琢磨把~ package basic.gzy;import java.util.Iterator;import java.util.LinkedList;...

无极之岚
18分钟前
0
0
Kernel字符设备驱动框架

Linux设备分为三大类:字符设备,块设备和网络设备,这三种设备基于不同的设备框架。相较于块设备和网络设备,字符设备在kernel中是最简单的,也是唯一没有基于设备基础框架(device结构)的...

yepanl
57分钟前
3
0
Jenkins 中文本地化的重大进展

本文首发于:Jenkins 中文社区 我从2017年开始,参与 Jenkins 社区贡献。作为一名新成员,翻译可能是帮助社区项目最简单的方法。 本地化的优化通常是较小的改动,你无需了解项目完整的上下文...

Jenkins中文社区
昨天
4
0
Spring中如何使用设计模式

关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。 1. 策略模式 关于策略模式的使用方式,在S...

爱宝贝丶
昨天
4
0
前后端分离-前端搭建(vue)

前端使用vue,那么怎么搭建vue呢 先安装nodejs以及npm 现在基本的nodejs都包含有npm,下载安装后, 可以在cmd命令里输入 node -v 和npm -v 分别查看安装的版本 两个都显示了版本就是安装ok ...

咸鱼-李y
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部