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

2 篇文章 0 订阅
1 篇文章 0 订阅

〇、前言

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),我个人理解是强调两个数据集的分布差异太大:

 

  • 第二个是提出了一个四阶段(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,因其各自特有的结构,对提特征有不同的侧重优势。(这里不翻译了,贴个原文的图片)

   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种大致错误的类型:

    前面五种没得说的,当然第一个复杂字体(花体圆体等等)的影响是一个问题,这个在工程应用方面其实规避不了;第二~第五种(纵向、特殊符号、遮挡、低分辨率)这几种在我看来属于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

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值