OCR text detect

主干网络

VoVNet:实时目标检测的新backbone网络_vovnet pytorch-CSDN博客

DenseNet:

arxiv.org/pdf/1608.06993

  • 密集连接

    • DenseNet 的核心思想是将网络中的每一层与其前面的所有层直接连接。对于一个 L 层的网络,DenseNet 具有 L(L+1)/2 个直接连接,而传统卷积网络只有 L 个连接。
    • 这种密集连接模式可以缓解梯度消失问题,增强特征传播,鼓励特征重用,并显著减少参数数量46。
  • 复合函数

    • 每一层实现一个非线性变换 𝐻𝑙(⋅)Hl​(⋅),通常由批量归一化(BN)、ReLU 激活函数和 3x3 卷积组成46。
  • 过渡层

    • DenseNet 通过多个密集块(Dense Block)组成,每个密集块之间通过过渡层(Transition Layer)连接。过渡层通常包括 1x1 卷积和 2x2 平均池化46。
  • 增长率

    • 增长率(Growth Rate)是指每一层输出的特征图数量。DenseNet 可以具有非常窄的层,例如 k=12。增长率控制每一层向全局状态贡献的新信息的数量46。
  • 瓶颈层和压缩

    • 为了提高计算效率,DenseNet 在每个 3x3 卷积之前引入了 1x1 卷积作为瓶颈层(Bottleneck Layer)。此外,DenseNet 通过在过渡层减少特征图数量来进一步提高模型的紧凑性46。

VoVNetv1:

arxiv.org/pdf/1904.09730

oVNet(Variationally Connected Network)是一种高效的卷积神经网络架构,旨在解决 DenseNet 中密集连接导致的高内存访问成本和能耗问题。VoVNet 通过引入 OSA(One-Shot Aggregation)模块来优化特征提取过程,提高了网络的效率和性能。

主要特点

  1. OSA 模块

    • OSA 模块是 VoVNet 的核心组件。与 DenseNet 的逐层密集连接不同,OSA 模块在最后一次性聚合所有前面层的特征。这种设计减少了中间特征的冗余,提高了计算效率5455。
    • 每个 OSA 模块内部包含多个 3x3 卷积层,最后通过拼接操作将特征聚合。
  2. 网络结构

    • VoVNet 由多个 OSA 模块组成,通常分为多个阶段(stages)。每个阶段的最后会采用一个 stride 为 2 的 3x3 最大池化层进行降采样,模型最终的输出步长为 3254。
    • VoVNet 的初始部分是一个由 3 个 3x3 卷积层构成的 stem block,然后是 4 个阶段的 OSA 模块54。
  3. 优化和改进

    • VoVNetV2 在 VoVNet 的基础上进行了改进,引入了残差连接(Residual Connection)和有效的 Squeeze-Excitation(eSE)模块5556。
    • 残差连接帮助缓解了深层网络的优化问题,使得 VoVNet 可以训练更深的网络55。
    • eSE 模块通过避免通道维度的减少,保持了通道信息,提高了模型性能55。

VoVNetv2:1911.06667 (arxiv.org)

OSA 模块全称为 "One-Shot Aggregation" 模块

PP-HGNet:

HGNet 作者针对 GPU 设备,对目前 GPU 友好的网络做了分析和归纳,尽可能多的使用 3x3 标准卷积(计算密度最高)。在此将 VOVNet 作为基准模型,将主要的有利于 GPU 推理的改进点进行融合。从而得到一个有利于 GPU 推理的骨干网络,同样速度下,精度大幅超越其他 CNN 或者 VisionTransformer 模型。

PP-HGNet 骨干网络的整体结构如下:

 其中,PP-HGNet是由多个HG-Block组成,HG-Block的细节如下:

 PP-HGNet 和 VoVNet 之间:

  1. 基础模型

    • PP-HGNet 是在 VoVNet 的基础上开发的模型。VoVNet 是一种卷积神经网络架构,旨在通过引入多尺度特征融合来提高模型的性能和效率。
    • PP-HGNet 继承了 VoVNet 的基本结构,并在此基础上进行了优化和改进2627。
  2. 优化和改进

    • PP-HGNet 使用了可学习的下采样层(LDS Layer),这是一种新的下采样方法,可以在减少计算负载的同时增加感受野。
    • PP-HGNet 还融合了 ResNet_vd 等模型的优点,进一步提高了模型的性能26。
    • 在 GPU 平台上,PP-HGNet 通过使用 3x3 标准卷积(计算密度最高)和其他有利于 GPU 推理的改进点,显著提高了推理速度和精度

