【文本检测】1、DBNet | 实时场景文本检测器

news2024/11/24 12:24:12

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 二值化
      • 2.2 Adaptive threshold
      • 2.3 可变形卷积
      • 2.4 生成标签
      • 2.5 优化过程
    • 三、效果
      • 3.1 实验数据
      • 3.2 实验细节
      • 3.3 消融实验
      • 3.4 和其他方法的对比

论文:Real-time Scene Text Detection with Differentiable Binarization

代码:https://github.com/MhLiao/DB

出处:AAAI 2020

本文贡献:

  • 提出了二值化函数的近似形式 Differentiable Binarization,是完全可微的,保证了二值化过程能够和分割网络同时优化
  • DB 可以简化其他方法中的繁重后处理过程,提高 infer 效率,并且能够得到更鲁棒的二值化特征图
  • DB 可以和轻量化的 backbone 结合
  • DB 在 infer 的时候可以移除,且不会降低模型效果,不会对 infer 带来额外的耗时

一、背景

在这里插入图片描述
文本检测是文本识别的基础,但文本检测也面临很多问题,比如其尺度和形状很多变,有水平、竖直、多方向、曲线形状等。

由于分割的方法能够提供 pixel-level 的结果,即能够更准确的识别出文本区域,包括曲线排列的文本,故基于分割方法的文本检测近来比较流行。

二值检测特征图的后处理对分割方法非常重要,这个过程能够将分割方法得到的概率特征图转换成文本区域的 bounding box 或 bounding region。但是,后处理的过程在推理的时候很耗时。

现有的方法一般使用如图 2 所示的后处理过程,如蓝色箭头:

  • 首先,设定一个固定的阈值,将分割结果转化成二值图
  • 然后,使用一下启发式的方法,如像素聚合,来将 pixels 聚合成 text 实例

本文中,作者提出了名为 Differentiable Binarization(DB)的差分二值化方法,可以在分割网络中实现二值化的过程,让 DB 模块和分割网络同时优化,能够自适应的调整二值化的阈值,能够简化后处理的阈值选取且提升效果。

本文方法的结构,如图 2 ,红色箭头:

  • 本文的目标就是将二值过程嵌入分割网络来同时优化
  • 图像中每个位置的阈值都可以被自适应的估计,于是就可以将前景和背景区分开来
  • 但标准的二值化函数是不可微的,所以,作者又提出了一个 Differentiable Binarization 作为二值化的近似函数,是可微的。

在这里插入图片描述

二、方法

本文方法的主要结构如图 3 所示:

  • 首先,将图像输入金字塔形式的 backbone
  • 然后,将所有金字塔特征图上采样到相同的尺度,得到特征图 F,将 F 用于预测 probability map(P)和 threshold map(T)
  • 之后,使用 P 和 T 来计算 binary map B ^ \hat{B} B^
  • 在训练过程中,监督信号会监督 P、T、 B ^ \hat{B} B^,且 P 和 B ^ \hat{B} B^ 是共享监督信号的,
  • 在推理过程中,可以通过 box formulation module 从 B ^ \hat{B} B^ 或 P 来得到 bounding box

在这里插入图片描述

2.1 二值化

1、标准二值化

给定从分割网络得到的 probability map P ∈ R H × W P \in R^{H \times W} PRH×W,将其二值化后,就会得到只包含 0 和 1 的二值化图,其中,0 表示背景,1 表示有效的文本区域,标准二值化过程如下:

在这里插入图片描述

  • t 是阈值

2、Differentiable binarization

如公式 1 所示的标准二值化是不可微的,所以不能和分割网络一起来训练,所以,本文作者提出了一个二值化的近似形式:

在这里插入图片描述

  • B ^ \hat{B} B^ 是近似的二值图
  • T 是从网络中学习到的 adaptive threshold map
  • k 是一个增强因子,设定为 50
  • 该近似的二值化函数和标准的二值函数类似,但可微,就可以随模型一起训练

DB 能够提升模型效果的原因可以用梯度的反向传播来解释,以二值化交叉熵 loss 为例。

定义 DB 函数为: f ( x ) = 1 1 + e − k x f(x) = \frac{1}{1+e^{-kx}} f(x)=1+ekx1

  • 其中, x = P i , j − T i , j x = P_{i,j}-T_{i,j} x=Pi,jTi,j

positive label 的 loss l + l_{+} l+ 和 negative label 的 loss l − l_{-} l 如下:

在这里插入图片描述

loss 的梯度如下:

