论文笔记 【场景文字识别】What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis

〇、前言

What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis

这篇文章很不错,对场景文字识别(STR,scene text recognition)做了一些工作,代码已经开源 https://github.com/clovaai/deep-text-recognition-benchmark 

很好训,结果也非常SOTA

我先把文章看一下,后面对这个网络做一些到边缘设备上部署的尝试(另:这个文章没排版,将就着看)

一、正文

作者从几个方面分析了一下场景文字识别的固有问题,

  • 第一个主要强调了以往工作通常建立在“训练集验证集的选择不一致”(inconsistent choices of training and evaluation datasets),我个人理解是强调两个数据集的分布差异太大:

论文笔记 【场景文字识别】What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis_第1张图片

 

  • 第二个是提出了一个四阶段(four stage)的范式(我觉得就是以往工作的范式的总结,本文把他们整理在一起):

(我这里摘一些文中的句子无脑翻译一下)场景文字识别(STR)本身是一个比较特化的任务,它和传统的计算及视觉任务如目标检测本身有一些共性,所以STR方向的发展本身得益于那些特征检测的CNN网络、RNN网络的发展。CRNN这个网络第一次结合了CNN和RNN用于做STR任务,这个很有名了,网络简洁清晰明了,也非常好训。CRNN用CNN部分提特征,然后用RNN部分重组(reconfigure)这些特征用于输出序列的预测(sequence prediction)。

 

  • 这个范式的四个阶段分别是:

    1. Transformation: 用Spatial Transformer Network(STN)来对数据做Normalization来减轻后面阶段的难度。

    2. Feature Extraction: 这个阶段的目的是通过深度网络提到和字符本身有关的特征,同时筛掉一些无用特征,比如字体、颜色、尺寸、背景信息等等;作者列了三类CNN:VGG、RCNN、Resnet,因其各自特有的结构,对提特征有不同的侧重优势。(这里不翻译了,贴个原文的图片)

论文笔记 【场景文字识别】What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis_第2张图片

   3. Sequence Modeling: 这个阶段是捕获字符的上下文信息,以加强预测下一个字符的鲁棒性;代码里推荐用了双向LSTM。

   4. Prediction:预测阶段;原文提供了两个方法,一个是CTC(Connectionist temporal classification),一个是Attn(attention-based sequence prediction)

       a. CTC预测输出的序列长度可能是非固定的,这个non-fixed的性质来源于它处理预测序列的方法本身:通过删除重复字符和空白字符来产生非固定长度的序列;

       b. Attn通过捕获信息流(information flow)预测序列。这个方法能让前面的STR模型主体学到字符级别的信息。

       我感觉就是在CRNN的范式前面加多了一个用来Transformation的Spatial Transformer Network。这个操作的根据是基于前面论述过的:不同数据集差异性太大的问题。

 

  • 再后面文章中列举了一些消融实验的结果,这里不贴了,我个人关注的是方法贡献和工程应用意义……
  • 最后面列举了一些错误预测的样本,并分析了6种大致错误的类型:

论文笔记 【场景文字识别】What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis_第3张图片

    前面五种没得说的,当然第一个复杂字体(花体圆体等等)的影响是一个问题,这个在工程应用方面其实规避不了;第二~第五种(纵向、特殊符号、遮挡、低分辨率)这几种在我看来属于bad samples,目前对我来说并不考虑这些阴间数据给整体准确性带来的影响;

    对于最后一种,label noise,可以理解为是一些非字符、但是又很像字符的“label”(标志一类的)影响了模型的预测精度。作者重新审了一遍数据集,发现有label noise的样本其实还有标注标错的因素(=_=),除去这个因素作者并没有提出改进思路。

    看了一下提供的错误预测样本示例,目前我个人对这个label noise也没有太多思路,主要考虑还是从训练过程中的数据增强入手吧:

    - 【数据增强】不同字体图片的横向拼接(参考Mosaic);

    - 【数据增强】图片四周pad一圈,用来扩增字符在图片中比例的多样性;

    - 【数据分析】统计一下字符的频率,用来分析特殊字符识别不佳;

二、训练时候的心得

  • 因为刚好拿着同样的任务和数据集训过一波CRNN,然后再训的本文的框架;
  • CRNN没有前面Transformation的部分,同时后面的loss用的CTC;
  • 而本文的TRBA(TPS-Resnet-BiLSTM-Attn)加了前面的Transformation后,能够对数据做一个低维的统一;
  • 同时CTC loss 我觉得对于字符真正长度的控制并不是很好,TRBA相比CRNN精度提升很多(在我的数据集上从70%提到88%)我认为主要在于将CTC改为用Attn loss。

三、 部署到边缘设备的尝试

这个项目挺好的,同时对MNN和NCNN这两个框架有点经验,所以考虑为社区做一下贡献。

目前没写完(在努力抽时间)…… 

目前Pytorch的部分没什么问题,在人家源码上稍微修改了一点点,因为我的数据集里需要训几个特殊符号,在README中都有写。

先贴上repo地址: https://github.com/unanan/deep-text-recognition-benchmark-mnn-ncnn

论文笔记 【场景文字识别】What Is Wrong With Scene Text Recognition Model Comparisons? Dataset and Model Analysis_第4张图片

你可能感兴趣的:(数据集,pytorch,ocr,深度学习,ocr,python)