当前位置: 首页 > news >正文

3.基于分割的文本检测算法--DBNet++

文章目录

    • 1.概况
    • 2.DBNet++中的主要方法
      • 2.1 网络结构
      • 2.2 适应特征图融合模块(Adaptive Scale Fusion Module, ASF)
    • 3.ASF模块的源码实现
    • 参考资料


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


1.概况

2022年02月份论文:Real-Time Scene Text Detection with Differentiable Binarization and Adaptive Scale Fusion

DBNet是2019年11月华中科技大学的Xiang Bai等提出的方法,其详细介绍见4.基于分割的文本检测算法–DBNet

DBNet++是原作者团队基于DBNet的改进工作,是DBNet会议论文的期刊版,除了DBNet中已经介绍过的可微分二值化运算之外,DBNet++中的主要创新是自适应多尺度特征融合(Adapptive Scale Fusion,ASF)模块的提出。

在以往的分割算方法中,多尺度特征图大都是通过FPN后直接进行concatenate来实现,这样做并没有考虑不同尺度特征图的重要性是不一样的。本文中,作者提出的自适应特征图融合模块使用了空间注意力机制,具体的介绍见第2部分。

2.DBNet++中的主要方法

2.1 网络结构

在这里插入图片描述

如上图所示,DBNet++的网络结构几乎相同,使用FPNbackbone,可微分二值化,基于分割概率图求文本区域等,主要的不同在对backbone上输出的特征图的处理上,DBNet++中新引入了Adaptive Scale Fusion模块。

2.2 适应特征图融合模块(Adaptive Scale Fusion Module, ASF)

在这里插入图片描述

图中对一个特征图的shape描述进行了修改,原论文图中存在特征图shape从N×C×H×W经过conv后变成C×H×W容易引起误解(容易误会成卷积将四维向量变成了三维)。

计算过程如上图所示,值的注意的是空间注意力机制的使用,先是对每个通道取均值得到特征图每个像素位置上的重要性,再将其加到原输入特征图上,增强每个位置的特征值,再通过卷积输出通道为N个的注意力权重,使得输出的权重能衡量每个尺度特征图的重要性。

backbone提取后输入到 ASF的特征图为X∈RN×C×H×W={Xi}i=0N−1X\in R^{N\times C\times H\times W} = \{X_i\}_{i=0}^{N-1}XRN×C×H×W={Xi}i=0N1,N表示特征图个数,N=4
先将N个特征图 concatenate到一起,然后再经过一个3×33\times33×3的卷积层得中间特征图S∈RC×H×WS\in R^{C\times H\times W}SRC×H×W,将SSS输入到一个空间注意力模块得到注意力权重A∈RN×H×WA\in R^{N\times H\times W}ARN×H×W,注意力权重A有N个通道,将其沿通道方向切分得到N个权重矩阵[E0,E1,...,EN−1][E_0,E_1,...,E_{N-1}][E0,E1,...,EN1],将其分别与输入的N个特征图XXX对应相乘后再 concatenate到一起就得到了 ASF的输出。

S=Conv(concat([X0,X1,...,XN−1]))S = Conv(concat([X_0,X_1,...,X_{N-1}])) S=Conv(concat([X0,X1,...,XN1]))

A=SpatialAttention(S)A = Spatial_Attention(S) A=SpatialAttention(S)

F=concat([E0X0,E1X1,...,EN−1XN−1])F=concat([E_0X_0,E_1X_1,...,E_{N-1}X_{N-1}]) F=concat([E0X0,E1X1,...,EN1XN1])

3.ASF模块的源码实现

decoders/feature_attention.py

