DBNet论文阅读笔记

DBNet

1 Detection methods

  • Regression-based methods
  • Segmentation-bbased methods

Segmentation:对图像中的每一个像素点进行分类,图像中每个像素点都要知道它的类别

image-20220808111201193

1.1 Traditional segmentation-based method (blue路径)

image-20220808111440753

传统的binarization方法是设定一个阈值

B i , j = { 1 i f P i , j > = t , 0 o t h e r w i s e . B_{i,j}=\begin{cases} 1 \quad if \quad P_{i,j}>=t,\\ 0 \quad otherwise. \end{cases} Bi,j={1ifPi,j>=t,0otherwise.
DBNet是(Red)红色路径,在基于分割的文本检测网络中,最终的二值化map都是使用的固定阈值来获取,并且阈值不同对性能影响较大。本文中,对每一个像素点进行自适应二值化,二值化阈值由网络学习得到,彻底将二值化这一步骤加入到网络里一起训练,这样最终的输出图对于阈值就会非常鲁棒。 Differentiable Binarization可微二值化。

2 DBNet 网络结构

2.1 Feature Pyramid Networks 特征金字塔

为了能最多的检测出图像上的目标大小,图像算法有以下几种方法:

(1)图像金字塔:生成不同尺寸的图片,每张图片生成不同的特征,分别进行预测,最后统计所有尺寸的预测结果。

(2)feature map:使用神经网络某一层输出的feature map进行预测,一般是网络最后一层feature map(例如Fast R-CNN、Faster R-CNN等);然而靠近网络输入层的feature map包含粗略的位置信息,导致预测的目标狂bbox不准确,靠近最后网络最后一层的feature map会忽略小物体信息。

取最后网络一层的feature map做预测

(3)特征金字塔:使用不同层次的金字塔层feature map进行预测。SSD就是采用这种多尺度特征融合方法,从网络不同层抽取不同尺寸的特征做预测,没有增加额外的计算量。但是SSD没有使用足够底层的特征,SSD使用最底层的特征是VGG的conv4_3。

取网络的最后三个feature map做预测

(4)特征金字塔网络:对最底层的特征进行向上采样,并与该底层特征进行融合,得到高分辨率、强语义的特征(即加强了特征的提取)。

对网络最后一层的feature map做上采样,上采样的结果再与对应尺寸的feature map进行融合

2.2 特征金字塔网络

如下图,上半部分只取特征金字塔的最底层进行预测,下半部分对特征金字塔的所有层进行单独预测,最后再整合所有预测结果,本论文作者主要使用后者,使用多特征层进行预测。

利用FPN进行预测的两种方式

FPN官方的backbone是ResNet。CNN的前馈计算就是自下而上的路径,特征图经过卷积核计算,通常是越变越小的,也有一些特征层的输出大小和输入大小一样。
思想:把高层的特征传下来,补充低层的语义,这样就可以获得高分辨率、强语义的特征,有利于小目标的检测。

特征金字塔网络包括自底向上、自顶向下和横向连接。

Resnet特征提取(feature map):自底向上

最后一层feature map上采样:自顶向下

特征融合:横向连接

横向连接的两层特征在空间尺寸上要相同,主要是为了利用底层的定位细节信息(由于底部的feature map包含更多的定位细节,而顶部的feature map包含更多的目标特征信息)。

特征金字塔的横向连接和自顶向下的连接示意图如下,其中 1×1 conv 用来改变feature map的通道数:

feature map 融合操作

2.3 DBNet网络结构

img

上图是 DBNet 模型网络结构示意图,主要分为 3 个模块:

  • 第一模块(1):左边的红框使用的是一个 FPN 结构,分为自底向上的卷积操作与自顶向下的上采样,以此来获取多尺度的特征。1 图下面部分是 3x3 的卷积操作,按照卷积公式分别获取原图大小比例的 1/2、1/4、1/8、1/16、1/32 的特征图;然后自顶向下进行上采样 x2,然后与自底向上生成的相同大小的特征图融合;融合之后再采用 3x3 的卷积消除上采样的混叠效应;最后对每层输出结果进行上采样,统一为 1/4 大小的特征图。
  • 第二模块(2):将 1/4 大小的特征图经过一系列卷积和转置卷积的机构获取概率图 P 和阈值图 T,可参考 FCN 网络结构,目的是生成与原图一样大小的特征图 P 和 T。
  • 第三模块(3):将特征图 P 和 T 经过 DB 方法(后续介绍)得到近似二值图。

经过上面三个模块,可以得到概率图、阈值图和近似二值图。在训练过程中,对这三个图进行监督学习,更新各个模块的参数。在推理过程中,直接使用概率图,然后使用固定阈值获取结果。

2.3.1 Deformable convolution 可形变卷积

FPN-Conv layer使用Deformable convolution 卷积核再各个点的偏移位置上做卷积(类似于空洞卷积)

image-20220808144214471

绿色的点为卷积核上的点,但计算计算卷积的位置是图中各蓝色的点(较原来的卷积核中点发生了偏移)

**作用:**可以提供灵活的感受野,对于不同纵横比的文本很有利。

2.3.2 可微二值化

传统的二值化,式(1)是不可微分的,也就无法放到网络中进行优化学习。可微二值化就是将标准二值化中的阶跃函数进行了近似,公式如下所示:
B i , j ^ = 1 1 + e − k ( P i , j − T i , j ) \hat{B_{i,j}} = \frac{1} {1+e^{-k(P_{i,j}-T{i,j})}} Bi,j^=1+ek(Pi,jTi,j)1

其中, P i , j P_{i,j} Pi,j是probability map中的像素值, T i , j T_{i,j} Ti,j是threshold map中的像素值。可微二值化本质上是一个 带系数 k 的 sigmoid 函数,取值范围为(0, 1),k 是膨胀因子(经验型设置为50) P的每个像素位置,如果小于T对于的,二值化后就是0,如果大于,二值化后就是1

img

标准二值化和可微二值化的对比如下图 (a) 所示,SB 曲线代表标准二值化,DB 代表可微二值化,可以看到曲线变得更为平滑,也就是可微。除了可微,DB方法还能改善算法的性能,在反向传播是梯度的计算上观察。当使用交叉熵损失函数 y = 1 y=1 y=1代表文字区域时,正负样本的Loss分别为 l + , l − l_+,l_- l+,l,公式如下:
C E L o s s = − y log ⁡ B ^ − ( 1 − y ) log ⁡ ( 1 − B ^ ) { l + = − log ⁡ ( 1 1 + e − k ( P i , j − T i , j ) ) y = 1 l − = − l o g ( 1 − 1 1 + e − k ( P i , j − T i , j ) ) y = 0 CELoss = -y\log\hat{B} -(1-y)\log(1-\hat{B})\\ \begin {cases} l_+ = -\log(\frac{1} {1+e^{-k(P_{i,j}-T{i,j})}})\quad \quad y=1\\ l_- = -log(1-\frac{1} {1+e^{-k(P_{i,j}-T{i,j})}}) \quad \quad y=0 \end{cases} CELoss=ylogB^(1y)log(1B^){l+=log(1+ek(Pi,jTi,j)1)y=1l=log(11+ek(Pi,jTi,j)1)y=0
l + , l − l_+,l_- l+,l分别对于输入 x = P i , j − T i , j x=P_{i,j}-T{i,j} x=Pi,jTi,j, 对求导,进行梯度反向传播
∂ l + ∂ x = − k f ( x ) e − k x ∂ + − ∂ x = − k f ( x ) \frac{\partial l_+}{\partial x} = -kf(x)e^{-kx}\\ \frac{\partial +_-}{\partial x} = -kf(x) xl+=kf(x)ekxx+=kf(x)
可以看到 增强因子k 对于错误预测对梯度的影响变大了,从而可以促进模型的优化过程产生更为清晰的预测结果。 (b)图是当y=1,x预测值从-1到1的梯度,可以发现,当k=50时候梯度远远大于k=1,错误的区域梯度更大,对于y=0的情况分析也是一样的。故:
(1) 通过增加参数K,就可以达到增大梯度的目的,加快收敛
(2) 在预测错误位置,梯度也是显著增加

2.3.3 真实标签生成

img

probability map可以理解为,有文字的区域值为0.9以上,没有文字的区域全黑为0,threshold map理解为一个只有文字边界才有值,其他地方为0。上图分别为原图,Ground Truth,Threshold图。这里再说下threshold map图,非文字边界处都是灰色的,这是因为统一加了0.3,所有最小值是0.3.Threshold是框出了文字区域的边框。probability map和approximate binary map的生成受GT图的监督,而threshold map的生成受Threshold图的监督。

1)Probability map Label生成

image-20220808154723845

红色框完完整整把文字区域包裹住,然后进行shrink操作,A是红色框的面积,L是周长。D是搜索或扩张的距离。然后将蓝色框内部值设为1,外部设为0,就得到用于监督的标签

2)Threshold Label生成

image-20220808155149119

和上图一样,但是处了进行shrink,还要进行膨胀操作,然后绿框和蓝框之间的间隔,就是我们要求的label区域,得到区域后,就要计算区域内每个点的值。该点(i, j)的值,为该点到红色框(四个边界线)的距离,然后取距离最小的值,作为该点的值。这样可以预见,绿色框上的点是所有点中最大的,也就是扩张的距离D。但是我们看左上角的图,间隔里是边缘暗,中间亮,所以我们还行再进行一下反置操作(暗的变亮,亮的变暗):可以对计算的值进行归一化(除以D)这样,绿框和篮筐上的值为1,其他地方为小于1。然后再用1减去归一化后的值即可。

image-20220808160320378

上图是论文中的可视化图,第二张图是经过shrink和扩张后的图。

2.3.4 损失函数

由于在训练阶段输出 3 个预测图(大小与原图一致),所以在损失函数中,也需要有对应的真实标签去构建 3 部分损失函数。总的损失函数的公式定义如下:
L = L s + α × L b + β × L t α = 1.0 , β = 10 L = L_s + \alpha \times L_b + \beta \times L_t \quad \quad \alpha=1.0, \beta=10 L=Ls+α×Lb+β×Ltα=1.0,β=10
其中, L L L为总的损失, L b L_b Lb为近似二值图的损失, L s L_s Ls为概率图损失,均使用交叉熵损失,为了解决正负样本不均衡问题,使用hard negative mining L t L_t Lt为阈值图损失,使用预测值和标签间的 𝐿1 距离。其中,𝛼 和 𝛽 为权重系数。
KaTeX parse error: Undefined control sequence: \abs at position 86: …sum_{i \in R_d}\̲a̲b̲s̲{y_i^*-x_i^*}
BCELoss hard negative mining 正:负=1:3。其中 R d R_d Rd是扩张dilated之后区域的面积,即扩张区域内的点都要计算L1距离。

得到二值化的图像后,可以使用cv2.findContours得到文字区域的轮廓。但是文字识别的CRNN的输入是正规的矩形,检测到的轮廓是不规则的。可以使用cv2.minAreaRect()方法得到包括所有轮廓点的最小的矩形。还可以扣出文字区域,然后将区域矫正。

二值化的图像后,可以使用cv2.findContours得到文字区域的轮廓。但是文字识别的CRNN的输入是正规的矩形,检测到的轮廓是不规则的。可以使用cv2.minAreaRect()方法得到包括所有轮廓点的最小的矩形。还可以扣出文字区域,然后将区域矫正。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_44858167

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

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

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

打赏作者

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

抵扣说明:

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

余额充值