端到端文本检测与识别——FOTS

FOTS是一种快速的端到端文本检测与识别模型,它将文本检测和识别整合在一个统一的网络中,显著提高了处理效率和准确性。通过RoIRotate操作,FOTS能有效处理任意方向的文本,实验证明其在ICDAR2015等数据集上的表现超越了当前最佳方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/u013063099/article/details/89236368



常见的深度学习OCR过程中,会把文本检测与文本识别拆分成两个部分,通过先检测后识别的方法对图片中的文本进行OCR识别。在商汤的paper中,一种新的端到端快速检测识别模型给了我们一个很大的惊喜。

 

【论文题目】FOTS: Fast Oriented Text Spotting with a Unified Network

【摘要】偶然的场景文本定位被认为是文档分析社区中最困难和最有价值的挑战之一。大多数现有方法将文本检测和识别视为单独的任务。在这项工作中,我们提出了一个统一的端到端可训练的快速定向文本定位(FOTS)网络,用于在两个互补任务之间同时检测和识别,共享计算和视觉信息。特别地,引入RoIRotate以在检测和识别之间共享卷积特征。受益于卷积分析策略,与基线文本检测网络相比,我们的FOTS具有很少的计算开销,并且联合训练方法学习更多通用特征以使我们的方法比这两个阶段方法表现更好。 ICDAR 2015,ICDAR 2017 MLT和ICDAR 2013数据集上的实验证明,所提出的方法显着优于最先进的方法,这进一步使我们能够开发出第一个面向实时的文本定位系统在保持22.6 fps的同时,ICDAR 2015文本定位任务超过了所有先前的最新成果超过5%。

【亮点】端到端快速文本检测识别、提出了RoIRotate

 

FOTS是一个快速的端到端的集成检测+识别的框架,和其他two-stage的方法相比,FOTS具有更快的速度。FOTS通过共享训练特征,互补监督,从而压缩了特征提取所占用的时间。

上图,蓝色框为FOTS,红色框为其他two-stage方法,可以看出FOTS消耗的时间是two-stage时间的一半。

 

1  模型整体结构

FOTS的整体结构由四部分组成。分别是:卷积共享特征(shared convolutions),文本检测分支(the text detection branch), RoIRotate操作(RoIRotate operation),文本识别分支(the text recognition branch)。

 

2  四部分结构及实现细节

2.1  卷积共享(shared convolutions)

共享网络的主干是 ResNet-50。 受FPN的启发,我们连接了低级特征映射和高级语义特征映射。 共享卷积产生的特征图的分辨率是输入图像的1/4。

FOTS的基础网络结构为ResNet-50,共享卷积层采用了类似U-net的卷积的共享方法,将底层和高层的特征进行了融合。这部分和EAST中的特征共享方式一样。最终输出的特征图大小为原图的1/4。

2.2  文本检测分支(the text detection branch)

受EAST与DDRN的启发,我们采用完全卷积网络作为文本检测器。 由于自然场景图像中有许多小文本框,我们将共享卷积中原始输入图像的1/32到1/4大小的特征映射放大。 在提取共享特征之后,应用一个转换来输出密集的每像素的单词预测。 第一个通道计算每个像素为正样本的概率。 与EAST类似,原始文本区域的缩小版本中的像素被认为是正的。 对于每个正样本,以下4个通道预测其到包含此像素的边界框的顶部,底部,左侧,右侧的距离,最后一个通道预测相关边界框的方向。 通过对这些正样本应用阈值和NMS产生最终检测结果。

这一部分与EAST相同。损失函数包括了分类的loss(Cross Entropy Loss)和坐标的回归的loss(IOU Loss)。实验中的平衡因子,λreg =1。

2.3  RoIRotate操作(RoIRotate operation)

这一部分的主要功能,将有角度的文本块,经过仿射变换,转化为正常的轴对齐的文本块。

在这项工作中,我们修正输出高度并保持纵横比不变以处理文本长度的变化。对比RRoI,其通过最大池化将旋转的区域转换为固定大小的区域,而本文使用双线性插值来计算输出的值。避免了RoI与提取特征不对准,使得输出特征的长度可变,更加适用于文本识别。这个过程分为两个步骤:①通过文本提议的预测或ground truth坐标计算仿射变换参数。②将仿射变换分别应用于每个区域的共享特征映射,并获得文本区域的正常情况下水平的特征映射。

第①步中的计算:

M:仿射变换矩阵,包含旋转,缩放,平移

Ht:仿射变换后的特征图的高度,实验中为8

