一:CRNN简介

CNN汉字识别结果python代码 cnn识别图片文字_深度学习

网络结构:

CNN + RNN + CTC

网络编码:

当输入一张尺寸归一化的图片 [32, 280, 3] ,其中32代表文本图片高度,280代表文本图片宽度,3代表文本图片通道数;经过CNN特征编码之后,高度5次2倍下采样变成1,宽度3次2倍下采样变成35,通道经过卷积变成512,最终CNN输出特征 [1, 35, 512];以此特征输入RNN网络,以35作为序列步长,通道数最终输出字符分类总数,假设字典字符总数为80,最终编码输出特征尺寸为 [1, 35, 80]。

网络解码:

训练过程使用CTCloss对[1, 35, 80]特征自动对齐真实标签。推理过程可以使用贪婪解码和束解码,贪婪解码是将每一步特征进行softmax输出概率最大字符作为识别结果;束解码是将每一步输出概率排名前k的字符都作为输出备选,最终以整个步长路径概率最大对应的字符串作为输出结果。

二:基于特征网络提高识别效果

第一部分简单介绍网络范式CNN+RNN+CTC,工程代码链接提供了VGG+BiLSTM+CTC的具体实践方式,在工程应用中,更多会使用残差结构网络ResNet或者DenseNet作为CNN部分的特征提取,虽然使用这些结构会提升网络效果,但同时带来了网络结构更复杂。RepVGG提供了一种更适合工程化的方法,在训练的时候使用类似ResNet的残差结构增加网络特征提取能力,推理的时候通过卷积核等效变化,“融合”了残差结构,简化了推理网络结构,因此CNN部分可以更换成RepVGG。

RepVGG:https://github.com/DingXiaoH/RepVGG

CNN汉字识别结果python代码 cnn识别图片文字_人工智能_02

https://github.com/DingXiaoH/RepVGG

注意:使用RepVGG做为识别backbone,官方代码在推理融合的时候只提供了CNN网络的处理,识别网络我们还要处理BiLSTM部分权重,可以按照下面方式处理即可:

CNN汉字识别结果python代码 cnn识别图片文字_深度学习_03

 

三:基于SWA提高识别效果

之前偶然看到一篇比较有意思的文章 SWA Object Detection。这篇文章全文无公式、无算法流程图,不改模型结构,不增加模型复杂度、推断时间,也不对数据进行增广。将其简单应用于主流的目标检测算法,可普遍在COCO数据集上获得 ~1 个AP的精度提升。好奇之下,将其迁移到了文本识别工程之中,目前实验来看,在部分识别任务确实有效果。

论文地址:https://arxiv.org/pdf/2012.12645.pdf

在文本识别中,可以如下使用生成reco_swa.pth:

CNN汉字识别结果python代码 cnn识别图片文字_计算机视觉_04

 

四:基于onnxruntime提高识别速度

在实际工程中,我们会将模型转换成onnx格式,使用onnxruntime来提高推理速度,一般在识别任务中,cpu环境下,比较pytorch会提高5-10倍速度。其中pytorch提供转化onnx格式模型接口,具体示例可以参考如下:

CNN汉字识别结果python代码 cnn识别图片文字_人工智能_05

使用onnxruntime框架推理demo如下:

CNN汉字识别结果python代码 cnn识别图片文字_人工智能_06

 

CNN汉字识别结果python代码 cnn识别图片文字_人工智能_07

 

 

五:结构化以及位置感知识别提升

在实际工程中,我们经常会遇到识别文本出现弯曲畸变或者结构识别(比如数学公式识别),此时CRNN+CTC范式并不能再满足我们的任务需求,比较传统的方式是借鉴语言翻译任务范式Seq2Seq+Attention,通过结构微调成CRNN+LSTM+Attention模式实现结构化以及位置感知识别,但是这个方式局限于LSTM无法并行计算,大大降低了计算效率。比较成熟的方案是基于CNN+Transformer范式解决此类问题,通常使用CNN学习图像低级特征,使用self-attention学习全局特征解码,既解决了数据饥渴的问题,又解决了解码无法并行的计算效率问题。

CNN+Transformer(encoder):

GitHub - opconty/Transformer_STR: PyTorch implementation of my new method for Scene Text Recognition (STR) based on Transformer,Equipped with Transformer, this method outperforms the best model of the aforementioned deep-text-recognition-benchmark by 7.6% on CUTE80.

CNN汉字识别结果python代码 cnn识别图片文字_人工智能_02

https://github.com/opconty/Transformer_STR

六:识别新范式

以上介绍的都是传统文本识别的一些典型方法,工程领域已经非常成熟。目前近一年Vision Transformer的大火,同时带来了许多文本识别新范式。由于文本识别本就属于图像与语言交叉形式的任务,基于多模态、自监督预训练等多种范式在多个识别领域SOTA,例如微软新提出的Trocr等方法。