class ScaleSpatialAttention(nn.Module):def __init__(self, in_planes, out_planes, num_features, init_weight=True):super(ScaleSpatialAttention, self).__init__()self.spatial_wise = nn.Sequential(#Nx1xHxWnn.Conv2d(1, 1, 3, bias=False, padding=1),nn.ReLU(),nn.Conv2d(1, 1, 1, bias=False),nn.Sigmoid() )self.attention_wise = nn.Sequential(nn.Conv2d(in_planes, num_features, 1, bias=False),nn.Sigmoid())if init_weight:self._initialize_weights()...def forward(self, x):global_x = torch.mean(x, dim=1, keepdim=True)global_x = self.spatial_wise(global_x) + xglobal_x = self.attention_wise(global_x)return global_xclass ScaleFeatureSelection(nn.Module):def __init__(self, in_channels, inter_channels , out_features_num=4, attention_type='scale_spatial'):super(ScaleFeatureSelection, self).__init__()self.in_channels=in_channelsself.inter_channels = inter_channelsself.out_features_num = out_features_numself.conv = nn.Conv2d(in_channels, inter_channels, 3, padding=1)self.type = attention_typeif self.type == 'scale_spatial':self.enhanced_attention = ScaleSpatialAttention(inter_channels, inter_channels//4, out_features_num)elif self.type == 'scale_channel_spatial':self.enhanced_attention = ScaleChannelSpatialAttention(inter_channels, inter_channels // 4, out_features_num)elif self.type == 'scale_channel':self.enhanced_attention = ScaleChannelAttention(inter_channels, inter_channels//2, out_features_num)def _initialize_weights(self, m):classname = m.__class__.__name__if classname.find('Conv') != -1:nn.init.kaiming_normal_(m.weight.data)elif classname.find('BatchNorm') != -1:m.weight.data.fill_(1.)m.bias.data.fill_(1e-4)def forward(self, concat_x, features_list):concat_x = self.conv(concat_x)score = self.enhanced_attention(concat_x)assert len(features_list) == self.out_features_numif self.type not in ['scale_channel_spatial', 'scale_spatial']:shape = features_list[0].shape[2:]score = F.interpolate(score, size=shape, mode='bilinear')x = []for i in range(self.out_features_num):x.append(score[:, i:i+1] * features_list[i])return torch.cat(x, dim=1)
---

欢迎访问个人网络日志🌹🌹知行空间🌹🌹


参考资料

  • 1.https://github.com/MhLiao/DB
  • 2.Real-Time Scene Text Detection with Differentiable Binarization and Adaptive Scale Fusion

相关文章:

3.基于分割的文本检测算法--DBNet++

文章目录1.概况2.DBNet中的主要方法2.1 网络结构2.2 适应特征图融合模块(Adaptive Scale Fusion Module, ASF)3.ASF模块的源码实现参考资料欢迎访问个人网络日志🌹🌹知行空间🌹🌹 1.概况 2022年02月份论文:Real-Time S…...

IOS打包、SDK接入记录等

IOS打包、SDK接入记录等 Mac上安装HCLR路径 /Applications/Unity/Hub/Editor/2019.4.40f1c1/Unity.app/Contents/il2cpp HCLR 指定4.40是要Unity启动打开的il2cpp,否则HCLR Installer他会报找不到MonoBleedingEdge Mac删除证书 只能点击钥匙串做上角的登录后&…...

【C++】类与对象(引入)

目录 前言 类的引入 类的定义 封装与访问限定符 封装 访问限定符 类的实例化 类的大小 this指针 特性 前言 🎶我们都知道,C语言是面向过程的编程,而C是面向对象的编程,更多体现在编程的关注点上。 🎶就拿洗…...

Redis 高级数据类型

文章目录一、Bitmaps:属性状态统计二、HyperLogLog:基数统计三、GEO:地理位置信息计算提示:以下是本篇文章正文内容,Redis系列学习将会持续更新 一、Bitmaps:属性状态统计 Bitmaps类型: 统计一…...

Java8 新特性-函数式接口

什么是函数式接口 先来看看传统的创建线程是怎么写的 Thread t1 new Thread(new Runnable() {Overridepublic void run() {System.out.println("t1");} }); t1.start();再来看看使用了函数式接口是怎么写的 Thread t2 new Thread(() -> System.out.println(&…...

这套软件测试试卷能打90分,直接入职字节吧

目录 一.填空 二、 判断题(正确的√,错误的╳)共10分,每小题1分 三、数据库部分:(共15分) 四、设计题。本题共 1 小题,满分 20分 一.填空 1、 系…...

GUI可视化应用开发及Python实现

0 建议学时 4学时,在机房进行 1 开发环境安装及配置 1.1 编程环境 安装PyCharm-community-2019.3.3 安装PyQt5 pip install PyQt5-tools -i https://pypi.douban.com/simple pip3 install PyQt5designer -i https://pypi.douban.com/simple1.2 环境配置 选择“…...

【论文简述】GMFlow: Learning Optical Flow via Global Matching(CVPR 2022)

一、论文简述 1. 第一作者:Haofei Xu 2. 发表年份:2022 3. 发表期刊:CVPR oral 4. 关键词:光流、代价体、Transformers、全局匹配、注意力机制 5. 探索动机:过去几年中具有代表性的光流学习框架的核心估计方式没有…...

【Spark分布式内存计算框架——离线综合实战】5. 业务报表分析

第三章 业务报表分析 一般的系统需要使用报表来展示公司的运营情况、 数据情况等,本章节对数据进行一些常见报表的开发,广告数据业务报表数据流向图如下所示: 具体报表的需求如下: 相关报表开发说明如下: 第一、数据…...

力扣-删除重复的电子邮箱

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:196. 删除重复的电子邮箱二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其…...

git基础

git-note Github Manual | GitHub Cheat Sheet | Visual Git Cheat Sheet 安装配置工具分支创建仓库.gitignore文件同步更改进行更改重做提交术语表 安装 desktop.github.com | git-scm.com 配置工具 对所有本地仓库的用户信息进行配置 对你的commit操作设置关联的用户名…...

postgres 源码解析50 LWLock轻量锁--1

简介 postgres LWLock(轻量级锁)是由SpinLock实现,主要提供对共享存储器的数据结构的互斥访问。LWLock有两种锁模式,一种为排他模式,另一种是共享模式,如果想要读取共享内存中的内容,需要在读取…...

JVM优化常用命令

jps列出正在运行的虚拟机进程jpstop列出线程CPU或内存占用top top -Hp pid //列出pid全部线程jstat监视虚拟机运行状态信息jstat -gc pid 5000 //每隔5s打印gc情况jmapjmap -heap pid //输出jvm内存情况 jmap -histo:live pid | more //查看堆内存中的对象数量和大小 jma…...

按键中断实验

gpio.c#include"gpio.h"//给gpio使能和设置为输入模式void hal_gpio_init(){//使能GPIOF控制器RCC->MP_AHB4ENSETR|(0x1<<5);//通过GPIOF_将pf9/pf7/pf8设置为输入模式 GPIOF->MODER&(~(0x3<<18));GPIOF->MODER&(~(0x3<<14));GPI…...

kubernetes入门介绍,从0到1搭建并使用

Kubernetes是一个容器编排系统&#xff0c;用于自动化应用程序部署、扩展和管理。本指南将介绍Kubernetes的基础知识&#xff0c;包括基本概念、安装部署和基础用法。 基础介绍 Kubernetes是Google开发的开源项目&#xff0c;是一个容器编排系统&#xff0c;可以自动化部署、…...

【C语言进阶】字符串函数与内存函数的学习与模拟实现

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C语言进阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录1.字符串处理函数介…...

【JavaEE初阶】第一节.多线程(进阶篇 ) 常见的锁策略、CAS及它的ABA问题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、常见的锁策略 1.1 乐观锁 vs 悲观锁 1.2 普通的互斥锁 vs 读写锁 1.3 重量级锁 vs 轻量级锁 1.4 自旋锁 vs 挂起等待锁 1.5 公平…...

Linux基础命令-pstree树状显示进程信息

Linux基础命令-uname显示系统内核信息 Linux基础命令-lsof查看进程打开的文件 Linux基础命令-uptime查看系统负载 文章目录 前言 一 命令介绍 二 语法及参数 2.1 使用man查看命令语法 2.2 常用参数 三 参考实例 3.1 以树状图的形式显示所有进程 3.2 以树状图显示进程号…...

keepalived+LVS配置详解

keepalivedLVS配置详解keepalived简介keepalived的应用场景keepalived工作原理VRRP协议核心组件分层工作工作状态LVS简介LVS三种模式NAT模式(网络地址映射)IPTUN模式(IP隧道)DR模式(直接路由)三种模式对比keepalivedLVS配置1.master配置2. keepalived配置文件3 修改keepalived配…...

Unity之C#端使用protobuf

什么是protobuf protobuf全称Protocol Buffers&#xff0c;由Google推出的一种平台、语言无关的数据交互格式&#xff0c;目前使用最广泛的一种数据格式&#xff0c;尤其在网络传输过程中&#xff0c;有很强的安全性&#xff0c;而且数据量比json和xml要小很多。 最主要的是pr…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...