DBNET文字检测

news2024/9/22 2:23:08

原文:DBNET文字检测 - 知乎 (zhihu.com)

一、DBNET介绍

DBNET核心采用的是基于分割的做法进行文本检测,即将每个文本块都进行语义分割,然后对分割概率图进行简单二值化、最终转化得为box或者poly格式的检测结果。除去网络设计方面的差异,最大特点是引入了Differentiable Binarization(DB)模块来优化分割预测结果。常规的基于语义分割的文本检测算法都是直接输出二值语义概率图或者其他辅助信息,然后经过阈值二值化得到最终结果,要想得到比较好的文本检测效果,一般都需要复杂的后处理,例如PSENet和PANet,会导致速度很慢。DBNET将阈值二值化过程变得可微,这一小小改动不仅可以增加错误预测梯度,也可以联合优化各个分支,得到更好的语义概率图

二、DBNET算法流程

与常规基于语义分割算法的区别是多了一条threshold map分支,该分支的主要目的是和分割图联合得到更接近二值化的二值图,属于辅助分支。

2.1、backbone

骨架网络采用的是resnet18或者resnet50,为了增加网络特征提取能力,在layer2、layer3和layer4模块内部引入了变形卷积dcnv2模块。

import torch.nn as nn
import math
import torch.utils.model_zoo as model_zoo

BatchNorm2d = nn.BatchNorm2d

__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', 'deformable_resnet18', 'deformable_resnet50',
           'resnet152']

model_urls = {
    'resnet18': 'https://download.pytorch.org/modelss/resnet18-5c106cde.pth',
    'resnet34': 'https://download.pytorch.org/modelss/resnet34-333f7ec4.pth',
    'resnet50': 'https://download.pytorch.org/modelss/resnet50-19c8e357.pth',
    'resnet101': 'https://download.pytorch.org/modelss/resnet101-5d3b4d8f.pth',
    'resnet152': 'https://download.pytorch.org/modelss/resnet152-b121ed2d.pth',
}


def constant_init(module, constant, bias=0):            # 常量初始化
    nn.init.constant_(module.weight, constant)
    if hasattr(module, 'bias'):
        nn.init.constant_(module.bias, bias)


def conv3x3(in_planes, out_planes, stride=1):
    """3x3 convolution with padding"""
    return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride,
                     padding=1, bias=False)


class BasicBlock(nn.Module):
    expansion = 1

    def __init__(self, inplanes, planes, stride=1, downsample=None, dcn=None):
        super(BasicBlock, self).__init__()
        self.with_dcn = dcn is not None
        self.conv1 = conv3x3(inplanes, planes, stride)      # 正常卷积过程
        self.bn1 = BatchNorm2d(planes)
        self.relu = nn.ReLU(inplace=True)
        self.with_modulated_dcn = False
        if not self.with_dcn:
            self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, padding=1, bias=False)
        else:
            from torchvision.ops import DeformConv2d
            deformable_groups = dcn.get('deformable_groups', 1)
            offset_channels = 18
            self.conv2_offset = nn.Conv2d(planes, deformable_groups * offset_channels, kernel_size=3, padding=1)
            self.conv2 = DeformConv2d(planes, planes, kernel_size=3, padding=1, bias=False)
        self.bn2 = BatchNorm2d(planes)
        self.downsample = downsample
        self.stride = stride

    def forward(self, x):
        residual = x

        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)

        # out = self.conv2(out)
        if not self.with_dcn:
            out = self.conv2(out)
        else:
            offset = self.conv2_offset(out)
            out = self.conv2(out, offset)
        out = self.bn2(out)

        if self.downsample is not None:
            residual = self.downsample(x)

        out += residual
        out = self.relu(out)

        return out


class Bottleneck(nn.Module):
    expansion = 4

    def __init__(self, inplanes, planes, stride=1, downsample=None, dcn=None):
        super(Bottleneck, self).__init__()
        self.with_dcn = dcn is not None
        self.conv1 = nn.Con

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

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

相关文章