wt:仿射变换后的特征图的宽度

(x,y):特征图中的点的位置

(t; b; l; r) :特征图中的点距离旋转的框的上下左右的距离

θ:检测框的角度

第②步中的计算:

Vcij:在位置(i,j),通道c处的输出值。

Ucnm:在位置(i,j),通道c处的输入值。

hs:输入的高度

ws:输入的宽度

Φx, Φy :双线性插值的核的参数

2.4  文本识别分支(the text recognition branch)

文本识别分支旨在使用由共享卷积提取并由RoIRotate转换的区域特征来预测文本标签。 考虑到文本区域中标签序列的长度,LSTM的输入特征沿着宽度轴通过原始图像的共享卷积仅减少两次。 否则,将消除紧凑文本区域中的可辨别特征,尤其是窄形字符的特征。 我们的文本识别分支包括类似VGG的顺序卷积,仅沿高度轴减少的汇集,一个双向LSTM,一个完全连接和最终的CTC解码器。

这一部分主要是与CRNN类似,结构如下图所示。

FOTS最终的损失函数是检测+识别的loss,λrecog=1。

2.5  实现细节

我们使用ImageNet数据集训练的模型作为我们预先训练的模型。 训练过程包括两个步骤:首先我们使用Synth800k数据集训练网络10个epoch,然后采用实际数据对模型进行微调直到收敛。 不同的任务采用不同的训练数据集。 ICDAR 2015和ICDAR 2017 MLT数据集中的一些模糊文本区域被标记为“DO NOT CARE”,我们在训练中忽略它们。
数据增强对于深度神经网络的鲁棒性很重要,特别是当真实数据的数量有限时。 首先,图像的较长边从640像素调整为2560像素。 接下来,图像随机旋转[-10°,10°]范围。 然后,图像的高度以0.8到1.2的比例重新缩放,同时它们的宽度保持不变。 最后,从变换的图像中裁剪640×640个随机样本。

 

3  实验效果

3.1  ICDAR2015结果

3.2  ICDAR2017 MLT结果

3.3  ICDAR2013结果

3.4  速度和模型大小

 

4  总结

FOTS一个检测+识别一体化的框架,具有模型小,速度快,精度高,支持多角度等特点。大大减少了这四种类型的错误(Miss:遗漏了一些文本区域;False:将一些非文本区域错误地视为文本区域;Split:错误地将整个文本区域拆分为多个单独的部分;Merge :错误地将几个独立的文本区域合并在一起)。

 

参考文献

[1]论文原文:https://arxiv.org/pdf/1801.01671.pdf

[2]文字检测+识别之FOTS:https://blog.youkuaiyun.com/qq_14845119/article/details/84635847

[3]PyTorch实现:https://github.com/jiangxiluning/FOTS.PyTorch