PP-HGHetv2

PP-HGNetV2 是 PP-HGNetV1 的改进版本,在多个方面进行了优化和增强,以提高模型的性能和效率。以下是 PP-HGNetV2 和 PP-HGNetV1 的主要区别:

1. 改进的 Stem 部分

  • PP-HGNetV1:使用标准的卷积层进行初始特征提取。
  • PP-HGNetV2:堆叠更多的 2x2 卷积核以学习更丰富的局部特征,并使用更小的通道数以提升大分辨率任务如目标检测、语义分割等的推理速度。

2. 优化的卷积层

  • PP-HGNetV1:使用标准的卷积层进行特征提取。
  • PP-HGNetV2:替换了靠后 stage 的较冗余的标准卷积层该为 Pointwise Convolution (PW) + Depthwise Convolution (DW)5x5 组合,在获得更大感受野的同时减少了网络的参数量,并进一步提升了精度。

3. LearnableAffineBlock 模块

  • PP-HGNetV1:没有此模块。
  • PP-HGNetV2:增加了 LearnableAffineBlock 模块,可以在增加极少参数量的同时大幅提升较小模型的精度,对推理时间无损。

4. 重构的 Stage 分布

  • PP-HGNetV1:原有的 stage 分布。
  • PP-HGNetV2:重构了网络的 stage 分布,使其涵盖了从 B0-B6 不同量级的模型,从而满足不同任务的需求。

5. SSLD 预训练权重

  • PP-HGNetV1:使用标准的预训练权重。
  • PP-HGNetV2:提供了精度更高、泛化能力更强的 SSLD 预训练权重,在下游任务中表现更佳。

6. 性能和效率

  • PP-HGNetV1:在相同速度下,精度高于 ResNet34-D 模型 3.8 个百分点,高于 ResNet50-D 模型 2.4 个百分点。
  • PP-HGNetV2:在相同速度下,精度进一步提升,并且在使用百度自研 SSLD 蒸馏策略后,超越 ResNet50-D 模型 4.7 个百分点。

 MobileNets

图图1 标准卷积和深度可分离卷积

MobileNetV1将普通卷积替换为深度卷积和逐点卷积。普通卷积的卷积核是直接用在所有的输入通道上,而深度卷积分为两部分进行计算,首先按照通道分别对特征图分别进行卷积,并将输出特征图进行拼接,随后使用逐点卷积进行通道卷积得到特征图,逐点卷积是卷积核为1x1的卷积,通道数和输入特征图一致。理论上如果MobileNetV1采用3x3卷积核,那么深度可分离卷积相较普通卷积可以降低大约9倍的计算量。

MobileNetV2

普通的残差结构先用1x1的卷积降维,再升维的操作。在MobileNetV2却是相反的操作,原因是将残差块替换为了深度可分离卷积之后,参数减少,提取的特征也相对减少,如果再进行压缩的话,能提取的特征就更少了,MobileNetV2为了避免特征减少需要先扩张高维,再经过深度可分离卷积提取特征,随后将卷积提取的特征降到低维。因此残差结构是先升维,再降维的操作。由于ReLU6激活函数对于低维的信息可能会造成比较大的瞬损失,对于高维的特征信息造成的损失很小。所以使用一个线性的激活函数避免特征损失。

通过下图可以看出,左侧为ResNet中的残差结构,其结构为1x1卷积降维->3x3卷积->1x1卷积升维;右侧为MobileNetV2中的倒残差结构,其结构为1x1卷积升维->3x3DW卷积->1x1卷积降维。V2先使用1x1进行升维的原因也是前面所说的高维信息通过ReLU激活函数后丢失的信息更少。

需要注意的是只有当s=1,即步长为1时,才有shortcut连接,步长为2是没有的 

在使用 MobileNetV1时,DW 部分的卷积核容易失效,即卷积核内数值大部分为零。作者认为这是 ReLU 引起的,在变换过程中,需要将低维信息映射到高维空间,再经 ReLU 重新映射回低维空间。若输出的维度相对较高,则变换过程中信息损失较小;若输出的维度相对较低,则变换过程中信息损失很大,如下图所示深度学习基础--Bottleneck(瓶颈) Architectures_a bottleneck architecture-CSDN博客:

