现有的文本检测方法主要有两大类,一种是基于回归框的检测方法(基于物体检测的方法),如CTPN,EAST,这类方法很难检测任意形状的文本(曲线文本), 一种是基于像素的分割检测器(基于实例分割的方法),这类方法很难将彼此非常接近的文本实例分开,包括PSENet。

1.概述

在2015年Faster R-CNN在物体检测上提供了非常好的算法框架。所以用深度学习的思想解决场景文字检测自然而然的成为研究热点。
Faster R-CNN做目标检测步骤:

  1. 基础网络做特征提取;
  2. 特征送入RPN做候选框提取;
  3. 分类层对候选框内物体进行分类,回归层对候选框的(x,y,w,h)进行精细调整。

详细介绍看这里:https://zhuanlan.zhihu.com/p/31426458

对比发现,场景文字检测和物体检测存在显著的不同之处:

  • 文本大多数以长矩形形式存在,即长宽比一般较大或较小,这与普通的目标检测中的物体不一样
  • 场景文字检测有明显的边界,例如Wolf 准则 [2],而物体检测的边界要求较松,一般IoU为0.7便可以判断为检测正确;
  • 场景文字检测有明显的序列特征,而物体检测没有这些特征;
  • 和物体检测相比,场景文字检测含有更多的小尺寸的物体。

针对以上特点,CTPN《Detecting Text in Natural Image with Connectionist Text Proposal Network》做了如下优化:

  • 在CTPN中使用更符合场景文字检测特点的锚点;
  • 针对锚点的特征使用新的损失函数;
  • RNN(双向LSTM)的引入用于处理场景文字检测中存在的序列特征;
  • Side-refinement的引入进一步优化文字区域。

2.CTPN网络设计


假设输入N张图片:

  • 首先使用VGG16提取特征,获得conv5_3的输出特征作为feature map,大小为N* C* H* W;(C=512)
  • 使用大小3x3,步长为1的滑窗,在feature map上每个点结合周围3x3区域获得一个3x3xC的特征向量,输出Nx9CxHxW的featur map(在这个特征图基础上计算锚点),该特征显然只有CNN学习到的空间特征;
  • 对feature map 进行reshape,即每一行(共N*H行)得到W个9C维的特征向量:
  • 总共分为N*H个batch,每个batch为最大时间长度T_max=W的数据流输入双向LSTM,学习每一行的序列特征。每个LSTM层是128个隐层,输入(NH) *W *9C输出(NH) *W *128,Reverse-LSTM同样得到的是(NH) *W *128,合并后双向LSTM输出(NH) *W *256,再经Reshape恢复形状:

    该特征既包含空间特征,也包含了LSTM学习到的序列特征。
  • 经过FC层,输出N * 512 * W * H的特征
  • 最后经过类似Faster R-CNN的RPN网络,获得text proposals。

    左边分支用于bounding box regression。由于fc输出feature map每个点配备了10个Anchor,每个anchor只回归中心y坐标与高度h两个值,所以rpn_bboxp_red有20个channels。
    右边分支用于Softmax分类anchor是否包含文本,所以也是20个channels。
    FC层特征输入到三个分类或者回归层中。(k=10,fc输出feature map每个点对应10个Anchor)

    • 第一个2k vertical coordinate用于预测候选区域的起始坐标y和高度h;
    • 第三个k side-refinement输出的side-refinement的偏移(offset)预测;
      这两个共同用来回归k个anchor的位置信息(可以简单理解为是要确定字符位置的小的矩形框,上面示意图中的红色小长框,宽度固定,默认为16)。
    • 第二个2k scores 表示的是k个anchor的类别信息(是字符或不是字符)。
  • 使用文本构造算法,将得到的一组竖直条状text proposal合并成文本的序列框。
    通过CTPN可以得到候选区域的的得分,如果判定为文本区域的得分大于阈值0.7,则该区域用来构造文本行。文本行是由一系列大于0.7的候选区域的邻居对构成的。如果区域A是区域B的邻居对,需要满足如下条件:

    • A是距离B最近的正文本区域;
    • A和B的距离小于设定阈值(50)个像素值;
    • A和B的竖直方向的重合率大于设定阈值(0.7)。

3.锚点机制

显然,文本区域检测和物体检测最大的区别是文本区域是一个序列。而在目前的神经网络中,RNN在处理序列数据上占有垄断性的优势地位。在RNN的训练过程中,数据是以时间片为单位输入到模型中的。所以,如何将文本区域变成可以序列化输入的顺序成为了CTPN一个重要的要求。

如图所展示的,每一个蓝色矩形是一个锚点,那么一个文本区域便是由一系列宽度固定,紧密相连的锚点构成。所以,CTPN有如下的锚点设计机制:

由于CTPN是使用的VGG-16进行特征提取,VGG-16经过4次max pooling的降采样,得到的feature_stride=16,即在conv5_3的feature map上步长为1的滑窗相当于在输入图像上步长为16的滑窗。所以,根据VGG-16的网络结构,CTPN的锚点宽度w必须为16,所以,每次在做训练之前先要把标注的文本行变成16宽的小框。
对于一个输入序列中的所有锚点,如果我们能够判断出锚点的正负,把这一排正锚点连在一起便构成了文本区域,因此锚点的起始坐标X也不用预测,网络只需要预测锚点的起始Y坐标以及锚点的高度h即可(即垂直方向的坐标和尺度)。
在RPN网络中,一个特征向量对应的多个尺寸和比例的锚点,同样的,CTPN也对同一个特征向量设计了10个锚点。在CTPN中,锚点的高度依次是[11,16,23,33,48,68,97,139,198,283],即高度每次除以0.7。Anchor对应的是原图尺度。

4.损失函数

CTPN使用的是Faster R-CNN的近似联合训练,即将预测,分类,side-refinement作为一个多任务的模型,这些任务的损失函数共同决定模型的调整方向。

4.1 纵坐标损失Lv

4.2 分类损失Ls

Ls为传统的softmax_cross_entropy_loss,其中,i表示所有预测的anchor中的第i个,Si={0,1},Ns为归一化参数,表示所有的anchor的总和。

4.3 side-refinement的损失函数

构造完文本行后,我们根据文本行的左端和右端两个锚点的特征向量计算文本行的相对位移o

其中x_side是由CTPN构造的文本行的左侧和右侧两个锚点的x坐标,即文本行的起始坐标和结尾坐标。所以x*side便是对应的ground truth的坐标,c^a_x 是锚点的中心点坐标,w_a是锚点的宽度,所以是16。side-refinement使用的损失函数是smooth L1函数。

参考:
https://zhuanlan.zhihu.com/p/43145228
https://blog.csdn.net/dulingtingzi/article/details/88355681
https://my.oschina.net/u/876354/blog/3047851

文本检测算法之CTPN 学习笔记相关推荐

  1. 【目标检测算法】SSD学习笔记

    由于在经过多层的前向卷积运算之后,输出的特征图将变得比较小,则特征图上的一个像素点便对应着原图中较大的区域,这样的结构就很难检测较小物体.因此SSD就将中间过程输出的特征图也用来做回归和分类,可以看成 ...

  2. AI实战:基于AdvancedEAST的自然场景图像文本检测算法

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx EAST文本检测与Keras实现 https://blog.csdn.net/linchuha ...

  3. 2020最新文本检测算法TextFuseNet

    向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习  公众号:datayx TextFuseNet: Scene Text Detection with Richer ...

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

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

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

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

  6. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  7. 论文《基于深度学习的表面缺陷检测方法综述》学习笔记

    <基于深度学习的表面缺陷检测方法综述>学习笔记 前段时间完成了<基于图像的零部件缺陷识别系统设计>毕业课程设计,过程中收获了很多,老师也分享了很多论文,在此记录一下学习的收获. ...

  8. 文本检测算法----TextFuseNet(IJCAI-PRICAI-20)

    多种文本检测算法性能对比及算法介绍 (https://blog.csdn.net/qq_39707285/article/details/108754444) TextFuseNet: Scene T ...

  9. 牛客网《BAT面试算法精品课》学习笔记

    目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...

最新文章

  1. PHP7.2环境中PHPExcel无法导出Excel
  2. qq邮箱使用技巧学习1
  3. 教学目标四个维度_挖掘教材 预设目标 思本归真—— 记临安区初二英语教学研讨会...
  4. 一千行MySQL学习笔记(十二)
  5. springboot 搭建 简单 web项目 【springboot + freemark模板 + yml 配置文件 + 热修复 + 测试用例】附源码...
  6. 转:跨dll操作fopen的返回值导致出错
  7. LeetCode 642. 设计搜索自动补全系统(Trie树)
  8. 一口气说出 6种 @Transactional 注解失效场景
  9. linux 日志定时轮询流程详解(logrotate)
  10. 因为计算机中丢失ssce5432.dll,ssce5432.dll 64位
  11. Java 图片验证码的实现和模拟简单的登录
  12. ubuntu系统下hbase数据库的安装和使用,hbase配置文件详解
  13. win10美化--打造专属我的windows
  14. 《FLUENT 14流场分析自学手册》——1.4 流体运动及换热的多维方程组
  15. pktgen-dpdk 进行rfc2544测试
  16. 各个版本chrome允许加载使用flash的方法
  17. 让Linux命令行更换颜色----PS1环境变量的使用小结
  18. javascript有效的anagram挑战
  19. 二十、融会贯通之全流程操作
  20. 好设计如何诞生:关于好设计的100件事

热门文章

  1. Fiddler everywhere实现手机抓包
  2. SAP-修改系统表数据的方法-该表实现回退物料账期
  3. CloudStack初级部署与实例创建
  4. 观张庆老师quot;找工作的几个经验quot;有感
  5. 纯lua脚本搜索算法优化
  6. 这个布林带的均值回归交易策略,回测收益率把我给吓傻了
  7. maven中央仓库修改
  8. 结构体初始化的几种方式
  9. HTML5 Canvas 绘制新西兰国旗
  10. 中国计算机市场调整中平衡增长 (转)