PSENet原理介绍

    通常OCR中,文字检测都是由目标检测继承而来,目标检测大多都是基于先验框的(anchor base),近期出现的no-anchor模式本质上也是基于先验框的。anchor-base模式在目标检测衍生到OCR领域就有很多缺陷,比如:倾斜(或扭曲)文字检测不准、过长文字串检测不全、过短文字串容易遗漏、距离较近的无法分开等缺点。近期,渐进式扩展网络(PSENet)横空出世,以另一种思路解决了这些问题,下面我们来梳理一下该模型,不妥之处敬请指正。

模型概述

    PSENet是一种新的实例分割网络,它有两方面的优势。 首先,psenet作为一种基于分割的方法,能够对任意形状的文本进行定位.其次,该模型提出了一种渐进的尺度扩展算法,该算法可以成功地识别相邻文本实例(该算法在下文会详细介绍)。

整体框架

PSENet原理介绍

    如上图所示该模型主干网络使用ResNet系列(可以根据自己需要调整),输入图像维度为:[B,3,H,W][B, 3, H, W][B,3,H,W],通过下采样,特征融合,上采样,最后得到得到与原图片尺寸相同的输出F,维度大小为:[B,C,H,W][B, C, H, W][B,C,H,W],其中C的大小为确定的kernel_num,这里记为n, 这样就得到最终的S1...SnS_1...S_nS1​...Sn​图片,然后利用广度优先算法从S1S_1S1​开始,到SnS_nSn​结束,获取到最终的文本连通域。其中连通域的数量在S1S_1S1​中就已经确定,S1S_1S1​是预测的图片中目标文字的核心区域(并不是全部范围)。

算法介绍

    该论文提出了渐进式尺度扩展算法,我们将每个文本实例分配给多个预测的分割区域,记作S1......SnS_1......S_nS1​......Sn​。我们将这些分割区域表示为本文中的“核”,并且对于一个文本实例,有几个对应的内核。每个内核与原始的整个文本实例共享相似的形状,并且它们都位于相同的中心点但在比例上不同。这些“核“对应的Ground Truth的产生流程如下:

PSENet原理介绍

    如上图所示:(a)中pip_ipi​为第iii个核,pnp_npn​是第nnn个核,did_idi​为pip_ipi​与pnp_npn​边缘之间的距离;(b)为最原始的文本区域;©为产生的多个分割区域。
    如何得到分割实例对应的label呢?为了依次获得例如图©中的缩小的掩模,我们利用Vatti clipping algorithm来缩小原来的多边形pnp_npn​的did_idi​像素,并得到缩小多边形pip_ipi​ (见图(a))。随后,每个缩小的多边形pip_ipi​被转换成一个0/1的二进制掩码,用于分割标签的Ground Truth。我们将这些Ground Truth分别表示为G1.....GnG_1.....G_nG1​.....Gn​。从数学上讲,如果我们认为比例是rir_iri​,那么pnp_npn​与pip_ipi​之间的范围did_idi​可以计算为:
di=Area(pn)(1ri2)Perimeter(pn) d_i = \frac{Area(p_n)(1-r_i^2)}{Perimeter(p_n)} di​=Perimeter(pn​)Area(pn​)(1−ri2​)​
    其中Area(pn)Area(p_n)Area(pn​)为多边形pnp_npn​的面积,Perimeter(pn)Perimeter(p_n)Perimeter(pn​)为多边形pnp_npn​的周长,rir_iri​为pnp_npn​与pip_ipi​之间的比例。
    rir_iri​的计算如下:
ri=1(1m)(ni)n1 r_i = 1 - \frac{(1-m)*(n-i)}{n-1} ri​=1−n−1(1−m)∗(n−i)​
    其中mmm为缩小比例,取值范围在(0, 1];nnn为文本分割实例的数量,即”核“的数量。
    对于预测的n个分割实例S1......SnS_1......S_nS1​......Sn​,为了得到最终的检测结果,我们采用了渐进的尺度扩展算法。 它基于广度优先搜索(BFS), 由三个步骤组成:

  1. 从具有最小尺度的核S1S_1S1​开始(在此步骤中可以区分实例,不同实例有不同的连通域);
  2. 通过逐步在较大的核中加入更多的像素来扩展它们的区域;
  3. 完成直到发现最大的核。

    该算法的伪代码如下:

PSENet原理介绍

    该算法的具体图解如下:

PSENet原理介绍

    由于正常情况下非文本区域远大于文本区域,所以使用二分类的交叉熵损失会使得结果更加偏向于非文本区域,因此该模型中使用了dice coefficient。定义如下:
D(Si,Gi)=2x,y(Si,x,yGi,x,y)x,ySi,x,y2+x,yGi,x,y2 D(S_i, G_i) = \frac{2*\sum_{x, y}(S_{i, x, y}*G_{i, x, y})}{\sum_{x, y}S_{i, x, y}^2+\sum_{x, y}G_{i, x, y}^2} D(Si​,Gi​)=∑x,y​Si,x,y2​+∑x,y​Gi,x,y2​2∗∑x,y​(Si,x,y​∗Gi,x,y​)​
    Sx,yS_{x, y}Sx,y​为预测实例中像素点(x, y)的值,Gx,yG_{x, y}Gx,y​为label中像素点(x, y)的值。
    该模型定义了新的损失函数,损失计算如下:
L=λLc+(1λ)LsL = \lambda L_c + (1-\lambda)L_sL=λLc​+(1−λ)Ls​
    LcL_cLc​为文本区域分类损失,LsL_sLs​为收缩文本实例损失,计算方式如下:
Lc=1D(SnM,GnM)Ls=11n1(i=1n1D(SiW,GiW))W={1   if Sn,x,y>=0.50   otherwise \begin{aligned} &L_c = 1 - D(S_n*M, G_n*M)\\ &L_s = 1 - \frac{1}{n-1}(\sum_{i=1}^{n-1}D(S_i*W, G_i*W))\\ &W=\begin{cases} 1\space\space\space if \space S_{n, x, y} >= 0.5 \\ 0\space\space\space otherwise \end{cases} \end{aligned} ​Lc​=1−D(Sn​∗M,Gn​∗M)Ls​=1−n−11​(i=1∑n−1​D(Si​∗W,Gi​∗W))W={1   if Sn,x,y​>=0.50   otherwise​​
    MMM的取值采用在线难例挖掘(online hard example miniing,OHEM)的方式生成,也是一个0/1的掩码。OHEM算法的核心思想是根据输入样本的损失进行筛选,筛选出难例,表示对分类和检测影响较大的样本,然后将筛选得到的这些样本应用在随机梯度下降中训练。具体到该模型中,选取所有正样本(主要是正样本本来就偏少,所以就全取)以及困难样本,过滤掉easy的负样本。被选中的像素点取值为1,未选中的取值为0。
    最后说一些感受,OCR中文本检测本人用过YOLO、CTPN、PSENet。对于这三个模型的感受是,YOLO和CTPN的检测速度较快,PSENet的检测速度稍慢,YOLO对于长文本或短文本的很容易出现缺损或丢失的情况,CPTN在长短文本方面效果好一些,但是文本对齐效果不理想,PSENet在检测效果方面是碾压了前两者的。PSENet不仅适应任意角度的文本检测,而且对近距离文本分割效果更好。

上一篇:模板 - 双向链表


下一篇:There is no getter for property named 'xxxxx' in 'class java.lang.String'