需要注意的是步距s,当有多个bottleneck,s只针对第一个bottleneck,后面s都为1。

 MobileNetV3

MobileNetV3进一步使用AutoML技术用更少的FLOPs获得了更好的性能。在残差中加入了 SE 模块,即注意力机制;更新了激活函数。该函数具有无上界、有下界、平滑、非单调的特点,在深层模型上优于ReLU。但是,由于sigmoid函数计算复杂(sigmoid(x) = (1 + exp(-x))^(-1)),所以V3改用近似函数来逼近swish,这使其变得更硬(hard)。作者选择了ReLU6作为这个近似函数,有两个原因:1、在几乎所有的软件和硬件框架上都可以使用ReLU6的优化实现;2、ReLU6能在特定模式下消除由于近似sigmoid的不同实现而带来的潜在的数值精度损失。

高层网络使用5x5卷积是为了捕获更大范围的空间信息,这有助于提高网络的感知能力和特征提取效果3。此外,5x5卷积还可以帮助网络更好地理解图像中的全局结构和上下文信息,从而提升网络的性能和准确性 

详细且通俗讲解轻量级神经网络——MobileNets【V1、V2、V3】-云社区-华为云 (huaweicloud.com)

 PP-LCNet

PP-LCNet是Mobilenetv1的变体,同时吸收Mobilenetv3中高层使用5X5卷积,卷积中使用SEnet和激活函数使用h-swish

neck

1. FPN(Feature Pyramid Network)

FPN是一种常用的neck架构,广泛应用于目标检测和分割任务中。其主要思想是通过自顶向下的路径和横向连接,融合来自不同尺度的特征图,从而生成多尺度的特征表示。

主要特点:

多尺度特征融合:通过在不同尺度上融合特征图,使得网络能够更好地检测不同大小的目标。.

自顶向下路径:从高层次特征向低层次特征传播,增强了低层次特征的表达能力。

横向连接:在自顶向下路径中添加横向连接,以保证不同尺度特征的有效融合。.

 

2.PANet (Path Aggregation Network)

PANet是对FPN的改进,进一步增强了特征融合的能力,特别是在细粒度特征上的表现。

主要特点:

增强的特征融合路径:增加了自底向上的路径,使得信息不仅从高层次特征传递到低层次特征也能从低层次特征传递到高层次特征。

自适应特征池化:通过自适应的特征池化操作,进一步提升了特征融合的效果

 Head

DBNet:Real-time Scene Text Detection with Differentiable BinarizationReal-time Scene Text Detection with Differentiable Binarization

DBNet(Differentiable Binarization Network)是一种用于实时场景文本检测的高效算法,通过引入可微分二值化模块来优化分割预测结果。以下是对 DBNet 的详细介绍:

 

主要特点

  1. 可微分二值化(Differentiable Binarization, DB)

    • DBNet 的核心思想是将二值化过程引入到网络中,使其成为可微分的部分,从而在训练过程中自适应地学习二值化阈值。这种设计不仅简化了后处理过程,还提高了文本检测的性能。
  2. 高效的文本检测

    • DBNet 在多个场景文本检测数据集上表现出色,包括水平文本、多方向文本和曲形文本。其检测效果和速度均优于其他算法。
  3. 轻量级网络

    • 即使使用轻量级的 ResNet-18 作为主干网络,DBNet 也能取得很好的检测效果,这使得它在检测精度和效率之间找到了理想的折衷方案。

DBNet++:Real-Time Scene Text Detection with Differentiable Binarization and Adaptive Scale Fusion

  1. 自适应多尺度融合(Adaptive Scale Fusion, ASF)模块

    • ASF 模块用于动态聚合多尺度特征图,通过引入空间注意力机制,使得融合后的特征更加鲁棒。
    • ASF 是一个逐层注意力模块,能够在空间维度学习不同尺度和不同空间位置的权重,达到尺度鲁棒的特征融合。

 

PFhead:多分支融合Head结构

