文章中的文字检测方法是基于图像分割的方法,此类方法的关键部分在于后处理,传统的基于分割的算法在对probability_map后处理中二值化处理是通过一个固定的阈值,但是文章中的方法添加了一个threshold_map,将其放入网络中一起训练,这样针对probability_map中的每个像素会有不同的阈值(方法称为DB),这样的处理可以大大的提高网络的性能。以上DB的方法仅仅在训练过程中是必须的,测试和验证时则可以移除,可以在probability_map中将分割结果转化为bounding box,而无需计算binarization_map,这样可以减少额外的时间消耗。
用文中的一张图来理解就能大致的区分文中方法与传统方法的不同了:
图中蓝色箭头是传统方法的过程,红色箭头是文中方法的过程,可见二值图是由预测图和阈值图计算得来的。
论文中还用到了膨胀卷积(Deformable convolution),膨胀卷积的作用主要是增大感受野,有利于网络检测极端长宽比的文本。本博客中重点不在此,不做细致分析。
下面我将从DB原理,生成标签和loss的构成谈谈我自己的理解,如有错误之处,欢迎指正。
一、DB原理
1. 传统的二值化方法:
(1)式中的 t 是预设的固定阈值,(i,j)是预测图上的像素点。
2. Differentiable binarization:
因为(1)式不可微,所以无法参与到网络的训练。为了解决这个问题,作者提出了近似于二值化函数的方法:
B^i,j是近似的二值化图,Ti,j是阈值图上由网络训练时生成的值,k是放大因子,根据经验设置为50。
从图(a)中可以看出这个函数和传统的二值化函数十分相似,但是它是可微的。正因为它的可微性所以它可以参与到网络训练时的梯度反向传播。以binary cross-entropy loss为例,定义
作为我们的函数,其中x = Pi,j - Ti,j。正负样本的loss分别如下:微分后,得:
结合图4和上式可以发现:
- 梯度被k进行了放大;
- 正负样本的优化是具有不同的尺度的,在 f(x) 趋近于0的时候梯度值会变得很大(结合图4©),有利于产生更有利于区分的预测。
二、生成标签
生成标签是我认为这个算法中最难理解的部分,下面阐述一下我的理解,如有错误,还望交流指正。
一共有三张map需要生成label,即预测图(P),阈值图(T)和估计二值图(B^)。首先要明白label就是每张图上给每个像素点生成一个归一化后的值。然后我们一张一张图进行分析:
1. Probability map:
G为标注的gt_box,S为gt_box的边,n为顶点。将G向内偏移D,形成Gs。在预测图上将Gs内的值设定为1,Gs外设定为0。
1. Threshold map:
将G向外偏移D,形成Gd。在阈值图上将Gs和Gd之间的部分每一个像素点的值根据其到G中最近的一条边的距离计算得来(应该是越近越趋向于1,越远越趋向于Gd外的设定值),Gs内和Gd外设定成一个稍大于0的值(代码中为0.3)。
approximate binary map:
二值图的label由以上二者计算得来,计算后Gs外为0,Gs内为1。
从下表中可以更清晰看出我对这部分的理解:
|
Gs外 |
Gs和Gd之间 |
Gs内 |
P |
0 |
0 |
1 |
T |
0+ |
根据距离计算 |
0+ |
B |
0 |
0 |
1 |
三、loss的构成
在预测图(P),阈值图(T)和估计二值图(B^)上分别定义损失为Ls,Lt,Lb。
论文中α,β分别设置为1.0和10(代码中似乎并不是这样)。
- Ls和Lb运用binary cross-entropy (BCE) loss,为了平衡正负样本,在BCE loss中使用难例挖掘。
Sl是数据集,正负样本的比例为1:3。
- Lt运用L1 loss。
只针对Gd里的像素点计算loss再求和。
最后在测试阶段,再运用下式还原缩小的文本区域:
来源:CSDN
作者:Uncle-Drew
链接:https://blog.csdn.net/qq_41658437/article/details/104318488