联系我们
- 地 址:北京市海淀区北四环西路9号 ,主 营:人脸识别,活体检测,身份证识别,银行卡识别,名片识别,车牌识别,OCR识别等及智能识别技术。
- 电 话:13146317170 廖经理
- 传 真:
- 邮 箱:398017534@qq.com
深度学习中的自然场景文本检测
深度学习中的自然场景文本检测
文本检测和普通目的检测的不同——文本线是一个sequence(字符、字符的一局部、多字符组成的一个sequence),而不是普通目的检测中只要一个独立的目的。这既是优势,也是难点。优势表现在同一文本线上不同字符能够相互应用上下文,能够用sequence的办法比方RNN来表示。难点表现在要检测出一个完好的文本线,同一文本线上不同字符可能差别大,间隔远,要作为一个整体检测出来难度比单个目的更大——因而,作者以为预测文本的竖直位置(文本bounding box的上下边境)比程度位置(文本bounding box的左右边境)更容易。
Top-down(先检测文本区域,再找出文本线)的文本检测办法比传统的bottom-up的检测办法(先检测字符,再串成文本线)更好。自底向上的办法的缺陷在于(这点在作者的另一篇文章中说的更分明),总结起来就是没有思索上下文,不够鲁棒,系统需求太多子模块,太复杂且误差逐渐积聚,性能受限。
RNN和CNN的无缝分离能够进步检测精度。CNN用来提取深度特征,RNN用来序列的特征辨认(2类),二者无缝分离,用在检测上性能更好。
文本检测的其中一个难点就在于文本行的长度变化是十分猛烈的。因而假如是采用基于faster rcnn等通用物体检测框架的算法都会面临一个问题?怎样生成好的text proposal?这个问题实践上是比拟难处理的。因而在这篇文章中作者提供了另外一个思绪,检测一个一个小的,固定宽度的文本段,然后再后处置局部再将这些小的文本段衔接起来,得到文本行
办法概括
根本流程如Fig 1, 整个检测分六步:
第一,用VGG16的前5个Conv stage(到conv5)得到feature map(W*H*C)
第二,在Conv5的feature map的每个位置上取3*3*C的窗口的特征,这些特征将用于预测该位置k个anchor(anchor的定义和Faster RCNN相似)对应的类别信息,位置信息。
第三,将每一行的一切窗口对应的3*3*C的特征(W*3*3*C)输入到RNN(BLSTM)中,得到W*256的输出
第四,将RNN的W*256输入到512维的fc层
第五,fc层特征输入到三个分类或者回归层中。第二个2k scores 表示的是k个anchor的类别信息(是字符或不是字符)。第一个2k vertical coordinate和第三个k side-refinement是用来回归k个anchor的位置信息。2k vertical coordinate表示的是bounding box的高度和中心的y轴坐标(能够决议上下边境),k个side-refinement表示的bounding box的程度平移量。这边留意,只用了3个参数表示回归的bounding box,由于这里默许了每个anchor的width是16,且不再变化(VGG16的conv5的stride是16)。回归出来的box如Fig.1中那些红色的细长矩形,它们的宽度是一定的。
第六,用简单的文本线结构算法,把分类得到的文字的proposal(图Fig.1(b)中的细长的矩形)兼并成文本线
Fig. 1: (a) Architecture of the Connectionist Text Proposal Network (CTPN). We densely slide a 3×3 spatial window through the last convolutional maps (conv5 ) of the VGG16 model [27]. The sequential windows in each row are recurrently connected by a Bi-directional LSTM (BLSTM) [7], where the convolutional feature (3×3×C) of each window is used as input of the 256D BLSTM (including two 128D LSTMs). The RNN layer is connected to a 512D fully-connected layer, followed by the output layer, which jointly predicts text/non-text scores, y-axis coordinates and side-refinement offsets of k anchors. (b) The CTPN outputs sequential fixed-width fine-scale text proposals. Color of each box indicates the text/non-text score. Only the boxes with positive scores are presented.
办法细节
Detecting Text in Fine-scale proposals
k个anchor尺度和长宽比设置:宽度都是16,k = 10,高度从11~273(每次除于0.7)
回归的高度和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
普通的RPN和采用本文的办法检测出的效果比照
Recurrent Connectionist Text Proposals
RNN类型:BLSTM(双向LSTM),每个LSTM有128个隐含层
RNN输入:每个滑动窗口的3*3*C的特征(能够拉成一列),同一行的窗口的特征构成一个序列
RNN输出:每个窗口对应256维特征
运用RNN和不适用RNN的效果比照,CTPN是本文的办法(Connectionist Text Proposal Network)
Side-refinement
文本线结构算法(多个细长的proposal兼并成一条文本线)
主要思想:每两个相近的proposal组成一个pair,兼并不同的pair直到无法再兼并为止(没有公共元素)
判别两个proposal,Bi和Bj组成pair的条件:
Bj->Bi, 且Bi->Bj。(Bj->Bi表示Bj是Bi的最好邻居)
Bj->Bi条件1:Bj是Bi的邻居中间隔Bi最近的,且该间隔小于50个像素
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
运用side-refinement的效果比照
实验结果
锻炼
关于每一张锻炼图片,总共抽取128个样本,64正64负,假如正样本不够就用负样本补齐。这个和faster rcnn的做法是一样的。
锻炼图片都将短边放缩到600像素。
准备锻炼数据
正如上文所提的,这个网络预测的是一些固定宽度的text proposal,所以真值也应该依照这样来标注。但是普通数据库给的都是整个文本行或者单词级别的标注。因而需求把这些标注转换成一系列固定宽度的box。代码在prepare_training_data这个文件夹。
整个repo是基于RBG大神的faster rcnn改的,所以依据他的输入请求。要再将数据转换为voc的标注方式,这局部代码也在prepare_training_data这个文件夹。
时间:0.14s with GPU
ICDAR2011,ICDAR2013,ICDAR2015库上检测结果
总结与收获点
这篇文章的办法最大亮点在于把RNN引入检测问题(以前普通做辨认)。文本检测,先用CNN得到深度特征,然后用固定宽度的anchor来检测text proposal(文本线的一局部),并把同一行anchor对应的特征串成序列,输入到RNN中,最后用全衔接层来分类或回归,并将正确的text proposal停止兼并成文本线。这种把RNN和CNN无缝分离的办法进步了检测精度
上一条:深度学习目标检测方法
下一条:关于模式识别