文本检测 DBNet

简介: 文本检测 DBNet

论文:https://arxiv.org/pdf/1911.08947.pdf

DBNet属于文本检测算法,目的是 找到图像中文字的位置

目前文本检测算法分为两类

  1. 1. 基于回归:与目标检测算法的方法相似,文本检测方法只有两个类别,图像中的文本视为待检测的目标,其余部分视为背景。
  2. 2. 基于分割:从像素层面做分类,判断每一个像素点是否属于一个文本目标,得到文本区域的概率图,通过后处理方式得到文本分割区域的包围曲线。
    DBNet基于分割的文本检测算法。

1 基于分割的文本检测

22f6c9f12b5c4982b80f73b769da0c62.png上图蓝色线和红色线展示了两种基于图像分割的文本检测算法思路。

蓝色路线:传统分割方法

  1. 1. 先输入图像,通过网络输出图片的文本分割结果(一个概率图,每个像素点的值代表着该点正样本的概率)
  2. 2. 设定一个固定的阈值,将分割网络生成的概率图转换为二值图像
  3. 3. 使用一些方法,如像素聚类,将像素级的结果转化成检测结果。

但是,这里有一个问题

标准的二值化操作是不可微的。因此,无法将其写入网络一起训练,自动训练该阈值。

红色路线:即DBNet采用的算法思想,它通过训练threshold map并使用一个近似的可微的二值化函数实现了网络自动训练阈值。之后,文本框可以通过近似二值图和概率图获取。后面会详细总结

2 DBNet

网络结构如下所示

4ca3a517792942d78f1270fd932d6c97.png

训练过程中:

  1. 1. 先将图像输入特征提取网络backbone,其中借鉴了FPN的思想。
  2. 2. 然后利用提取的特征图生成probality map和threshold map。其中,probality map是概率图,threshold map是阈值图。
  3. 3. 最后,通过概率图和阈值图计算近似二值图。

测试时,可以通过近似二值图得到文本框的位置

3 backbone

7097c7f548b44e15b2ad4ad41734b503.png

如上图,相加部分借鉴了FPN的思想:https://blog.csdn.net/weixin_51691064/article/details/130274488

而箭头指向的四个卷积是可变形卷积:https://blog.csdn.net/weixin_51691064/article/details/130277558

假设输入src_img为WxH,输出的Feature map是W/4xH/4

4 probability map和threshold map

训练时,网络输出的概率图,阈值图和通过DB操作得到的二值图训练集相应的形成的特征图进行损失的计算。

测试时,对网络输出的概率图进行后处理,就可以得到框的位置。

这里里面有几个问题

  1. 1. 由训练集标真实签如何得到对应的概率图label
  2. 2. 由训练集真实标签如何得到对应的阈值图label
  3. 3. 后处理是怎么做的(第7章总结)
  4. 4. DB如何做的(第5节总结)

4.1 概率图label的生成

a68aebd1347d48a788395699e3693c64.png如图,红色为原始区域G,通过收缩得到蓝色区域Gs,通过扩张得到绿色区域Gd。


f848cf1777104acaba50656df95f9473.png

概率图使用蓝色区域,蓝色区域内为1,蓝色外为0。

收缩量D,参考Vatti clipping算法的偏移系数D的计算方式得到:

9177fb794cc54f53b0fe1bec3d313073.png

其中A为原始区域面积。L是原始区域周长。r是收缩系数,一般设置为0.4。

4.2 阈值图的生成

  1. 1. 首先蓝色区域扩张为红色Gd。扩张量与4.1中收缩量一致。并将绿色和蓝色之间作为文本边界区域。
  2. 2. 计算边界区域每一个点到红色边界的归一化距离(距离/偏移量D)。比如:
  3. =====================================================================
  4. 假设一点P,其到红色边界的距离d,经过归一化后的值Value,其再图中的意义如下:

08265224352d4addb193904373c3b692.png

  1. =====================================================================
  2. 用1减得到的归一化后距离。此时值在红色线为1,向Gs和Gd方向递减,在Gs和Gd为0

至此,得到了概率图label和二值图label。

5 DB

5.1 传统二值化(SB)

对于一个WxH的概率图,设置一个阈值t,对每个位置(i, j)概率超过阈值设置为1,否则设置为0:

e975ddad6ad540129ea7e18dbcdfb1cc.png

但是该操作是不可微的,无法放入网络进行学习。

5.2 可微的二值化

DB,即可微分二值化,解决了上面的问题。通过概率图P阈值图T通过该操作可以得到二值图B。每个点的计算公式

3ba4775d9bd940d5a4ce87f41d3bfdd9.png

其中k是一个超参数,原文中设置为50。

到这里,我们有了概率图,阈值图和二值图,接下来就是进行损失计算

6 损失计算

训练时需要计算损失。

13334390e4b64cf187f5727a2a0e9e3d.png

