OCR系列——文本检测任务

article/2025/9/10 21:15:50

1. 简介

文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务,目标检测不仅要解决定位问题,还要解决目标分类问题。

目标检测和文本检测同属于“定位”问题。但是文本检测无需对目标分类,并且文本形状复杂多样。

当前所说的文本检测一般是自然场景文本检测,其难点在于:

  • 自然场景中文本具有多样性:文本检测受到文字颜色、大小、字体、形状、方向、语言、以及文本长度的影响;
  • 复杂的背景和干扰;文本检测受到图像失真,模糊,低分辨率,阴影,亮度等因素的影响;
  • 文本密集甚至重叠会影响文字的检测;
  • 文字存在局部一致性,文本行的一小部分,也可视为是独立的文本;

2. 算法分类

3. 算法详解

3.1 基于回归的文本检测

早期基于深度学习的文本检测算法是从目标检测的方法改进来的,支持水平文本检测。常见方法有TextBoxes、CTRN等,随着数据集的丰富,后期又增加了倾斜文本检测和弯曲文本检测。

(1)水平文本检测

TextBoxes根据SSD改进的,将默认的文本框更改为适应文本方向和宽高比的规格的四边形,特点有

 CTPN是基于Fast-RCNN算法,扩展RPN模块并且设计了基于CRNN的模块让整个网络从卷积特征中检测到文本序列,二阶段的方法通过ROI Pooling获得了更准确的特征定位。

(2)任意角度文本检测

TextBoxes++在TextBoxes基础上进行改进,支持检测任意角度的文本。从结构上来说,TextBoxes++针对多角度文本进行检测,首先修改预选框的宽高比,调整宽高比aspect ratio为1、2、3、5、1/2、1/3、1/5。其次是将1∗51*51∗5的卷积核改为3∗53*53∗5,更好的学习倾斜文本的特征;最后,TextBoxes++的输出旋转框的表示信息。

EAST针对倾斜文本的定位问题,提出了two-stage的文本检测方法,包含 FCN特征提取和NMS部分。EAST提出了一种新的文本检测pipline结构,可以端对端训练并且支持检测任意朝向的文本,并且具有结构简单,性能高的特点。FCN支持输出倾斜的矩形框和水平框,可以自由选择输出格式。

  • 如果输出检测形状为RBox,则输出Box旋转角度以及AABB文本形状信息,AABB表示到文本框上下左右边的偏移。RBox可以旋转矩形的文本。
  • 如果输出检测框为四点框,则输出的最后一个维度为8个数字,表示从四边形的四个角顶点的位置偏移。该输出方式可以预测不规则四边形的文本。

MOST提出TFAM模块动态的调整粗粒度的检测结果的感受野,另外提出PA-NMS根据位置信息合并可靠的检测预测结果。此外,训练中还提出 Instance-wise IoU 损失函数,用于平衡训练,以处理不同尺度的文本实例。该方法可以和EAST方法结合,在检测极端长宽比和不同尺度的文本有更好的检测效果和性能。

(3)弯曲文本检测

简单思路是用多点坐标描述弯曲文本的边界多边形,然后直接预测多边形的顶点坐标。

CTD提出了直接预测弯曲文本14个顶点的边界多边形,网络中利用Bi-LSTM层以细化顶点的预测坐标,实现了基于回归方法的弯曲文本检测。

LOMO针对长文本和弯曲文本问题,提出迭代的优化文本定位特征获取更精细的文本定位,该方法包括三个部分,坐标回归模块DR,迭代优化模块IRM以及任意形状表达模块SEM。分别用于生成文本大致区域,迭代优化文本定位特征,预测文本区域、文本中心线以及文本边界。迭代的优化文本特征可以更好的解决长文本定位问题以及获得更精确的文本区域定位。

Contournet基于提出对文本轮廓点建模获取弯曲文本检测框,该方法首先使用Adaptive-RPN获取文本区域的proposal特征,然后设计了局部正交纹理感知LOTM模块学习水平与竖直方向的纹理特征,并用轮廓点表示,最后,通过同时考虑两个正交方向上的特征响应,利用Point Re-Scoring算法可以有效地滤除强单向或弱正交激活的预测,最终文本轮廓可以用一组高质量的轮廓点表示出来。

PCR提出渐进式的坐标回归处理弯曲文本检测问题,总体分为三个阶段,首先大致检测到文本区域,获得文本框,另外通过所设计的Contour Localization Mechanism预测文本最小包围框的角点坐标,然后通过叠加多个CLM模块和RCLM模块预测得到弯曲文本。该方法利用文本轮廓信息聚合得到丰富的文本轮廓特征表示,不仅能抑制冗余的噪声点对坐标回归的影响,还能更精确的定位文本区域。

