文字检测算法--Differentiable Binarization

文字检测算法–Differentiable Binarization

Differentiable Binarization

近年来,基于分割的方法在文本检测中备受欢迎。分割算法能够更加准确地描述不同形状的场景文本。对于基于分割方法的检测,将分割算法生成的概率图转换成二值化的处理过程是至关重要的。论文的主要贡献就是提出了DB算法,一个可微的二值化算法,不仅仅简化了二值化处理过程,而且也有助于增强文本检测性能。

大多数基于分割的文本检测算法,设定一个固定的阈值,将分割网络得到的概率图转换成二值图,然后再基于某种启发式技术,比如像素聚类等,将像素分组形成文本实例。DB不同于其他分割文本检测算法,二值图被嵌入分割网络中,联合优化。主要实现形式是:图中的每一个位置的阈值可以被适应性地预测,这样就可以全面性地区分前景和背景。由于标准的二值化函数是不可微分的,不能和分割网络一起优化,因此论文中提出了一个近似模拟二值化函数且可微的可微二值化函数(Differentiable Binarization,DB)。

Traditional pipeline and DBNet pipeline

架构

DBNet 的整体架构如下图所示:

  1. 首先,图像被喂入一个feature-pyramid的backbone网络
  2. 其次,feature-pyramid向上取样到相同的尺寸,并级联生成输出特征 F F F
  3. 再者,特征 F F F被用来预测概率图 P P P和阈值图 T T T
  4. 最后,由 P P P T T T计算出近似二值图 B ^ \hat{B} B^

DB架构

SB vs DB

Standard Binarization

给定一个概率图(probability map) P ∈ R H × W P \in R^{H \times W} PRH×W,其中 H H H W W W分别表示概率图的高和宽。二值图(binary map) B ∈ R H × W B \in R^{H \times W} BRH×W中有效文本区域的像素值为1。二值图由概率图生成。对概率图的处理过程如下,设置一个阈值 t t t,概率图中 ( i , j ) \left(i,j\right) (i,j)位置的像素值不小于阈值 t t t,那么二值图中相同位置 ( i , j ) \left(i,j\right) (i,j)上的像素值为1,否则为0。公式如下所示:

B i , j = { 1 i f    P i , j ≥ t , 0 o t h e r w i s e . B_{i,j} = \left\{\begin{matrix} 1 & if \; P_{i,j} \geq t, \\ 0 & otherwise. \end{matrix}\right. Bi,j={10ifPi,jt,otherwise.

differentiable binarization

上述SB是不可微分的,那么在分割网络训练过程中,SB是不能够被优化的。为了解决这个问题,论文中提出DB方法近似模拟二值化。公式如下所示:

B ^ i , j = 1 1 + e − k ( P i , j − T i , j ) \hat{B}_{i,j} = \frac{1}{1 + e^{-k \left( P_{i,j} - T_{i, j} \right)} } B^i,j=1+ek(Pi,jTi,j)1

其中 B ^ i , j \hat{B}_{i,j} B^i,j是二值图, T T T是从网络中学习到的可适应阈值图(adaptive threshold map), k k k是扩大参数,实验验证 k = 50 k=50 k=50

DB可以提高性能可以由梯度的反向传播解释。以二值交叉熵损失函数为例。简化DB函数为 f ( x ) = 1 1 + e − k x f\left( x\right) = \frac{1}{1 + e^{-kx}} f(x)=1+ekx1,其中 x = P i , j − T i , j x = P_{i,j} - T_{i,j} x=Pi,jTi,j。那么正例标签的loss l + l_{+} l+和负例标签的loss l − l_{-} l定义和其梯度如下:

l + = − l o g 1 1 + e − k x l − = − l o g ( 1 − 1 1 + e − k x ) ⇒ σ l + σ x = − k f ( x ) e − k x σ l − σ x = − k f ( x ) \begin{matrix} l_{+} = -log \frac{1}{1 + e^{-kx}} \qquad \quad \\ l_{-} = -log \left( 1 - \frac{1}{1 + e^{-kx}} \right) \end{matrix} \Rightarrow \begin{matrix} \qquad \frac{\sigma l_{+}}{\sigma x} = -k f \left( x \right)e^{-kx} \\ \frac{\sigma l_{-}}{\sigma x} = -k f \left( x \right) \end{matrix} l+=log1+ekx1l=log(11+ekx1)σxσl+=kf(x)ekxσxσl=kf(x)

DB近似模拟SB函数展示的二值化,但是DB是可微的,可以应用到分割模型的训练阶段。
下图是DB和它导数的展示图,如图(a)所示,DB和SB相似,SB在横坐标为0时是断崖式下降,DB在横坐标为0时,有一个坡度。如图(b)和(c)所示, l + l_{+} l+ l − l_{-} l的梯度受参数 k k k影响比较大,随着 k k k值越大,对大多数错误预测区域$ x < 0 for l_{+} ; x > 0 for l_{-}$,梯度放大显著,这能够帮助优化并且产生更多独特的预测。

DB 和 它导数的展示图

标签生成

概率图的标签生成受PSENet影响,假设一个包含文本的图像,它的文本区域的多边形可有片段集合描述 G = { S k } k = 1 n G = \{ S_{k} \}_{k=1}^{n} G={Sk}k=1n,其中 n n n是多边形顶点的个数。文本有效区域可以通过使用Vatti clipping algorithm缩放多边形 G G G G s G_{s} Gs生成。缩放的偏移量 D D D可以通过原多边形的周长 L L L和面积 A A A计算得到,公式定义如下:

D = A ( 1 − r 2 ) L D = \frac{A \left( 1 - r^{2} \right)}{L} D=LA(1r2)

其中 r r r是缩放比率,经验性地设为为0.4。使用类似的策略,我们可以从阈值图中生成标签。首先文本区域 G G G使用相同的偏移量 D D D膨胀为 G d G_{d} Gd。将 G d G_{d} Gd G s G_{s} Gs之间的区域作为文本区域的边界,其中通过计算 G G G中最近片段的距离可以生成阈值图的标签。

便签生成

Loss 函数

损失函数 L L L可以看作是概率图损失函数 L s L_{s} Ls,二值图损失函数 L b L_{b} Lb和阈值图损失函数 L t L_{t} Lt的加权和,根据各个损失函数的数值,分别设 α \alpha α β \beta β 1.0 1.0 1.0 10 10 10,损失函数 L L L定义如下:

L = L s + α × L b + β × L t L s = L b = ∑ i ∈ S l y i l o g x i + ( 1 − y i ) l o g ( 1 − x i ) L t = ∑ i ∈ R d ∥ y i ∗ − x i ∗ ∥    \begin{matrix} L= L_{s} + \alpha \times L_{b} + \beta \times L_{t} \qquad \qquad \qquad \qquad \\ L_{s}= L_{b} = \sum_{i \in S_{l}} y_{i}log x_{i} + \left( 1- y_{i} \right) log\left( 1- x_{i} \right) \\ L_{t} = \sum_{i \in R_{d}} \| y_{i}^{*} - x_{i}^{*} \| \qquad \qquad \qquad \qquad \qquad \; \end{matrix} L=Ls+α×Lb+β×LtLs=Lb=iSlyilogxi+(1yi)log(1xi)Lt=iRdyixi

其中 L s L_{s} Ls L b L_{b} Lb是二值交叉熵损失函数,为了解决正例和负例的不平衡问题,hard negative mining 被用到BCE中, S l S_{l} Sl是取样数据集,正例和负例的比率为 1 : 3 1:3 1:3
L t L_{t} Lt是预测值和在膨胀文本多边形 G d G_{d} Gd的标签的 L 1 L1 L1函数之和。其中 R d R_{d} Rd是膨胀多边形 G d G_{d} Gd中的像素值的下标集合。 y ∗ y^{*} y是阈值图中的标签值。

推理阶段后处理

在推理阶段,我们可以使用概率图或者近似二值图去生成文本bbox,结果都是一样的。为了更好的效率,我们移除阈值分支,使用概率图去生成文本bbox。整个流程包含三步:

  1. 首先,概率图/近似二值图使用一个常量阈值(0.2)二值化得到二值图
  2. 从二值图中获得连联通区域(缩放文本区域)
  3. 缩放区域通过Vatti clipping algorithm算法,以偏移量 D ′ {D}' D膨胀

偏移量 D ′ {D}' D的计算公式为: D ′ = A ′ × r ′ L ′ {D}' = \frac{{A}' \times {r}'}{{L}'} D=LA×r,其中 A ′ {A}' A是缩放多边形的面积, L ′ {L}' L是缩放多边形的周长, r ′ {r}' r按经验设为 1.5 1.5 1.5

实现细节

  1. 对训练数据进行增广,包括如下三种方式,增广后的图片resize到 640 × 640 640 \times 640 640×640

    • ( − 1 0 0 , 1 0 o ) \left( -10^{0}, 10^{o}\right) (100,10o)的角度进行随机旋转
    • 随机剪裁(crop)
    • 随机翻转(flip)
  2. 训练时,在训练所有真实数据集之前,先在合成数据集上进行100k迭代的预训练,然后再在各个真实数据集上进行1200 epochs的微调。学习率采用的是poly learning rate policy。

  3. 在推理阶段,为每一个数据集设置一个合适的高度,保持测试图片的长宽比并reszie。

参考

  1. DB github
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

马鹤宁

谢谢

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

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

打赏作者

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

抵扣说明:

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

余额充值