Python 从入门到实战6(二维列表)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 之前的文章我们通过举例学习了python 中列表的相关操作&#xff0…

什么是阿凡达2.0直播模式?

要了解什么是什么是阿凡达2.0直播模式,首先要了解什么是的阿凡达直播模式。 我们知道真人直播,播不了几个小时,主播就讲累了。且真人主播的价格又贵,以小时计费。所以很多数字人厂商推出了数字人直播。用数字人代替真人直播。在前几年的时候…

强烈建议!重罚自燃车企

文 | AUTO芯球 作者 | 雷慢 想想就叫人害怕啊, 广东惠州电车自燃那个事,你们看了吗 3辆汽车和多辆电动自行车被烧毁,住宅变危房, 最触目惊心的还是浓烟,许多住户咳呛不止, 周边小区也惨遭浓烟毒害&…

Css:css的属性选择器vs关系选择器及css中伪元素

css的属性选择器&#xff1a; 注&#xff1a;属性值只能由数字&#xff0c;字母&#xff0c;下划线&#xff0c;中划线组成&#xff0c;并且不能以数字开头。 1、[属性] 选择含有指定属性的元素&#xff0c;用[]中括号表示。 <style> [title]{color:red;} p[title]{col…

「Python数据分析」Pandas进阶,使用groupby分组聚合数据(一)

在数据分析过程中&#xff0c;groupby语句&#xff0c;起到对原始数据集&#xff0c;进行分组和聚合的作用。我们在进行数据处理的时候&#xff0c;经常需要对不同的数据维度&#xff0c;以及不同的数据切片集合&#xff0c;进行操作和处理。 比如说&#xff0c;假设我们有全国…

零基础国产GD32单片机编程入门(十二)FreeRTOS实时操作系统移植含源码

文章目录 一.概要二.什么是实时操作系统三.FreeRTOS的特性四.FreeRTOS的任务详解1.任务函数定义2.任务的创建3.任务的调度原理 五.FreeRTOS系统移植到GD32F103C8T6单片机1.硬件准备2.程序移植3.调试FreeRTOS任务调度 六.工程源代码下载七.小结 一.概要 FreeRTOS是一个迷你的实…

海外直播对网速、带宽、安全的要求

要满足海外直播的要求&#xff0c;需要拥有合适的网络配置。在全球化的浪潮下&#xff0c;海外直播正逐渐成为企业、个人和各类组织的重要工具。不论是用于市场推广、品牌宣传&#xff0c;还是与观众互动&#xff0c;海外直播都为参与者带来了丰富的机会。然而&#xff0c;确保…

KTH2502 系列车规数字锁存霍尔效应传感器

KTH2502 采用了先进的斩波技术&#xff0c;集成了温度补偿电路和过流、负压保护电路&#xff0c;具有卓越的灵敏度和温度稳定 性。磁场通过数字双极锁存器输出指示。该芯片具有开漏输出级以及 30mA 的灌电流能力。 2.7~32 V 的宽电压工 作范围&#xff0c;反极性保护高达 -22…

渗透测试靶机--- DC系列 DC-9

渗透测试靶机— DC系列 DC-9 开启靶机&#xff0c;依旧登录窗&#xff0c;平平无奇 扫描信息 访问页面看看 页面中存在查询接口&#xff0c;这里页面输入的内容是get请求&#xff0c;可以尝试sql注入&#xff0c;如果是post请求&#xff0c;那么抓包。将请求体放入sqlmap跑一下…

太速科技-基于Kintex-7 XC7K160T 的CameraLink转四路光纤数据转发卡(Full Camera Link图像转万兆以太网适配器 )

基于Kintex-7 XC7K160T 的CameraLink转四路光纤数据转发卡&#xff08;Full Camera Link图像转万兆以太网适配器 &#xff09; 一、板卡概述 该板卡是一款CameraLink&#xff08;Full&#xff09;转4路光纤接口板&#xff0c;可以实现1路CamerLink Full模式的图像信号转换成…

Druid未授权访问解决

