本文介绍的是一个“Face++ ”在今年8月份刚刚发在ICCV 2019上面的论文——PAN(像素聚合网络),这是一篇文字检测方面的论文,其达到了目前文字检测的最好效果。
之前在CVPR 2019上发的PSENet是之前效果非常好的文本检测算法,PAN的作者还是之前PSENet算法的原班作者,所以说我们可以把PAN看做是PSENet V2版本。
之前PSENet的检测效果很好,但是整个网络的后处理复杂,导致其运行速度很慢,PAN改进了网络使其在不损失精度的情况下,极大加快了网络inference的速度。(trade-off)
下图是目前常用的文本检测算法在任意形状文本检测数据集上的效果:
所以为了保证网络的高效率,我们就需要采取措施来降低这两步的耗时:采用的更轻量级的backbone和更简单的后处理。
这个PAN的整个网络结构,网络主要由Backbone + Segmentation Head(FPEM + FFM) + Output(Text Region、Kernel、Similarity Vector)组成。
本文使用将 ResNet-18 作为 PAN 的默认 Backbone,并提出了低计算量的Segmentation Head(FPFE + FFM) 以解决因为使用 ResNet-18 而导致的特征提取能力较弱,特征感受野较小且表征能力不足的缺点。
此外,为了精准地重建完整的文字实例(text instance),提出了一个可学习的后处理方法——像素聚合法(PA),它能够通过预测出的相似向量来引导文字像素聚合到正确的kernel上去。
下面将详细介绍一下上面的各个部分。
本文使用 ResNet-18 作为 PAN 的默认 backbone(PSENet用的是ResNet-54),其目的就是为了减少计算量。
论文backbone提取stride为 4 , 8 , 16 , 32 4,8,16,32 4,8,16,32的 c o n v 2 , c o n v 3 , c o n v 4 , c o n v 5 conv2,conv3,conv4,conv5 conv2,conv3,conv4,conv5的输出作为高低层特征。每层的特征图的通道数都使用 1 × 1 1 \times 1 1×1卷积降维至128得到轻量级的特征图 F r F_r Fr 。
PAN 是一个基于分割的任意形状文字检测模型,其使用 ResNet-18 作为网络的默认 backbone,虽减少了计算量,但是backbone层数的减少势必会带来模型学习能力的下降。为了提高效率,研究员在 ResNet-18 基础上提出了一个低计算量但可高效增强特征的分割头Segmentation Head。它由两个关键模块组成:特征金字塔增强模块(Feature Pyramid Enhancement Module,FPEM)、特征融合模块(Feature Fusion Module,FFM)。
FPEM 呈级联结构且计算量小,可以连接在 backbone 后面让不同尺寸的特征更深、更具表征能力。在 FPEM 模块后面,使用了特征融合模块(FFM)来将不同深度的FPEM 所产生的特征融合,产生最终用于分割任务的特征图 F f F_f Ff。
下图就是FPEM,特征金字塔增强模块,其是作者提出的用于增强backbone输出特征图的一个模块。
如下图,FPEM是一个 U形模组,由两个阶段组成,up-scale 增强、down-scale 增强。up-scale 增强作用于输入的特征金字塔,它以步长 32,16,8,4 像素在特征图上迭代增强。在 down-scale 阶段,输入的是由 up-scale 增强生成的特征金字塔,增强的步长从 4 到 32,同时,down-scale 增强输出的的特征金字塔就是最终 FPEM 的输出。
类似于 FPN,FPEM 能够通过融合低级与高级信息来增强不同 scale 的特征。FPEM模块可以看成是一个轻量级的FPN,只不过这个FPEM计算量不大(大约为FPN的1/5),并可以通过不停地级联( n c n_c nc次)以达到不断增强特征的作用。
注:Therefore, FPEM is capable of enlarging the receptive field (3×3 depthwise convolution) and deepening the network (1×1 convolution) with a small computation overhead.
Feature Fusion Module模块用于融合不同尺度的特征,其结构如下:
We firstly combine the corresponding-scale feature maps by element-wise addition. Then, the feature maps after addition are upsampled and concatenated into a final feature map which only has 4×128 channels.
特征融合模组用于融合不同尺度的特征,这是因为低级、高级语义信息对于语义分割来说都很重要。研究人员提出了如上图的特征图融合方法。他们首先通过逐元素相加结合了相应 scale 的特征图,然后对特征图进行上采样,连接成最终只有 4*128 通道的特征图 F r F_r Fr。( F r F_r Fr用于后面的预测输出)
像素聚合(PA)
文字区域虽然保留了文字完整的形状,但是在其中也经常会出现重叠在一起的文本(见图 (g))。另外,虽然可以用kernel来很好地区分文字(见图 (h)),但是这些kernel并不能涵盖所有的文字区域。为了重建完整的文字实例,我们需要将文本区域中的像素融合到核中,因此提出了“像素聚合算法(Pixel Aggregation)”来将文字像素聚合到正确的kernel中去。
To rebuild the complete text instances, we need to merge the pixels in text regions to kernels. We propose a learnable algorithm, namely Pixel Aggregation, to guide the text pixels towards correct kernels.
注:在像素聚合算法的设计中,研究人员借用了聚类的思想来从kernel中重建完整的文字实例。如果将文字实例视为聚得的类群,那么文本实例的核就是类群的中心,而文本像素是被聚类样本。自然地,为了将文本像素聚合到对应的核,文本像素与和它相同文本的核之间的距离就要足够小。
网络总的损失函数如上:其中 L t e x L_{tex} Ltex和 L k e r L_{ker} Lker分别是text region和kernel的分割Loss, L a g g L_{agg} Lagg是衡量文本实例中的像素和其对应的kernel的loss(是一个聚合loss,aggregation loss), L d i s L_{dis} Ldis是分辨不同文本实例的kernel的一个loss(discrimination loss)。 α \alpha α和 β \beta β是平衡各个loss的值,设为0.5和0.25。
其中,考虑到文字和非文字像素非常不平衡, L t e x L_{tex} Ltex和 L k e r L_{ker} Lker的计算方式和PSENet V1的方法一样(如上图),都是采用的dice loss。
论文的重点在于 L a g g L_{agg} Lagg和 L d i s L_{dis} Ldis,下面分别描述。
L a g g L_{agg} Lagg用于衡量文本实例和其对应kernel的loss,其作用是保证同一文本实例的kernel和文本实例内其他像素点之间的距离< δ a g g \delta_{agg} δagg 。其公式如上。
其中, N N N是图像中文本实例(text instance)的数量, T i T_i Ti表示第 i i i个文本实例, K i K_i Ki是该文本实例对应的kernel。 D ( p , k i ) D(p, k_i) D(p,ki)定义了文本实例 T i T_i Ti内的像素 p p p到 k e r n e l K i kernel\ K_i kernel Ki之间的距离,其公式如上。
其中, δ a g g \delta_{agg} δagg是一个常量,默认0.5, F ( p ) F(p) F(p)是网络在像素 p p p处输出的相似度向量, G ( . ) G(.) G(.)是 k e r n e l K i kernel\ K_i kernel Ki的相似度向量,计算公式如上。
G ( . ) G(.) G(.)的计算就是对于 k e r n e l K i kernel\ K_i kernel Ki 里的每一个像素 ,网络在像素 q q q处输出的相似度向量和除以 k e r n e l K i kernel\ K_i kernel Ki的像素点数量, ∣ K i ∣ |K_i| ∣Ki∣这里代表的就是里像素点的数量。
其中, D ( p , k i ) D(p, k_i) D(p,ki)里的||……||是一个L2范数,其是一个用于衡量像素点 p p p到 k e r n e l K i kernel\ K_i kernel Ki距离的值,值越小表示相似度越大,公式中距离小于 δ a g g \delta_{agg} δagg的像素点就没必要参与loss计算了,关注那些距离远的值即可。
L d i s L_{dis} Ldis是用于不同文本实例的kernel的loss,其作用是保证任意两个kernel之间的距离> δ d i s \delta_{dis} δdis 。其公式为:
即对于每一个文本实例kernel,分别计算和其他kernel的距离。
其中, δ d i s \delta_{dis} δdis是一个常量,默认3。当两个kernel之间的距离||……|| > δ d i s \delta_{dis} δdis时,就表示这两个kernel的距离已经足够远了。
另外,在训练过程中, L t e x L_{tex} Ltex的计算使用的OHEM,正负像素之比是1:3,计算 L k e r L_{ker} Lker, L a g g L_{agg} Lagg 和 L d i s L_{dis} Ldis时均只考虑ground truth内的文本像素。
到这里训练阶段就完成了,在预测阶段的后处理: