点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

01 区别

本文工作基于faster RCNN , 区别在于

1. 改进了rpn,anchor产生的window的宽度固定为3。

2. rpn后面不是直接接全连接+分类/回归,而是再通过一个LSTM,再接全连接层。

3. 坐标仅仅回归一个y,而不是x1, y1, x2, y2

4. 添加 side-refinement offsets(可能这个就是4个回归值中的其中2个)

02 问题分析

1. 文字目标的特殊性,一个很大的先验是,文字总是水平排列的。

2. 文字的特征总感觉体现在edge上。

3. 自然场景文字检测的难点在于:小目标,遮挡,仿射畸变。本文使用VGG16,只使用conv5,可能对小文字的检测效果不好。

02 实验

CTPN用在ICDAR2017中文检测数据集上的结果:AP=0.18

论文的关键idea

文本检测的其中一个难点就在于文本行的长度变化是非常剧烈的。因此如果是采用基于faster rcnn等通用物体检测框架的算法都会面临一个问题:怎么生成好的text proposal。这个问题实际上是比较难解决的。

Detecting Text in Natural Image with Connectionist Text Proposal Network

在这篇文章中作者提供了另外一个思路,检测一个一个小的,固定宽度的文本段,然后再后处理部分再将这些小的文本段连接起来,得到文本行。检测到的文本段的示意图如下图所示。

  • 具体的说,作者的基本想法就是去预测文本的竖直方向上的位置,水平方向的位置不预测。因此作者提出了一个vertical anchor的方法。与faster rcnn中的anchor类似,但是不同的是,vertical anchor的宽度都是固定好的了,论文中的大小是16个像素。而高度则从11像素到273像素变化,总共10个anchor.

  • 同时,对于水平的文本行,其中的每一个文本段之间都是有联系的,因此作者采用了CNN+RNN的一种网络结构,检测结果更加鲁棒。RNN和CNN的无缝结合可以提高检测精度。CNN用来提取深度特征,RNN用来序列的特征识别(2类),二者无缝结合,用在检测上性能更好。

  • Top-down(先检测文本区域,再找出文本线)的文本检测方法比传统的bottom-up的检测方法(先检测字符,再串成文本线)更好。自底向上的方法的缺点在于(这点在作者的另一篇文章中说的更清楚),总结起来就是没有考虑上下文,不够鲁棒,系统需要太多子模块,太复杂且误差逐步积累,性能受限。

  • 基于检测的方法能很好地解决水平文字的检测问题,缺点是对于非水平的文字不能检测。具体的做法可以参考Detecting Text in Natural Image with Connectionist Text Proposal Network,ECCV16的一篇论文,网络结构为RPN,针对文字检测的特点做了一些修改,最重要的有两点,一是改变了判断正负样本的方法,不同于物体检测,文字检测中proposal如果只框住了一行文字中的几个文字其实也算正样本,而用IOU计算的话会被当成负样本,所以判断正负样本只需要计算proposal与ground truth高度的overlap就可以了。第二点是anchor的选取,既然我们判断正负样本的时候不考虑宽度,自然选anchor的时候也不用选择不同宽度的了,只需要固定宽度然后根据具体任务选择几个合适的高度就可以了。其他地方和RPN基本一样。

整个算法的流程主要有以下几个步骤:(参见下图)

  • 首先,使用VGG16作为base net提取特征,得到conv5_3的特征作为feature map,大小是W×H×C

  • 然后在这个feature map上做滑窗,窗口大小是3×3。也就是每个窗口都能得到一个长度为3×3×C的特征向量。这个特征向量将用来预测和10个anchor之间的偏移距离,也就是说每一个窗口中心都会预测出10个text propsoal。

  • 将上一步得到的特征输入到一个双向的LSTM中,得到长度为W×256的输出,然后接一个512的全连接层,准备输出。

  • 输出层部分主要有三个输出。2k个vertical coordinate,因为一个anchor用的是中心位置的高(y坐标)和矩形框的高度两个值表示的,所以一个用2k个输出。(注意这里输出的是相对anchor的偏移)。2k个score,因为预测了k个text proposal,所以有2k个分数,text和non-text各有一个分数。k个side-refinement,这部分主要是用来精修文本行的两个端点的,表示的是每个proposal的水平平移量。

  • 这是会得到密集预测的text proposal,所以会使用一个标准的非极大值抑制算法来滤除多余的box。

  • 最后使用基于图的文本行构造算法,将得到的一个一个的文本段合并成文本行。

04 一些细节

4.1 vertical anchor

k个anchor的设置如下:宽度都是16像素,高度从11~273像素变化(每次乘以1.4)

  • 预测的k个vertical coordinate的坐标如下:

    回归的高度和bounding box的中心的y坐标如下,带*的表示是groundTruth,带a的表示是anchor

  • score阈值设置:0.7 (+NMS)

  • 与真值IoU大于0.7的anchor作为正样本,与真值IoU最大的那个anchor也定义为正样本,这个时候不考虑IoU大小有没有到0.7,这样做有助于检测出小文本。

  • 与真值IoU小于0.5的anchor定义为负样本。

  • 只保留score大于0.7的proposal

4.2 BLSTM

文章使用了双向的LSTM,每个LSTM有128个隐层

  • 加了RNN之后,整个检测将更加鲁棒,

4.3 Side-refinement

  • 文本线构造算法(多个细长的proposal合并成一条文本线)

  • 主要思想:每两个相近的proposal组成一个pair,合并不同的pair直到无法再合并为止(没有公共元素)

  • 判断两个proposal,Bi和Bj组成pair的条件:

1. Bj->Bi, 且Bi->Bj。(Bj->Bi表示Bj是Bi的最好邻居)

2. Bj->Bi条件1:Bj是Bi的邻居中距离Bi最近的,且该距离小于50个像素

3. Bj->Bi条件2:Bj和Bi的vertical overlap大于0.7

  • 固定要regression的box的宽度和水平位置会导致predict的box的水平位置不准确,所以作者引入了side-refinement,用于水平位置的regression。where xside is the predicted x-coordinate of the nearest horizontal side (e.g., left or right side) to current anchor. x∗ side is the ground truth (GT) side coordinate in x-axis, which is pre-computed from the GT bounding box and anchor location. cax is the center of anchor in x-axis. wa is the width of anchor, which is fixed, wa = 16

05 训练

对于每一张训练图片,总共抽取128个样本,64正64负,如果正样本不够就用负样本补齐。这个和faster rcnn的做法是一样的。

  • 训练图片都将短边放缩到600像素。

06 总结

这篇文章的方法最大亮点在于把RNN引入检测问题(以前一般做识别)。文本检测,先用CNN得到深度特征,然后用固定宽度的anchor来检测text proposal(文本线的一部分),并把同一行anchor对应的特征串成序列,输入到RNN中,最后用全连接层来分类或回归,并将正确的text proposal进行合并成文本线。这种把RNN和CNN无缝结合的方法提高了检测精度。

07 特点

不是在字的级别,最终输出是在行的级别

  • 对每一行,每一个feature map位置,固定需要回归的框的宽度为16像素,需要预测k个anchor的高度和数值方向

  • side-refinement用来预测每一个anchor的x的坐标,准确率有效得到提升

08 问题

  • 没有很好地处理多方向的文本行;

  • 训练的时候由于有regression和LSTM,需要小心控制梯度爆炸。

 

END

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

