原网址:https://zhuanlan.zhihu.com/p/94677957
Real-time Scene Text Detection with Differentiable Binarization是华科白翔老师团队发表在AAAI2020上的一篇文本检测文章,在PAN的效果上更近一步,效果和性能都再创新高。文章地址
https://arxiv.org/pdf/1911.08947.pdfarxiv.org
官方代码
https://github.com/MhLiao/DBgithub.com
我的实现
https://github.com/WenmuZhou/DBNet.pytorchgithub.com
网络结构
标准FPN结构,不过看图,最后两个输出是由不同的输出头给出。作者在resnet的stage2-4中使用Deformable convolution来更好的检测长文本。
Differentiable binarization
本文的最大创新点。在基于分割的文本检测网络中,最终的二值化map都是使用的固定阈值来获取,并且阈值不同对性能影响较大。本文中,对每一个像素点进行自适应二值化,二值化阈值由网络学习得到,彻底将二值化这一步骤加入到网络里一起训练,这样最终的输出图对于阈值就会非常鲁棒。
二值化公式如下,
其实就是一个带系数的sigmoid,和sigmoid的对比如下 :
和标准二值化的对比,图a的SB,DB图例应该写反了。
使用DB模块之后,二值化操作就变成了可微的,可以加到网络里一起训练。
网络输出
- probability map,
,代表像素点是文本的概率
- threshold map,
,每个像素点的阈值
- binary map,
,由1,2计算得到,计算公式为DB公式
loss函数
是收缩之后文本实例的loss,
是二值化之后的收缩文本实例loss,
是二值化阈值map的loss,两个值
,这里
使用10的weight是因为
的结果会影响到
的结果。
都使用带OHEM的bceloss,
使用L1loss(后面可以用smoothL1loss试一下)。
后处理
由于threshold map的存在,probability map的边界可以学习的很好,因此可以直接按照收缩的方式(Vatti clipping algorithm)扩张回去,公式为:
是每条边向外扩充的长度,
分别是probability map上文本框的面积和周长,
是设置为1.5的常量(对应收缩的比例0.4)。
label制作
- probability map, 按照pse的方式制作即可,收缩比例设置为0.4
- threshold map, 将文本框分别向内向外收缩和扩张d(根据第一步收缩时计算得到)个像素,然后计算收缩框和扩张框之间差集部分里每个像素点到原始图像边界的归一化距离,此处有个问题,两个邻近的文本框,在扩张后会重叠,这种情况下重叠部分像素点的距离使用哪个文本框的?
下面是我制作的label
实验结果
Dconv 和DB的消融实验
对threshold map添加监督信息的对比实验
Limitation
目前还无法处理,文本内包含文本的情况