OCR阅读笔记-What If We Only Use Real Datasets for Scene Text Recognition

论文主要想要证明,少量的数据在训练文字识别模型上也可以达到仿真数据的精度;通过实验验证了自己的分析,以及提出了常用可行的数据增广手段以及自监督和半监督的学习策略来提升实验效果

image.jpeg

一、文字识别的数据集介绍

在文字识别中,获取足够的真实样本是很困难的,因为数据收集以及标注的代价比较大。因此往往是在大量的仿真图片上进行训练,然后用真实图片来评估效果。

常见的用于训练的仿真数据集:

image.jpeg

常见的用于评估效果的真实数据集

image.jpeg

真实的数据集每年都在叠加,作者合并了从2011到2019的公开数据集,得到了276K的真实文本框数量。

image.jpeg

下面是这些图片的锦集:

image.jpeg

真实数据集介绍:

  1. SVT,IC13,IIIT数据主要是水平的文字行,来自于街景
  2. IC15 收集自Google GLASS,内部有水平的文字,倾斜文字,模糊文字以及低分辨率文字。
  3. COCO有很多低分辨率的文本框
  4. RCTW主要是中文街景图片
  5. Uber主要是街景的号码牌、告示牌等等文本框
  6. ArT Arbitrary-shaped Text 任意形状的文本
  7. LSVT Large-scale Street View Text 中国的街景图片,主要是中文
  8. MLT19 Multi-Lingual Text七国不同语言文字的识别任务
  9. ReCTS Reading Chinese Text on Signboard competition也是中文数据集的

没有打标的数据集
没有标注的数据集可以用来进行半监督和自监督学习。这些图片包含文字但是没有进行单词级别的标注。因此作者使用一个预训练的文字检测器来标注文字,这个检测器没有使用仿真数据进行训练但在RECTS比赛中获胜了。

二、真实数据的预处理

作者没有直接使用这些真实数据的文本框,而是做了下面的预处理
1. 删除重复的数据集
2. 删除中文数据集,毕竟人家是针对英文情况的
3. 删除标注信息为***或者### 的文本框,这类标注可能预示着图片的文字模糊不容易阅读
4. 删除垂直文本以及旋转了90度的文本框。本文主要针对水平文本,所以需要删除这类文本。
5. 将训练数据集拆分为训练集和验证集两个集合
6. 删除超过25字符的文本

三、采用少量真实数据进行文本识别的理论分析

虽然通过多年的收集,经过预处理之后的真实数据有276K,但是这也只是OCR仿真数据的1.7%,为了补偿真实数据的缺失,本文使用了半监督和自监督额方式来改进文字识别的性能。

3.1 文字识别网络构成

1. 透视变换Trans:将弯取文本或者不规则文本转为水平文本,可以通过STN实现
2. Feature extraction:抽取输入图片的视觉特征,比如CNN网络
3. 序列模型:将视觉特征转为带上下文的特征,这些特征获取了序列中字符的上下文信息,比如BiLSTM
4. 预测从上下文特征中预测字符序列,这个通过由CTC解码器或者注意力机制实现

image.jpeg

上图是目前常用的两种文字识别的网络,其中CRNN的准确性略差,但是其轻量以及快速;TRBA网络更加复杂和准确,但是模型更大也更慢。

3.2 半监督学习策略

半监督学习策略被广泛用于图像分类问题,用于缓解样本不足的问题。在文字识别领域,因为通常采用仿真数据,所以很少有研究采用半监督学习的方式,利用未打标数据进行训练。

3.2.1 仿真标签

Pseudo-Label (PL)是一种简单的方式,首先在标签数据上训练模型,然后使用这个训练的模型在未打标的数据上预测,然后使用预测信息作为一个仿真标签。结合标记数据以及仿真标记的数据,然后重新训练模型。(仿真数据作为真实数据,会不会影响效果?)

3.2.2 Mean Teacher

还没有看懂

image.jpeg

3.3 自监督学习

自监督学习被实验证明是有效的。自监督学习通过有两个阶段组成,第一阶段是用一个替代任务预训练模型,是pretext task阶段;第二阶段使用预训练的权重初始化模型,然后训练主要任务的模型。
第一阶段中有两种代表性的,并且被广泛使用的任务:
1. RotNet,这个pretext task是预测图片有没有被旋转0,90,180,270度
2. Momentum Contrast (MoCo)任务是采用实例分类任务作为pretext task 。这个任务由下面的步骤组成:
2.1)准备一个模型和这个模型的一个备份; 前者称为query encoder,后者称为momentum encoder
2.2)在同一批mini-batch上使用不同的增广策略sigma,sigma‘;前者输入给query encoder得到query q,后者输入给momentum encoder,得到keys k
2.3)在一对q和K之间计算相对损失,称为InfoNCE;一对q和k如果他们来自于相同的图片,则分配一个正标签,否则分配一个负标签
2.4)更新query encoder;
2.5)使用query encoder的滑动均值更新momentum encoder

四、实验和分析

1.实验设置:

1. 模型选用了常用的CRNN和TRBA模型,Adam优化算法,学习率最大不超过0.0005;200Kiteration以及128大小的batchsize;对于样本不均衡的情况,采样至每个数据集样本熟练相同
2. 数据选择:采用276K的真实数据以及63K的验证集数据,验证集数据用于选择最优模型。
3. 采用单词级别的准确率计算方式,且只考虑字符以及数字


image.jpeg

上图是和SOTA模型对比的情况。其中PR后缀表示使用了仿真标签的半监督学习方法以及RotNet自监督方法的模型;baseline-Synth表示只是用仿真数据的模型;Baseline-real后缀表示使用真实数据;

2.消融测试

1. 只在真实的标注数据上训练
下图展示了随着真实标注数据逐年的增长,使用真实数据进行训练的准确率变换情况。可以看到,2019年,276k的真实数据通过训练之后就可以达到仿真数据的效果,且真实数据的数量只有仿真数据的1.7%


image.jpeg

这是否预示这146K到276K数据就可以训练STR的英文模型了?我们都知道训练数据的多样性比数据的熟练更加重要,在真实数据的训练中,一共使用了11个数据库,这表示有很高的数据多样性。因此我们不能简单的说276K的数量是足够的。
为了调查真实数据的重要性,同样采取277K的仿真数据进行训练(这个数量和真实数据的数量一致),但是仿真数据的准确率会低10%,这个结论是,真实数据的多样性更明显以及真实数据更加重要(这个需要证明吗?)

2. 数据扩充对训练的改进
Blur表示高斯模糊,论文说对本身模糊不清的文本执行高斯模糊(这样不是更加模糊了吗?)
Crop表示对上下左右四个边进行比较细微的裁剪,这样可以增加模型的鲁棒性
Rot是旋转

实验的结果证明了,对于不同的模型有不同的最佳数据扩充策略。
对仿真数据的扩充手段会导致训练效果变差。

image.jpeg

3. 半监督和自监督学习策略的影响


image.jpeg

半监督学习策略包括仿真标签PL和Mean Teacher(MT),从上面的实验结果可以看到MT的效果是负的,PL是有比较大的提升效果的。
自监督学习策略有两个不同的任务一个是RotNet,一个是MoCo,预训练阶段,对于CRNN网络预训练其中的VGG主干网络;对于TRBA预训练其中的ResNet主干网络,而不是TPS+ResNet主干网络,因为后者在实验中效果变差了。
同时结合半监督学习和自监督学习的流程如下: 1)使用预训练任务RotNet初始化模型参数 2)使用RotNet预测PL样本。

4.真实样本数量的影响
影响训练效果的有两个因素:样本数量和样本多样性。下图这张图不能说明样本数量和样本多样性哪个更加重要,因为实际上,这张图上的两者都在增加。


image.jpeg

作者于是将276K的11类数据集样本同比例的减少样本数量,来评估样本多样性不变的情况下,样本数量减少会带来什么样的影响


image.jpeg

上面这张图是实验的数据。
首先数据量的多少会对结果造成比较大的影响,但是如果采用了数据扩充策略以及半监督和自监督策略之后,数据量影响的效果会显著较少。
其次,比较2017年(146K)的训练结果和40%数据量(110K)的结果,在都没有进行任何数据扩充和半监督学习的情况下,前者的数据量比后者多,但是多样性没有后者多,所以结果会稍微低于后者:CRNN模型,66.6%和65.1% 。

5. 同时在真实数据和仿真数据上训练
在现实的场景中,我们通常会使用仿真数据,那么应该怎么优化或者重新训练模型呢?
在拥有少量真实数据以及大量仿真数据的情况下,我们往往会遇到两种场景
1)首先用仿真数据训练得到模型,然后用少量真实数据Fine Tuning
2)直接从头开始用仿真数据和真实数据训练模型


image.jpeg

上图展示了这种策略的效果。

结论是:

如果是进行fine tuning策略,那么直接使用真实数据而不进行半监督和自监督学习,这样的效果最好
如果是从头开始训练,anemia使用仿真数据结合真实数据,并采取半监督和自监督学习的效果最好。

我的感觉

1. 276K的数据对于英文场景来说可能够了,但是对于我们的中文场景,还是远远不够的
2. 数据的多样性和数据的数量需要同时考虑,前者要更加重要一点,这就是为什么中文的仿真数据在实际的场景的效果上,不能达到要求的一个原因。
3. 对于英文场景来说,在拥有仿真数据和真实数据的情况下,直接Fintuning就可以达到82.1%的准确率;如果只使用真实的数据并且结合简单的数据扩充,那么准确率可以达到80.0%;如果采用真实数据结合数据扩充和半监督以及自监督学习,准确率可以达到83.4%;如果结合仿真数据和真实数据以及数据扩充和半监督以及自监督学习,那么准确率可以达到84.2
上次下雨已经过去两个多月了,我也不确定是不是这个原因。那么现在阳台地板出现这种情况

你可能感兴趣的:(OCR阅读笔记-What If We Only Use Real Datasets for Scene Text Recognition)