损失函数分为三部分:

  1. 为概率图损失
  2. 为二值图损失
  3. 为阈值图损失

6.1 概率图损失和二值图损失

这里概率图损失和二值图损失采用的是二值交叉熵损失:

fdf0fe473ac94bddbbc8200e4f75e975.png

这里是采样得到的样本,正负样本为1:3。

这里采样的作用是平衡正负样本,使用的是困难样本挖掘技术OHEM

6.2 阈值损失

阈值损失采用L1 loss损失:

5ff2fb8806b346318b3b0dfd5a5227a6.png

其中是标注框经过D偏移量扩充后得到的Gd里所有的像素。是通过4.2节中训练集真实标签计算出的阈值图中的第i个点的值。是网络输出的阈值图中第i个点的值。

7 后处理

通过预测的概率图进行文本框的生成:

  1. 1. 设置一个固定阈值,对概率图进行二值化
  2. 2. 通过二值图得到连通区域
  3. 3. 连通区域采用Vatti clipping算法的偏移系数D’进行扩张得到最终文本框,偏移系数计算公式如下
  4. d070cf05b3ac4b7f9f28152b40fb38be.png
  5. 其中A’是连通区域面积。L’是连通区域周长。r’是放缩系数,一般设置为1.5。

8 参考

OCR专栏:

https://blog.csdn.net/qq_36816848/category_12113641.html


DBNet文章:

https://blog.csdn.net/yewumeng123/article/details/127503815

https://zhuanlan.zhihu.com/p/368035566

https://blog.csdn.net/michaelshare/article/details/108811236


相关文章
|
机器学习/深度学习 人工智能 文字识别
CRNN文字识别
近几年来,CRNN在计算机视觉文本识别领域取得不错成果。CRNN是一种卷积循环神经网络结构,用于解决基于图像的序列识别问题,特别是场景文字识别问题。CRNN网络实现了不定长验证结合CNN和RNN网络结构,使用双向LSTM循环网络进行时序训练,并在最后引入CTC损失函数来实现端对端的不定长序列识别,
1698 0
CRNN文字识别
|
6月前
|
SQL 弹性计算 数据库
鸿蒙5开发宝藏案例分享---优化应用时延问题
鸿蒙性能优化指南来了!从UI渲染到数据库操作,6大实战案例助你提升应用流畅度。布局层级优化、数据加载并发、数据库查询提速、相机资源延迟释放、手势识别灵敏调整及转场动画精调,全面覆盖性能痛点。附赠性能自检清单,帮助开发者高效定位问题,让应用运行如飞!来自华为官方文档的精华内容,建议收藏并反复研读,共同探讨更多优化技巧。
|
5月前
|
SQL 算法 关系型数据库
什么是 ‘小表驱动大表’ 原则?如何实现 JOIN顺序优化?(图解+秒懂+史上最全)
什么是 ‘小表驱动大表’ 原则?如何实现 JOIN顺序优化?(图解+秒懂+史上最全)
什么是 ‘小表驱动大表’ 原则?如何实现 JOIN顺序优化?(图解+秒懂+史上最全)
|
9月前
|
传感器 人工智能 定位技术
智能手表续航太短?聊聊可穿戴设备的能耗管理黑科技
智能手表续航太短?聊聊可穿戴设备的能耗管理黑科技
428 11
|
Kubernetes Java Docker
利用(K8S)配合Docker部署jar包
通过Docker打包并部署到Kubernetes(K8S)集群的过程。首先,通过SpringBoot生成jar包,接着在K8S环境中创建并编辑Dockerfile文件。随后构建Docker镜像,并将其推送到镜像仓库。最后,通过一系列kubectl命令(如get pods、get svc、logs等),展示了如何在K8S中管理应用,包括查看Pod状态、服务信息、Pod日志以及重启Pod等操作。
740 3
|
10月前
|
XML 数据挖掘 API
1688商品详情数据示例参考,1688API接口系列
在成长的路上,我们都是同行者。这篇关于详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
248 2
|
JavaScript Java 云计算
后端开发的演变与未来趋势
在数字化时代的浪潮中,后端开发扮演着至关重要的角色。本文将探讨后端技术的历史演变、当前主流技术和框架、以及面临的挑战和未来的发展趋势。通过深入浅出的方式,为读者揭示后端开发的奥秘,并启发对未来技术的思考。
|
C语言 Perl
西门子S7-1200编程实例,电动机起保停控制梯形图如何编写?
本篇我们通过一个电动机起保停控制的实例,介绍S7-1200的使用方法,按下瞬时启动按钮I0.6,电动机Q0.0启动,按下瞬时停止按钮I0.7,电动机Q0.0停止。
西门子S7-1200编程实例,电动机起保停控制梯形图如何编写?
|
Java 程序员 Spring
“解密Java文本读取:File与MultipartFile“
“解密Java文本读取:File与MultipartFile“
440 0