当前位置:   article > 正文

OCR 模型记录_ocr模型

ocr模型

OCR算法

检测类

1. DBNet

属于分割类文本检测算法。其基于对模型预测出的特征图进行复制筛选的朴素思想,创新提出使用模型预测其阈值特征图,利用两者获得二值图,从而获取文本位置信息。其流程如下图:
DBNet流程
可以发现其能够处理不规则的文本,那么具体是怎么实现的呢?
在这里插入图片描述
上图是整体网络流程,其基本架构为Backbone + FPN + DB Head,并不复杂,可能会造成疑惑的的有以下几点:

  • 特征融合的细节处理
  • probabliy map 与 threshold map 的后处理
  • 模型损失函数构造
特征融合

以下为DBNet的FPN推理模块:
在这里插入图片描述

第一步:其中in*_conv为conv 1x1的卷积,主要作用为特征映射与修改channel
第二步:通过upsampling将特征图扩大2被与上一尺度的特征相加
第三步:使用p*_conv对第二步中得到的特征图进行特征映射,其中p*_conv为conv 3x3卷积,p=1
第四步:将第三步中获取的所有特征(p*)使用cat 操作

模型输出处理

以下为DBHead的流程图:
在这里插入图片描述
可以发现,模型输出包括两个部分:probablity map 与 threshold map两个部分,模型通过这两个部分可以获得binary map。这里是借鉴了图像二值化的思想(这个在下面单独介绍),在训练时,通过该方法,使得梯度可以传播;推理时,则直接输出probality map(可通过设定的thresh 参数进行二值化处理,在通过轮廓确定最小外接框)。以下为DB Head 的推理代码
在这里插入图片描述

DBNet的二值化处理
  1. 标准二值化:对于一个大小为WxH (图的高为H,宽为W)的概率图P来说,使用下式来将概率图中的每个像素进行二值化:
    在这里插入图片描述
  2. 可微二值化
    由于标准二值化不可微,无法参与模型训练,因此对标准二值化做了修改,公式如下:在这里插入图片描述
    其中P(i,j)为probablity map特征图中索引为(i,j)的值,T(i,j)为threshold map特征图中索引为(i,j)的值。这样,就将不可微的二值化操作变成了可微操作
    在这里插入图片描述
损失函数

DBNet 损失函数由三部分组成,其在论文中的定义如下:
在这里插入图片描述
其分别对应DBNet 的三个特征图,在原文中,Ls与Lb都使用BCE loss ,Lb则使用L1 loss,在Paddleocr的实现中,Lb的损失函数改为了dice loss。如下图:
在这里插入图片描述

标签生成

概率图标签生成
其中概率图(probablity map)与二值图(binary map)是使用了PSENet的方法生成的掩码(通过计算文本轮廓的缩放距离,通过以下公式计算 D = A ∗ ( 1 − r ) L D=\frac{A*(1-r)}{L} D=LA(1r),其中A为轮廓面积,L为轮廓周长,计算得到D后,将轮廓缩小D个像素),
paddleoc中实现代码如下:
在这里插入图片描述
其输出有两个,表示原本轮廓点的二值图shrink_mask以及缩放后的二值图shrink_map
阈值图标签生成
按如下步骤执行

  1. 与计算概率图标签相同,使用 D = A ∗ ( 1 − r 2 ) L D=\frac{A*(1-r^2)}{L} D=LA(1r2)计算缩放的距离,将标注轮廓 G G G放大到 G s G_s Gs,
  2. 计算 G s G_s Gs中到四条边的最近距离,保存到distance_map。
  3. 将2中得到的距离除以偏移量D进行归一化,并将范围限制在[0,1]之间,记为 D m D_m Dm
  4. 最后计算阈值图的 T m = ( 1 − D m ) ∗ ( t h r e s h ( m a x ) − t h r e s h ( m i n ) ) + t h r e s h ( m i n ) T_m=(1-D_m)*(thresh(max)-thresh(min))+thresh(min) Tm=(1Dm)(thresh(max)thresh(min))+thresh(min),其中 t h r e s h ( m a x ) thresh(max) thresh(max)为0.7, t h r e s h ( m i n ) thresh(min) thresh(min)为0.3