3.2 基于分割的文本检测

基于回归的方法虽然在文本检测上取得了很好的效果,但是对解决弯曲文本还存在问题,且模型复杂。因此,提供了基于分割的文本检测方法,先从像素层面做分类,判别每一个像素点是否属于一个文本目标,得到文本区域的概率图,通过后处理方式(opencv,polygon等后处理)得到文本分割区域的包围曲线。

Pixellink采用分割的方法解决文本检测问题,分割对象为文本区域,将同属于一个文本行(单词)中的像素链接在一起来分割文本,直接从分割结果中提取文本边界框,无需位置回归就能达到基于回归的文本检测的效果。但是基于分割的方法存在一个问题,对于位置相近的文本,文本分割区域容易出现“粘连“问题。Wu, Yue等人[8]提出分割文本的同时,学习文本的边界位置,用于更好的区分文本区域。另外Tian等人[9]提出将同一文本的像素映射到映射空间,在映射空间中令统一文本的映射向量距离相近,不同文本的映射向量距离变远。

MSR针对文本检测的多尺度问题,提出提取相同图像的多个scale的特征,然后将这些特征融合并上采样到原图尺寸,网络最后预测文本中心区域、文本中心区域每个点到最近的边界点的x坐标偏移和y坐标偏移,最终可以得到文本区域的轮廓坐标集合。

针对基于分割的文本算法难以区分相邻文本的问题,PSENet提出渐进式的尺度扩张网络学习文本分割区域,预测不同收缩比例的文本区域,并逐个扩大检测到的文本区域,该方法本质上是边界学习方法的变体,可以有效解决任意形状相邻文本的检测问题。

假设用了PSENet后处理用了3个不同尺度的kernel,如上图s1,s2,s3所示。首先,从最小kernel s1开始,计算文本分割区域的连通域,得到(b),然后,对连通域沿着上下左右做尺度扩张,对于扩张区域属于s2但不属于s1的像素,进行归类,遇到冲突点时,采用“先到先得”原则,重复尺度扩张的操作,最终可以得到不同文本行的独立的分割区域。

Seglink++针对弯曲文本和密集文本问题,提出了一种文本块单元之间的吸引关系和排斥关系的表征,然后设计了一种最小生成树算法进行单元组合得到最终的文本检测框,并提出instance-aware 损失函数使Seglink++方法可以端对端训练。

PAN针对文本检测预测速度慢的问题,从网络设计和后处理方面进行改进,提升算法性能。首先,PAN使用了轻量级的ResNet18作为Backbone,另外设计了轻量级的特征增强模块FPEM和特征融合模块FFM增强Backbone提取的特征。在后处理方面,采用像素聚类方法,沿着预测的文本中心(kernel)四周合并与kernel的距离小于阈值d的像素。PAN保证高精度的同时具有更快的预测速度。

FCENet提出将文本包围曲线用傅立叶变换的参数表示,由于傅里叶系数表示在理论上可以拟合任意的封闭曲线,通过设计合适的模型预测基于傅里叶变换的任意形状文本包围框表示,从而实现了自然场景文本检测中对于高度弯曲文本实例的检测精度的提升。

DBNet提出可微分阈值(Differenttiable Binarization module)采用动态的阈值区分文本区域和背景。通过网络去预测图片每个位置处的阈值,而不是采用一个固定的值,更好的分离文本背景与前景。

 在传统的图像分割算法中,获取概率图后,会使用标准二值化(Standard Binarize)处理,但是二值化的方法是不可微的(可微的定义:左右极限存在,且相等),无法进行end to end 训练,公式为

 可微二值化将标准二值化中的阶跃函数进行了近似,公式为

 其中,P是上下文获得的概率图(Probability Map),T是上下文获得的阈值图(Threshold Map),k是增益因子,然后得到近似二值图(Approximate Binary Map),当损失函数为交叉熵损失函数时,正负样本的loss是

 对x求偏导:

 DB模型主要分为三个部分:

  • Backbone网络,负责提取图像的特征

DB文本检测网络的Backbone部分采用的是图像分类网络,可以是ResNet,MobileNetV3等模型,,DB的Backbone用于提取图像的多尺度特征,如下代码所示,假设输入的形状为[640, 640],backbone网络的输出有四个特征,其形状分别是 [1, 16, 160, 160],[1, 24, 80, 80], [1, 56, 40, 40],[1, 480, 20, 20],使用方法:

from ppocr.modeling.backbones.det_mobilenet_v3 import MobileNetV3model_backbone = MobileNetV3()
model_backbone.eval()#打印网络结构
print(model_backbone)
  • FPN网络,特征金字塔结构增强特征,FPN网络的输入为Backbone部分的输出,输出特征图的高度和宽度为原图的四分之一。

