【论文解读】OrigamiNet: Weakly-Supervised, Segmentation-Free, One-Step, Full Page Text Recognition by lear

本人很菜,如有错误,希望各位大佬能给予指正(语气一定要温柔,不要伤害到我脆弱的心灵),谢谢。 

索引

本文将会从以下几个方面来介绍:现状分析、知识回顾、详解OrigamiNet。

关于文本识别现状分析

如果要把现有的文本识别的方法进行分类的话,我倾向于从三个方面进行分类。

按照主体想法来分的话,可以分为基于分割(segmentation-based)的方法以及无分割(segmentation-free)的方法,由于目前无分割的方法的结果大多优于基于分割的方法,且利用无分割的方法进行识别可以达到真正的一步式识别,降低了网络成本,因此目前研究无分割方法的人越来越多。

按照应用方法来分的话,目前两种比较流行的手段是基于注意力机制的(Attention mechanism)和基于CTC(Connectionist Temporal Classification)的。相信各位应该都有所了解。

按照分割对象来分的话,现在有面向单行的文本识别器,以及面向多行/整页的文本识别器。

当然,还可以从更多层面进行分类,比如在应用场景上,可以分为线上(online)和线下(offline)的识别,就我们现有的研究来讲,在文本识别领域,研究线下识别的研究者要更多一些。

讲了这么多,我们可以对今天要讲的OrigamiNet进行一个分类。它是一个无分割的、基于CTC的、多行/整页文本识别器,或者说是一个模块,一个可以把现有任何满足它需求条件的单行文本识别器转换成多行文本识别器的模块。

那么,这个模块是如何实现的呢?它的需求条件是什么呢?它又是否能按照我们所说的那样成功的工作呢?我们都可以在本文找到答案。(哈哈哈哈哈哈哈反问三连)

 

知识回顾

为了能够能清楚的理解这篇文章,我会先简单的讲解一下这篇文章中提到的一些作者默认大家都已经知道的方法(其实是告诉大家这些知识可以从哪里获取,我只是个长得好看的搬运工),当然,如果你不想看也可以直接看下面的两张图,非常直观地解释了CTC和FCN。

1. 什么是CTC?

这篇写的贼好,直接看吧。

https://blog.csdn.net/liuxiaoheng1992/article/details/83660557

2. 什么是FCN?

理由同上。

https://baijiahao.baidu.com/s?id=1606394209134263012&wfr=spider&for=pc

(图自链接,侵删)

OrigamiNet

啊,说了这么多废话,终于来到了我们的论文解读部分,耶!今天将会从以下几个方面来解读这篇论文。即,OrigamiNet是什么?为什么选择它?它的工作流程是怎样的?以及它的一些实验结果和局限性。

在这之前,还要说最后一句废话,那就是origami这个词是日本折纸工艺的意思(没查到词源,但是听这个发音感觉很像日本语单词),也就是说,文章起这个名字就是形象的表达了这个网络就像是一个折纸一样,我们要做的就是把折叠起来的纸展开。

What is OrigamiNet?

简单来说,OrigamiNet就是一个网络模块,它可以在提供足够空间的情况下,把所有基于CTC训练的、全卷积网络的单行文本识别器,转换成多行文本识别器。

Why OrigamiNet?

这个OrigamiNet相比于传统的网络有什么优势呢?

首先,它有一点最大的优势,就是它的标注成本很低。这张表格是折纸网络(切换输入法太麻烦了,以后OrigamiNet就叫折纸网络了)与其他用于整页文本识别的网络相对比的结果,可以看到,其他的网络可能会用到行分割数据(其实感觉用到行分割数据的网络就不能严格意义上算作整页文本识别了),或者对分割数据进行了预训练,但是折纸网络只用到了整页的文本图片以及对应的GroundTruth,而在图片的转录过程中,平均迭代次数也是最低的,因此它可以算得上是严格意义上的全页文本识别,当然,这会大大减少识别流程的复杂度。

其次,刚刚讲到过,由于分割技术也不甚成熟,因此就目前来讲,无分割的文本识别器通常比基于分割的效果要好一些,而且分割和识别同时进行,也会降低网络负担,本文就是应用了无分割的文本识别器。

最后,这也是本文的一大创新点,就是它可以识别多行/整页文本。

这些都是它的优势所在。

