Real-time Scene Text Detection with DB 阅读

Real-time Scene Text Detection with DB 阅读


1.现在大多数基于分割的方法都是将分割网络产生的probability map转化为 binary image,然后将像素分为文本实例。在这里概率图转换为二值图都是通过人为设定阈值进行转换。如下图蓝线部分。

Real-time Scene Text Detection with DB 阅读
但是,标准二值化函数是不可微分的,因此论文提出了一种二值化的近似函数,称为可微分二值化(DB),在训练时可以完全微分。
对于DB网络,作者总结的几个显著优点:
1.在具有垂直,水平,弯曲的五个数据集上都取得了比之前的检测网络更好的效果。
2.检测的速度很快。
3.使用轻量级的backbone(ResNet-18)就可以取得很好的效果。


Binarization

Standard binarization

对于一张由分割网络产生的 probability map PP \in RhwR^{h*w},当PP转换为二值图后,像素值为1的地方就代表是文本区域。
Bi,j={0ifPi,j>=t,1otherwise.B_{i,j}= \begin{cases} 0& if \quad P_{i,j}>=t,\\ 1& \text{otherwise.} \end{cases}

Differentiable binarization

标准的二值化是不可微的,不能直接参与网络的训练,因此论文提出了一种近似函数,该函数与标准化而值函数形状相似,但是是可微的,可以进行梯度回传、训练。

B^i,j=11+ek(Pi,jTi,j)\hat{B}_{i,j}=\frac{1}{1+e^{-k(P_{i,j}-T_{i,j})}}
其中B^\hat{B}是approximate binary map;TT是从网络中学习到的 adaptive threshold map;kk是用来放大梯度的超参数。

Real-time Scene Text Detection with DB 阅读

了解一下DB函数的交叉熵损失函数

DB函数:
f(x)=11+ekxf(x)=\frac{1}{1+e^{-kx}}
其中x=Pi,jTi,jx=P_{i,j}-T_{i,j}
二分类CE损失函数为:
CEloss=ylogy^(1y)log(1y^)CE_{loss}=-y\log{\hat{y}}-(1-y)\log{(1-\hat{y})}
所以正负标签的损失函数为:
l+=log11+ekx l_+=-\log{\frac{1}{1+e^{-kx}}}
l=log(111+ekx)l_-=-\log{(1-\frac{1}{1+e^{-kx}})}
这两个函数的图像分别是:
Real-time Scene Text Detection with DB 阅读
Real-time Scene Text Detection with DB 阅读
从图中可以看出:当样本为正样本,以及Pi,j>Ti,jP_{i,j}>T_{i,j}意味着网络输出正确,所以lossloss趋于0且梯度为0,当样本为负样本时以及Pi,j>Ti,jP_{i,j}>T_{i,j}意味着网络输出错误,lossloss很大且梯度恒定。

Deformable convolution

为了可以检测到极端长宽比的文本区域。论文里采用了可变形卷积的方式,用来自动提取feature map的有用特征。传统的卷积核的采样位置都是固定的,比如3$\times353、5\times$5的卷积核,都只能采样固定区域的点,这就导致了网络难以适应几何形变。而可变形卷积会由网络学习出关于卷积核里的采样偏移量,最后卷积核会根据这些偏移量进行采样。
加上该偏移量的学习之后,可变形卷积核的大小和位置可以根据当前需要识别的图像内容进行动态调整,其直观效果就是不同位置的卷积核采样点位置会根据图像内容发生自适应的变化,从而适应不同物体的形状、大小等几何形变。Real-time Scene Text Detection with DB 阅读
Real-time Scene Text Detection with DB 阅读

Label generation

Real-time Scene Text Detection with DB 阅读
其中红线是原图的多边形标签,蓝线和绿线分别是收缩和扩张后的区域。收缩比例是根据原图红线的周长和面积计算得到的。
Real-time Scene Text Detection with DB 阅读
蓝线区域就是probability map的标签
蓝线区域和绿线区域之间的白色部分就是threshold map的标签.
其中白色区域是根据每一个点到最近边界的距离计算的,所以靠近红线部分的点比较亮。(这个完全是自己的理解,自己也不太清楚threshold map label 怎么生成的?)

Optimization

论文使用的损失函数:
L=Ls+α×Lb+β×LtL=L_s+\alpha\times L_b + \beta \times L_t
LsL_s是probability map 的损失, LbL_b是binary map的损失,LtL_t是 threshold map 的损失。
其中LSL_S,LbL_b采用了二分类交叉熵损失:
Ls=Lb=ySlyilogxi+(1yi)log(1xi)L_s=L_b=\sum_{y \in S_l}{y_i \log{x_i}+(1-y_i)\log{(1-x_i)}}
LtL_t采用:
Lt=yRdyixiL_t=\sum_{y \in R_d}{|y_i^*-x_i^*|}

在inference期间,由网络获得的approximate binary map,通过设定阈值(0.2)变为只有0,1的二值图,再得到收缩后的文本区域,因为做的标签是收缩后的,所以最终结果要根据之前的缩放比例进行放大。