以下为轮廓内点计算到最近边界的距离实现
在这里插入图片描述
下面是绘制的阈值标签的可视化图。
在这里插入图片描述

2. SAST

模型介绍

该算法为百度自研算法,已在paddleocr开源。用于任意形状的文本检测,主要解决了一下两个问题:

  1. 相距紧密的文本无法通过分割分离。
  2. 长文本容易被分成多个片段。
方法介绍

模型提出了一个基于分割的one-shot的任意文件检测器,它将高层次的目标知识和低层次的像素信息融合在一个镜头中,以高精度和高效的方式检测任意形状的场景文本。那么是如何实现的呢?模型在图像的高层特征中,提取出四种文本属性,分别为:文本中心线(TCL)、文本边界偏移(TBO)、文本中心偏移(TCO)、文本顶点偏移(TVO)。
在这篇文章中,我们提取文本区域的中心线TCL特征图,并且使用回归几何特征来重建文本实例的精确表示。回归几何特征如TBO,表示TCL特征中的每个像素与其对应的上下边界的对应点的偏移量。更加精确的说,如下图描述的那样,表达规则主要分为两步:文本中心点采样和边界点提取。首先我们在文本中心线从左到右等距采样n个点。通过进一步的运算,我们可以根据TCL中的采样点,在TBO中同一位置确定出相应的边界点对儿。把所有的点按照顺时针的方向链接起来,我们能够获得一个完整的文本多边形表示。与其将n设置为固定的数量,我们通过中心线长度与边界偏移对的平均偏移长度之比来自适应的设置n。几个在弯曲文本数据集上的实验证明了我们的方法对于任意形状的文本实例是有效和灵活的。
在这里插入图片描述

那如何获取模型需求的4种特征呢?文本实例分割的第一步是利用TCLTVO特征图检测出候选文本四边形。类似EAST算法,我们将TCL特征图二值化,所有的像素值在[0, 1]之间,给定一个阈值,使用TVO特征图提供的四个顶点偏移来恢复相应的四边形边界。当然,NMS被用于抑制过度的候选框。最终的四边形候选框展示在下图中。这些候选四边形可以被认为依赖高级知识。文本实例分割中的第二个也是最后一个步骤是将二进制TCL特征图中的映射文本区域聚类成为文本实例。如下图3c所示,TCO特征图是指向边界框中心TCL中像素的的偏移量的像素级预测。我们假设属于同一文本实例的TCL特征图中的像素指向同一个对象级别的中心(候选文本框四边形),通过将响应像素分配给第一步中生成的四边形框,将TCL映射聚类成多个文本实例。下图4d为TBO特征提取,与TCO不同的是,参照物从四边形中心变为四边形的四个角点。此外,我们不关心第一步生成的文本框是否完全包围输入图像的文本区域,并且预测框之外的像素将大部分分配给相应的文本实例。因为集成了高级别目标知识和低级别的像素信息,候选的后处理聚类TCL特征图中的每个像素到它所匹配的最佳文本实例。并且能够帮助不仅仅分隔近距离的文本实例,也能够在处理长文本时减少文本实例的分割问题。
在这里插入图片描述

代码标注

paddleocr 实现SAST代码标注

3. PGNet

模型介绍

在这里插入图片描述
PGNet为端到端的文本识别模型,可处理不规则文本。其模型流程如上图所示。描述如下:

  1. 输入图像首先经过一个特征提取网络,输出包括4个部分:a). TBO(文本上下界) b). TCL(文本中线特征图,确定文本行中线) c). TDO(文本方向特征图,确定文本方向,用于2D的CTC实现) d). TCC(文本类型特征图)

识别模型

1. CTC

(1). CRNN

编码器介绍

CRNN的模型结构为:backbone + Encode + CTC Head,这里的backbone 使用的为ResNet, Encode 使用的为Sequence Encode,模型输出使用的是CTC结构。
下图为CRNN的编码器paddleocr 代码实现
在这里插入图片描述
以下为CTC Head 结构 paddleocr 代码实现
在这里插入图片描述

CTC loss :
原理推导可在下面链接查看
CTC 原理介绍:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/477120?site
推荐阅读
相关标签
  

闽ICP备14008679号