网络结构

说了这么多,我们来见识一下它是如何实现的吧。

首先我们先来看一个传统的单行文本识别的网络(不是折纸网络哦)。注意,在这张图上给出的网络结构只是一个示例,事实上它可以替换成表中所给的任意一个网络结构,他们之间只是有一些细节的差别,但是大体上是相同的。(不知道为什么感觉有点翻译腔?)

这里感觉上用的是VGG网络作为示意图,但是也有一些省略的地方。如图,作者尝试了ResNet-26、ResNet-66、ResNet-74、VGG、GTR-8、GTR-12这几种网络,都能用,整挺好。然后我们来看一下这个传统网络是怎么工作的吧。

首先,如上图所示,框框框起来的部分是一个编码器,或者说特征提取器,就是通过卷积池化卷积池化卷积池化blablabla这种操作进行特征提取,因为我们知道,卷积对纹理特征是比较敏感的,所有用来做文本识别是比较合适的。经过这一系列操作,我们就得到了一个提取好特征的tensor了。

通过刚刚的学习(知识回顾的CTC的链接),我们已经知道CTC在预测时所需的输入是一个一维向量,预测的是一串序列,输出也是一串序列,这就很合理。所以,我们现在要做的,就是把刚刚提取到的特征图进行降维,如上图所示,让它变成一维序列,好送入到CTC中。在这一步中,我们暂时只考虑一个通道上的图片(即不考虑C),因此C的长度和我们的讨论没有关系。所以,如何降维呢?

传统的网络给出了一个很简单粗暴的降维方法,输入一张二维图像I,先把它通过一个函数F(这里我理解的F就是说把I变成特征图的一系列操作)把它变成一个计算机能够识别的张量,然后在垂直方向上进行求和操作,相当于直接拍扁了。仔细想想其实挺合理的,因为本身进行的是单行的识别,在这个过程中,垂直方向上的特征其实都是同一个字符的特征,因此即使给它拍扁了也都是这个字符的特征,并不会让字符数变多或者消失。在这个过程结束后,得到了P,这就是这个网络要送入到CTC的东西了。

如我刚刚所提到的,这个东西,显然是不能用在多行文本识别中的,如果是一个两行的文本,直接拍扁了,你怎么知道预测出来的是第一行的还是第二行的,这事显然不靠谱。至于这个问题怎么解决,后面会提到。我们先不急,先接着往后看。

这一步就很简单啦,如上图所示,进行CTC训练就OK啦。至此,一个单行文本识别器就成型了,怎么样,是不是很简单呢?

有了刚刚的基础,我们就可以来讲我们今天的主角——折纸网络啦!(前面仿佛都是废话)

首先,我们先来看一下它的结构。

一个直观的感受就是,前面的单行文本识别器,旨在变扁平,这个折纸网络,最后是想办法让它变得瘦瘦高高的。

如上图,我们把两个网络对比来看,可以看到,绿色框框框住的部分其实是一样的,只是看着形状不太像,但是操作方法没有任何区别。当然,和前面的单行文本识别器一样,这个网络架构图只是一个示例,实际上可以应用于多种网络。

(唉,写累了,我吃个饭回来再写)

(回来了,麻辣香锅yyds!!!)

继续继续。

刚刚说道,要把网络变得又高又瘦,我们先不说为什么要这样做,先说怎么办。怎么办呢?就是通过一个双线性插值的方法,使它在垂直维度上放大(变高),同时,在水平维度上缩小(变瘦),这个操作做了两次,一次让它变高变瘦,第二次让它变得更高变得更瘦。

可以看一个直观的例子。

如上图所示,这是双线性插值法的一个直观例子。这里只是解释一下双线性插值法,让大家有一个直观的感受,事实上网络中的输入是特征提取后的特征图,而在插值过后也有卷积的操作,因此这里展示的并不是网络运行中的情况。

我们现在已经知道,作者想要输出变得又高又瘦,具体有多瘦呢,作者已经给出了答案——每一步宽度是原来的二分之一。但是具体要变得多高呢?这就涉及到了L1和L2的选择问题。关于L1的选择,作者后面做了实验进行说明,我们先留到后面,至于L2的选择,这就涉及到了作者为什么要把网络变高。

