zoukankan      html  css  js  c++  java
  • 【文字检测算法整理】

    文字检测与其他目标检测的区别:

    一、长宽比差异很大,而且普遍较小;

    二、文字是以字符为基本单元按照一定空间排列而成的序列,而不是一个单独的目标;

    三、文字存在多种粒度和多语言。

    传统方法系列:

    一、流程

       1.基于滑动窗口:用不同大小的窗口在原图上滑动,并用分类模型判断每一个窗口是否包含文字,最后对检测结果使用非极大值抑制等进行后处理。

       2.基于连通分量:首先根据低级特征(比如,光强,颜色,梯度等)把图像的像素聚集成不同的连通分量,再用分类模型对这些连通分量进行判断,过滤其中的噪声区域。包括基于笔画宽度变换(SWT)、最大稳定极值区域(MSER)、极值区域(ER)等方法。

    二、SWT

       1.思想:首先求图像的笔画宽度变换即每个像素都分配了一个笔画宽度,然后利用灵活的几何推理,把有着相似比划宽度的位置都被聚合成词。

       2.流程:笔画宽度转换、像素聚成连通域、连通域滤除、字符连成文本行、文本行分割成词。

       3.链接:https://www.cnblogs.com/dawnminghuang/p/3807678.html

    三、MSER

       1.思想:对图像进行二值化,二值化阈值取[0, 255],这样二值化图像就经历一个从全黑到全白的过程(就像水位不断上升的俯瞰图)。在这个过程中,有些连通区域面积随阈值上升的变化很小,这种区域就叫MSER

       2.链接:https://blog.csdn.net/pirlck/article/details/52846550

    四、ER

    五、Selective Search

       1.思想:

      采用分层聚类的思想,整体思想是为了避免无法得到不同层次的目标的问题,采用小区域不断一步步往上聚类得到不同层次目标区域的结果。首先把图像按分割的方法分成一个个小区域,然后按照特性(颜色、纹理、尺寸、交叠)计算相似性并把相似度高且大小合适的聚起来,最后就得到了不同层次的目标。

       2.步骤:

       

       3.链接:

         https://blog.csdn.net/qq_28132591/article/details/73549560%20https://blog.csdn.net/guoyunfei20/article/details/78723646

    六、EdgeBox

        1.思想:

        利用边缘信息(Edge),确定box内的轮廓个数和与box边缘重叠的edge个数(知道一个box内完全包含的轮廓个数,那么目标有很大可能性,就在这个box中),基于此对box进行评分,进一步根据得分的高低顺序确定proposal信息。

        2.链接:

         https://blog.csdn.net/wsj998689aa/article/details/39476551

    七、传统特征

        1.字符:

         轮廓形状直方图、边缘方向直方图、长宽比、密度。

        2.链:

         候选区域的个数、平均角度、平均分数、大小变化、距离变化、密度变化、宽度变化、结构相似性。

    深度学习方法系列:

    一、R-CNN

        1.思想:

          首先提取一系列的候选区域,然后对这些候选区域用CNN提取固定长度的特征,然后用SVM对特征进行分类,最后对候选区域进行微调。

        2.步骤: 

          

       (1)使用Selective Search对输入图像提取大约2000个候选区域(proposal);

       (2)对每个候选区域的图像进行拉伸形变,使之成为固定大小的图像(如227*227),并将该图像输入到CNN(Alexnet)中提取(4096维的)特征;(先在ImageNet上进行预训练再微调,IOU阈值为0.5,分类为21个channel(是不是目标,是哪类目标))

       (3)使用线性的SVM对提取的特征进行分类(对每一类训练一个分类器);

       (4)对proposal进行微调(在附录里面)。

       (5)测试时,用NMS做后处理。(对IOU大于一定阈值(如0.5)的proposal对,去掉面积小的proposal)

        3.缺点:

        (1)输入需要固定尺寸;

        (2)proposal的特征需要存储,占用大量存储空间;

        (3)每个proposal单独提取特征,大量重叠,浪费计算资源。

        4.参考:

         https://blog.csdn.net/lhanchao/article/details/72287377

         https://www.cnblogs.com/gongxijun/p/7071509.html?utm_source=debugrun&utm_medium=referral

    二、SPPNet

        1.思想:

         改进R-CNN,使得原图只需输入一次,并且不需要固定大小。思路是,首先提取Proposal,然后将整张图输入到神经网络中得到feature map,将proposal位置对应到feature map上,剪切下来再进行图像金字塔池化得到固定长度的特征,最后再用分类器进行分类。

        2.步骤:

        

        (1)使用Selective Search对输入图像提取大约2000个候选区域(proposal);

        (2)将整张图像输入到神经网络(如ZF-5)中得到feature map,并对候选区域对应的feature map采用空间金字塔(4级,1*1,2*2,3*3,6*6共50块)池化得到固定大小(256个channel*50=12800维)的特征;(只有1*1时是全局平均池化)

        (3)用多个二分类SVM进行分类;

        (4)bounding box回归。

        (5)测试时,NMS做后处理。

        3.缺点:

         (1)仍然基于RCNN框架,非端到端;

         (2)提取proposal依然耗时;

         (3)金字塔池化两端无法同时训练。

        4.参考:

          https://blog.csdn.net/v1_vivian/article/details/73275259

    三、Fast R-CNN

        1.思想:

         将SPP的空间金字塔池化思想引入到R-CNN,用softmax代替SVM分类器,同时将bounding box 回归纳入到整体框架中。

        2.步骤:

        

        

          (1)对输入的图片利用Selective Search得到约2000个感兴趣区域,即ROI;

          (2)将整张图输入到网络中得到feature map,并在feature map上求得每个ROI对应的区域;

          (3)用ROI Pooling层得到固定长度的向量,然后经过一个全连接层得到ROI的特征向量;

          (4)分别经过一个全连接层得到预测结果,一个用来分类是哪个目标,一个用来bbox回归。

          (5)测试时,非极大值抑制得到最终结果。

         3.细节:

         ROI pooling:

         是SppNet的图像金字塔池化的一种特例,只有一层。

        4.Loss:

         分类softmax loss+回归smooth L1 loss

        

            

               

        5.缺点:

         (1)仍然是双阶段的;

        6.参考:

         https://blog.csdn.net/wonder233/article/details/53671018

    四、Faster R-CNN

        1.思想:

         用RPN(区域生成网络)取代以往算法的区域生成阶段,然后交替训练,使得RPN和Fast RCNN共享参数。

        2.步骤:

      

       

       

           

            (1)用基础网络(VGG16)获得feature map;

            (2)将feature map输入到RPN网络中,提取proposal,并将proposal映射到原feature上;

            (3)将proposal的feature map用ROI pooling池化到固定长度;

            (4)进行类别的分类和位置的回归。

        3.细节:

         RPN网络:

        

              思想:在feature map的每个cell上赋予9=3(3种size)*3(3种比例,1:1,1:2,2:1)个anchor,每个anchor需要检测该cell是不是目标(9*2=18维),以及目标的更精确的位置(9*4=36维),整个feature map得到W/4*H/4*(18+36=54)大小的feature map,接着就可以按分数取正负样本,再从原feature map上裁出来然后ROI pooling,就得到待分类和回归的proposal。

             bbox回归

            将anchor映射回原图进行回归,回归之后去掉超出边界的Bbox,再用非极大值抑制,最后选择前TopN的anchor进行输出。

        4.Loss:

          RPN损失:分类损失(softmax)+λ回归损失(L1 smooth)

          Fast RCNN损失:见上

        5.参考:

          http://www.360doc.com/content/17/0809/10/10408243_677742029.shtml

    五、YOLO

        1.思想:

         将原图经过基础网络(类似于GoogleNet)得到特征,然后接两个全连接层,直接进行回归,不是对特征图上的每个cell进行回归,而是对原图打7*7的格子,对每一个格子进行回归,判定是不是目标以及目标的具体位置。

        2.步骤

       

        3.细节

        训练是分步的,先用ImageNet2012训练基础网络部分,然后在特定库上训练合起来的整体。

        坐标和分类非目标的权重分别为λcoord=5,λnoobj=0.5

        4.Loss

        正样本:置信度,分类分数,位置,负样本:置信度

        对宽高都进行开根是为了使用大小差别比较大的边界框差别减小。

        值都是绝对值,而非相对值。

       

        5.缺点

        一个格子中只能检测两个物体,且两个物体只能属于同一类别;Loss设计为绝对值;位置信息回归相对不够准确;单层预测。

        6.参考

         https://www.cnblogs.com/EstherLjy/p/6774864.html%20https://www.cnblogs.com/fariver/p/7446921.html

    六、SSD

        1.思想:

        采用直接在特征图上回归和分类的方式来直接得到一张图上的目标。

        2.步骤:

       

        3.细节:

        Default Box:比例——{1, 2, 3,1/2,1/3},尺度——20%~90%

        难负样本挖掘:控制正负样本比例为1:3,即选择Loss较高的正样本和负样本。

        数据增广:原图/随机采样/翻转

        4.Loss:

       

        5.参考:

         https://www.cnblogs.com/fariver/p/7347197.htmlhttps://blog.csdn.net/u013989576/article/details/73439202%20http://m.sohu.com/a/168738025_717210

    七、R-FCN

    八、EAST

       1.结构:

      

       2.Loss:(λg=1)

       

       3.缺点:

         检测长文本效果不够好,因为感受野不够大,而且分数采用sigmod函数【0-1】,以512为基准,这样样本都落在很小的地方,就很不均衡。

       4.参考:

         https://www.cnblogs.com/EstherLjy/p/9278314.html

    九、RefineNet

        1.结构图:

        这里写图片描述

               

              主要组成部分为RCU(残差卷积单元)、多分辨率融合、链式残差池化、RCU输出。

        2.特点:

         使用残差级联的方式组织网络,这样误差可以短路传播;用链式残差池化来从图中捕获背景信息;

         能够有效的将下采样中缺失的信息融合进来,从而产生高分辨率的预测图像

        使用残差连接和identity mapping 的思想,能够实现端到端的训练。

       3.问题:

        为什么可以捕获背景信息?

         链式残差池化,然后再卷积相加,不同的池化相当于大小不同的窗口,整合不同尺度的特征,结合上下文,从而捕获背景。

       4.参考:

         https://blog.csdn.net/qq_36165459/article/details/78345269

    十、Mask RCNN

       1.思想:

        对Faster RCNN进行改进,对每个类别加入一层二值掩码预测,用于图像分割。Faster RCNN采用ROI pooling层,将ROI池化到固定长度以用于分类,Mask采用ROI Align层对得到的ROI进行双线性插值,在ROI的feature map上进行掩码的预测。

       2.步骤:

      

       3.细节:

        分类和定位继续固定长度,而掩码部分不固定长度;为每个类别都加入一层二值掩码,防止类间竞争,计算Loss时只算某类别的掩码损失。

       4.Loss:

         (平均二进制交叉熵损失)

       5.链接:

         https://blog.csdn.net/u011974639/article/details/78483779?locationNum=9&fps=1https://blog.csdn.net/Yan_Joy/article/details/66528502

       6.ROIAlign:

        参考:https://www.cnblogs.com/wangyong/p/8523814.html%20https://blog.csdn.net/u011918382/article/details/79455407

    十一、DSSD

       1.思想:

       改进SSD,卷积后进行去卷积,然后加起来再做预测。

       2.结构图:

      

    十二、DCN(可变形卷积网络)

        1.思想:

        以往方块卷积核窗口,可能不是最好的,考虑不用方块卷积,而是一个不固定的窗口,让他自己去学习应该用什么样的窗口才更好。采用的方法是,学习卷积核权重的同时,对每一个要输出结果的像素点,采用的偏移点不再是周围一圈的位置,而是学习出其偏移的量(x,y两个坐标)。如3*3的卷积核,对于输出点p,需要学习9个偏移量。

        2.详细:

        标准卷积和变形卷积直观比较:

       

            变形卷积可以达到对原始卷积移动、尺度缩放、旋转的效果:

         

           可变形卷积过程:

         

             传统卷积输出:

               

           可变形卷积输出:

         

           Δpn只是影响x输入层像素的抽样,并不影响窗口像素权重w。

           原始池化:

         

            可变形池化:

         

        3.可视化效果:

        

        4.参考:

        https://blog.csdn.net/xbinworld/article/details/69367281%20https://blog.csdn.net/AMDS123/article/details/72082318?ref=myrecommend   

        5.DCN+FPN:

         FPN:上采样后的特征图和低层的做融合,且多层预测;

  • 相关阅读:
    WSGI原理
    主从数据库
    mysql高级
    记录
    获取当前时间
    sql注入和防sql注入
    python操作MySQL
    修改Windows10 命令终端cmd的编码为UTF-8
    MySQL查询
    MySQL数据库操作
  • 原文地址:https://www.cnblogs.com/EstherLjy/p/9328996.html
Copyright © 2011-2022 走看看