ctpn:图像文字检测方法相关推荐

  1. 解读通过风格迁移的浓雾天气条件下 无人机图像目标检测方法

    声明:只是个人观点以及本人底子太薄只做表面浅分析,只是用来梳理论文结构不牵涉技术 雨雾恶劣天气条件下,我们可以使用先去雾后检测的方法对薄雾有好处,但是浓雾条件比较差,解决办法就是通过风格迁移的无人机图 ...

  2. (一)图像文字检测论文:CTPN方法

    论文传送门:Detecting Text in Natural Image with Connectionist Text Proposal Network 1 摘要 我们提出一个新颖的级联文本推荐网 ...

  3. 软件测试 | 测试开发 | 相似图像的检测方法

    背景 以图搜图,是日常生活中我们经常会用到,例如在选购一款商品时,想要对比价格,往往会在各个购物app上通过搜图的形式来看同一款产品的价格:当你碰到某种不认识的植物时,也可以通过以图搜图的方式来获取该 ...

  4. CVPR 2022 | 网易华科提出特征采样与分组:基于Transformer的场景文字检测方法

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 转载自:CSIG文档图像分析与识别专委会 本文简要介绍了CVPR 2022录用的论文"Few Co ...

  5. OCR大突破:Facebook推出大规模图像文字检测识别系统——Rosetta

    作者 | Fedor Borisyuk,Albert Gordo,Viswanath Sivakumar 译者 | 林椿眄 编辑 | 非主流 出品 | AI科技大本营 [导读]OCR(Optical ...

  6. 【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

    附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: 书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈 ①[Java]学习之路吐血整理技术书 ...

  7. OCR文字检测主要算法

    转载:https://www.mayi888.com/archives/60604 文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文 ...

  8. 【项目实践】中英文文字检测与识别项目(CTPN+CRNN+CTC Loss原理讲解)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 OCR--简介 文字识别也是图像领域一 ...

  9. ICCV 2019 | 旷视研究院提出文字检测新方法:像素聚合网络PAN

    本文介绍ICCV 2019 旷视研究院提出任意形状文字检测模型:像素聚合网络 PAN,它考虑了任意文字识别过程中速度与精度的权衡,在大幅提升识别性能的同时也显著降低了计算量,成为当前该领域最佳方法. ...

最新文章

  1. [Python]网络打解包
  2. 【文本分类】混合CHI和MI的改进文本特征选择方法
  3. 思考出真知之日出日落第一部-公司篇?
  4. 把报表的数据导出Excel
  5. Jmeter使用入门
  6. 汇编语言 判断学生成绩是否及格
  7. vscode c++插件 下载_vscode安装教程及插件推荐
  8. EF三种编程方式详细图文教程(C#+EF)之Database First
  9. 在SAP C4C创建销售订单时如何绑定创建者的微信open id
  10. CAN笔记(12) 同步
  11. libsvm3.21 matlab,Matlab 2015b安装libsvm 3.21
  12. Which language is best, C, C++, Python or Java?什么编程语言最好
  13. (day 07 - dfs or bfs)剑指 Offer 13. 机器人的运动范围
  14. 181209每日一句
  15. 备案后才允许上线 网站ICP备案步骤详解
  16. 嵌入式ARM核心板介绍
  17. 有一个做饭好吃的妈妈是一种什么体验?
  18. STM32学习笔记二、DS18B20单总线上挂载多路采集
  19. 2021新版仿趣闲赚悬赏猫任务兼职网站源码
  20. lm35温度转换c语言,Arduino基础入门篇29—模拟温度传感器LM35

热门文章

  1. 1394接口_数码摄像机有哪些接口类型 数码摄像机接口类型介绍【详解】
  2. Windows Server2012 KB2919355 补丁无法安装
  3. 最难找工作的10种大学生
  4. 清华大学张长水教授:机器学习和图像识别(附视频、PPT下载)
  5. wordpress-主题商业中国总裁商业思维 培训商学院官网源码整站下载 培训商学院,教育培训官网 培训商学院整站资源
  6. linux卸载,安装win7碰到的问题总结,使用MbrFix.exe修复mbr
  7. 以太坊区块和交易的存储结构分析
  8. Atheros AR9344中断处理流程
  9. 简书APP、网页版产品分析
  10. 爱思服务器显示磁盘空间不足,iPhone 11 有储存空间,但仍会提示“空间不足”怎么办?...