PFhead结构如下图所示,PFHead在经过第一个转置卷积后,分别进行上采样和转置卷积,上采样的输出通过3x3卷积得到输出结果,然后和转置卷积的分支的结果级联并经过1x1卷积层,最后1x1卷积的结果和转置卷积的结果相加得到最后输出的概率图。PP-OCRv4学生检测模型使用PFhead,hmean从76.22%增加到76.97%。

 PaddleOCR/ppocr/modeling/heads/det_db_head.py at main · PaddlePaddle/PaddleOCR · GitHub


class DBHead(nn.Layer):"""Differentiable Binarization (DB) for text detection:see https://arxiv.org/abs/1911.08947args:params(dict): super parameters for build DB network"""def __init__(self, in_channels, k=50, **kwargs):super(DBHead, self).__init__()self.k = kself.binarize = Head(in_channels, **kwargs)self.thresh = Head(in_channels, **kwargs)def step_function(self, x, y):return paddle.reciprocal(1 + paddle.exp(-self.k * (x - y)))def forward(self, x, targets=None):shrink_maps = self.binarize(x)if not self.training:return {"maps": shrink_maps}threshold_maps = self.thresh(x)binary_maps = self.step_function(shrink_maps, threshold_maps)y = paddle.concat([shrink_maps, threshold_maps, binary_maps], axis=1)return {"maps": y}class LocalModule(nn.Layer):def __init__(self, in_c, mid_c, use_distance=True):super(self.__class__, self).__init__()self.last_3 = ConvBNLayer(in_c + 1, mid_c, 3, 1, 1, act="relu")self.last_1 = nn.Conv2D(mid_c, 1, 1, 1, 0)def forward(self, x, init_map, distance_map):outf = paddle.concat([init_map, x], axis=1)# last Convout = self.last_1(self.last_3(outf))return outclass PFHeadLocal(DBHead):def __init__(self, in_channels, k=50, mode="small", **kwargs):super(PFHeadLocal, self).__init__(in_channels, k, **kwargs)self.mode = modeself.up_conv = nn.Upsample(scale_factor=2, mode="nearest", align_mode=1)if self.mode == "large":self.cbn_layer = LocalModule(in_channels // 4, in_channels // 4)elif self.mode == "small":self.cbn_layer = LocalModule(in_channels // 4, in_channels // 8)def forward(self, x, targets=None):shrink_maps, f = self.binarize(x, return_f=True)base_maps = shrink_mapscbn_maps = self.cbn_layer(self.up_conv(f), shrink_maps, None)cbn_maps = F.sigmoid(cbn_maps)if not self.training:return {"maps": 0.5 * (base_maps + cbn_maps), "cbn_maps": cbn_maps}threshold_maps = self.thresh(x)binary_maps = self.step_function(shrink_maps, threshold_maps)y = paddle.concat([cbn_maps, threshold_maps, binary_maps], axis=1)return {"maps": y, "distance_maps": cbn_maps, "cbn_maps": binary_maps}

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

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

相关文章

Git学习(常用的一些命令)

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 配置相关: 创建与克隆仓库: 基本操作: 分支操作: 远程仓库操作&#xff1a…

博客的部署方法论

博客写完后,当然是要发布到网络上的。如果想要部署到服务器上,则需编译构建成静态文件,然后将其上传到服务器上的路径(该路径由我们自己决定),然后在 web 服务器(Nginx 等)上配置访问…

m4a如何改为mp3格式?这四种音频转换方法非常好用!

m4a如何改为mp3格式?在当下的生活中,音乐已经成为了人们疲惫时的一剂良药,它不仅可以舒缓心灵,还能够激发情感和启发思维,在众多音频文件格式中,m4a 作为一种常见的格式,备受广大音乐爱好者的青…

OpenCV 张氏标定法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 “张正友标定法”是由张正友教授于1998年提出的单平面棋盘格的摄像头标定方法,该方法介于传统标定法和自标定法之间,克服了传统标定法需要高精度标定物的缺点,仅需要一个棋盘格即可。作为一种非常经典的相机内参标定…

VS开发QT程序图标修改

VS开发QT程序图标修改 1.双击打开UI界面 2.选择编辑资源 3.添加文件 4.选择ico文件 5.ok确定 6.点击保存 7.选择windowsIcon,倒三角图标 8.选择资源 9.选择图标,点击ok 10.保存 编译运行: 任务栏:

JCR一区级 | Matlab实现BO-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现BO-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现BO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BO-Transformer-LSTM多变量回归预测,贝叶斯优化Transformer结合LSTM长…

农村生活污水处理监测系统解决方案