Druid未授权访问原因分析 漏洞说明&#xff1a;Druid由阿里巴巴数据库出品&#xff0c;为监控而生的数据库连接池&#xff0c;并且Druid可以提供监控&#xff0c;监控SQL的执行时间、监控Web URI的请求、Session监控等功能&#xff0c;使用广泛。 需要明确&#xff1a; Druid…

物联网(IoT)支持的小型水处理厂实时硬件在环(HIL)仿真

这篇论文的标题是《Real-Time Hardware-In-The-Loop Simulation of IoT-Enabled Mini Water Treatment Plant》&#xff0c;作者是 Mohamad Taib Miskon 等人&#xff0c;发表在 2024 年 IEEE 自动控制与智能系统国际会议&#xff08;I2CACIS&#xff09;上。以下是该论文的主要…

搭建 xxl-job 调度中心

文章目录 1、初始化“调度数据库”2、修改“调度中心”配置3、打包运行”调度中心“ 1、初始化“调度数据库” 请下载项目源码并解压&#xff0c;获取 “调度数据库初始化SQL脚本” 并执行即可。 “调度数据库初始化SQL脚本” 位置为&#xff1a;/xxl-job/doc/db/tables_xxl_j…

微服务日常总结

1.当我们在开发中&#xff0c;需要连接多个库时&#xff0c;可以在yml中进行配置。 当在查询的时候&#xff0c;跨库时&#xff0c;需要通过DS 注解来指定&#xff0c;需要yml配置需要保持一致。 2. 当我们想把数据存入到clob类型中&#xff0c;需要再字段 的占位符后面加上j…

鸢尾花书实践和知识记录[数学要素3-1万物皆数]

章节框图 文章目录 本章用到的函数使用math库来打印出一些常用的值判断奇数偶数两数加减产生序列矩阵向量的表示&#xff1a;取数组矩阵元素的方法streamlit的绘图矩阵的一般类型构造二维矩阵矩阵的加和运算 本章用到的函数 复数和自然数 使用math库来打印出一些常用的值 i…

多表查询_关联查询

inner join:通常关联项on后面的是主外键&#xff0c;两个表都有的才显示 left join:左连&#xff0c;select * from S left join B on s.字段 B.字段&#xff0c;一定会将左边表的数据全部查询出来 right join:select * from S right join B on s.字段 B.字段一定会将右边表的…

Unity面向对象补全计划 之 List<T>与class(非基础)

C# & Unity 面向对象补全计划 泛型-CSDN博客 关于List&#xff0c;其本质就是C#封装好的一个数组&#xff0c;是一个很好用的轮子&#xff0c;所以并不需要什么特别说明 问题描述 假设我们有一个表示学生的类 Student&#xff0c;每个学生有姓名和年龄两个属性。我们需要创…

Git学习尚硅谷(002 git常用命令)

尚硅谷Git入门到精通全套教程&#xff08;涵盖GitHub\Gitee码云\GitLab&#xff09; 总时长 4:52:00 共45P 此文章包含第8p-第p15的内容 文章目录 git常用命令设置用户签名初始化本地库查看本地库状态添加暂存区提交本地库日志查看修改文件版本穿梭 git常用命令 设置用户签名…

视频集中存储智能边缘计算网关软硬一体机智能边缘计算网关应用场景

在信息化飞速发展的今天&#xff0c;数据处理的速度和效率直接影响到各行各业的运作和发展。传统的云计算模式虽然强大&#xff0c;但在面对实时性和带宽要求越来越高的应用场景时&#xff0c;往往显得力不从心。此时&#xff0c;智能边缘计算网关的出现&#xff0c;为我们带来…

源代码怎么加密防泄漏?9种方法教会你

想做源代码加密防止泄漏&#xff0c;首先要了解程序员可以通过哪些方式将源代码传输出去&#xff01; 程序员泄密的常见方式 物理方法&#xff1a; — 网线直连&#xff0c;即把网线从墙上插头拔下来&#xff0c;然后和一个非受控电脑直连; — winPE启动&#xff0c;通过光盘…