深度学习CTPN算法的解读与tensorflow实现

2017 年 11 月 30 日 数据挖掘入门与实战 要学习更多点这→

 向AI转型的程序员都关注了这个号👇👇👇


大数据挖掘DT数据分析  公众号: datadw


作者github地址和tensorflow版本地址:

在公众号 datadw 里 回复 CTPN   即可获取。


本文将对CTPN这篇文章的思路做一个详细的介绍,同时对代码进行解读。
论文地址:https://arxiv.org/pdf/1609.03605.pdf

论文的关键idea

  • 文本检测的其中一个难点就在于文本行的长度变化是非常剧烈的。因此如果是采用基于faster rcnn等通用物体检测框架的算法都会面临一个问题?怎么生成好的text proposal?这个问题实际上是比较难解决的。因此在这篇文章中作者提供了另外一个思路,检测一个一个小的,固定宽度的文本段,然后再后处理部分再将这些小的文本段连接起来,得到文本行。检测到的文本段的示意图如下图所示。



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


  • 同时,对于水平的文本行,其中的每一个文本段之间都是有联系的,因此作者采用了CNN+RNN的一种网络结构,检测结果更加鲁棒。


pipeline

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

  • 首先,使用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。

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



一些细节

vertical anchor

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

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





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

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

  • 只保留score大于0.7的proposal

BLSTM

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

  • 加了RNN之后,整个检测将更加鲁棒,具体效果见下图。上图是加了RNN,下图是没有RNN的结果。




训练

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

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

准备训练数据

  • 正如上文所提的,这个网络预测的是一些固定宽度的text proposal,所以真值也应该按照这样来标注。但是一般数据库给的都是整个文本行或者单词级别的标注。因此需要把这些标注转换成一系列固定宽度的box。代码在prepare_training_data这个文件夹。

  • 整个repo是基于RBG大神的faster rcnn改的,所以根据他的输入要求。要再将数据转换为voc的标注形式,这部分代码也在prepare_training_data这个文件夹。


一些预测结果

  • 这个repo没有实现文章中提到的side refinement部分。

  • 以身份证检测做了个例子,但是模型是可以应用到各种水平文本检测的应用中的。

  • 部分检测的结果如下所示:

http://slade-ruan.me/2017/10/22/text-detection-ctpn/


人工智能大数据与深度学习

搜索添加微信公众号:weic2c

长按图片,识别二维码,点关注



大数据挖掘DT数据分析

搜索添加微信公众号:datadw


教你机器学习,教你数据挖掘

长按图片,识别二维码,点关注


登录查看更多
5

相关内容

最新《深度学习自动驾驶》技术综述论文,28页pdf
专知会员服务
153+阅读 · 2020年6月14日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
《动手学深度学习》(Dive into Deep Learning)PyTorch实现
专知会员服务
119+阅读 · 2019年12月31日
谷歌机器学习速成课程中文版pdf
专知会员服务
145+阅读 · 2019年12月4日
深度学习视频中多目标跟踪:论文综述
专知会员服务
92+阅读 · 2019年10月13日
CVPR2019 | 文本检测算法综述
极市平台
34+阅读 · 2019年5月30日
Faster R-CNN
数据挖掘入门与实战
4+阅读 · 2018年4月20日
Fast R-CNN
数据挖掘入门与实战
3+阅读 · 2018年4月20日
CNN图像风格迁移的原理及TensorFlow实现
数据挖掘入门与实战
5+阅读 · 2018年4月18日
深度学习DenseNet算法详解
数据挖掘入门与实战
7+阅读 · 2018年4月17日
YOLO,一种简易快捷的目标检测算法
AI研习社
5+阅读 · 2018年1月11日
论文 | 深度学习实现目标跟踪
七月在线实验室
48+阅读 · 2017年12月8日
干货 | 深度学习之卷积神经网络(CNN)的前向传播算法详解
机器学习算法与Python学习
9+阅读 · 2017年11月17日
Mesh R-CNN
Arxiv
4+阅读 · 2019年6月6日
Monocular Plan View Networks for Autonomous Driving
Arxiv
6+阅读 · 2019年5月16日
Arxiv
5+阅读 · 2019年4月8日
Arxiv
4+阅读 · 2016年12月29日
VIP会员
相关VIP内容
相关资讯
CVPR2019 | 文本检测算法综述
极市平台
34+阅读 · 2019年5月30日
Faster R-CNN
数据挖掘入门与实战
4+阅读 · 2018年4月20日
Fast R-CNN
数据挖掘入门与实战
3+阅读 · 2018年4月20日
CNN图像风格迁移的原理及TensorFlow实现
数据挖掘入门与实战
5+阅读 · 2018年4月18日
深度学习DenseNet算法详解
数据挖掘入门与实战
7+阅读 · 2018年4月17日
YOLO,一种简易快捷的目标检测算法
AI研习社
5+阅读 · 2018年1月11日
论文 | 深度学习实现目标跟踪
七月在线实验室
48+阅读 · 2017年12月8日
干货 | 深度学习之卷积神经网络(CNN)的前向传播算法详解
机器学习算法与Python学习
9+阅读 · 2017年11月17日
Top
微信扫码咨询专知VIP会员