我们已经知道,卷积能够提取到图片的特征,如果要识别整篇文本,那么有没有一种可能,就是我可以把整篇文本的所有字符的特征都按顺序排列出来,变成一个线性的结构,让CTC进行识别呢?作者就是基于这样的思想,希望把每一行的字符,按照顺序映射到垂直方向上的不同区域中,这种映射就是通过卷积学习各个参数得到的,这样一来,CTC就可以在垂直方向上依次识别字符,来确定整篇文本的内容了。

这就是OrigamiNet的核心思想。理解了这个核心思想,我们就可以推断,既然作者认为,垂直方向上的内容可以涵盖所有字符,因此,L2的长度,至少要比数据集中单页文本所含的最大字符数大,这样才能保证不会漏掉字符。但是我们知道,CTC在识别过程中是有去重功能的,还会在文本中添加空格符,因此,L2应该比文本中的字符数大一些,甚至大很多,才可以保证文本识别的准确性。

于是我们通过感性认识,得到一个这样的结论,就是,L2最少要比文本中的字符数大,而且越大越好。

当然,后面我们会通过实验来证明。

这个就是刚刚知识回顾里的Spatial bottleneck的模块了。作者其实只在introduction里面提到过,后面具体实现细节没有提到,不太重要,用不用都行,应该只是为了加速网络。可以理解成一个连着两次卷积。

紧接着是一个平均池化操作,用来降维,类似于单行文本识别器的那个降维操作,只不过这次是把水平维度降没了。

最后,也是一样的,用CTC进行训练。

实验结果

啊,终于到了实验部分。基本上就是填坑部分了。刚刚我给自己挖了很多坑。例如,折纸网络的表现是不是真的如我们预测的一样呢?是不是能适应很多网络呢?L1应该怎么选择呢?还有就是这个神奇的网络很迷啊,就算它真的能达成任务目标,有没有什么更直观的东西,让我可以相信它呢?

首先,我们来看一下它的通用性。

如图所示,作者在多个网络上都做了实验,这些网络的一个共同的特点就是,他们都是全卷积的、基于CTC的网络。在这些网络上都能完美运行,证明作者的网络能适用于很多地方,这就很不错。

另外一个实验,是关于L1和L2的选择的。对于L2的选择,经过试验,确实和我们的直观想象很一致,那就是越长越好,但是这就要在长度和训练难度之间做一个平衡了,作者认为,只要选择的值合理(>800),那么精度实际上相差不大。而对于L1的选择,作者做了两个实验,L1=450的和L1=225的,发现450的更好,于是作者认为L1和L2离得越近越好。

关于最后的宽度,作者给出的结论是,只要不太宽,中等或者小一点的都可以。这也非常合理,因为作者的想法是把它的水平特征映射到垂直维度的不同区域内,如果w太大的话,很可能不同的字符对应的特征依然在同一行里,这会造成识别精度下降严重。

接着,作者在难分割文本行上也做了实验。这些文本是他通过一些算法生成的,可以看到,这个识别精度也不低,这也可以印证作者方法的鲁棒性。

作者还和SOTA的方法进行了比较,达到了最棒,耶!(啊,越写越敷衍了)

在这之后呢,作者又做了一个很有意思的实验,想要证明模型的可解释性,他想通过一些可视化的、直观的东西,来让我们看到,模型究竟学到了什么。

这是他做的第一个实验。就是把识别到的文字对应的原始图片的位置用热图的方式标注出来。越绿代表这个位置的依赖度越高。可以看到,基本上是很符合我们的预期的,即每个文字对应的位置确实就是它本身应该对应的图片的字符位置。

然后作者还进行了另外一个实验。就是把每个识别到的字符依赖的原始图片的质心标注了一个叉叉,每一行用不同颜色标注,我们可以清晰地看到,几乎每一行都是有不同的颜色,只有很少量的错误识别。这就证明了作者的模型确实可以把一个水平维度的字符排列在几乎不损失位置信息的情况下拉到垂直维度。这在一定程度上解释了模型的合理性。

局限性

当然,作者认为它的模型也是有一个局限性的。就是它没办法识别这种分块的文本(原文写的是multiple columns,我是这么理解的),如右图这种,分成左右两个区域的,他就没有办法很好的识别。但是作者认为,这并不是一个很大的问题。

结语

没啥想说的了,困了,晚安!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值