Shape Robust Text Detection with Progressive Scale Expansion Network

Shape Robust Text Detection with Progressive Scale Expansion Network

论文地址:https://arxiv.org/abs/1806.02559
代码地址:https://github.com/whai362/PSENet

文章主要针对的问题

场景文字检测面临两个问题:

  1. 大部分的state-of-art 的算法都是预测四边形的检测框来表示文本框,但是这种方式在任意形状的文本行检测问题上的效果较差。
  2. 距离较近的文本行容易检测错误,检测结果容易相互有重叠或者多个文本行因为没有分开而被检测为一个。

基于CNN的场景文字检测算法主要可以分为两类:

  1. regression-based approaches(基于回归的方法)
    基于回归的方法使用CNN回归问本行的边界框,这种方法一般应用在文本行可以用具有一定方向的矩形或四边形的形式表示的情况下,比如水平文本行。在任意方向的场景文字检测问题上,因为文本行形状多变,四边形并不能有效地表示一串文本行,所依据与回归的方法在locate the texts with arbitrary shape 问题上效果不佳。
  2. segmentation-based approaches(基于分割的方法)
    基于分割的方法把文本行检测看做像素点分类问题,即通过设计CNN网络分割出文本和非文本像素点,但是没直接的分割方法很难分开相近的文本行,于是在输出检测结果的时候会把多个粘连的文本行预测为一个。
    已有的方法在检测任意形状的问本行时遇到的问题。

PSENet网络结构

PSENet主要框架如图:
PSENet
整体架构: 特征提取阶段采用的骨干网络为ResNet,并将低层和高层的特征进行相连(FPN网络结构),将FPN的最后四层特征 P2,P3,P4,P5P_2,P_3,P_4,P_5 融合为一个特征层FF,然后将FF再次映射到nn个分割结果:S1,S2,...,SnS_1,S_2,...,S_n。每一个SiS_i都表示在某一个尺度上的文本行像素分割结果。S1S_1表示一个文本行(字符串)的最小尺度的分割图(原始的文本行mask图向里收缩一定比例后的mask),SnS_n表示文本行(字符串)原始的分割图。得到这些分割图后,采用PSEPSE(Progressive Scale Expansion Algorithm) 从S1S_1SnS_n逐步融合CNN生成的分割图像,从而得到最终的检测结果:
R=PSE{S1,S2,...,Sn}R = PSE \{S_1,S_2,...,S_n\}

具体细节: 四个特征层 P2,P3,P4,P5P_2,P_3,P_4,P_5都为256层(channels)特征层,长宽尺寸逐渐(1/2倍)缩小。FF是这些特征层的拼接,所以是1024层(channels)。因为大小不同,所以拼接时将每一特征层都放大到P2P_2大小,具体为:
F=C(P2,P3,P4,P5)=P2Up×2(P3)Up×4(P4)Up×8(P5)F=C(P_2,P_3,P_4,P_5)=P_2||Up_{\times2}(P_3)||Up_{\times4}(P_4)||Up_{\times8}(P_5)
然后采用3×33\times 3的卷积层(包含BN层,激活函数采用ReLU)将FF压缩至256维,再通过多个1×11\times 1的卷积(激活函数采用Sigmoid)预测 n个分割结果{S1,S2,...,Sn}\{S_1,S_2,...,S_n\}

Progressive Scale Expansion Algorithm

渐进式尺度展开算法:

  • S1S_1上求取分割连通域C={c1,c2,c3,c4,...}C = \{c_1,c_2,c_3,c_4,...\}
  • 对任意一个连通域中的任意一个文本像素点pp,若近邻的像素点qqS2S_2中被预测为文本像素点(positive)且还未被包含在任意一个连通域内,则将改点添加到pp对应的连通域。不断迭代,直至所有的连通域中的所有的像素点在S2S_2中的邻近像素点都没有被预测为文本像素点的点。
  • 根据上述步骤,不断向所有的分割图{S3,S4,...,Sn}\{S_3,S_4,...,S_n\}展开
    在这里插入图片描述
    在这里插入图片描述

训练标签生成

PSENet将不同尺度的分割结果进行融合为最终的文本行检测结果,因此在训练时也需要有不同阶段的分割结果的监督信息。在生成分割标签时,采用将原始的多边形标注结果不断向里收缩的的方式生成不同阶段的分割图。
在这里插入图片描述
如图所示:将原始的多边形pnp_n向里收缩did_i个像素得到多边形pip_i
更具体的实现细节:

  • di=Area(pn)×(1ri2)Permeter(pn)d_i =\frac{Area(p_n)\times (1-r_i^2)}{Permeter(p_n)} 其中Area(pn),Permeter(pn)Area(p_n),Permeter(p_n)分别表示面积和周长。
  • ri=1(1m)×(ni)n1r_i =1-\frac{(1-m)\times (n-i)}{n-1} 其中m(0,1]m\in(0,1]表示最小的尺度,nn是需要生成的分割图的个数。这样可以求出{r1,r2,...,rn}\{r_1,r_2,...,r_n\}个不同比例,其中r1=m,rn=1r_1=m,r_n=1。根据不同的比例就可以求出多个分割尺度下的分割图。最后生成文字检测分割图标签{G1,G2,...Gn}\{G_1,G_2,...G_n\}

网络损失函数

网络的整体损失函数可以表示为:
L=λLc+(1λ)LsL = \lambda L_c+(1-\lambda)L_s
LcL_c表示没有收缩的分割图像GnG_n对应的损失complete text instancesLsL_s表示其余的收缩的label对应的损失{G1,G2,...Gn1}\{G_1,G_2,...G_{n-1}\}
因为文字区域一般占图像中的很小一部分,如果直接做像素级的分类,网络趋向于将预测为非文字类别,所以文中引用一种类别均衡方式dice coefficient来解决这一问题。
在这里插入图片描述
从公式中可以看出,当SiS_iGiG_i完全相同时D(Si,Gi)=1D(S_i,G_i)=1,完全不同时D(Si,Gi)=0D(S_i,G_i)=0
对于LcL_c引入了难样本挖掘(OHEM)提升分割性能,假设由OHEM求到的训练mask为MM,所以:
Lc=1D(SnM,GnM)L_c = 1-D(S_n*M,G_n*M)
LsL_s的计算过程中则忽略SnS_n中分割结果为非文本像素点:
在这里插入图片描述

为什么采用渐进尺度展开

在这里插入图片描述
从图中可以看出,如果只采用两级分割图(一个较小的收缩的预测图和一个完整的分割图),那么两个相邻但大小不同的文本行的检测结果将有一定的误差。而增加渐进的级数可以使检测结果更加精确。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章