OCR 模型记录

文章目录

  • OCR算法
    • 检测类
      • 1. DBNet
        • 特征融合
        • 模型输出处理
          • DBNet的二值化处理
        • 损失函数
        • 标签生成
      • 2. SAST
        • 模型介绍
        • 方法介绍
        • 代码标注
      • 3. PGNet
        • 模型介绍
    • 识别模型
      • 1. CTC
      • (1). CRNN
        • 编码器介绍

OCR算法

检测类

1. DBNet

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

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

特征融合

以下为DBNet的FPN推理模块:
OCR 模型记录_第3张图片

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

模型输出处理

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

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

损失函数

DBNet 损失函数由三部分组成,其在论文中的定义如下:
OCR 模型记录_第8张图片
其分别对应DBNet 的三个特征图,在原文中,Ls与Lb都使用BCE loss ,Lb则使用L1 loss,在Paddleocr的实现中,Lb的损失函数改为了dice loss。如下图:
OCR 模型记录_第9张图片

标签生成

概率图标签生成
其中概率图(probablity map)与二值图(binary map)是使用了PSENet的方法生成的掩码(通过计算文本轮廓的缩放距离,通过以下公式计算 D = A ∗ ( 1 − r ) L D=\frac{A*(1-r)}{L} D=LA(1r),其中A为轮廓面积,L为轮廓周长,计算得到D后,将轮廓缩小D个像素),
paddleoc中实现代码如下:
OCR 模型记录_第10张图片
其输出有两个,表示原本轮廓点的二值图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

以下为轮廓内点计算到最近边界的距离实现
OCR 模型记录_第11张图片
下面是绘制的阈值标签的可视化图。
OCR 模型记录_第12张图片

2. SAST

模型介绍

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

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

方法介绍

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

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

代码标注

paddleocr 实现SAST代码标注

3. PGNet

模型介绍

OCR 模型记录_第15张图片
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 代码实现
OCR 模型记录_第16张图片
以下为CTC Head 结构 paddleocr 代码实现
OCR 模型记录_第17张图片

CTC loss :
原理推导可在下面链接查看
CTC 原理介绍:
OCR 模型记录_第18张图片

你可能感兴趣的:(OCR,深度学习,神经网络,ocr)