在这里插入图片描述
l + l_{+} l+ l − l_{-} l 的衍生物如图 4 所示,可以观察到:

  • 使用增强因子 k 能够增强梯度
  • 梯度的增强对
  • 很多预测错误的区域(x<0 for L + L_+ L+,和 x>0 for L − L_- L)很重要,所以能够促进网络优化,并有助于得到更具有区分力的预测结果
  • 此外,由于 x = P i , j − T i , j x = P_{i,j}-T_{i,j} x=Pi,jTi,j,故 P 的梯度会随着 T 的前向和反向传播而被影响和缩放

在这里插入图片描述

2.2 Adaptive threshold

有监督和无监督的 threshold map 如图 6 中所示,尽管没有监督时,文本区域也会高亮,这说明 border-like threshold map 对最终结果是有益的,所示,作者使用了 border-like 的监督信号来获得更好的指导。

在这里插入图片描述

2.3 可变形卷积

可变形卷积被证明能够提供更灵活的感受野,对文本实例,尤其是一些边界实例会有更好的特征提取效果,所以,本文在 conv3、conv4、conv5 的所有 3x3 卷积层中都使用了可变形卷积。

2.4 生成标签

这里需要给 probability map 和 threshold map 都生成标签

在这里插入图片描述
1、probability map 标签生成:

1)给定 text image,每个多边形都被认为是一个待分割的集合:

在这里插入图片描述

  • n 是顶点的个数,不同数据集中是不同的,如 ICDAR 2015 中是 4,CTW1500 是16

2)使用 Vatti clipping algorithm 方法进行多边形收缩,从 G G G 收缩为 G s G_s Gs,得到 positive area,偏移 D 是从原始的多边形区域的周长 L 和面积 A 计算得来的。

在这里插入图片描述

  • r 是收缩比率,本文设置为 0.4

2、threshold map 标签生成

1)使用 D 和 G d G_d Gd 对 G 进行膨胀,作者认为 G s G_s Gs G d G_d Gd 的 gap 是 text region 的 border,也就是边界区域

2)通过计算和 G 中的分割区域的最近距离,来生成 threshold map 的标签

2.5 优化过程

训练 loss:

在这里插入图片描述

  • L s L_s Ls:probability map 的 loss
  • L b L_b Lb:binary map 的 loss
  • L t L_t Lt:threshold map 的 loss
  • α = 1 \alpha = 1 α=1 γ = 10 \gamma=10 γ=10

1、 L s L_s Ls L b L_b Lb 的 loss 都使用二值交叉熵,为了平衡正负样本,使用了难例挖掘

在这里插入图片描述

  • S l S_l Sl 是正负样本 1:3 的样本集合

2、 L t L_t Lt 是计算了在膨胀文本多边形区域 G d G_d Gd 内的 prediction 和 label 的 L1 距离之和

在这里插入图片描述

  • R d R_d Rd:在膨胀多边形区域 G d G_d Gd 内的像素的索引
  • y ∗ y* y:threshold map 的 label

推理过程:

推理的时候,可以使用 probability map 或 approximate binary map 来生成 text bounding boxes,两者生成的很接近。为了高效,作者使用 probability map 来生成,所以 threshold map 就可以舍弃了。

