PSENet:Shape Robust Text Detection with Progressive Scale Expansion Network ---- 论文阅读笔记

论文地址:https://arxiv.org/abs/1903.12473
论文翻译:https://blog.csdn.net/m0_38007695/article/details/96425198
代码地址
PyTorch版本:https://github.com/whai362/PSENet , https://github.com/WenmuZhou/PSENet.pytorch
TensorFlow版本:https://github.com/liuheng92/tensorflow_PSENet

方法简介

PSENet:主干网络ResNet,基本框架FPN。

亮点: 提出了内核(把 S 1 , S 2 , . . . , S n S_1,S_2,...,S_n S1,S2,...,Sn 中的文本实例的分割区域称为内核kernels)和渐进式扩展算法(Progressive Scale Expansion )。

优势

  1. 是一个基于像素分割的方法,能够精确地定位任意形状的文本实例
  2. 提出了渐进式扩展算法,即使两个文本实例离得很近也可以分开,从而保证文本实例的准确位置。

方法流程

  1. 输入图像,从主干网络获得四个256通道特征图(即 P 2 , P 3 , P 4 , P 5 ​ P_2, P_3, P_4, P_5​ P2,P3,P4,P5)。
  2. 通过函数 C ( ⋅ ) ​ \Bbb C(\cdot)​ C() 用1024个通道融合了四个特征映射得到feature map F ​ F​ F(进一步将语义特征从低级别升级到高级别):

F = C ( P 2 , P 3 , P 4 , P 5 ) = P 2    ∣ ∣    U p × 2 ( P 3 )    ∣ ∣    U p × 4 ( P 4 )    ∣ ∣    U p × 8 ( P 5 ) F = \Bbb C(P_2, P_3, P_4, P_5) = P_2 \;||\; Up_{×2}(P_3) \;||\; Up_{×4}(P_4) \;||\; Up_{×8}(P_5) F=C(P2,P3,P4,P5)=P2Up×2(P3)Up×4(P4)Up×8(P5)

​ 其中 “ ∣ ∣ ​ ||​ ” 代表拼接(concatenation), U p × 2 ( ⋅ ) ,    U p × 4 ( ⋅ ) ,    U p × 8 ( ⋅ ) ​ Up_{×2}(\cdot),\; Up_{×4}(\cdot), \; Up_{×8}(\cdot)​ Up×2(),Up×4(),Up×8() 分别代表上采样 2 ,    4 ,    8 ​ 2, \; 4, \;8​ 2,4,8 倍。

  1. 随后,将 F ​ F​ F 通过到 C o n v ( 3 , 3 ) − B N − R e L U ​ Conv(3,3)-BN-ReLU​ Conv(3,3)BNReLU 层中并减少至256个通道。 接下来,它通过 n ​ n​ n C o n v ( 1 , 1 ) − U p − S i g m o i d ​ Conv(1, 1)-Up-Sigmoid​ Conv(1,1)UpSigmoid 层并产生 n ​ n​ n 个分割结果 S 1 , S 2 , . . . , S n ​ S_1,S_2,...,S_n​ S1,S2,...,Sn

    C o n v ​ Conv​ Conv B N ​ BN​ BN R e L U ​ ReLU​ ReLU U p ​ Up​ Up 指的是卷积,批量归一化,整流线性单元和上采样。

    每个 S i S_i Si是一定尺度的所有文本实例的一个分割掩码,此处的尺度由超参数决定。 S 1 S_1 S1 具有最小尺度(最小内核)的文本实例的分割结果, S n S_n Sn 表示原始分割掩模(最大内核)。

  2. 使用渐进式算法将 S 1 S_1 S1 中的所有实例的内核逐渐扩展到它们在 S n S_n Sn 中的完整形状,并获得最终的检测结果 R R R

对于训练步骤:

​ 执行1,2,3,得到 n n n 个分割结果 S 1 , S 2 , . . . , S n S_1,S_2,...,S_n S1,S2,...,Sn 之后,对每一个分割结果和其对应的ground truth计算损失,反向传播,更新参数。

对于推理步骤:

​ 执行1,2,3,4得出最终的检测结果。

方法细节

1. 渐进尺度扩展算法

​ 这有一个生动的例子(下图),解释了渐进扩展算法的流程,其中心思想来自于广度优先搜索(BFS)算法。在这个例子里,我们有三个分割的结果 S = { S 1 , S 2 , S 3 } ​ S = \{S_1, S_2, S_3\}​ S={S1,S2,S3}(图(a)(e)(f))。首先基于最小内核的map S 1 ​ S_1​ S1(图(a)),4个不同的连通域 C = { c 1 , c 2 , c 3 , c 4 } ​ C = \{c_1, c_2, c_3,c_4\}​ C={c1,c2,c3,c4} 可以作为初始化。在图(b)中分别使用不同的颜色代表不同的连通域。现在,我们检测到了全部文本实例的中心部分(最小内核)。然后,我们通过合并 S 2 ​ S_2​ S2 中的像素逐步扩展检测到的内核,然后 S 3 ​ S_3​ S3。这两个尺度扩展结果分别在图©和图(d)中显示。最后,我们提取在图(d)中用不同颜色标记的连通域作为文本实例的最终预测。

在这里插入图片描述

​ 尺度扩展的流程在图(g)中说明。扩展基于广度优先搜索算法,该算法从多个核的像素开始并迭代地合并相邻的文本像素。请注意,在扩展期间可能存在冲突的像素,如图(g)中的红色框所示。在我们的实践中处理冲突的原则是,混淆的像素只能由一个单独的内核合并 - 先到先得。由于“渐进式”扩展程序,这些边界冲突不会影响最终检测和性能。 算法1总结了尺度扩展算法的细节。在伪代码中, T , P ​ T, P​ T,P 是中间结果, Q ​ Q​ Q 是队列。 N e i g h b o r ( ⋅ ) ​ \rm Neighbor(\cdot)​ Neighbor() 代表 p ​ p​ p 的邻近像素(4个方向)。 G r o u p B y L a b e l ( ⋅ ) ​ \rm GroupByLabel(\cdot)​ GroupByLabel() 是按标签对中间结果进行分组的函数。“ S i [ q ] = T r u e ​ S_i[q] = \rm True​ Si[q]=True” 表示 S i ​ S_i​ Si 中像素 q ​ q​ q 的预测值属于文本部分。 C ​ C​ C E ​ E​ E 分别表示扩展前后的内核。
在这里插入图片描述

2. 标签生成

[外链图片转存失败(img-GbjOcNmf-1563441756505)(./图5 标签生成.png)]
​ PSENet生成不同尺度内核的分割结果(例如 S 1 , S 2 , . . . , S n S_1, S_2,...,S_n S1,S2,...,Sn)。因此,在训练的时候,有相对应的不同内核的Ground Truth。这些Ground Truth通过缩小原始文本实例生成。在上图 (b) 中蓝色边框的多边形代表原始文本实例,它对应于最大的分割标签掩码(最右边图 ( c ))。为了顺序获得在图 ( c ) 中的收缩掩模,我们利用 V a t t i \rm Vatti Vatti 裁剪算法将原始多边形 p n p_n pn 缩小 d i d_i di 像素并得到缩小的多边形 p i p_i pi(见图(a))。随后,每个收缩的多边形 p i p_i pi 被转换成 0/1 二进制掩码作为分割标签 Ground Truth。 我们将这些Ground Truth分别表示为 G 1 , G 2 , . . . , G n G_1,G_2,...,G_n G1,G2,...,Gn。在数学上,如果我们将比例视为 r i r_i ri,则 p n p_n pn p i p_i pi 之间的余量 d i d_i di 可以计算为:
d i = A r e a ( p n ) × ( 1 − r i 2 ) P e r i m e t e r ( p n ) d_i = \frac{\rm{Area}(\it{p_n}) × (1 - r_i^2)}{\rm Perimeter (\it p_n)} di=Perimeter(pn)Area(pn)×(1ri2)
其中, A r e a ( ⋅ ) ​ \rm Area(\cdot)​ Area() 是计算多边形面积的函数, P e r i m e t e r ( ⋅ ) ​ \rm Perimeter(\cdot)​ Perimeter() 是计算多边形周长的函数。我们定义Ground Truth G i ​ G_i​ Gi 的比例 r i ​ r_i​ ri 为:
r i = 1 − ( 1 − m ) × ( n − i ) n − 1 r_i = 1- \frac{(1-m) × (n-i)}{n-1} ri=1n1(1m)×(ni)
其中, m m m 是最小的尺度比例(在 ( 0 , 1 ] (0,1] (0,1]之间), n n n 代表分割结果数。基于上方公式的定义,比例值( r 1 , r 2 , . . . , r n r_1, r_2, ...,r_n r1,r2,...,rn)由两个超参数 n n n m m m决定,它们从 m m m 线性增加到 1 。

3. 损失函数