<think>嗯,用户想了解在复杂场景下进行文本区域的分割识别的OCR算法技术实现。首先,我需要回顾一下相关的知识,并结合提供的引用资料来组织答案。 首先,根据引用2和3,预处理阶段非常重要,包括灰度化、二值化、降噪等操作。这些步骤有助于提升图像质量,减少干扰。然后,可能需要提到边缘检测,比如使用Sobel算子,如引用3所述。不过,复杂场景可能有更多噪声和干扰,所以预处理可能需要更高级的方法,比如自适应二值化或者使用深度学习的去噪方法。 接下来,文本区域分割。传统方法可能基于连通域分析或滑动窗口,但在复杂场景下效果可能不佳。现在主流的应该是基于深度学习的方法,比如使用FCN、U-Net这样的分割网络。引用2提到基于分割的方法是不需要单字符分割的,而是将整个文本行视为整体,这可能涉及到实例分割,比如Mask R-CNN之类的模型。不过用户的问题是关于分割识别,所以需要区分文本检测(分割)和识别两个阶段。 文本检测部分,可能需要介绍CTPN、EAST、DBNet等算法。特别是DBNet(可微分二值化)在复杂场景下表现较好,能够处理不同形状的文本。这里可以结合引用2中的无需分割的识别算法,但检测阶段可能还是需要分割出文本区域。 然后是特征提取,传统方法可能使用HOG、SIFT等,但现在基本都是用CNN,比如ResNet、VGG等作为骨干网络提取特征。引用2中提到特征提取阶段,可能包括使用CNN来获取高层次的特征表示。 接下来是序列建模,比如使用RNN、LSTM或Transformer来处理文本序列,特别是对于不规则文本(弯曲、旋转等),可能需要加入空间变换网络或注意力机制。引用1提到CTC算法的局限性,特别是在二维预测上的问题,所以可能现在的识别模型更多使用注意力机制,如Transformer-based模型,避免CTC的重复字符问题。 最后是预测转录阶段,传统方法用CTC,但现在可能结合注意力机制和语言模型进行纠错。引用1指出CTC的问题,比如计算消耗和重复字符,所以可以提到CRNN+CTC的改进版本,或者使用基于Transformer的识别模型。 此外,复杂场景下的挑战包括光照变化、模糊、遮挡、多语言、字体多样等,解决方案可能需要数据增强、合成数据、多任务学习等。例如,使用GAN生成合成数据来增强训练集。 还需要考虑端到端系统,比如同时做检测识别,如FOTS模型,这样可以在一个模型中完成,提高效率。引用2中的无需分割方法可能是指端到端识别,但检测识别有时还是分两个阶段。 可能还需要提到后处理,比如语言模型纠正识别错误,或者使用词典约束来提高准确率。 总结步骤应该是:预处理→文本检测(分割)→特征提取→序列建模→转录预测→后处理。每个步骤需要说明传统和深度学习方法,以及如何应对复杂场景的挑战。 最后生成相关问题的时候,可以围绕各个步骤的技术细节、不同方法的比较、挑战解决方案等。</think>### 复杂场景文本区域分割识别的OCR技术实现 #### 一、核心步骤技术实现 1. **图像预处理** - **灰度化二值化**: 将彩色图像转换为灰度图,并通过自适应阈值算法(如Otsu算法)分离前景背景,减少光照不均的影响[^3]。 - **降噪增强**: 使用中值滤波或基于深度学习的去噪网络(如DnCNN)消除噪声,并通过直方图均衡化增强对比度。 - **几何校正**: 对倾斜、扭曲的文本区域进行透视变换或TPS(薄板样条)变换[^2]。 2. **文本区域分割** - **基于深度学习的检测模型**: - **分割网络**: 使用U-Net、Mask R-CNN等分割网络直接生成文本区域掩码,适用于不规则文本(如弯曲、旋转文字)。 - **可微分二值化(DBNet)**: 通过动态阈值实现像素级文本检测,在复杂背景下鲁棒性更强[^2]。 - **传统方法补充**: 对低质量图像可结合MSER(最大稳定极值区域)算法提取候选区域。 3. **特征提取序列建模** - **卷积特征提取**: 采用ResNet、EfficientNet等骨干网络提取高阶特征,保留空间信息。 - **序列建模**: - **双向LSTM**: 捕捉文本序列的上下文依赖。 - **Transformer**: 通过自注意力机制处理长距离依赖,尤其适合多语言混合场景[^1]。 4. **文本识别转录** - **解码算法**: - **注意力机制+解码器**: 替代传统CTC,避免重复字符问题(如Transformer Decoder)。 - **语言模型融合**: 结合N-gram或BERT进行后处理纠错。 - **端到端模型**: 如FOTS(Fast Oriented Text Spotting)联合优化检测识别,提升效率。 #### 二、复杂场景的挑战解决方案 - **光照不均模糊** 使用对抗生成网络(如CycleGAN)合成多样化的训练数据,增强模型泛化能力。 - **不规则文本** 引入STN(空间变换网络)或TPS模块,对弯曲文本进行几何矫正。 - **多尺度文本** 采用特征金字塔(FPN)结构,融合多尺度特征图。 - **多语言混合** 设计统一字符集(如包含中英文字符),并采用多任务学习框架。 #### 三、代码示例(基于分割的文本检测) ```python import torch from mmdet.apis import init_detector, inference_detector # 加载预训练模型(以DBNet为例) config_file = 'dbnet/configs/dbnet_r50_fpnc_1200e_icdar2015.py' checkpoint_file = 'dbnet/checkpoints/dbnet_r50_fpnc_sbn_1200e_icdar2015_20210329-ba3ab597.pth' model = init_detector(config_file, checkpoint_file, device='cuda:0') # 执行推理 result = inference_detector(model, 'input_image.jpg') # 可视化结果 model.show_result('input_image.jpg', result, out_file='output.jpg') ``` #### 四、性能优化方向 - **轻量化设计**: 使用MobileNetV3或GhostNet替换骨干网络。 - **知识蒸馏**: 将大模型的知识迁移到小模型,保持精度同时提升速度。 - **硬件加速**: 通过TensorRT或OpenVINO部署模型,实现实时推理。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值