box 生成包含 3 步:

  • probability map 首先使用 0.2 的阈值进行二值化
  • 从二值图中得到连接的区域(收缩 text 区域的方式来实现)
  • 使用 offset D ′ D' D 来进行收缩区域的膨胀, D ′ = A ′ × r ′ L ′ D' = \frac{A' \times r'}{L'} D=LA×r,其中, A ′ A' A 是收缩后多边形的面积, L ′ L' L 是收缩后多边形的周长, r ′ = 1.5 r'=1.5 r=1.5

三、效果

对比的指标:P/R/F

  • P:Precision
  • R:Recall
  • F:F1_Score

上述三个指标都可以通过混淆矩阵来得到,混淆矩阵如下:

预测:1预测:0
真实:1TPFN
真实:0FPFN

Precsion = T P T P + F P \text{Precsion} = \frac{TP}{TP+FP} Precsion=TP+FPTP
Recall = T P T P + F N \text{Recall} = \frac{TP}{TP+FN} Recall=TP+FNTP
F 1 = 2 P R P + R \text{F}_1 = \frac{2PR}{P+R} F1=P+R2PR

在精度或召回率较差的情况下,F1-score也会较差。只有当准确率和召回率都有很好的表现时,F1-score才会很高。

3.1 实验数据

  • SynthText:包含 800k 图片,是从 8k 大图中抽取得到的,本文中用这个数据进行 pre-train
  • MLT-2017 dataset:多语言数据集,包括 9 种语言,6 种字体,7200 张训练,1800 张验证,9000 张测试
  • ICDAR 2015 dataset:包括 1000 张训练数据,500 张测试数据,从 google 得到,分辨率为 720x1280,标注到 word level
  • MSRA-TD500 dataset:多语言数据集,包括英文和中文,300 张训练集,200 张测试集,标注到 text-line level
  • CTW1500 dataset:主要关注曲线文本的一个数据集,包括 1000 训练集,500 测试集,标注到 text-line level
  • Total-Text dataset:包括各种形状的 text,水平、多角度旋转、曲线形式等,1225 训练集,300 测试集,标注到 word level

3.2 实验细节

  • 在 SynthText 上进行预训练,训练 100k iterations,然后再对应的数据集上 finetune 1200 epochs
  • batch size 为 16
  • 数据增强:① 在 (-10°,10°)内进行随机旋转;② 随机裁剪;③ 随机翻转
  • 训练图像大小:所有图被 resize 到 640x640 大小
  • 推理阶段,在保持原始纵横比的基础上,对每个数据集缩放到合适的大小,测试推理速度的时候保持 batch = 1,在 1080ti 上测试,infer 时间包括模型前向推理时间和后处理时间,后处理大概耗时占总推理时间的 30%。

3.3 消融实验

1、DB 的效果

如表 1 所示

在这里插入图片描述
2、可变形卷积的效果

在这里插入图片描述

3、对 threshold map 监督的效果

在这里插入图片描述
4、Backbone

resnet 50 比 resnet 18 高 2.1%(MSRA-TD500) 和 2.8%(CTW1500)

3.4 和其他方法的对比

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不懂应该怎么选合适的医疗器械进销存?

在医院运行过程中&#xff0c;需要管理医疗设备的采购、养护、报废等各个环节。医疗器械进销存软件是集医院设备、物资、耗材的申请、采购、出入库、维修、维护、折旧、固定资产管理、效益分析等全流程管理功能于一体&#xff0c;实现医院医疗设备的信息化&#xff0c;数据库规…

数据结构之【时间复杂度和空间复杂度】

如何去评价一个代码它的效率高不高呢&#xff1f; 我们通常从两个方面去看&#xff01; 时间复杂度&#xff1a;主要衡量一个算法的运行速度空间复杂度&#xff1a;主要衡量一个算法所需要的额外空间 1. 时间复杂度 1.1 时间复杂度的定义 在计算机科学中&#xff0c;算法的…

算法题中常用的位运算

文章目录为什么使用位运算&#xff1f;十进制和二进制之间的转化短除法&#xff08;十进制转二进制&#xff09;幂次和&#xff08;二进制转十进制&#xff09;位运算符异或运算&#xff08;xor&#xff09;指定位置的位运算位运算实战要点为什么使用位运算&#xff1f; 机器采…

代码随想录刷题记录day46 最长公共子序列+不相交的线+最大子数组和

代码随想录刷题记录day46 最长公共子序列不相交的线最大子数组和 1143. 最长公共子序列 思想 1.dp数组的定义 dp[i][j]表示 以i-1为结尾的字符串text1和以j-1为结尾的字符串2的最长公共子序列长度 2.递推公式 如果text1.charAt(i-1)text2.charAt(j-1) dp[i][j]dp[i-1][j-1…

TS 对象可能为“未定义”,不能将类型“ XXXX | undefined “分配给类型{ xxxx }

前言&#xff1a; 最近用 typeScript &#xff0c;也就是大家常说的 【 TS 】写点东西&#xff0c;但是老是提醒这个未定义&#xff0c;那个可能为空&#xff0c;主要是 tsconfig.json 中的严格模式我没关&#xff0c;所以今天总结一下&#xff0c;严格模式中【TS】中遇到 对象…

Learning Disentangled Label Representations for Multi-label Classification

Learning Disentangled Label Representations for Multi-label Classification&#xff0c;2022 学习多标签分类的解纠缠标签表示 要点&#xff1a; 1、主流多标签分类&#xff1a;遵循单标签&#xff08;多类别&#xff09;分类的特征学习机制——学习一个共享的图像特征来…

【Vue实践】尚硅谷张天禹Vue学习笔记(087-135)-20221212~20221218

&#xff08;任意组件通信&#xff09;084-086_全局事件总线 全局事件总线SOP 086_TodoList案例_事件总线 src/mian.js: import Vue from vue import App from ./App.vueVue.config.productionTip falsenew Vue({el:"#app",render: h > h(App),beforeCreate()…

docker高级篇第二章-分布式存储之实战案例:3主3从redis集群搭建

在上一篇文章中&#xff0c;我们介绍了分布式存储的三种方式&#xff1a;hash取余分区、一致性哈希算法分区以及哈希槽分区。本篇&#xff0c;我们就来实战3主3从的哈希槽Redis集群搭建。 大家好,我是凯哥Java(kaigejava)&#xff0c;乐于分享&#xff0c;每日更新技术文章&…

【Redis深度专题】「核心技术提升」分析探究如何实现LFU的热点key发现机制以及内部的Scan扫描技术的原理

前言介绍 业务中存在访问热点是在所难免的&#xff0c;redis也会遇到这个问题&#xff0c;然而如何发现热点key一直困扰着许多用户&#xff0c;redis4.0为我们带来了许多新特性&#xff0c;其中便包括基于LFU的热点key发现机制。 Least Frequently Used Least Frequently Us…

基于节点导纳矩阵的三相配电系统建模(Matlab实现)

目录 1 概述 2 算例仿真 2.1 IEEE 37节点测试 2.2 EEE 123 节点测试 2.3 500 节点测试 2.4 906 母线低压馈线 2.5 小节 3 Matlab代码实现 1 概述 本文的主要是适用于 Z-Bus 潮流的三相配电系统建模。提供了星形和三角形恒功率、恒电流和恒阻抗负载的详细模型。布置了…

无线投屏(智慧教室)

大家好&#xff0c;我是小杜&#xff0c;打工人又开始了这一周的“搬砖”了。周末两天很好的“休息”后&#xff0c;今天浑身充满了干劲&#xff0c;都可以打死一头“牛”&#xff0c;从今天开始就要参与公司的一些业务了&#xff0c;剩余时间就是打工人最喜欢的学习时间了。 …

Nacos系列——Java SDK(2.x版本)2-1

Nacos系列——Java SDK&#xff08;2.x版本&#xff09;2-1资源地址README概述&#xff08;intro&#xff09;Nacos Java SDK 官方文档(official doc address)工程说明&#xff08;project intro &#xff09;工程目录&#xff08;project dir&#xff09;pom依赖(pom dependen…

面向切面编程

Spring AOP简介 AOP把业务功能分为核心、非核心两部分。 核心业务功能&#xff1a;用户登录、增加数据、删除数据。非核心业务功能&#xff1a;性能统计、日志、事务管理。 在Spring的面向切面编程&#xff08;AOP&#xff09;思想里&#xff0c;非核心业务功能被定义为切面。…

Springboot+echarts:ajax前后端分离交互

文章目录一、样例说明二、后端代码实现2.1 依赖2.2 applicaiton.properties配置2.3 TotalCountData类实现2.4 totalCountDataMapper接口2.5 totalCountDataMapper.xml实现2.6 Controller层代码三、前端代码一、样例说明 通过mysql存储数据&#xff0c;springboot整合mybatis框…

从云到「链」,京东云成为中国第四朵云背后

在产业加速到数实融合加速的今年&#xff0c;云计算不再是云厂商的唯一考校指标。 作者|叶子 出品|产业家 京东云再次破圈。 信号来自接连发布的几份报告。在国际权威研究机构Forrester发布的名为《The Forrester Wave&#xff1a;Public Cloud Development And Infrast…

[HCTF 2018]WarmUp

目录 考点 writeup 考点 文件上传漏洞&#xff0c;代码审计 writeup 先进入页面先查看源码 发现source.php,打开该php文件&#xff0c;进行审计代码后发现是文件包含类题目 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$…

JaveWeb框架(三):实战项目Servlet 实现管理系统登录注册功能

MVC实战项目 仓储管理系统需求&#xff1a;实现基本的登录和注册功能MVC实战项目&#xff1a;登录和注册登录功能实现注册功能实现总结Redis章节复习已经过去&#xff0c;新的章节JavaWeb开始了&#xff0c;这个章节中将会回顾JavaWeb实战项目 仓储管理 代码会同步在我的gitee中…

Linux内核调试技术之kdump配置与使用

概述 kdump是Linux内核发生崩溃时转储内存的一种机制&#xff0c;当内核发生错误时&#xff0c;kdump会将当前内核使用的内存导出为镜像文件&#xff08;通常为vmcore&#xff09;保存到硬盘上&#xff0c;之后可以使用crash等工具对内核错误原因进行分析。 kdump基本原理 k…

R语言中回归和分类模型选择的性能指标

有多种性能指标来描述机器学习模型的质量。但是&#xff0c;问题是&#xff0c;对于问题正确的方法是什么&#xff1f;在这里&#xff0c;我讨论了选择回归模型和分类模型时最重要的性能指标。请注意&#xff0c;此处介绍的性能指标不应用于特征选择&#xff0c;因为它们没有考…

如何保证分布式事务?

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【一心同学】&#xff0c;一位上进心十足的【Java领域博主】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; ✨【一心同学】的写作风格&#x…