前言
本文是在边缘检测经典算法HED之上的扩展,在这篇论文中我们讲过HED算法可以无缝转移到实例分割场景中。而这篇论文正是将场景文字检测任务转换成语义分割任务来实现HED用于文字检测的。图1是HED在身份证上进行边缘检测得到的掩码图,从图1中我们可以看出HED在文字检测场景中也是有一定效果的。
图1:HED在身份证上得到的掩码图
HED之所以能用于场景文字检测一个重要的原因是文字区域具有很强的边缘特征。
论文的题目为Holistic,Multi-Channel Prediction(HMCP),其中Holistic表示算法基于HED,Multi-Channel表示该算法使用多个Channel的标签训练模型。也就是为了提升HED用于文字检测的精度,这篇文章做的改进是将模型任务由单任务模型变成是由文本行分割,字符分割和字符间连接角度构成的多任务系统。由于HMCP采用的是语义分割的形式,所以其检测框可以扩展到多边形或者是带旋转角度的四边形,这也更符合具有严重仿射变换的真实场景。
1. HMCP详解
HMCP的流程如图2:(a)是输入图像,(b)是预测的三个mask,分别是文本行掩码,字符掩码和字符间连接角度掩码,(c)便是根据(b)的三个掩码得到的检测框。
图2:HMCP流程
那么问题来了:
1. 如何构建三个channel掩码的标签值;
2. 如何根据预测的掩码构建文本行。
1.1 HMCP的标签值
图3:HMCP的Ground Truth以及三种Mask
1.2 HMCP的骨干网络
HMCP的骨干网络继承自HED,如图4所示。HMCP的主干网络使用的是VGG-16,在每个block降采样之前通过反卷积得到和输入图像大小相同的Feature Map,最后通过fuse层将5个side branch的Feature Map拼接起来并得到预测值。HMCP和HED的不同之处是HMCP的输出节点有三个任务。
图4:HMCP的骨干网络
1.3 HMCP的损失函数
1.3.1 训练
与HED不同的是HMCP的损失函数没有使用side branch,即损失函数仅由fuse层构成:
1.4 检测
1.4.1 预测掩码
HMCP的预测的三个Map均是由fuse层得到,因为作者发现side branch的引入反而会伤害模型的性能。
1.4.2 检测框生成
HMCP的检测过程如图5:给定输入图像(a)得到(b),(c),(d)三组掩码。通过自适应阈值,我们可以得到(e)以及(f)的分别基于文本区域和基于字符的检测框,需要注意的是我们在制作字符掩码的时候掩码区域被压缩了一半,所以在这里我们需要将它们还原回来。
图5:HMCP的检测框生成流程
图6:德劳内三角化
空间相似性定义为
图7:HMCP用于弧形文字区域检测
其实关于上面这两段不是很理解工作原理,带后续补充。
总结
这篇论文巧妙的将实例分割用于场景文字检测领域,其三个掩码图的多任务模型的设计非常漂亮。最后通过三个掩码图生成检测框的算法技术性非常高,是一篇非常值得学习的论文。
在文本检测数据集中,常见的标签类型有QUAD和RBOX两种形式。其中QUAD是指标签值包含四个点G={(xi,yi)∣i∈{1,2,3,4}},由这四个点构成的不规则四边形(Quadrangle)便是文本区域。QBOX则是由一个规则矩形R和其旋转角度θ构成,即G={R,θ}。QUAD和RBOX是可以相互转换的。
HMCP的数据的Ground Truth分别包含基于文本行和基于字符的标签构成(QUAD或RBOX),如图3.(b)和图3.(c)。数据集中只有基于文本行的Ground Truth,其基于单词的Ground Truth是通过SWT得到的。(d)是基于文本行Ground Truth得到的二进制掩码图,文本区域的值为1,非文本区域的值为0。(e)是基于单词的二进制掩码图,掩码也是0或者1。由于字符间的距离往往比较小,为了能区分不同字符之间的掩码,正样本掩码的尺寸被压缩到了Ground Truth的一半。(f)是字符间连接角度掩码,其值为[−π/2,π/2],然后再通过归一化映射到[0,1]之间。角度的值是由RBOX形式的Ground Truth得到的值。
设HMCP的训练集为S={(Xn,yn),n=1,...,N},其中N是样本的数量。标签Yn由三个掩码图构成,即Yn={Rn,Cn,Θn},其中Rn={rj(n)∈{0,1},j=1,...,∣Rn∣}表示文本区域的二进制掩码图,Cn={cj(n)∈{0,1},j=1,...,∣Cn∣}是字符的二进制掩码图,Θn={θj(n)∈{0,1},j=1,...,∣Θn∣}是相邻字符的连接角度。注意只有当rj(n)=1时θj(n)才有效。
L=Lfuse(W,w,Y,Y^) 其中W为VGG-16部分的参数,w为fuse层部分的参数。Y^={R^,C^,Θ^}是预测值:
Y^=CNN(X,W,w) Lfuse(W,w,Y,Y^)由三个子任务构成:
Lfuse(W,w,Y,Y^)=λ1Δr(W,w,R,R^)+λ2Δc(W,w,C,C^)+λ3Δo(W,w,Θ,Θ^,R) 其中λ1+λ2+λ3=1。Δr(W,w)表示基于文本掩码的损失值,Δc(W,w)是基于字符掩码的损失值,两个均是使用HED采用过的类别平衡交叉熵损失函数:
Δr(W,w,R,R^)=−βRj=1∑∣R∣RjlogPr(R^j=1;W,w)+(1−βR)j=1∑∣R∣(1−Rj)logPr(R^j=0;W,w) 上式中的β为平衡因子βR=∣R∣∣R−∣,∣R−∣为文本区域Ground Truth中负样本个数,∣R∣为所有样本的个数。
基于字符掩码的损失值与Δr(W,w,R,R^)类似:
Δc(W,w,C,C^)=−βCj=1∑∣C∣CjlogPr(C^j=1;W,w)+(1−βC)j=1∑∣C∣(1−Cj)logPr(C^j=0;W,w) Δo(W,w,Θ,Θ^,R)定义为:
Δo(W,w,Θ,Θ^,R)=j=1∑∣R∣Rj(sin(π∣Θ^j−Θj∣)) 对于一个文本区域,假设其中有m个字符区域:U={ui,i=1,...,m},通过德劳内三角化(Delaunary Triangulation)得到的三角形T我们可以得到一个由相邻字符间连接构成的图G={U,E},如图(g)。
德劳内三角化能够有效的去除字符区域之间不必要的链接,维基百科给的德劳内三角化的定义是指德劳内三角化是一种三角剖分DT(P),使得在P中没有点严格处于DT(P)中任意一个三角形外接圆的内部。德劳内三角化最大化了此三角剖分中三角形的最小角,换句话,此算法尽量避免出现“极瘦”的三角形,如图6。
在图G={U,E}中,U表示图的顶点表示字符的位置。E表示图的边表示两个字符之间的相似度,边的权值w的计算方式为:
w={s(i,j)0ife∈Totherwise s(i,j)有空间相似性a(i,j)和角度相似性o(i,j)计算得到:
s(i,j)=a(i,j)+o(i,j)2a(i,j)o(i,j) a(i,j)=exp(−2D2d2(i,j)) 其中d(i,j)是(ui,uj)之间的欧氏距离,D是整个德劳内三角形的边长均值。
角度相似性o(i,j)定义为:
o(i,j)=cos(Λ(ϕ(i,j)−ψ(i,j))) 其中ϕ(i,j)表示(ui,uj)形成的直线与水平方向的夹角,ψ(i,j)即两个节点之间的区域的所有像素点的夹角的平均值,Λ表示两个角度的夹角。
综上可以看出,s(i,j)和d(i,j)成反比,也就是两个字符的距离越近,这两个字符的相似度越高;s(i,j)和ϕ(i,j)也是成反比,即两个字符的角度越小(越接近水平文本行),两个字符的相似度越高。
得到带权值的无向图之后,使用Kruskal等方法生成最大生成树M。由图到树的生成过程是一个剪枝的过程,如若在树的基础上再进行剪枝,此时树便会分裂成由若干棵个树组成的森林。在最大生成树的基础上剪枝K−1次会生成K棵树,K≥1。如图5.(a)所示,文本区域由两行文本构成,显然我们需要在M的基础上进行一次剪枝才能生成两棵树,从而通过两棵树分别确定一个文本区域。
那么,给定一张图片,我们如何其文本行的个数(树的个数)K呢?论文给出的策略是最大化Svm,Svm的计算方式为:
Svm=i=1∑Kλi2λi1 其中λi1和λi2是协方差矩阵Ci最大和第二大的两个特征值。而Ci是由一个文本区域(论文中叫做cluster)的字符中心点坐标构成的矩阵。
在一些样本中,会存在如图7所示的弧形文本区域,而传统的方法是基于一条直线上的文本行设计的。为了解决这个问题,HMCP引入了阈值τ,权值大于τ的边既不会被删除,也不会被选中。