0 概述
基于分割的文本检测算法,后处理是必须的,将概率图转成文本框(区域)。DB算法在分割网络中执行一个二值化处理。随着DB模块的优化,分割网络可以自动设置二值化阈值,不仅简化了后处理而且增强了性能。
补充:F-measure 即:
F 1 = 2 ∗ P R P + R F_1=\frac {2 * PR}{ P + R} F1=P+R2∗PR
P 是精确率(Precision),R是召回率(Recall)。
1 介绍
当前大部分检测算法都是使用如下流程:
(1)设置一个固定的阈值,将概率图转成二值图。
(2)然后一些启发式的方法通过聚类得到文本区域 。
而这篇论文 里的流程是插入一个二值化操作放到分割网络里来一起优化。在这种方式下,每个像素的阈值将自适应预测,更能区分前景背景。标准的二值化函数是不可微分的,我们使用一个近似的二值化函数,称为DB。
相比之前基于方法的方法有四个优点:
- 更好的性能 ,包括水平、多方向、弯曲。
- 更快。因为显著改善了后处理。
- 在轻量级backbone上表现好。
- 测试时没有额外内存和时间消耗。
2 相关工作回顾
2.1 基于回归的方法
优点:基于回归的方法,后处理简单。
缺点:很难表示不规则的形状,例如弯曲文本。
- 2017 TextBoxes 直接回归矩阵,基于SSD,修改了anchor和scale。
- 2017 DMPNet 、2018 TextBoxes++ 直接回归四边形,来检测多方向文本。
- 2017 SSTD 引入注意力机制来识别文本区域。
- 2018 RRD 旋转不变性做分类、旋转敏感性来做回归。
- 2017 EAST / DeepReg 像素级回归多方向 文本实例。
- 2017 SegLink 回归分割框和预测它们的连接。
- 2019 DeRPN 维度分解(dimension-decomposition)解决文本检测中的尺度问题。
2.2 基于分割的方法
- 2016 基于MSER 和语义分割,检测多方向 文本。
- 2018 文本边界分割文本实例
- 2018 Mask TextSpotter 基于 Mask R-CNN 检测任意形状文本。
- 2019 PSENet 渐进尺度扩张 ,使用不同的kernel。
3 方法
- 将图像喂给特征金字塔。
- 特征金字塔降采样成相同尺度级联产生特征 F F F 。
- F 预测概率图P和阈值图T。
- 计算得到二值图B。
3.1 二值化
3.1.1 标准二值化
3.1.2 可微二值化
可微二值化不仅能区分文本区域和背景,而且把邻近的文本区域也分开。
B ^ i , j = 1 1 + e − k ( P i , j − T i , j ) = 1 1 + e − k x = e k x 1 + e k x \hat B_{i,j}=\frac 1 {1 + e^{-k(P_{i,j}-T_{i,j})}} = \frac 1 {1 + e^{-kx}}= \frac {e^{kx}} {1 + e^{kx}} B^i,j=1+e−k(Pi,j−Ti,j)1=1+e−kx1=1+ekxekx
其中:
x = P i , j − T i , j x =P_{i,j}-T_{i,j} x=Pi,j−Ti,j
损失函数:
l + = − l o g 1 1 + e − k x = l o g ( 1 + e − k x ) l_+=-log\frac 1 {1 + e^{-kx}} = log(1 + e^{-kx}) l+=−log1+e−kx1=log(1+e−kx)
l − = − l o g ( 1 − 1 1 + e − k x ) = − l o g ( e − k x 1 + e − k x ) = − l o g ( 1 1 + e k x ) = l o g ( 1 + e k x ) l_-=-log(1-\frac 1 {1 + e^{-kx}})=-log(\frac {e^{-kx}}{1+e^{-kx}}) = -log(\frac{1}{1 + e^{kx}}) = log(1+e^{kx}) l−=−log(1−1+e−kx1)=−log(1+e−kxe−kx)=−log(1+ekx1)=log(1+ekx)
后边的式子是我加的,简化上边的公式后对数函数里没有分式,后边求导就变得容易多了。
∂ l + ∂ x = − k f ( x ) e − k x \frac {\partial l_+} {\partial x} = -kf(x)e^{-kx} ∂x∂l+=−kf(x)e−kx
∂ l − ∂ x = k f ( x ) \frac {\partial l_-} {\partial x} = kf(x) ∂x∂l−=kf(x)