一、概述 随着国民经济的发展和农村生活水平的提高,农村生活用水量越来越大,随之而来的污水产量也越来越大,农村生活污染对环境的压力越来越明显。环境保护意识的逐渐增强,使得人们对青山绿水的希望更为迫切,为满足人民…

【Kali-linux for WSL】图形化界面安装

文章目录 前言图形化界面安装 前言 之前在WSL中安装了Kali 启动之后发现什么都没有!!! 那我还怎么学习渗透技术??? 看来,得改进下我的kali-linux for wsl,安装个图形化界面 图形化…

Omniverse、Isaac Sim、Isaac Lab入门必会之 Nucleus 部署

新手入门Omniverse、Isaac Sim、Isaac Lab时经常发现,要想跑通例程,总是usd等资源加载不出来,软件傻傻的进程阻塞卡在那里,点两下就崩溃,这对新手来说非常的不友好,这都是由于没有安装 Nucleus 或者 Nucle…

蓝蜂网关接入雄安新区物联网统一开放平台应用案例

蓝蜂网关接入雄安新区物联网统一开放平台案例 一、应用背景 为响应国家《河北雄安新区规划纲要》,由中国雄安集团数字城市科技有限公司牵头,以中移物联网有限公司为牵头单位的联合体,构建了雄安新区物联网统一开放平台(简称雄安…

springboot美术馆售票管理系统-计算机毕业设计源码17485

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 2.2.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…

第三方软件测试公司分享:软件渗透测试的测试内容和注意事项

软件渗透测试是一种通过模拟攻击的方式来评估软件系统的安全性和漏洞,以发现并修复系统中的安全弱点。保护用户的数据和信息不被恶意攻击者利用,也是软件产品开发流程中重要的环节,可以帮助开发团队完善产品质量,提高用户满意度。…

Day01-02-gitlab

Day01-02-gitlab 1. 什么是gitlab2. Gitlab vs Github/Gitee3. Gitlab 应用场景4. 架构5. Gitlab 快速上手指南5.0 安装要求5.1 安装Gitlab组件5.3 配置访问url5.6 初始化5.8 登录与查看5.9 汉化5.10 设置密码5.11 目录结构5.12 删除5.13 500 vs 5025.14 重置密码 6. Gitlab用户…

迅睿CMS 后端配置项没有正常加载,上传插件不能正常使用

首先,尝试迅睿CMS官方提供的【百度编辑器问题汇总】解决方案来解决你的问题。你可以访问这个链接:官方解决方案。 如果按照【百度编辑器问题汇总】解决方案操作后,依然遇到“后端配置项没有正常加载,上传插件不能正常使用”的问题…

昇思第8天

保存与加载 保存模型使用save_checkpoint接口,传入网络和指定的保存路径 要加载模型权重,需要先创建相同模型的实例,然后使用load_checkpoint和load_param_into_net方法加载参数。 使用静态图加速 AI编译框架分为两种运行模式&#xff0c…

择校秘籍:如何找到口碑爆棚的学校?以星贝育园为例

在为孩子选择学校时,家长们总是慎之又慎,希望能找到一所口碑好、教育质量高的学校,为孩子的未来奠定坚实的基础。今天,我们就以星贝育园为例,来探讨一下如何选择口碑好的学校。 一、考察师资力量 优秀的教师团队是一所…

【测试】五子棋项目测试报告

目录 一、项目概述及测试目标 二、项目功能 三、测试类型 1)功能测试 ​编辑 2)自动化测试 四、测试总结 一、项目概述及测试目标 本项目是一个基于Web的五子棋实时对战应用,旨在提供用户之间的多人实时游戏体验。项目采用前…

ssm旅游信息分享网站-计算机毕业设计源码92194

目录 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 旅游信息分享网站分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 旅游信息分享网站总体设计 3.1 系统功能模块设计 3.2 数据库设计 3.4本章小结 4 旅游信…

pycharm配置conda解释器

假如我新建了一个conda虚拟环境,名为python3.8

学校教室NTP电子钟时间是如何同步北京时间的?-讯鹏时钟

在学校教室里,NTP 电子钟精准地显示着时间,与北京时间保持高度同步,为师生们提供了可靠的时间参考。那么,它是如何做到这一点的呢? NTP 电子钟能够与北京时间同步,主要依赖于网络时间协议(NTP&a…