图像处理的两种方式:上采样(upsample)和下采样(downsample),上采样是增大图像,下采样是缩小图案。这里的upsample是获取将较小特征上采样和大特征进行累加。

  • Head网络,计算文本区域概率图,文本区域阈值图以及文本区域二值图。

import math
import paddle
from paddle import nn
import paddle.nn.functional as F
from paddle import ParamAttrclass DBHead(nn.Layer):"""Differentiable Binarization (DB) for text detection:see https://arxiv.org/abs/1911.08947args:params(dict): super parameters for build DB network"""def __init__(self, in_channels, k=50, **kwargs):super(DBHead, self).__init__()self.k = k# DBHead详细实现参考 https://github.com/PaddlePaddle/PaddleOCR/blob/release%2F2.4/ppocr/modeling/heads/det_db_head.pydef step_function(self, x, y):# 可微二值化实现,通过概率图和阈值图计算文本分割二值图return paddle.reciprocal(1 + paddle.exp(-self.k * (x - y)))def forward(self, x, targets=None):shrink_maps = self.binarize(x)if not self.training:return {'maps': shrink_maps}threshold_maps = self.thresh(x)binary_maps = self.step_function(shrink_maps, threshold_maps)y = paddle.concat([shrink_maps, threshold_maps, binary_maps], axis=1)return {'maps': y}

其他模块:

  • DB模型后处理

DB后处理函数根据概率图中文本区域的响应计算出包围文本响应区域的文本框坐标。由于网络预测的概率图是经过收缩后的结果,所以在后处理步骤中,使用相同的偏移值将预测的多边形区域进行扩张,即可得到最终的文本框。

DB的输出结果是文本区域的二值图,属于文本区域的响应更高,非文本的背景区域响应值低。DB的后处理即是求这些响应区域的最小包围框,进而得到每个文本区域的坐标。 另外,通过修改后处理参数可以调整文本框的大小,或者过滤检测效果差的文本框。

DB后处理有四个参数,分别是:

  • thresh: DBPostProcess中分割图进行二值化的阈值,默认值为0.3
  • box_thresh: DBPostProcess中对输出框进行过滤的阈值,低于此阈值的框不会输出
  • unclip_ratio: DBPostProcess中对文本框进行放大的比例
  • max_candidates: DBPostProcess中输出的最大文本框数量,默认1000
  • 损失函数定义

模型输出是3个预测图,则总得损失函数是

 其中,L是总损失函数,Lb是文本二值图的损失函数,Ls是概率图损失,Lt是阈值图损失,是权重系数。

 Lb是Dice Loss,比较文本二值图和标签之间的相似度,常用于二值图分割。

 Ls是Dice Loss(OHEM),采用带OHEM的Dice Loss,目的是为了改善正负样本不均衡的问题。OHEM为一种特殊的自动采样方式,可以自动的选择难样本进行loss的计算,从而提升模型的训练效果。这里将正负样本的采样比率设为1:3。

Lt是Mask L1 Loss,计算预测的文本阈值图和标签间的L1距离。

  • 评估指标

文本检测的计算指标有三个,分别是Precision,Recall和Hmean,三个指标的计算逻辑为:

  • 创建[n, m]大小的一个矩阵叫做iouMat,其中n为GT(ground truth)box的个数,m为检测到的框数量;其中n,m为除去了文本标定为###的框数量;
  • 在iouMat中,统计IOU大于阈值0.5的个数,将这个值除以gt个数n得到Recall;
  • 在iouMat中,统计IOU大于阈值0.5的个数,将这个值除以检测框m的个数得到Precision;
  • Hmean的指标计算方式同F1-score的计算方式,公式如下:

4.存在问题

(1)文字漏检

 原因,GT和预测框的重叠部分小,则可以增加IOU阈值,缩小GT和预测框的差距。另外,漏检测的本质原因在于,一部分文字的特征没有响应,归根结底是网络没有学习到漏检测部分文字的特征。建议具体问题具体分析,可视化预测结果分析漏检测的原因,是否是因为光照,形变,文字较长等因素导致的,然后针对性的使用数据增强、调整网络、或者调整后处理等方法优化检测结果。

参考:

飞桨AI Studio - 人工智能学习与实训社区集开放数据、开源算法、免费算力三位一体,为开发者提供高效学习和开发环境、高价值高奖金竞赛项目,支撑高校老师轻松实现AI教学,并助力开发者学习交流,加速落地AI业务场景https://aistudio.baidu.com/aistudio/projectdetail/3335972


http://chatgpt.dhexx.cn/article/bPOx1WBi.shtml

相关文章

文本检测(Text Detection)简要综述

文章目录 检测(Detection)在计算机视觉中的位置检测任务经典数据集评价指标发展历史什么叫Anchor检测架构RPNFPN(特征金字塔网络) 几个文本检测的较新方法FOTS(【2018CVPR】Fast Oriented Text Spotting with a Unified Network)TextSnake(【2018ECCV】 TextSnake: A Flexible …

思维导图——线性代数知识点总结

线性代数知识点总结 期末,总结了线性代数的相关知识点。

线性代数知识点总结,基础概念和计算整理(手写版)

线性代数中一定必须要掌握的基础概念和计算的整理,简单易懂,适合入门和复习。

线性代数基础知识点回顾与总结(一):行列式与矩阵

线性代数基础知识点回顾与总结(一):行列式与矩阵 介绍 骨骼图 1.行列式 排列: 1,2,,n组成的有序数组称为n阶排列。 逆序:大数排在小数前。自然排列为偶排列。 n阶行列式的值等于不同行的n…

线性代数-行列式知识总结

1、知识脉络如图 2、二阶与三阶行列式 (1)定义略 (2)二阶行列式与三阶行列式的计算“对角线法则”,三阶可降为二阶(方便计算) 如图 注意符号 (3)行列式线性方程组的关系 …

深度学习涉及到的线性代数知识点总结(二)

文章目录 一、余弦相似度和欧式距离的关系二、相关性三、基四、线性变换五、仿射变换六、矩阵特征方程七、相似矩阵八、奇异值分解九、谱范数 一、余弦相似度和欧式距离的关系 如果对向量模长进行归一化,欧式距离和余弦相似度有如下计算关系: ● 适用场…

线性代数矩阵知识点

文章目录 (一),矩阵的基本概念1,矩阵的定义 (二),矩阵的运算1,矩阵的加减法2,数与矩阵的乘法3,矩阵的乘法4,矩阵的转置5,方阵的行列式…

线性代数知识图谱

1. 线性代数知识图谱 线性代数是代数学的一个分支,主要处理线性关系问题。线性关系意即数学对象之间的关系是以一次形式来表达的。例如,在解析几何里,平面上直线的方程是二元一次方程;空间平面的方程是三元一次方程,而…

基础线性代数知识点总结与回顾(二):秩与线性相关

基础线性代数知识点总结与回顾(二):秩与线性相关 骨骼图 秩 矩阵的秩: 若矩阵的r阶子式不为0,r1阶子式全为0,则称矩阵的秩为r。 定理:经过初等变换,矩阵的秩不变。 推论 秩的…

大一线性代数知识点总结

行列式和矩阵的加法和乘法的比较 伴随矩阵的一些性质 以下是全部知识点总结 线性方程组的系数行列式为零时,不能用克拉默法则解方程组,因为此时方程组的解为无解或有无穷多个解。 克拉默法则解线性方程组的两个条件: 方程个数等于未知量个数…

线性代数知识总结梳理

目录 1.行列式计算 2.矩阵 3.向量与方程组 4.特征值 5.二次型 1.行列式计算 2.矩阵 3.向量与方程组 4.特征值 5.二次型

基础线性代数知识点总结与回顾(三):向量空间和二次型

基础线性代数知识点总结与回顾(三):向量空间和二次型 骨骼图: 向量空间 对加法、数乘封闭。 W——n维向量的非空集合,且满足: 则:W为n维向量空间的子空间。 如果向量空间V中的向量(a1,a2,a…

线性代数知识点总结之行列式

线性代数知识点总结之行列式 本章知识图解: 对图解的初级补充与完善 1.1.1.1.1.1.排列:一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排…

基础线性代数知识点总结与回顾(四):线性空间

基础线性代数知识点总结与回顾(四):线性空间 骨骼图: #其实,线性空间是向量空间内容的扩展。 首先我把向量空间的内容截图搬过来,便于你们的比较与对照。 线性空间 设V是实数域k上的线性空间&#xff…

线性代数知识点总结

1 行列式 (一)行列式概念和性质 1、逆序数:所有的逆序的总数 2、行列式定义:不同行不同列元素乘积代数和 3、行列式性质:(用于化简行列式) (1)行列互换(…

线性代数知识点整理

目录 前言 一.行列式 1.行列式求值 2.七大性质 3.特殊行列式的值 二.矩阵及其运算 1.行列向量: 2.可逆矩阵: 3.常用性质: 4.伴随矩阵: 三.矩阵的初等变换和线性方程组 1.初等变换: 2.矩阵的秩:定…

线性代数知识汇总

1. 线性代数知识图谱 线性代数是代数学的一个分支,主要处理线性关系问题。线性关系意即数学对象之间的关系是以一次形式来表达的。例如,在解析几何里,平面上直线的方程是二元一次方程;空间平面的方程是三元一次方程,…