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++的网络结构几乎相同,使用FPN的backbone,可微分二值化,基于分割概率图求文本区域等,主要的不同在对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}X∈RN×C×H×W={Xi}i=0N−1,N表示特征图个数,N=4
先将N个特征图 concatenate到一起,然后再经过一个3×33\times33×3的卷积层得中间特征图S∈RC×H×WS\in R^{C\times H\times W}S∈RC×H×W,将SSS输入到一个空间注意力模块得到注意力权重A∈RN×H×WA\in R^{N\times H\times W}A∈RN×H×W,注意力权重A有N个通道,将其沿通道方向切分得到N个权重矩阵[E0,E1,...,EN−1][E_0,E_1,...,E_{N-1}][E0,E1,...,EN−1],将其分别与输入的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,...,XN−1]))
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,...,EN−1XN−1])
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是一个容器编排系统,用于自动化应用程序部署、扩展和管理。本指南将介绍Kubernetes的基础知识,包括基本概念、安装部署和基础用法。 基础介绍 Kubernetes是Google开发的开源项目,是一个容器编排系统,可以自动化部署、…...
【C语言进阶】字符串函数与内存函数的学习与模拟实现
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C语言进阶 🎯长路漫漫浩浩,万事皆有期待 文章目录1.字符串处理函数介…...
【JavaEE初阶】第一节.多线程(进阶篇 ) 常见的锁策略、CAS及它的ABA问题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、常见的锁策略 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,由Google推出的一种平台、语言无关的数据交互格式,目前使用最广泛的一种数据格式,尤其在网络传输过程中,有很强的安全性,而且数据量比json和xml要小很多。 最主要的是pr…...
工业智能化的时序选型指南:当数据底座遇见机器学习
随着工业 4.0 和物联网的深入发展,企业对时序数据的诉求已经发生了质的改变:“仅仅把海量数据存下来,并在大屏上画成折线图”已经远远无法满足高阶的业务需求。风机设备的预测性维护、流水线能耗的异常检测、智能电网的产量预测……这些高价值…...
深入 QEMU 热迁移
深入 QEMU 热迁移:从状态机到数据平面的全链路剖析 “把一台正在运行的虚拟机从一台主机搬到另一台,还让里面的操作系统浑然不觉——这听起来像魔法,实则是精密的工程。” 引言 实时迁移是 QEMU 最核心的子系统之一。它允许将一个正在运行的…...
Codex适配国产信创环境安装部署与技术适配全解析
随着国家信创产业持续落地推进,党政、金融、能源、工业等关键行业全面开启信息技术软硬件国产化替代工作。基于自主可控、安全可信的核心需求,传统国外架构软硬件体系逐步被国产操作系统、国产芯片硬件替代。Codex作为主流的智能代码辅助、自动化开发工具…...
告别‘找茬’游戏:用Python复现ALCNet,让红外小目标检测又快又准
从理论到实践:用Python实现ALCNet红外小目标检测全流程红外图像中的小目标检测一直是计算机视觉领域的难点——目标可能只有几个像素大小,却要对抗复杂的背景噪声。传统方法依赖人工设计的特征,而ALCNet通过膨胀局部对比度度量和循环移位加速…...
探索dpt-tools:突破索尼电子纸设备系统限制的技术突破
探索dpt-tools:突破索尼电子纸设备系统限制的技术突破 【免费下载链接】dpt-tools dpt systems study and enhancement 项目地址: https://gitcode.com/gh_mirrors/dp/dpt-tools 在数字阅读与笔记领域,索尼DPT系列电子纸设备以其卓越的显示技术和…...
从Voronoi图到Lloyd算法:分布式传感器网络收敛性证明与工程实践
1. 从几何直觉到数学证明:理解传感器网络的收敛性在分布式传感器网络、无人机编队或者移动机器人集群的部署中,一个核心问题是如何让这些自主节点在没有中央控制器的情况下,高效、均匀地覆盖一个目标区域,并最终收敛到我们关心的关…...
Product Hunt 每日热榜 | 2026-05-23
1. TestSprite 3.0 标语:让一群并行的智能代理在几分钟内测试你的应用程序。 介绍:TestSprite 能够独立生成并运行你应用程序的端到端测试。对于后端,我们现在可以生成复杂的集成测试,支持动态变量、自动清理和数据流调试。对于…...
Unity版本选择避坑指南:LTS稳定幻觉与个人版合规雷区
1. 为什么Unity版本选择不是“装最新版就完事”?刚接触Unity的新手,十有八九会直接去官网下载那个醒目的“Download Latest Version”按钮——毕竟谁不想用上最酷的HDRP、最顺的DOTS、最全的AI工具链?我带过三届Unity训练营,每届都…...
基于机器视觉与机器学习的化学分析自动化:从颜色反应到浓度预测
1. 项目概述:当化学分析遇上人工智能 在实验室里,我们常常依赖一些经典的“颜色反应”来判断物质的浓度。比如,用碘化钾溶液检测水中的总氧化剂——溶液从无色逐渐变成黄色、棕色,颜色越深,氧化剂浓度越高。这个方法叫…...
stable diffusion秋叶整合包安装时报错No Python at ‘“D:\python\python.exe‘请按任意键继续. . .人工智能画画AI绘图报错解决
使用秋叶的stable diffusion整合包报错,原因是原先安装过python,后面卸载了,然后还有anaconda和一些其他软件有自带的python,我先在C盘搜索python,删除搜索到的所有文件,因为秋叶的整合包有pythonÿ…...
