OCR文本识别算法---SVTR

论文题目:SVTR: Scene Text Recognition with a Single Visual Model

OCR文本识别旨在将自然图像中的文本转录为数字字符序列,以传达对场景理解至关重要的高层语义信息。该任务具有挑战性,原因在于文本变形、字体、遮挡、杂乱背景等的变化。在过去的几年中,人们做出了许多努力来提高识别准确性。现代文本识别器除了准确性外,还考虑到了推理速度等因素,以满足实际需求。在方法上,文本识别可以被视为从图像到字符序列的跨模态映射。通常,识别器由两个构建模块组成:用于特征提取的视觉模型和用于文本转录的序列模型。例如,基于CNN-RNN的模型首先使用CNN进行特征提取,然后,将特征重塑为序列,并通过BiLSTM和CTC损失进行建模以进行预测,它们具有高效性,并且仍然是一些商业识别器的选择。然而,这种方法对于文本的扰动(如变形、遮挡等)很敏感,限制了它们的有效性。

SVTR是一种一阶段文本识别模型,主要通过局部和全局特征提取的方式实现文本识别,具有速度快识别准确率高的特点,百度的ppocrv3/v4的基础模型就是SVTR,当然百度的模型针对svtr的不足,做了适当的优化。
svtr整体结构

上图是svtr的整体结构图,由于我长期做的是语义分割的方向,所以看到这个结构我没有太大的感触吧,svtr就是一个编码器+一个分类器的组合,整体比较简洁,相比CRNN这种特征提取模型+序列模型的组合,这种方法速度显然更快。

SVTR的输入参考了VIT的图像分块形式,只是它是使用了重叠块的的卷积形式,然后是使用了2层卷积,文章中说是为了渐进式进行特征提取,我觉得很牵强,硬挤出的创新点,而且patch重叠的方式语义分割很多算法都在使用。svtr通过2层卷积快速下采样4倍用于后续的特征提取。
pactch生成方法.png

第二个创新点是后续只对高度进行下采样,宽度不变进行特征提取。通常,大多数图像文本以水平或接近水平的方式出现。压缩高度维度可以为每个字符建立一个多尺度表示,同时不影响宽度维度上的补丁布局。因此,在各个阶段中,不会增加将相邻字符编码到同一个组件的可能性。最后通过一个全局平均池化层直接将高度压到1,进行最后的分类。

第三个创新点也是最主要的,就是类transfomrer特征提取模块,由于文字识别需要考虑到局部细微和全局宏观特征,细微特征比如一些相似字符如‘B’和‘8’、‘z’和‘2’、‘大’和‘太’等等,它们在形状上相似,但是在笔画上具有细微的差异,因此模型应具备关注字符笔画细节特征的能力,以更加准确的区分相似字符。全局特征是指对于文本图像中的所有字符,它们不是相互孤立的,存在内在的联系,因此要求单视觉模型可以建立多个字符的长距离全局依赖;进一步的,图像文本包含了文本区域和非文本区域,因此在建立文本(多个字符)的全局特征基础上,需区分文本区域和非文本区域。这个特征提取块里面有2种形式,一种是全局特征提取块,它其实就是纯tranformer模块,主要用来代替常规序列模型,来建立字符与相邻字符的内在联系。另一种是局部特征提取块,主要是对当前像素周围的一块区域进行特征提取,代码中是7x11大小区域,它这个局部提取的实现借鉴了swim的变换,主要以mask的形式计算,这也是这个算法的缺点所在,这个局部特征提取在实际运行中相对比较耗时。我看论文的时候就在想干嘛不直接用卷积代替,后来我想明白了,估计是为了写论文需要吧。
PP-OCRV3/4中将局部特征提取块使用了PP-LCNetV3的方法,虽然修改后的精度相比原生的SVTR相比低一点,但是速度有巨大提升,对于各种场景都具有非常高的使用价值。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容