最近看了一篇文本检测方面的论文EAST,该论文无论是在检测的精度还是速度方面
都取得不错的成绩。博主准备写一篇博客来分享一下自己的感想。博主也是刚刚接
触这一方向,这是博主读的第一篇论文,可能会有部分理解和知识上的错误,希望
大佬们不吝批评和指教。
一、概要:
近来,在文本检测方面各种各样的算法在不同的场景下都取得比较令人满意的成
绩。但是同样也存在这不少不足的地方,比如说网络的训练可能分为几部进行,而
且在这个过程中可能存在一些复杂且耗时的操作(比如候选框的提取等)。这边论
文呢,提取了一个十分简洁的单一网络,通过这个网络我们可以十分简单快速并精
确的提取场景中的文字信息。作者分别在ICDAR2015,COCO-Text上做了测试,在
这篇论文发表的时候,无论在精度还是速度方面都超过了市面上流行的方法。其中
在ICDAR2015数据集上,F-score可以达到0.7820,速度可以达到13.2fps。以
下是本文的算法和其他算法步骤上的比较:
二、介绍
近来,提取和理解自然场景下的文字信息变得十分的重要和流行。文本识别的核心
是从背景中提取文本的特征设计。在传统方法中,这些特征都是通过人工设定的。
但是在深度学习的方法中,我们可以通过深层网络从训练数据中来高效率并且精确
地提取网络的特征。
但是在现在的方法中,无论是传统方法还是深度神经网络的方法,都是通过几步操
作来实现的文本的提取。都在作者看来,这样的话可能会造成次优解问题(为什么
会造成次优解,博主现在也不是很清楚,希望大佬们可以赐教。博主觉得可能是因
为如果这个过程分为几部分的话,在进行后面的步骤的时候,很难对前面完成的步
骤提取的一些特征进行优化造成的。)并且十分浪费时间。所以在文本检测的精度
和速度上就会不太令人感到满意。
在这边论文中,作者提取了一个又快有精确的方法,并且我们这个方法只分为两
步。我们这个方法通过一个全卷积网络(FCN)来直接进行字母或者文本行级别的预
测,这样就免除了多余和耗时的操作(比如说候选框的提取,本文区域的合成
等)。第二步是对第一步产生的预测进行非极大值抑制来得到最终的预测结果。读
到这里是不是感觉这个方法超级简洁,超级牛,其实博主读到这里的时候,还以为
作者是在这里吹牛。。。 下面向大家展示一下论文中的一个图片,从这个图像中
我们就能看出我们的方法相对于现有方法的优势所在。
在这里作者列出来这篇论文的三大贡献:
1、我们提供了一个只分两步的文本检测的方法:一个全卷积网络和一个NMS合成阶段。FCN网络直接预测文本区域,避免了一些冗杂和耗时的操作。
2、我们的方法是灵活地产生字母和文本行级别的预测。并且根据应用的需求,我们的文本框可以自由的选择为RBOX(旋转的矩形)和QUAD(四边形)。
3、我们的方法无论实在精度还是速度方面都超过的现在最好的文本检测算法。
三、网络介绍
我们的算法的关键组成部分是一个全卷积网络(FCN)。这个网络被训练地可以直接
预测文本实例的存在和他们的几何形状。以下为我们算法的神经网络结构:
这个网络的基本结构是以2015年发表的DenseBox中的网络为基础构建的。当大家
在阅读在阅读这篇博文感到有些地方有点不清晰的时候,博主建议大家去看看
DenseBox的文章有助于理解。
首先我们来看一下这个网络的输入,我们输出的是稠密的每个像素对于文本的预测
信息。我们以RBOX为例,网络输出的通道数应为5(第一个为score map,其余的
为文本框的位置信息)。我们预测的几何形状分为RBOX和QUAD两种,在后面为每一
种也相应设计了不同的loss值。其中score所代表的含义是在该像素位置预测的目
标的可信度,其值为[0,1]。在最后我们会将score值大于我们所设计的阈值的预
测框留下来,并进行NMS获取最终结果。
现在我们来聊一下网络的设计问题。在网络设计的时候我们必须要考虑到很多的因
素。首先,因为文本信息尺寸的不同,这要求我们需要提取不同阶段的特征。比如
说一些大的文本信息,需要比较靠后阶段提取到的特征,而一些比较小的文本信息
则喜欢比较靠前的特征信息。因此我们设计的网络必要要整合不同阶段的特征,而hypernet网络则符合这个要求,下面给大家展示一下hypernet的网络结构:
发现这个网络的结构和我们上面展示的本文的网络结构十分相似,都是从不同的阶
段进行了特征的提取然后进行了合成产生了所谓的 hyper feasure maps。但
是!虽然思想上我们的网络结构和hypernet是相同的,但是具体的实现方法是有所
去别的。通过上图我们可以看到hypernet在进行特征合成的时候使用了反卷积和最
大值的池化最终尺寸与Conv3的尺寸一致。由于在做返卷积和池化的过程中会产生
一部分的计算代价。所以我们的网络采用了U-shape的手段来统一尺寸并进行合
成,这样我们既能获取不同阶段的特征信息又能减少运算。网络具体的运算与合成
过程这里就不再详细地去介绍了,这里把公式给大家,我相信大家一眼就能看懂!
四、标签的生成
接下来要和大家分享的是标签的产生过程。如果我们要对我们的网络进行训练,那
么我们就一定要又一个标签,让我们预测的结果和标签进行对比,然后通过不断优
化参数,最终得到我们想要的网络。
首先我们来看Score map 标签的产生。根据论文的描述,我们Score map的正样
本的范围,其实就是在图片中我们标注框的一个缩进框,如上上图的(a)(b)所
示。
在介绍如何去缩进标注框之前,我们先下一个定义,对于一个四边形Q=
{pi|i∈(1,2,3,4)},其中pi={Xi,Yi}是四边形的一个顶点,从1到4顺
时针。为了来缩进Q,我们定义了一个参考长度ri:
其中D代表两者之间的L2距离。其实ri是与pi相关的两条直线中的那一条短的。然
后我们的缩进就是对四边形的每天边<pi,p(i mod 4)+1>,使其每个顶点分别缩进
0.3ri和0.3r(i mod 4)+1。可能读到这个地方,我们会产生这样两个疑问,一
个是我们为什么要进行缩进,另一个是为什么要缩进0.3ri。在这里我觉得要进行
缩进的原因是我们的标准框中会存在一些非目标信息,进行缩进可以减少这些信息
都最终目标的影响,提高网络的性能。至于为什么是0.3的缩进比呢,我认为这是一
个超参数,作者是通过试验的出来的0.3,可能在这种情况下,网络的性能是最好的。
至于四边形的标签的生成就比较简单啦,这个读者可以自己去阅读论文,这里就不
想说了。
五、Loss的设计
1、score map的loss
首先是Score map的loss的设计。在我们目标检测的任务中,一般会存在正
负样本严重失衡的情况,对于这种情况,现在的方法大部分是采用均衡的采样
或者hard negative(即选用一些比较接近正样本,也就是难以区分的负样本
作为负样本)进行训练。但是这样会增加一些需要微调的参数,并且增加计算
量。作者在这里用通过一个类平衡的交叉熵损失函数来解决的这个问题:
其中Y^代表的是我们预测的Score值,而Y*则是ground truth,取值为0或者1。
参数β是与正负样本相关的平衡参数,论文中给出的定义如下:
不过博主并没有看懂这个公式。。。感觉有点迷。不过按照博主的理解,β其实就
是总样本中正样本所占的权重。到这里我们score map的loss的函数的定义就介绍
结束了。不过博主在研究loss函数的过程中,发现了一个更好的损失函数定义,在
这里向大家介绍一下:
我要给大家介绍的是focal loss。我们以前在定义loss函数的时候们主要考
虑的是正负样本数量的不平衡。但是我们忽略了正负样本的识别难度对网络性
能的影响,忽略这个因素好好也是导致我们网络的效果较差。举一个例子,在
上图中的蓝线,就是我们平常使用的交叉熵函数,我们发现当probability
of ground truth很高的时候,我们依然具有较高的loss值,可能说到这里
我们觉得还没有什么,但是在我们的识别任务中往往负样本是比较容易识别
的,也就是说负样本的probability of ground truth很高,所以当网络
对负样本的识别已经做的很不错的时候,负样本还是会贡献不小的loss值,这
在一定程度上压制了我们正样本的loss值贡献,这就导致我们的网络对正样本
的识别精度下降。因此我们这里可以考虑使用focal loss作为我们的损失函
数,在一定程度上可以提高我们网络的质量。
2、RBOX的loss定义
RBOX的loss定义主要分为两个部分,其中AABB部分我们使用的是IOU loss,它
适用于任何尺度的检测目标,定义如下:
其中R^是我们预测到的AABB,而R*是我们的ground truth。这个我觉得大家很
容易就理解了,这里我们就不多说了。然后剩下的一部分就是我们的旋转角度θ的
loss,论文中给出的定义为:
其中θ^代表的是我们预测到的旋转角度,θ*是我们的ground truth。接下来我
们就是合成AABB和θ的loss函数:
在论文中λθ采用了10,因为我们更加关注旋转角度,这样会取得最好的效果。到
这里我们RBOX的loss就介绍完毕了。QUAD的在这里就先不介绍了,等以后有时间
我们继续介绍。
六、效果展示
在都是论文中带有的效果图,博主自己也测试了一下网络的效果,不过现在图片没
有在身边后期会再加上的。最后我们来看一下我们的方法和其他方法的比较:
可以看出在ICDAR2015上,我们的方法还是有比较大的优势的。这就是我和大家一
起分享的论文,如果有什么错误的地方,希望大家不要介意,给博主指出来,博主
会虚心的接受,谢谢大家的阅读。