【文本检测】DBNet

论文正文

链接:链接,提取码:7fmj

概述

文本检测主流的两个方法就是基于回归的方法和基于分割的方法。
基于回归的方法指的是迁移一些经典的目标检测算法,比如SSD,faster-rcnn等。但是他们对于任意形状文本的检测效果没那么好,而这类文本呢又是场景种最常见的文本。
基于分割的方法:首先,分割指的是像素点级别的分类,判别每一个像素点是否属于一个文本目标,计算量特别大。通过一个分割网络得到分割图或者叫做概率图,接着进行固定阈值的二值化操作得到二值图,通过后处理得到文本分割区域的包围曲线。
二值化:就是根据一个固定的门限值,将概率图中每个数值变为0/1,如 f ( x ) = 1 i f x > 0.7 e l s e 0 f(x)=1 if x>0.7 else 0 f(x)=1ifx>0.7else0
在这里插入图片描述

而本文,是在基于分割的方法上进行的研究,他提出了一种将二值化操作加到分割网络中的一种方法。也就是说,在本文中,分割网络同时生成概率图和门限图,二值化中的门限不再是给定的,而是模型学习到的,是能够自适应的。而二值化过程,如 f ( x ) = 1 i f x > 0.7 e l s e 0 f(x)=1 if x>0.7 else 0 f(x)=1ifx>0.7else0,显然是不可微的,因此同时还提出了一种可微分二值化过程Differentiable Binarization (DB)。
在这里插入图片描述

细节

整体流程

骨干网络会对输入图片进行多次下采样得到不同尺寸的feature-map,再将它们上采样和浅层网络中长宽相同的feature-map进行concat操作,然后继续卷积,最后将尺度相同的feature-map进行concat,然后得到两个图:概率图和门限图,通过他们得到二值图,根据它进行后处理得到文本分割区域的包围曲线。
在这里插入图片描述

二值化

标准二值化操作:
在这里插入图片描述
可微分二值化 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
B是近似二值函数的函数值,k是放大因子(计算导数,发现k都是乘的,所以会放大梯度,作者取了50), P i , j P_{i,j} Pi,j是概率, P i , j P_{i,j} Pi,j是门限
可微分二值化的作用:1、使得门限值能够通过网络学习得到而不是直接给定。2、提高性能。
为什么能够提高性能?:像素的分类错误,会得到更大的梯度,而为了网络的收敛,模型必须自己学会解决这些问题。
更大的梯度?:首先,二值图的损失是二元交叉熵损失。
x = P i , j − T i , j x=P_{i,j}-T_{i,j} x=Pi,jTi,j f ( x ) = 1 1 + e − k x f(x)=\frac{1}{1+e^{-kx}} f(x)=1+ekx1 l o s s = − y l o g ( f ( x ) ) − ( 1 − y ) l o g ( 1 − f ( x ) ) loss=-ylog(f(x))-(1-y)log(1-f(x)) loss=ylog(f(x))(1y)log(1f(x)),正样本: l o s s + = − y l o g ( f ( x ) ) loss_{+}=-ylog(f(x)) loss+=ylog(f(x)),负样本: l o s s − = − ( 1 − y ) l o g ( 1 − f ( x ) ) loss_{-}=-(1-y)log(1-f(x)) loss=(1y)log(1f(x)),他们各自对应的导数的曲线在k=1和k=50的情况下,如图
在这里插入图片描述
观察可以发现,首先,梯度的大小是与K有关的。其次,网络如果将正例预测称负例,那么梯度很很大;网络将负例预测乘正例,梯度也很大。

自适应的门限

用处:主要是为了计算得到二值图,另外实验中发现,无论给不给这个门限一个监督,门限图中都会去凸显文本的边框,也就是能够直到网络更好的检测文本。
在这里插入图片描述

可变形卷积

目的:为了获得更大、更灵活的感受野,尤其适用于长宽比例比较极端的文本
详细介绍:链接

标注

概述:概率图和近似二值图受到同一个ground truth监督,是白色部分比较小;门限图受到另一个ground truth监督,是黄色部分比较大。
为什么概率图和近似二值图受到同一个ground truth监督:直观感觉上,他们都得受到原图绘制的二值图的监督。
为什么区域会有大小?:这或许就是设计的奥秘吧…
在这里插入图片描述
计算二值化之后结果的案例:
在这里插入图片描述

标注1:概率图和近似二值化图对应的标注,先对文本进行标注,然后做一步shrink。里面就是1表示有文本,外面是0,表示没文本。
在这里插入图片描述
标注2:门限图对应的标注,首先对于文本检测框,进行收缩和放大,它们中间的区域就是。
在这里插入图片描述
标注值:对于,区域内部所有点,计算它达4条红线的距离,取最近的一个。这样就得到了一个两边大中间小的结果,然后对所有的值做 1 − X / D 1-X/D 1X/D的操作,再进行操作,将这些值归一化到一个范围比如 0.3 − 0.7 0.3-0.7 0.30.7
为什么这么复杂:一步一步分析
最后为什么要归一化到某个范围?因为不归一化的话就无法得到二值化的结果了。
为什么要 X / D X/D X/D:因为门限肯定是0-1的数,而这里最大就是D,所以可以这么做来进行归一化。
为什么要 1 − X / D 1-X/D 1X/D:为了得到中间小两边大的结果,门限图的重点就是对于边框的敏感
在这里插入图片描述

损失计算

主要是三部分:概率图和近似二值图的损失还有门限图的损失
其中门限图的损失只计算文本边框范围内的损失,使用的是L1范数
为什么用L1范数:????
在这里插入图片描述

我理解的错题集:之前机器学习课程中讲到,模型将判别错误的样本加权
在这里插入图片描述

推理

推理的时候,不需要门限图和二值化图了,直接根据概率图,使用标准的二值化操作就行,然后得到文本的边界,并进行矫正,得到原始的文本边界区域,之后就可以用一些软件包把这部分的区域拿出来了。但是分割主要解决的是弯曲形状文本区域的效果,但是一些文本检测方法处理的是矩形框,那么一个做法就是直接取包含这些区域的最小矩形框。
在这里插入图片描述
在这里插入图片描述

感悟

问题:比如YOLO v3中,检测的时候模型输出 n ∗ n ∗ 3 ∗ ( 1 + 4 + 20 ) n*n*3*(1+4+20) nn3(1+4+20)的tensor,解析这个tensor我们就能得到检测结果,但是为什么能够这么做呢?
模型输出结果解析的可解释性:所谓监督,就是给网络一个参考,让网络自己学习参数,不断逼近这个参考。因为我们训练的时候,也就是制作dataset的时候,不仅仅是得到了numpy格式的img,还做了对应的tround-truth,也就是那些 n ∗ n ∗ 3 ∗ ( 1 + 4 + 20 ) n*n*3*(1+4+20) nn3(1+4+20)的tensor,训练的时候要求模型输出的tensor和ground-truth尽可能地接近,检测的时候,模型就能够按照以前的经验得到一个类似的输出,但是这个输出是否足够好呢?还是的看训练的时候是否则够充分,是否学习到了最优的function。
问题:模型的结构到底怎么设计呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值