​ 损失函数为:
L = λ L c + ( 1 − λ ) L s L = \lambda L_c + (1-\lambda) L_s L=λLc+(1λ)Ls
其中 L c L_c Lc L s L_s Ls 分别代表完整的文本实例和一个缩小的文本实例, λ \lambda λ 平衡 L c L_c Lc L s L_s Ls 之间的重要性。

​ 在自然图像中,文本实例基本只占图像很小的区域,当使用二进制交叉熵时,这使得网络的预测更偏向于非文本区域。所以采用了 dice系数。这个dice系数 D ( S i , G i ) D(S_i, G_i) D(Si,Gi) 可以表示为:
D ( S i , G i ) = 2 ∑ x , y ( S i , x , y × G i , x , y ) ∑ x , y S i , x , y 2 + ∑ x , y G i , x , y 2 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,ySi,x,y2+x,yGi,x,y22x,y(Si,x,y×Gi,x,y)
其中 S i , x , y ​ S_{i, x,y}​ Si,x,y G i , x , y ​ G_{i,x,y}​ Gi,x,y 分别代表了像素 ( x , y ) ​ (x, y)​ (x,y) 在分割结果 S i ​ S_i​ Si 和Ground Truth G i ​ G_i​ Gi 中的值。

​ 此外,有许多类似于文本笔划的模式,例如栅栏,格子等。因此,文章在训练期间采用在线硬实例挖掘(OHEM)来更好地区分这些模式。

对于OHEM可以参考文章:https://blog.csdn.net/u014380165/article/details/73148073

L c ​ L_c​ Lc 重点在于分割文本和非文本区域。把通过OHEM给出的training mask作为 M ​ M​ M,则 L c ​ L_c​ Lc 可以表示为:
L c = 1 − D ( S n ⋅ M , G n ⋅ M ) L_c = 1 - D(S_n \cdot M, G_n \cdot M) Lc=1D(SnM,GnM)
L s L_s Ls 是缩减文本区域的损失。因为他们是被完整文本实例的原始区域包围的,在分割结果 S n S_n Sn 中忽视非文本区域的像素去避免一定冗余。因此, L s L_s Ls 可以表示为:
L s = 1 − ∑ i = 1 n − 1 D ( S i ⋅ W , G i ⋅ W ) n − 1 W x , y = { 1 , i f    S n , x , y ≥ 0.5 ; 0 , o t h e r w i s e . L_s = 1 - \frac{\sum_{i=1}^{n-1}D(S_i \cdot W, G_i \cdot W)}{n-1} \\ W_{x,y} = \begin{cases} 1, \quad if \;S_{n,x,y} \geq 0.5; \\ 0, \quad otherwise. \end{cases} Ls=1n1i=1n1D(SiW,GiW)Wx,y={1,ifSn,x,y0.5;0,otherwise.
其中 W W W 是在 S n S_n Sn 中忽视非文本区域的 mask, S n , x , y S_{n,x,y} Sn,x,y S n S_n Sn 中像素 ( x , y ) (x,y) (x,y) 的值。

实现细节

训练:

  1. 使用 ImageNet 预训练的 ResNet,随机梯度下降(SGD)

  2. 数据:ICDAR2017 MLT(7200训练图像,1800张验证图像)

  3. Batch Size:16

  4. 迭代次数:180K

  5. 学习率: 1 × 1 0 − 3 1 × 10^{-3} 1×103 ,在60K和120K迭代步数时分别除以10

  6. 权重衰减: 5 × 1 0 − 4 5×10^{-4} 5×104 ,0.99的Nesterov动量 没有阻尼

    其余数据集采用了两种训练策略:(1)从头训练。(2)在IC17-MLT上fine-tuning。从头开始训练时,batch size 16,迭代次数36K训练PSENet,初始学习率为 1 × 1 0 − 3 1 × 10^{-3} 1×103 ,在12K和24K迭代步数时分别除以10。在IC17-MLT上fine-tuning是,迭代次数是24K,初始学习率为 1 × 1 0 − 4 1× 10^{-4} 1×104,在12K迭代次数时除以10

损失函数:

  1. λ = 0.7 \lambda = 0.7 λ=0.7

  2. OHEM的负样本比例设置为 3

数据增强:

  1. 图像随机缩放 { 0.5 , 1.0 , 2.0 , 3.0 } \{0.5, 1.0, 2.0, 3.0\} {0.5,1.0,2.0,3.0}
  2. 图像随机的水平翻转,在 [ − 1 0 ∘ , 1 0 ∘ ] [-10^\circ, 10^\circ] [10,10] 范围内随机旋转;
  3. 从转换的图像中随机剪切 640 × 640 640 × 640 640×640 大小的图像。
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CharlesWu123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值