精华内容
下载资源
问答
  • 对象建议算法(object,proposals)是对象检测中的常用算法,用于...经实验证明,本算法在常用的自然场景文本检测数据集上速度得到了提高,并且一定程度上解决了传统最稳定极值区域算法对光照敏感的问题,获得了较高的查全率.
  • 基于色彩聚类的自然场景文本检测.pdf
  • 对象建议算法(object proposals)是对象检测中的常用算法...经实验证明,本算法在常用的自然场景文本检测数据集上速度得到了提高,并且一定程度上解决了传统最稳定极值区域算法对光照敏感的问题,获得了较高的查全率。
  • 针对自然场景图像背景复杂和文本方向不确定的问题,提出一种多方向自然场景文本检测的方法。该方法利用颜色增强的最大稳定极值区域(C-MSER)方法对图像中的字符候选区域进行提取,并利用启发式规则和LIBSVM分类器对...
  • 基于深度学习的自然场景文本检测与识别综述.pdf
  • OpenCV自然场景文本检测(附Python代码)-附件资源
  • 自然场景文本检测PSENet的一个tensorflow重现
  • 自然场景文本检测CTPN原理详解

    千次阅读 2018-11-15 17:57:49
    自然场景文本检测CTPN流程详解 标签: 文本检测 CTPN tensorflow 说明: 借鉴了网上很多资源,如有侵权,请联系本人删除! 摘要 对于自然场景中的文本检测,难点是:字体多变、遮挡、不规则变化等,其实对于实际的...

    自然场景文本检测CTPN流程详解

    标签: 文本检测 CTPN tensorflow
    说明: 借鉴了网上很多资源,如有侵权,请联系本人删除!

    摘要

    对于自然场景中的文本检测,难点是:字体多变、遮挡、不规则变化等,其实对于实际的应用场景,针对自己的需求可以采用通用的目标检测框架(faster Rcnn,SSD,Yolo,Retina)等网络,或许也能满足项目的需求。
    而CTPN等用于文本检测的方法,对自然场景的文本检测具有更强的鲁棒性,就是针对文本检测较SSD,Yolo等可能具有更高的精度;其次文本检测中涉及到旋转和仿射变化等,此时,通用的目标检测框检就不合适。
    在这里插入图片描述

    CTPN优点

    • 采用固定宽度的anchor,只做一个h回归
    • 特征提取的过程中采用VGG作为base net 再加上一个conv3×3_512,再以W方向为序列(sequence),512为特征数(input feature),经过双向LSTM。主要目的,提高特征之间的练习
    • 这里有一个疑问,既然在W方向送入LSTM,进行了特征增强,那是否可以在H方向增强特征的联系。

    网络模型与前向传播过程

    在这里插入图片描述
    模型结构如上图所示

    整个模型的前向传播过程如下(以1张图片为例):

    1. 采用VGG16作为base net进行特征提取。假设经过VGG之后的feature map为:W×H×C。
    2. 增加一个conv3×3_512的卷积层,(这一步网上好多说是用3×3的窗口做滑窗,我看tensorflow的源码,就是做了一个卷积,具体可查原论文和official code)。这一步的输出还是为:feature map:W×H×C=512。
    3. 将上一步的feature map reshape为LSTM的输入格式,LSTM采用128个隐藏节点的双向Bilstm,输出之后再接256×512的线性层,线性层输出之后再reshape为1×W×H×C,即和输入尺寸一样;在tensorflow中上一步的feature map reshape为:[1 × H, W, C=512],应该是(batch, steps, inputs)的格式,因为是增强特征在W方向的联系,于是应该以W为steps。这一步的输出为:feature map:1×W×H×C=512。
    4. 线性回归层512×(10×4)做anchor的坐标预测,512:每个点的特征数,10:每个点有10个不同高度的anchors,4:一个anchor有4个坐标点(xmin,xmax,ymin,ymax);线性回归层512×(10×2)做类别预测,2:两个类别,是文本,不是文本。这一步的输出为:box_coordinate_pred:1×W×H×(104),box_label_pred:1×W×H×(102),
    5. 共生成W×H×10个anchors,采用和faster rcnn类似的策略对每个anchor,指定target_box和target_label
    6. 计算交叉熵和坐标点的L1smooth loss。tensorflow源码中还回归输出了inside_weights和outside_weights,两个都为:1×W×H×(10*4),这个不知道怎么用的。

    训练

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

    测试 TODO

    • TO DO …

    Tricks

    • 采用densenet,resnet等最新的base net,这里安利一下pytorch,tensorflow的模型建模和调试确实没有pytorch方便
    • 对H方向也采用一定策略(LSTM或其他方法)进行特征增强

    reference

    1. CTPN/CRNN的OCR自然场景文字识别理解(一)
    2. https://github.com/eragonruan/text-detection-ctpn
    展开全文
  • 针对光照不均和背景复杂度所导致的自然场景文本检测中文本的漏检和错检现象,提出一种基于笔画角度变换和宽度特征的自然场景文本检测方法。分析发现与非文本相比,文本具有较稳定的笔画角度变换次数和笔画宽度,针对...
  • 自然场景文本检测识别技术综述

    万次阅读 多人点赞 2018-06-30 09:05:52
    番外青蛇: 姐, 图像文本检测和识别领域现在的研究热点是什么? 白蛇: 白纸黑字的扫描文档识别技术已经很成熟,而自然场景图像文本识别的效果还不理想。倾斜字、艺术字、变形字、模糊字、形似字、残缺字、光影遮蔽、...

    其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

    番外青蛇: 姐, 图像文本检测和识别领域现在的研究热点是什么?

    白蛇: 白纸黑字的扫描文档识别技术已经很成熟,而自然场景图像文本识别的效果还不理想。倾斜字、艺术字、变形字、模糊字、形似字、残缺字、光影遮蔽、多语言混合文本等应用落地面临的技术难题还没被彻底解决。

    青蛇: 文本检测模型CTPN中为什么选用VGG16作基础网络?

    白蛇: CTPN是2016年被推出的, 而VGG16是那年很流行的特征提取基础网络。如果今年实施文本检测, 可以试试Resnet、FCN、Densenet等后起之秀作基础网络,或许有惊喜。


    摘要本文介绍图像文本识别(OCR)领域的最新技术进展。首先介绍应用背景,包括面临的技术挑战、典型应用场景、系统实施框架等。接着介绍搭建图文识别模型过程中经常被引用到的多种特征提取基础网络、物体检测网络框架,以及它们被应用到图文识别任务中所面临的场景适配问题。然后介绍最近三年来出现的各种文本边框检测模型、文字内容识别模型、端到端图文识别模型。最后介绍图文识别领域的大型公开数据集。

    应用概述

    OCR(Optical Character Recognition, 光学字符识别)传统上指对输入扫描文档图像进行分析处理,识别出图像中文字信息。场景文字识别(Scene Text Recognition,STR) 指识别自然场景图片中的文字信息。自然场景图像中的文字识别,其难度远大于扫描文档图像中的文字识别,因为它的文字展现形式极其丰富:

    ·允许多种语言文本混合,字符可以有不同的大小、字体、颜色、亮度、对比度等。
    ·文本行可能有横向、竖向、弯曲、旋转、扭曲等式样。
    ·图像中的文字区域还可能会产生变形(透视、仿射变换)、残缺、模糊等现象。
    ·自然场景图像的背景极其多样。如文字可以出现在平面、曲面或折皱面上;文字区域附近有复杂的干扰纹理、或者非文字区域有近似文字的纹理,比如沙地、草丛、栅栏、砖墙等。

    也有人用OCR技术泛指所有图像文字检测和识别技术, 包括传统OCR技术与场景文字识别技术。这是因为,场景文字识别技术可以被看成是传统OCR技术的自然演进与升级换代。

    图像文字检测和识别技术有着广泛的应用场景。已经被互联网公司落地的相关应用涉及了识别名片、识别菜单、识别快递单、识别身份证、识别营业证、识别银行卡、识别车牌、识别路牌、识别商品包装袋、识别会议白板、识别广告主干词、识别试卷、识别单据等等。

    已经有不少服务商在提供图像文字检测和识别服务,这些服务商既包括了腾讯、百度、阿里、微软、亚马逊、谷歌等大型云服务企业,也包括了一些活跃在物流、教育、安防、视频直播、电子政务、电子商务、旅游导航等垂直细分行业的服务企业。这些企业既可以使用提前训练好的模型直接提供场景图文识别、卡证识别、扫描文档识别等云服务,也可以使用客户提供的数据集训练定制化模型(如票据识别模型),以及提供定制化AI服务系统集成等。

    如下图所示,传统技术解决方案中,是先分别训练文字检测和文本识别两个模型,然后在服务实施阶段将这两个模型串联到数据流水线中组成图文识别系统。

    如下图所示,最近流行的技术解决方案中,是用一个多目标网络直接训练出一个端到端的模型。在训练阶段,该模型的输入是训练图像及图中文本坐标、文本内容,模型优化目标是输出端边框坐标预测误差与文本内容预测误差的加权和。在服务实施阶段,原始图片流过该模型直接输出预测文本信息。相比于传统方案,该方案中模型训练效率更高、服务运营阶段资源开销更少。

    文本检测和识别技术处于一个学科交叉点,其技术演进不断受益于计算机视觉处理和自然语言处理两个领域的技术进步。它既需要使用视觉处理技术来提取图像中文字区域的图像特征向量,又需要借助自然语言处理技术来解码图像特征向量为文字结果。

    模型基础

    从公开论文中可以看到,起源于图像分类、检测、语义分割等视觉处理任务的各个基础网络(backbone network),纷纷被征用来提取图像中文字区域的特征向量。同时,起源于物体检测、语义分割任务的多个网络框架,也被改造后用于提升图文识别任务中的准确率和执行速度。本章将简单温习一下这些基础网络、网络框架的实现原理,并介绍图文识别任务中应用它们时所面临的各种场景适配问题。

    基础网络

    图文识别任务中充当特征提取模块的基础网络,可以来源于通用场景的图像分类模型。例如,VGGNet,ResNet、InceptionNet、DenseNet、Inside-Outside Net、Se-Net等。

    图文识别任务中的基础网络,也可以来源于特定场景的专用网络模型。例如,擅长提取图像细节特征的FCN网络,擅长做图形矫正的STN网络。

    由于大家对通用网络模型已经很熟悉,所以本节只简单介绍上述专用网络模型。

    FCN网络

    全卷积网络(FCN,fully convolutional network), 是去除了全连接(fc)层的基础网络,最初是用于实现语义分割任务。FC的优势在于利用反卷积(deconvolution)、上池化(unpooling)等上采样(upsampling)操作,将特征矩阵恢复到接近原图尺寸,然后对每一个位置上的像素做类别预测,从而能识别出更清晰的物体边界。基于FCN的检测网络,不再经过候选区域回归出物体边框, 而是根据高分辨率的特征图直接预测物体边框。因为不需要像Faster-RCNN那样在训练前定义好候选框长宽比例,FCN在预测不规则物体边界时更加鲁棒。由于FCN网络最后一层特征图的像素分辨率较高,而图文识别任务中需要依赖清晰的文字笔画来区分不同字符(特别是汉字),所以FCN网络很适合用来提取文本特征。当FCN被用于图文识别任务时,最后一层特征图中每个像素将被分成文字行(前景)和非文字行(背景)两个类别。

     

    STN网络

    空间变换网络(STN,Spatial Transformer Networks)的作用是对输入特征图进行空间位置矫正得到输出特征图,这个矫正过程是可以进行梯度传导的,从而能够支持端到端的模型训练。

    如下图所示,STN网络由定位网络(Localization Network) ,网格生成器(Grid generator),采样器(Sampler)共3个部分组成。定位网络根据原始特征图U计算出一套控制参数,网格生成器这套控制参数产生采样网格(sampling grid),采样器根据采样网格核函数将原始图U中像素对应采样到目标图V中。

    空间变换的控制参数是根据原始特征图U动态生成的,生成空间变换控制参数的元参数则是在模型训练阶段学习到的、并且存放于定位网络的权重(weights)矩阵中。

    选自arXiv: 1506.02025,’Spatial Transformer Networks

     

    检测网络框架

    Faster RCNN作为一个检测网络框架,其目标是寻找紧凑包围被检测对象的边框(BBOX,Bounding Box)。如下图所示,它在Fast RCNN检测框架基础上引入区域建议网络(RPN,Region Proposal Network),来快速产生与目标物体长宽比例接近的多个候选区域参考框(anchor);它通过ROI(Region of Interest) Pooling层为多种尺寸参考框产生出归一化固定尺寸的区域特征;它利用共享的CNN卷积网络同时向上述RPN网络和ROI Pooling层输入特征映射(Feature Maps),从而减少卷积层参数量和计算量。训练过程中使用到了多目标损失函数,包括RPN网络、ROI Pooling层的边框分类loss和坐标回归loss。通过这些loss的梯度反向传播,能够调节候选框的坐标、并增大它与标注对象边框的重叠度/交并比(IOU,Intersection over Union)。RPN网格生成的候选框初始值有固定位置以及长宽比例。如果候选框初始长宽比例设置得与图像中物体形状差别很大,就很难通过回归找到一个紧凑包围它的边框。

    摘自arXiv:1506.01497,’Faster R-CNN: Towards Real-Ti

     

    SSD(Single Shot MultiBox Detector),是2016年提出的一种全卷积目标检测算法,截止到目前仍是主要的目标检测框架之一,相比Faster RCNN有着明显的速度优势。如下图所示,SSD是一种one stage算法,直接预测被检测对象的边框和得分。检测过程中,SSD算法利用多尺度思想进行检测,在不同尺度的特征图(feature maps)上产生与目标物体长宽比例接近的多个默认框(Default boxes),进行回归与分类。最后利用非极大值抑制(Non-maximum suppression)得到最终的检测结果。训练过程中,SSD采用Hard negative mining策略进行训练,使正负样本比例保持为1:3,同时使用多种数据增广(Data augmentation)方式进行训练,提高模型性能。

    摘自arxiv: 1512.02325, “SSD: Single Shot MultiBox

     

    文本检测模型

    文本检测模型的目标是从图片中尽可能准确地找出文字所在区域。

    但是,视觉领域常规物体检测方法(SSD, YOLO, Faster-RCNN等)直接套用于文字检测任务效果并不理想, 主要原因如下:

    ·相比于常规物体,文字行长度、长宽比例变化范围很大。
    ·文本行是有方向性的。常规物体边框BBox的四元组描述方式信息量不充足。
    ·自然场景中某些物体局部图像与字母形状相似,如果不参考图像全局信息将有误报。
    ·有些艺术字体使用了弯曲的文本行,而手写字体变化模式也很多。
    ·由于丰富的背景图像干扰,手工设计特征在自然场景文本识别任务中不够鲁棒。
    

    针对上述问题根因,近年来出现了各种基于深度学习的技术解决方案。它们从特征提取、区域建议网络(RPN)、多目标协同训练、Loss改进、非极大值抑制(NMS)、半监督学习等角度对常规物体检测方法进行改造,极大提升了自然场景图像中文本检测的准确率。例如:

    ·CTPN方案中,用BLSTM模块提取字符所在图像上下文特征,以提高文本块识别精度。
    ·RRPN等方案中,文本框标注采用BBOX +方向角度值的形式,模型中产生出可旋转的文字区域候选框,并在边框回归计算过程中找到待测文本行的倾斜角度。
    ·DMPNet等方案中,使用四边形(非矩形)标注文本框,来更紧凑的包围文本区域。
    ·SegLink 将单词切割为更易检测的小文字块,再预测邻近连接将小文字块连成词。
    ·TextBoxes等方案中,调整了文字区域参考框的长宽比例,并将特征层卷积核调整为长方形,从而更适合检测出细长型的文本行。
    ·FTSN方案中,作者使用Mask-NMS代替传统BBOX的NMS算法来过滤候选框。
    ·WordSup方案中,采用半监督学习策略,用单词级标注数据来训练字符级文本检测模型。
    

    下面用近年来出现的多个模型案例,介绍如何应用上述各方法提升图像文本检测的效果。

    CTPN模型

    CTPN是目前流传最广、影响最大的开源文本检测模型,可以检测水平或微斜的文本行。文本行可以被看成一个字符sequence,而不是一般物体检测中单个独立的目标。同一文本行上各个字符图像间可以互为上下文,在训练阶段让检测模型学习图像中蕴含的这种上下文统计规律,可以使得预测阶段有效提升文本块预测准确率。CTPN模型的图像预测流程中,前端使用当时流行的VGG16做基础网络来提取各字符的局部图像特征,中间使用BLSTM层提取字符序列上下文特征,然后通过FC全连接层,末端经过预测分支输出各个文字块的坐标值和分类结果概率值。在数据后处理阶段,将合并相邻的小文字块为文本行。

    选自arXiv: 1609.03605,’Detecting Text in Natural Im

     

    RRPN模型

    基于旋转区域候选网络(RRPN, Rotation Region Proposal Networks)的方案,将旋转因素并入经典区域候选网络(如Faster RCNN)。这种方案中,一个文本区域的ground truth被表示为具有5元组(x,y,h,w,θ)的旋转边框, 坐标(x,y)表示边框的几何中心, 高度h设定为边框的短边,宽度w为长边,方向是长边的方向。训练时,首先生成含有文本方向角的倾斜候选框,然后在边框回归过程中学习文本方向角。

    选自arXiv: 1703.01086,’Arbitrary-Oriented Scene Tex

    RRPN中方案中提出了旋转感兴趣区域(RRoI,Rotation Region-of-Interest)池化层,将任意方向的区域建议先划分成子区域,然后对这些子区域分别做max pooling、并将结果投影到具有固定空间尺寸小特征图上。

    选自arXiv: 1703.01086,’Arbitrary-Oriented Scene Tex

     

    FTSN模型

    FTSN(Fused Text Segmentation Networks)模型使用分割网络支持倾斜文本检测。它使用Resnet-101做基础网络,使用了多尺度融合的特征图。标注数据包括文本实例的像素掩码和边框,使用像素预测与边框检测多目标联合训练。

    选自arXiv: 1709.03272,’Fused Text Segmentation Netw

     

    基于文本实例间像素级重合度的Mask-NMS, 替代了传统基于水平边框间重合度的NMS算法。下图左边子图是传统NMS算法执行结果,中间白色边框被错误地抑制掉了。下图右边子图是Mask-NMS算法执行结果, 三个边框都被成功保留下来。

    DMPNet模型

    DMPNet(Deep Matching Prior Network)中,使用四边形(非矩形)来更紧凑地标注文本区域边界,其训练出的模型对倾斜文本块检测效果更好。

    如下图所示,它使用滑动窗口在特征图上获取文本区域候选框,候选框既有正方形的、也有倾斜四边形的。接着,使用基于像素点采样的Monte-Carlo方法,来快速计算四边形候选框与标注框间的面积重合度。然后,计算四个顶点坐标到四边形中心点的距离,将它们与标注值相比计算出目标loss。文章中推荐用Ln loss来取代L1、L2 loss,从而对大小文本框都有较快的训练回归(regress)速度。

    选自arXiv:1703.01425,’Deep Matching Prior Network:

     

    EAST模型

    EAST(Efficient and Accuracy Scene Text detection pipeline)模型中,首先使用全卷积网络(FCN)生成多尺度融合的特征图,然后在此基础上直接进行像素级的文本块预测。该模型中,支持旋转矩形框、任意四边形两种文本区域标注形式。对应于四边形标注,模型执行时会对特征图中每个像素预测其到四个顶点的坐标差值。对应于旋转矩形框标注,模型执行时会对特征图中每个像素预测其到矩形框四边的距离、以及矩形框的方向角。

    根据开源工程中预训练模型的测试,该模型检测英文单词效果较好、检测中文长文本行效果欠佳。或许,根据中文数据特点进行针对性训练后,检测效果还有提升空间。

    上述过程中,省略了其他模型中常见的区域建议、单词分割、子块合并等步骤,因此该模型的执行速度很快。

    选自arXiv: 1704.03155,’EAST: An Efficient and Accur

     

    SegLink模型

    SegLink模型的标注数据中,先将每个单词切割为更易检测的有方向的小文字块(segment),然后用邻近连接(link )将各个小文字块连接成单词。这种方案方便于识别长度变化范围很大的、带方向的单词和文本行,它不会象Faster-RCNN等方案因为候选框长宽比例原因检测不出长文本行。相比于CTPN等文本检测模型,SegLink的图片处理速度快很多。

    选自arXiv: 1703.06520,’Detecting Oriented Text in Na

     

    如下图所示,该模型能够同时从6种尺度的特征图中检测小文字块。同一层特征图、或者相邻层特征图上的小文字块都有可能被连接入同一个单词中。换句话说,位置邻近、并且尺寸接近的文字块都有可能被预测到同一单词中。

    选自arXiv: 1703.06520,’Detecting Oriented Text in Na

     

    PixelLink模型

    自然场景图像中一组文字块经常紧挨在一起,通过语义分割方法很难将它们识别开来,所以PixelLink模型尝试用实例分割方法解决这个问题。

    该模型的特征提取部分,为VGG16基础上构建的FCN网络。模型执行流程如下图所示。首先,借助于CNN 模块执行两个像素级预测:一个文本二分类预测,一个链接二分类预测。接着,用正链接去连接邻居正文本像素,得到文字块实例分割结果。然后,由分割结果直接就获得文字块边框, 而且允许生成倾斜边框。

    上述过程中,省掉了其他模型中常见的边框回归步骤,因此训练收敛速度更快些。训练阶段,使用了平衡策略,使得每个文字块在总LOSS中的权值相同。训练过程中,通过预处理增加了各种方向角度的文字块实例。

    选自arXiv: 1801.01315,’Detecting Scene Text via Inst

     

    Textboxes/Textboxes++模型

    Textboxes是基于SSD框架的图文检测模型,训练方式是端到端的,运行速度也较快。如下图所示,为了适应文字行细长型的特点,候选框的长宽比增加了1,2,3,5,7,10这样初始值。为了适应文本行细长型特点,特征层也用长条形卷积核代替了其他模型中常见的正方形卷积核。为了防止漏检文本行,还在垂直方向增加了候选框数量。为了检测大小不同的字符块,在多个尺度的特征图上并行预测文本框, 然后对预测结果做NMS过滤。

    选自arXiv: 1611.06779,’TextBoxes: A Fast Text Detect

     

    (Textboxes++是Textboxes的升级版本,目的是增加对倾斜文本的支持。为此,将标注数据改为了旋转矩形框和不规则四边形的格式;对候选框的长宽比例、特征图层卷积核的形状都作了相应调整。

    选自arXiv: 1801.02765,’TextBoxes++: A Single-Shot O

     

    WordSup模型

    如下图所示,在数学公式图文识别、不规则形变文本行识别等应用中,字符级检测模型是一个关键基础模块。由于字符级自然场景图文标注成本很高、相关公开数据集稀少,导致现在多数图文检测模型只能在文本行、单词级标注数据上做训练。WordSup提出了一种弱监督的训练框架, 可以文本行、单词级标注数据集上训练出字符级检测模型。

    如下图所示,WordSup弱监督训练框架中,两个训练步骤被交替执行:给定当前字符检测模型,并结合单词级标注数据,计算出字符中心点掩码图; 给定字符中心点掩码图,有监督地训练字符级检测模型.

    选自arXiv: 1708.06720,’WordSup: Exploiting Word Anno

     

    如下图,训练好字符检测器后,可以在数据流水线中加入合适的文本结构分析模块,以输出符合应用场景格式要求的文本内容。该文作者例举了多种文本结构分析模块的实现方式。

    文本识别模型的目标是从已分割出的文字区域中识别出文本内容。

    CRNN模型

    CRNN(Convolutional Recurrent Neural Network)是目前较为流行的图文识别模型,可识别较长的文本序列。它包含CNN特征提取层和BLSTM序列特征提取层,能够进行端到端的联合训练。 它利用BLSTM和CTC部件学习字符图像中的上下文关系, 从而有效提升文本识别准确率,使得模型更加鲁棒。预测过程中,前端使用标准的CNN网络提取文本图像的特征,利用BLSTM将特征向量进行融合以提取字符序列的上下文特征,然后得到每列特征的概率分布,最后通过转录层(CTC rule)进行预测得到文本序列。

    选自arXiv: 1507.05717,’An End-to-End Trainable Neura

     

    RARE模型

    RARE(Robust text recognizer with Automatic Rectification)模型在识别变形的图像文本时效果很好。如下图所示,模型预测过程中,输入图像首先要被送到一个空间变换网络中做处理,矫正过的图像然后被送入序列识别网络中得到文本预测结果。

    如下图所示,空间变换网络内部包含定位网络、网格生成器、采样器三个部件。经过训练后,它可以根据输入图像的特征图动态地产生空间变换网格,然后采样器根据变换网格核函数从原始图像中采样获得一个矩形的文本图像。RARE中支持一种称为TPS(thin-plate splines)的空间变换,从而能够比较准确地识别透视变换过的文本、以及弯曲的文本.

    选自arXiv: 1603.03915,’Robust Scene Text Recognition

     

    端到端模型

    端到端模型的目标是一站式直接从图片中定位和识别出所有文本内容来。

    FOTS Rotation-Sensitive Regression

    FOTS(Fast Oriented Text Spotting)是图像文本检测与识别同步训练、端到端可学习的网络模型。检测和识别任务共享卷积特征层,既节省了计算时间,也比两阶段训练方式学习到更多图像特征。引入了旋转感兴趣区域(RoIRotate), 可以从卷积特征图中产生出定向的文本区域,从而支持倾斜文本的识别.

     

    选自arXiv: 1801.01671,’FOTS: Fast Oriented Text Spot

     

    STN-OCR模型

    STN-OCR是集成了了图文检测和识别功能的端到端可学习模型。在它的检测部分嵌入了一个空间变换网络(STN)来对原始输入图像进行仿射(affine)变换。利用这个空间变换网络,可以对检测到的多个文本块分别执行旋转、缩放和倾斜等图形矫正动作,从而在后续文本识别阶段得到更好的识别精度。在训练上STN-OCR属于半监督学习方法,只需要提供文本内容标注,而不要求文本定位信息。作者也提到,如果从头开始训练则网络收敛速度较慢,因此建议渐进地增加训练难度。STN-OCR已经开放了工程源代码和预训练模型。

    选自arXiv: 1707.08831,’STN-OCR: A single Neural Netw

     

    训练数据集

    本章将列举可用于文本检测和识别领域模型训练的一些大型公开数据集, 不涉及仅用于模型fine-tune任务的小型数据集。

    Chinese Text in the Wild(CTW)

    该数据集包含32285张图像,1018402个中文字符(来自于腾讯街景), 包含平面文本,凸起文本,城市文本,农村文本,低亮度文本,远处文本,部分遮挡文本。图像大小2048*2048,数据集大小为31GB。以(8:1:1)的比例将数据集分为训练集(25887张图像,812872个汉字),测试集(3269张图像,103519个汉字),验证集(3129张图像,103519个汉字)。

    文献链接:https://arxiv.org/pdf/1803.00085.pdf 
    数据集下载地址:https://ctwdataset.github.io/
    

     

    Reading Chinese Text in the Wild(RCTW-17)

    该数据集包含12263张图像,训练集8034张,测试集4229张,共11.4GB。大部分图像由手机相机拍摄,含有少量的屏幕截图,图像中包含中文文本与少量英文文本。图像分辨率大小不等。

    下载地址http://mclab.eic.hust.edu.cn/icdar2017chinese/dataset.html
    文献:http://arxiv.org/pdf/1708.09585v2
    

     

    ICPR MWI 2018 挑战赛

    大赛提供20000张图像作为数据集,其中50%作为训练集,50%作为测试集。主要由合成图像,产品描述,网络广告构成。该数据集数据量充分,中英文混合,涵盖数十种字体,字体大小不一,多种版式,背景复杂。文件大小为2GB。

    下载地址:
    https://tianchi.aliyun.com/competition/information.htm?raceId=231651&_is_login_redirect=true&accounttraceid=595a06c3-7530-4b8a-ad3d-40165e22dbfe 
    

     

    Total-Text

    该数据集共1555张图像,11459文本行,包含水平文本,倾斜文本,弯曲文本。文件大小441MB。大部分为英文文本,少量中文文本。训练集:1255张 测试集:300

    下载地址:http://www.cs-chan.com/source/ICDAR2017/totaltext.zip
    文献:http:// arxiv.org/pdf/1710.10400v
    

     

    Google FSNS(谷歌街景文本数据集)

    该数据集是从谷歌法国街景图片上获得的一百多万张街道名字标志,每一张包含同一街道标志牌的不同视角,图像大小为600*150,训练集1044868张,验证集16150张,测试集20404张。

    下载地址:http://rrc.cvc.uab.es/?ch=6&com=downloads
    文献:http:// arxiv.org/pdf/1702.03970v1
    

     

    替换高清大图

    COCO-TEXT

    该数据集,包括63686幅图像,173589个文本实例,包括手写版和打印版,清晰版和非清晰版。文件大小12.58GB,训练集:43686张,测试集:10000张,验证集:10000张

    文献: http://arxiv.org/pdf/1601.07140v2
    下载地址:https://vision.cornell.edu/se3/coco-text-2/
    

     

    Synthetic Data for Text Localisation

    在复杂背景下人工合成的自然场景文本数据。包含858750张图像,共7266866个单词实例,28971487个字符,文件大小为41GB。该合成算法,不需要人工标注就可知道文字的label信息和位置信息,可得到大量自然场景文本标注数据。

    下载地址:http://www.robots.ox.ac.uk/~vgg/data/scenetext/
    文献:http://www.robots.ox.ac.uk/~ankush/textloc.pdf
    Code: https://github.com/ankush-me/SynthText (英文版)
    Code https://github.com/wang-tf/Chinese_OCR_synthetic_data(中文版)
    

     

    Synthetic Word Dataset

    合成文本识别数据集,包含9百万张图像,涵盖了9万个英语单词。文件大小为10GB

    下载地址:http://www.robots.ox.ac.uk/~vgg/data/text/
    

     

    Caffe-ocr中文合成数据

    数据利用中文语料库,通过字体、大小、灰度、模糊、透视、拉伸等变化随机生成,共360万张图片,图像分辨率为280x32,涵盖了汉字、标点、英文、数字共5990个字符。文件大小约为8.6GB

    下载地址:https://pan.baidu.com/s/1dFda6R3
    

     

    参考文献

    1. “光学字符识别技术:让电脑像人一样阅读”, 新浪微博, 霍强

    http://tech.sina.com.cn/d/i/2015-04-03/doc-icczmvun8339303.shtml

    2. “Fully Convolutional Networks for Semantic Segmentation”, arXiv:1411.4038,Jonathan Long, Evan Shelhamer, Trevor Darrell

    https://arxiv.org/pdf/1411.4038

    3. “Spatial Transformer Networks”,arXiv:1506.02025,Max Jaderberg, Karen Simonyan, Andrew Zisserman, Koray Kavukcuoglu

    https://arxiv.org/pdf/1506.02025

    4.“Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks”,arXiv:1506.01497,Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun

    https://arxiv.org/pdf/1506.01497

    5.“SSD: Single Shot MultiBox Detector”,arxiv:1512.02325,Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg

    https://arxiv.org/pdf/1512.02325

    6.“Detecting Text in Natural Image with Connectionist Text Proposal Network”,arXiv:1609.03605,Zhi Tian, Weilin Huang, Tong He, Pan He, Yu Qiao

    https://arxiv.org/pdf/1609.03605

    7.“Arbitrary-Oriented Scene Text Detection via Rotation Proposals”,arXiv:1703.01086,Jianqi Ma, Weiyuan Shao, Hao Ye, Li Wang, Hong Wang, Yingbin Zheng, Xiangyang Xue

    https://arxiv.org/pdf/1703.01086

    8.“Fused Text Segmentation Networks for Multi-oriented Scene Text Detection”,arXiv:1709.03272,Yuchen Dai, Zheng Huang, Yuting Gao, Youxuan Xu, Kai Chen, Jie Guo, Weidong Qiu

    https://arxiv.org/pdf/1709.03272

    9.“Deep Matching Prior Network: Toward Tighter Multi-oriented Text Detection”,arXiv:1703.01425,Yuliang Liu, Lianwen Jin

    https://arxiv.org/pdf/1703.01425

    10.“EAST: An Efficient and Accurate Scene Text Detector”,arXiv:1704.03155,Xinyu Zhou, Cong Yao, He Wen, Yuzhi Wang, Shuchang Zhou, Weiran He, Jiajun Liang

    https://arxiv.org/pdf/1704.03155

    11.“Detecting Oriented Text in Natural Images by Linking Segments”,arXiv:1703.06520,Baoguang Shi, Xiang Bai, Serge Belongie

    https://arxiv.org/pdf/1703.06520

    12. “Detecting Scene Text via Instance Segmentation”,arXiv:1801.01315,Dan Deng, Haifeng Liu, Xuelong Li, Deng Cai

    https://arxiv.org/pdf/1801.01315

    13.“TextBoxes: A Fast Text Detector with a Single Deep Neural Network”,arXiv:1611.06779,Minghui Liao, Baoguang Shi, Xiang Bai, Xinggang Wang, Wenyu Liu

    https://arxiv.org/pdf/1611.06779

    14.“TextBoxes++: A Single-Shot Oriented Scene Text Detector”,arXiv:1801.02765,Minghui Liao, Baoguang Shi, Xiang Bai

    https://arxiv.org/pdf/1801.02765

    15.“WordSup: Exploiting Word Annotations for Character based Text Detection”,arXiv:1708.06720,Han Hu, Chengquan Zhang, Yuxuan Luo, Yuzhuo Wang, Junyu Han, Errui Ding

    https://arxiv.org/pdf/1708.06720

    16.“An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition”,arXiv:1507.05717,Baoguang Shi, Xiang Bai, Cong Yao

    https://arxiv.org/pdf/1507.05717

    17. “Robust Scene Text Recognition with Automatic Rectification”,arXiv:1603.03915,Baoguang Shi, Xinggang Wang, Pengyuan Lyu, Cong Yao, Xiang Bai

    https://arxiv.org/pdf/1603.03915

    18.“FOTS: Fast Oriented Text Spotting with a Unified Network”,arXiv:1801.01671,Xuebo Liu, Ding Liang, Shi Yan, Dagui Chen, Yu Qiao, Junjie Yan

    https://arxiv.org/pdf/1801.01671

    19.“STN-OCR: A single Neural Network for Text Detection and Text Recognition”,arXiv:1707.08831,Christian Bartz, Haojin Yang, Christoph Meinel

    https://arxiv.org/pdf/1707.08831

    20.“Chinese Text in the Wild”,arXiv:1803.00085,Tai-Ling Yuan, Zhe Zhu, Kun Xu, Cheng-Jun Li, Shi-Min Hu

    https://arxiv.org/pdf/1803.00085.pdf

    21.“ICDAR2017 Competition on Reading Chinese Text in the Wild (RCTW-17)”,arXiv:1708.09585,Baoguang Shi, Cong Yao, Minghui Liao, Mingkun Yang, Pei Xu, Linyan Cui, Serge Belongie, Shijian Lu, Xiang Bai

    http://arxiv.org/pdf/1708.09585

    22.“Total-Text: A Comprehensive Dataset for Scene Text Detection and Recognition”,arXiv:1710.10400,Chee Kheng Chng, Chee Seng Chan

    https://arxiv.org/pdf/1710.10400

    23.“End-to-End Interpretation of the French Street Name Signs Dataset”,arXiv:1702.03970,Raymond Smith, Chunhui Gu, Dar-Shyang Lee, Huiyi Hu, Ranjith Unnikrishnan, Julian Ibarz, Sacha Arnoud, Sophia Lin

    https://arxiv.org/pdf/1702.03970

    24.“COCO-Text: Dataset and Benchmark for Text Detection and Recognition in Natural Images”,arXiv:1601.07140,Andreas Veit, Tomas Matera, Lukas Neumann, Jiri Matas, Serge Belongie

    http://arxiv.org/pdf/1601.07140

    25. “Synthetic Data for Text Localisation in Natural Images”,arXiv:1604.06646, Ankush Gupta, Andrea Vedaldi, Andrew Zisserman

    https://arxiv.org/pdf/1604.06646

    推荐阅读

    [1]机器学习-波澜壮阔40年【获取码】SIGAI0413.

    [2]学好机器学习需要哪些数学知识?【获取码】SIGAI0417.

    [3] 人脸识别算法演化史【获取码】SIGAI0420.

    [4]基于深度学习的目标检测算法综述 【获取码】SIGAI0424.

    [5]卷积神经网络为什么能够称霸计算机视觉领域?【获取码】SIGAI0426.

    [6] 用一张图理解SVM的脉络【获取码】SIGAI0428.

    [7] 人脸检测算法综述【获取码】SIGAI0503.

    [8] 理解神经网络的激活函数 【获取码】SIGAI2018.5.5.

    [9] 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读【获取码】SIGAI0508.

    [10] 理解梯度下降法【获取码】SIGAI0511.

    [11] 循环神经网络综述—语音识别与自然语言处理的利器【获取码】SIGAI0515

    [12] 理解凸优化 【获取码】 SIGAI0518

    [13] 【实验】理解SVM的核函数和参数 【获取码】SIGAI0522

    [14]【SIGAI综述】行人检测算法 【获取码】SIGAI0525

    [15] 机器学习在自动驾驶中的应用—以百度阿波罗平台为例(上)【获取码】SIGAI0529

    [16]理解牛顿法【获取码】SIGAI0531

    [17] 【群话题精华】5月集锦—机器学习和深度学习中一些值得思考的问题【获取码】SIGAI 0601

    [18] 大话Adaboost算法 【获取码】SIGAI0602

    [19] FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法【获取码】SIGAI0604

    [20] 理解主成分分析(PCA)【获取码】SIGAI0606

    [21] 人体骨骼关键点检测综述 【获取码】SIGAI0608

    [22]理解决策树 【获取码】SIGAI0611

    [23] 用一句话总结常用的机器学习算法【获取码】SIGAI0611

    [24] 目标检测算法之YOLO 【获取码】SIGAI0615

    [25] 理解过拟合 【获取码】SIGAI0618

    [26]理解计算:从√2到AlphaGo ——第1季 从√2谈起 【获取码】SIGAI0620

    [27] 场景文本检测——CTPN算法介绍 【获取码】SIGAI0622

    [28] 卷积神经网络的压缩和加速 【获取码】SIGAI0625

    [29] k近邻算法 【获取码】SIGAI0627

    [30]自然场景文本检测识别技术综述 【获取码】SIGAI0627

    [31] 理解计算:从√2到AlphaGo ——第2季 神经计算的历史背景 【获取码】SIGAI0704

    [32] 机器学习算法地图【获取码】SIGAI0706

    [33] 反向传播算法推导-全连接神经网络【获取码】SIGAI0709

    [34] 生成式对抗网络模型综述【获取码】SIGAI0709.

    [35]怎样成为一名优秀的算法工程师【获取码】SIGAI0711.

    [36] 理解计算:从根号2到AlphaGo——第三季 神经网络的数学模型【获取码】SIGAI0716

    [37]【技术短文】人脸检测算法之S3FD 【获取码】SIGAI0716

    [38] 基于深度负相关学习的人群计数方法【获取码】SIGAI0718

    [39] 流形学习概述【获取码】SIGAI0723

    [40] 关于感受野的总结 【获取码】SIGAI0723

    [41] 随机森林概述 【获取码】SIGAI0725

    [42] 基于内容的图像检索技术综述——传统经典方法【获取码】SIGAI0727

    [43] 神经网络的激活函数总结【获取码】SIGAI0730

    [44] 机器学习和深度学习中值得弄清楚的一些问题【获取码】SIGAI0802

    [45] 基于深度神经网络的自动问答系统概述【获取码】SIGAI0806

    [46] 机器学习与深度学习核心知识点总结 写在校园招聘即将开始时 【获取 码】SIGAI0808

    [47] 理解Spatial Transformer Networks【获取码】SIGAI0810


     

    展开全文
  • 近年来,由于在许多与计算机相关的技术中扮演重要角色,自然场景文本检测受到越来越多的关注。本文提出了一种文本检测方法,该方法由两个主要步骤组成:连接组件(CC)提取和非文本过滤。 ForCCsextraction,a.multi...
  • 基于自适应色彩聚类和上下文信息的自然场景文本检测.pdf
  • 许多自然场景图像中都包含着丰富的文本,他们对于场景理解有着重要的作用。随着移动互联网技术的飞速发展,...因此,自然场景文本的分析与处理也越来越成为计算机视觉领域的研究热点之一,该任务主要包括文本检测与识别。
  • 行业分类-设备装置-一种交互式的自然场景文本检测方法
  • 行业分类-设备装置-一种基于笔划特征的自然场景文本检测算法
  • CTPN - 自然场景文本检测 论文下载链接 摘要 文字目标的特殊性,一个很大的先验是,文字总是水平排列的。文字的特征总感觉体现在edge上。这也是一个限制,只能检测水平方向上的文字。 自然场景文字检测的难点在于:...

    CTPN - 自然场景文本检测

    论文下载链接

    摘要

    文字目标的特殊性,一个很大的先验是,文字总是水平排列的。文字的特征总感觉体现在edge上。这也是一个限制,只能检测水平方向上的文字。

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

    文本检测和一般目标检测的不同——文本线是一个sequence(字符、字符的一部分、多字符组成的一个sequence),而不是一般目标检测中只有一个独立的目标。这既是优势,也是难点。优势体现在同一文本线上不同字符可以互相利用上下文,可以用sequence的方法比如RNN来表示。难点体现在要检测出一个完整的文本线,同一文本线上不同字符可能差异大,距离远,要作为一个整体检测出来难度比单个目标更大。

    因此,作者认为预测文本的竖直位置(文本bounding box的上下边界)比水平位置(文本bounding box的左右边界)更容易。

    Top-down(先检测文本区域,再找出文本线)的文本检测方法比传统的bottom-up的检测方法(先检测字符,再串成文本线)更好。自底向上的方法的缺点在于没有考虑上下文,不够鲁棒,系统需要太多子模块,太复杂且误差逐步积累,性能受限。

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

    • 改进了rpn,anchor产生的window的宽度固定为3。
    • rpn后面不是直接接全连接+分类/回归,而是再通过一个LSTM,再接全连接层。 坐标仅仅回归一个y,而不是x1, y1, x2, y2
    • 添加 side-refinement offsets(可能这个就是4个回归值中的其中2个)

    本文亮点

    1. 本文中利用RNN和CNN的无缝结合可以提高检测精度。CNN用来提取深度特征,RNN用来序列的特征识别(2类),二者无缝结合,用在检测上性能更好。

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

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

    1. 网络结构为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。

    • 第三,将每一行的所有窗口对应的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因为一个anchor用的是中心位置的高(y坐标)和矩形框的高度两个值表示的,所以一个用2k个输出。(注意这里输出的是相对anchor的偏移),k个side-refinement这部分主要是用来精修文本行的两个端点的,表示的是每个proposal的水平平移量。这边注意,只用了3个参数表示回归的bounding box,因为这里默认了每个anchor的width是16,且不再变化(VGG16的conv5的stride是16)。回归出来的box如Fig.1中那些红色的细长矩形,它们的宽度是一定的。这是会得到密集预测的text proposal,所以会使用一个标准的非极大值抑制算法来滤除多余的box。

    • 第六,用简单的文本线构造算法,把分类得到的文字的proposal(图Fig.1(b)中的细长的矩形)合并成文本线。

    在这里插入图片描述

    方法细节

    1. Detecting Text in Fine-scale proposals
    • k个anchor尺度和长宽比设置:宽度都是16,k = 10,高度从11~273(每次除于0.7)
    • 回归的高度和bounding box的中心的y坐标如下,带*的表示是groundTruth,带a的表示是anchor
      v c = ( c y − c y a ) / h a , v h = log ⁡ ( h / h a ) v_{c}=\left(c_{y}-c_{y}^{a}\right) / h^{a}, \qquad v_{h}=\log \left(h / h^{a}\right) vc=(cycya)/ha,vh=log(h/ha)
      v c ∗ = ( c y ∗ − c y a ) / h a , v h ∗ = log ⁡ ( h ∗ / h a ) v_{c}^{*}=\left(c_{y}^{*}-c_{y}^{a}\right) / h^{a}, \qquad v_{h}^{*}=\log \left(h^{*} / h^{a}\right) vc=(cycya)/ha,vh=log(h/ha)
    • score阈值设置:0.7 (+NMS)
    • 一般的RPN和采用本文的方法检测出的效果对比
      在这里插入图片描述
    1. Recurrent Connectionist Text Proposals
    • RNN类型:BLSTM(双向LSTM),每个LSTM有128个隐含层
    • RNN输入:每个滑动窗口的33C的特征(可以拉成一列),同一行的窗口的特征形成一个序列
    • RNN输出:每个窗口对应256维特征
    • 使用RNN和不适用RNN的效果对比,CTPN是本文的方法(Connectionist Text Proposal Network)
      在这里插入图片描述
    1. 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。

    o = ( x s i d e − c x a ) / w a , o ∗ = ( x s i d e ∗ − c x a ) / w a o=\left(x_{s i d e}-c_{x}^{a}\right) / w^{a}, \quad o^{*}=\left(x_{s i d e}^{*}-c_{x}^{a}\right) / w^{a} o=(xsidecxa)/wa,o=(xsidecxa)/wa

    使用side-refinement的效果对比
    在这里插入图片描述

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

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

    总结

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

    问题

    • 没有很好地处理多方向的文本行
    • 训练的时候由于有regression和LSTM,需要小心控制梯度爆炸。
    • 正如文章所提的,这个网络预测的是一些固定宽度的text proposal,所以真值也应该按照这样来标注。但是一般数据库给的都是整个文本行或者单词级别的标注。因此需要把这些标注转换成一系列固定宽度的box。
    展开全文
  • 近三年自然场景文本检测与识别论文和源码资源整理汇总,适用于刚入门深度学习算法研究的研究者下载钻研
  • 由于光照条件、图片质量以及目标非线性排列等因素的限制,自然场景下的文本检测任务难度较大受约束的受控环境中的文本检测任务通常可以使用基于启发式的方法来完成,比如利用梯度信息或文本通常被分成段落呈现,并且...
  • 基于无监督特征学习的自然场景文本检测研究,黄舒啸,袁玉宇,随着技术的发展,传统的光学字符识别技术已经不能满足用户的需求。智能设备拍摄的图片中往往包含文字,若计算机能
  • opencv的dnn模块,加载tf模型east进行自然场景文本检测

    一、opencv的示例模型文件

    使用tensorflow实现模型frozen_east_text_detection.pb,下载地址:https://www.dropbox.com/s/r2ingd0l3zt8hxs/frozen_east_text_detection.tar.gz?dl=1
    参考论文和开源代码如下:EAST: An Efficient and Accurate Scene Text Detectorgithub EAST

    使用数据库为ICDAR。

    相比已有模型
    该模型直接预测全图像中任意方向和四边形形状的单词或文本行,消除不必要的中间步骤(例如,候选聚合和单词分割)。通过下图它与一些其他方式的步骤对比,可以发现该模型的步骤比较简单,去除了中间一些复杂的步骤,所以符合它的特点,EAST, since it is an Efficient and Accuracy Scene Text detection pipeline.
    在这里插入图片描述
    网络结构
    在这里插入图片描述
    (1) 特征提取层:使用的基础网络结构是PVANet,分别从stage1,stage2,stage3,stage4抽出特征,一种FPN(feature pyramid network)的思想。
    (2) 特征融合层:第一步抽出的特征层从后向前做上采样,然后concat
    (3) 输出层:输出一个score map和4个回归的框+1个角度信息(RBOX),或者输出,一个scoremap和8个坐标信息(QUAD)。

    这里的程序代码实现的基础网络不是pvanet网络,而是resnet50-v1。

    下图是标签生的处理,(a)黄色虚线四边形为文本边框,绿色实线是收缩后的标注框(b)文本检测score map(c)RBOX几何关系图(d)各像素到矩形框四个边界的距离,四通道表示。(e)矩形框旋转角度
    在这里插入图片描述

    二、示例代码

    #include <opencv2/imgproc.hpp>
    #include <opencv2/highgui.hpp>
    #include <opencv2/dnn.hpp>
    
    using namespace cv;
    using namespace cv::dnn;
    
    void decode(const Mat& scores, const Mat& geometry, float scoreThresh,
    	std::vector<RotatedRect>& detections, std::vector<float>& confidences);
    
    int main()
    {
    	float confThreshold = 0.5;
    	float nmsThreshold = 0.4;
    	int inpWidth =320;
    	int inpHeight = 320;
    	String model = "../../data/testdata/dnn/frozen_east_text_detection.pb";
    
    	// 加载模型
    	Net net = readNet(model);
    	auto names = net.getLayerNames();
    
    	// 测试视频或图片或图片序列
    	VideoCapture cap;
    	cap.open("../../data/image/bp2.jpg");
    
    	static const std::string kWinName = "EAST: An Efficient and Accurate Scene Text Detector";
    	namedWindow(kWinName, WINDOW_NORMAL);
    
    	// 设定网络提取层的数据
    	std::vector<Mat> outs;
    	std::vector<String> outNames(2);
    	outNames[0] = "feature_fusion/Conv_7/Sigmoid";
    	outNames[1] = "feature_fusion/concat_3";
    
    	Mat frame, blob;
    	while (1) {
    		cap >> frame;
    		if (frame.empty()) {
    			break;
    		}
    
    		// 输入图片、网络前向计算
    		blobFromImage(frame, blob, 1.0, Size(inpWidth, inpHeight), Scalar(123.68, 116.78, 103.94), true, false);
    		net.setInput(blob);
    		net.forward(outs, outNames);
    
    		Mat scores = outs[0];    // 1x1x80x80
    		Mat geometry = outs[1];  // 1x5x80x80
    
    		// 输出数据Blob转换为可操作的数据对象
    		std::vector<RotatedRect> boxes;
    		std::vector<float> confidences;
    		decode(scores, geometry, confThreshold, boxes, confidences);
    
    		// NMS处理检测结果
    		std::vector<int> indices;
    		cv::dnn::NMSBoxes(boxes, confidences, confThreshold, nmsThreshold, indices);
    
    		// 绘制检测结果
    		Point2f ratio((float)frame.cols / inpWidth, (float)frame.rows / inpHeight);
    		for (int indice : indices) {
    			RotatedRect& box = boxes[indice];
    
    			Point2f vertices[4];
    			box.points(vertices);
    			// 映射(inpWidth,inpHeight)到输入图像实际大小比例中
    			for (auto & vertice : vertices) {
    				vertice.x *= ratio.x;
    				vertice.y *= ratio.y;
    			}
    			for (int j = 0; j < 4; ++j)
    				line(frame, vertices[j], vertices[(j + 1) % 4], Scalar(0, 255, 0), 1);
    		}
    
    		// 相关检测效率信息
    		std::vector<double> layersTimes;
    		double freq = getTickFrequency() / 1000;
    		double t = net.getPerfProfile(layersTimes) / freq;
    		std::string label = format("Inference time: %.2f ms", t);
    		putText(frame, label, Point(0, 15), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0));
    
    		imshow(kWinName, frame);
    		waitKey();
    	}
    	return 0;
    }
    
    void decode(const Mat& scores, const Mat& geometry, float scoreThresh,
    	std::vector<RotatedRect>& detections, std::vector<float>& confidences)
    {
    	detections.clear();
    	CV_Assert(scores.dims == 4);	CV_Assert(geometry.dims == 4); 
    	CV_Assert(scores.size[0] == 1);	CV_Assert(geometry.size[0] == 1);
    	CV_Assert(scores.size[1] == 1); CV_Assert(geometry.size[1] == 5);
    	CV_Assert(scores.size[2] == geometry.size[2]);
    	CV_Assert(scores.size[3] == geometry.size[3]);
    
    	const int height = scores.size[2];
    	const int width = scores.size[3];
    	for (int y = 0; y < height; ++y) {
    		// 各行像素点对应的 score、4个距离、角度的 数据指针
    		const auto* scoresData = scores.ptr<float>(0, 0, y);
    		const auto* x0_data =    geometry.ptr<float>(0, 0, y);
    		const auto* x1_data =    geometry.ptr<float>(0, 1, y);
    		const auto* x2_data =    geometry.ptr<float>(0, 2, y);
    		const auto* x3_data =    geometry.ptr<float>(0, 3, y);
    		const auto* anglesData = geometry.ptr<float>(0, 4, y);
    		for (int x = 0; x < width; ++x) {
    			float score = scoresData[x];       // score
    			if (score < scoreThresh)
    				continue;
    
    			// 输入图像经过网络有4次缩小
    			float offsetX = x * 4.0f, offsetY = y * 4.0f;
    			float angle = anglesData[x];       // 外接矩形框旋转角度
    			float cosA = std::cos(angle);
    			float sinA = std::sin(angle);
    			float h = x0_data[x] + x2_data[x]; // 外接矩形框高度
    			float w = x1_data[x] + x3_data[x]; // 外接矩形框宽度
    
    			// 通过外接矩形框,旋转角度,建立旋转矩形
    			Point2f offset(offsetX + cosA * x1_data[x] + sinA * x2_data[x],
    				           offsetY - sinA * x1_data[x] + cosA * x2_data[x]);
    			Point2f p1 = Point2f(-sinA * h, -cosA * h) + offset;
    			Point2f p3 = Point2f(-cosA * w, sinA * w) + offset;
    			RotatedRect r(0.5f * (p1 + p3), Size2f(w, h), -angle * 180.0f / (float)CV_PI);
    			detections.push_back(r);
    			confidences.push_back(score);
    		}
    	}
    }
    

    3、演示

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 论文翻译:自然场景文本检测与识别综述欢迎使用Markdown编辑器引言介绍功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定...
  • 使用方法说明:https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/ 之前下了几次,解压都失败,文件损坏。终于下好了就先上传上来。
  • 华南理工大学 金连文老师 自然场景文本检测与识别中的深度学习方法综述
  • CTPN - 自然场景文本检测

    万次阅读 多人点赞 2017-12-22 14:57:55
    文本检测,先用CNN得到深度特征,然后用固定宽度的anchor来检测text proposal(文本线的一部分),并把同一行anchor对应的特征串成序列,输入到RNN中,最后用全连接层来分类或回归,并将正确的text proposal进行合并...
  • EAST自然场景文本检测的实现

    千次阅读 2019-03-08 18:30:44
    最近,提取和理解自然场景中包含的文本信息变得越来越重要和受欢迎,ICDAR系列竞赛的前所未有的大量参与者和NIST推出的TRAIT 2016评估证明了这一点。文本检测作为后续过程的先决条件,在文本信息提取和理解的整个...
  • 自然场景文本检测算法总结

    千次阅读 2019-07-04 13:03:35
    文章目录 ...阿里提出的:基于分割算法(FCIS),采用inception结构引入deformable卷积层操作和deformable PSROI pooling层,不知道对旋转文本的效果怎么样 具体参考 IncepText 算法笔记 code:未开源

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,678
精华内容 7,871
关键字:

自然场景文本检测