SPP:空间金字塔池化

       今天水一篇博客,讲讲SPP池化结构;那这是个什么东西呢?它的作用又是什么呢?在了解它之前我们先简单了解一下大部分的神经网络;

引入:

       在大部分的神经网络中,都将神经网络分为Backbone主干网络、Neck特征融合和Head三个部分,有的网络会略去Neck直接将Backbone和head结合,比如前面介绍的VGG、ResNet、ViT等模型在做分类任务是都会在后面接一个全链接层或者前馈网络进行分类输出;虽然卷积神经网络对输入数据的尺寸不敏感,可以适应不同尺寸的数据张量,但是模型最后的head模块属于全链接层,全联接层就要求输入张量的维度是固定的,这就要求输入卷积层的张量也必须是固定的尺寸,即便卷积运算对尺寸不敏感;

       为了解决包含全联接层的卷积神经网络必须输入固定尺寸数据的问题,就诞生了SPP(空间金字塔池化)这样的结构;从名字上面听它就是一个池化模块,所以它不具备训练参数,就单纯是一个张量处理模块;它的诞生,实现了包含全联接层卷积神经网络可以输入不同尺寸的张量进行推理,无需在输入模型前再做统一尺寸的前处理操作,那具体它是如何实现的呢?

       其实它的实现过程非常的简单,首先我们需要知道它应该放在模型的哪个位置,它处在卷积层提取完特征与全联接层交汇处,然后将卷积完成的特征图作为输入;

操作流程:

       1、特征图分割:SPP 层将输入的特征图分割成多个不同大小的网格,这些网格的大小通常是 1x1、2x2、4x4 等等,形成一个金字塔结构,每个网格的大小决定了池化操作的感受野;

       2、池化操作:对每个网格进行池化操作,通常使用最大池化(Max Pooling);最大池化会选择每个网格中的最大值作为输出。这样,每个网格都会生成一个固定大小的特征表示,需要注意的是这个池化操作是一个并发的过程;

       3、特征拼接:将所有网格的特征表示拼接起来,形成一个固定长度的特征向量;这个特征向量随后可以作为后续全连接层的输入;

举个SPP例子:

       假设我们有一张 448×448 的输入图像,通过卷积层后得到特征图 56×56×512;接下来,我们使用 SPP 层进行处理:

  1. 特征图分割

    • 1x1 网格:整个特征图作为一个网格
    • 2x2 网格:特征图被分割成 4 个 28×28 的网格
    • 4x4 网格:特征图被分割成 16 个 14×14的网格
  2. 池化操作

    • 1x1 网格:最大池化后的特征图尺寸为 1×1×512;
    • 2x2 网格:最大池化后的特征图尺寸为 2×2×512=4×512=4×512;
    • 4x4 网格:最大池化后的特征图尺寸为 4×4×512=16×512=16×512;
  3. 特征拼接

    拼接后的特征向量长度为:1×512 + 4×512 + 16×512 = 512+2048+8192=10752
  4. 全连接层分类

    将拼接后的特征向量 10752 输入到全连接层中,进行分类任务;

优缺点:

优点:

  1. 尺度不变性:SPP 层能够处理不同尺寸和比例的输入图像,使模型具有尺度不变性。这意味着无论输入图像的大小如何,模型都能有效地提取特征。

  2. 减少计算量:通过池化操作,SPP 层能够降低特征图的维度,从而减少后续全连接层的计算量和模型中的参数数量。这有助于减轻过拟合并加速训练过程。

  3. 提高性能:SPP 层能够捕获输入图像的多尺度特征信息,提高模型的性能。这对于识别较大的图像结构或模式非常有帮助。

  4. 提供位置不变性:由于池化是对局部区域进行操作,SPP 层降低了网络对特征位置的敏感度,使模型对输入中的平移、旋转等变换更加鲁棒。

  5. 抑制噪声:通过聚合区域内的特征,SPP 层能减少个别像素噪声的影响,提取更具代表性的特征。

缺点:

       1.计算效率低:SPP 通过并行使用多个不同大小的池化核(如 1x1、2x2、4x4 等)对输入特征图进行池化操作,然后将这些池化结果拼接在一起。这种方法虽然能够有效地提取多尺度特征,但计算量较大,尤其是在处理高分辨率特征图时;

       2.占用资源较大:由于 SPP 并发使用多个不同大小的池化核,每个池化操作都需要独立的内存空间来存储中间结果;这会导致较高的内存占用,特别是在处理大规模特征图时;

SPP优化:

       基于上述的模型缺点,在SPP的基础上又迭代优化出了新的池化结构SPPF,就是目前yolov8模型在用的一种池化金字塔结构;它的优化点有两个,一是改变并发池化核为串联结构,而是调整池化核的大小和池化方式;

举例说明SSPF:

       假设输入特征图的尺寸为 W×H×C,其中 W 和 H 是特征图的高度和宽度,C 是特征图的通道数;

       SPPF 的操作步骤:

  1. 特征图输入

    输入特征图尺寸为 W×H×CW×H×C
  2. 快速池化操作

    通过三个 5x5 的最大池化核进行串行池化操作。每个池化操作后,特征图的尺寸保持不变,但特征信息被压缩,最终的特征图尺寸为 W×H×C;(有人会疑惑明明是池化操作,为什么特征图尺寸会不变呢?因为在每次做完池化操作之后都会进行padding操作,即在特征图外围补零)
  3. 特征拼接

    拼接后的特征向量长度为:25C

       SPPF 通过串行使用多个小池化核,显著提高了计算效率和速度,同时保持了多尺度特征融合的能力。与传统的 SPP 相比,SPPF 在处理高分辨率特征图时更加高效,降低了内存占用,使得模型在实际应用中更加实用。这些优化使得 SPPF 成为现代目标检测模型(如 YOLOv5 和 YOLOv8)中的一个重要组件。

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

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

相关文章

网络安全与防范

1.重要性 随着互联网的发达,各种WEB应用也变得越来越复杂,满足了用户的各种需求,但是随之而来的就是各种网络安全的问题。了解常见的前端攻击形式和保护我们的网站不受攻击是我们每个优秀fronter必备的技能。 2.分类 XSS攻击CSRF攻击网络劫…

Python从0到100(七十三):Python OpenCV-OpenCV实现手势虚拟拖拽

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Spring Cloud Alibaba [Gateway]网关。

1 简介 网关作为流量的入口,常用功能包括路由转发、权限校验、限流控制等。而springcloudgateway 作为SpringCloud 官方推出的第二代网关框架,取代了Zuul网关。 1.1 SpringCloudGateway特点: (1)基于Spring5,支持响应…

ssm139选课排课系统的设计与开发+vue(论文+源码)_kaic

摘 要 互联网的普及,改变了人们正常的生活学习及消费习惯,而且也大大的节省了人们的时间,由于各种管理系统都再不断的增加,更方便了用户,也改良了很多的用户习惯。对于选课排课系统查询方面缺乏系统的管理方式&#x…

网络基础 - NAT 篇

一、全局 IP 地址(公网 IP 地址)和私有 IP 地址 RFC 1918 规定了用于组建局域网的私有 IP 地址: 10.0.0.0 ~ 10.255.255.255172.16.0.0 ~ 172.31.255.255192.168.0.0 ~ 192.168.255.255 包含在以上范围内的 IP 地址都属于私有 IP 地址,而在此之外的 I…

Springboot3.3.5 启动流程之 tomcat启动流程介绍

在文章 Springboot3.3.5 启动流程(源码分析) 中讲到 应用上下文(applicationContext)刷新(refresh)时使用模板方法 onRefresh 创建了 Web Server. 本文将详细介绍 ServletWebServer — Embedded tomcat 的启动流程。 首先&…

NPOI 实现Excel模板导出

记录一下使用NPOI实现定制的Excel导出模板&#xff0c;已下实现需求及主要逻辑 所需Json数据 对应参数 List<PurQuoteExportDataCrInput> listData [{"ItemName": "电缆VV3*162*10","Spec": "电缆VV3*162*10","Uom":…

DAY113代码审计-PHPTP框架微P系统漏审项目等

一、环境安装 导入数据 Debug 版本信息收集 一、不安全写法的sql注入&#xff08;拼接写法绕过预编译机制&#xff09; 1、Good.php的不安全写法 2、查找可以参数 3、找路由关系 application/index/controller/Goods.php http://172.19.1.236:8833/index.php/index/goods/aj…

Flink1.19编译并Standalone模式本地运行

1.首先下载源码 2.本地运行 新建local_conf和local_lib文件夹&#xff0c;并且将编译后的文件放入对应的目录 2.1 启动前参数配置 2.1.2 StandaloneSessionClusterEntrypoint启动参数修改 2.1.3 TaskManagerRunner启动参数修改 和StandaloneSessionClusterEntrypoint一样修改…

Ascend C算子性能优化实用技巧05——API使用优化

Ascend C是CANN针对算子开发场景推出的编程语言&#xff0c;原生支持C和C标准规范&#xff0c;兼具开发效率和运行性能。使用Ascend C&#xff0c;开发者可以基于昇腾AI硬件&#xff0c;高效的实现自定义的创新算法。 目前已经有越来越多的开发者使用Ascend C&#xff0c;我们…

计算机编程中的测试驱动开发(TDD)及其在提高代码质量中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的测试驱动开发&#xff08;TDD&#xff09;及其在提高代码质量中的应用 计算机编程中的测试驱动开发&#xff08;T…

前后端交互之动态列

一. 情景 在做项目时&#xff0c;有时候后会遇到后端使用了聚合函数&#xff0c;导致生成的对象的属性数量或数量不固定&#xff0c;因此无法建立一个与之对应的对象来向前端传递数据&#xff0c;这时可以采用NameDataListVO向前端传递数据。 Data Builder AllArgsConstructo…

[笔记]L6599的极限工作条件考量

0.名词 OTP over tempature protect.OCP over current protectOVP over voltage protectBrownout Protection Undervoltage Protection可能需要考虑hysteresis response.因为要考虑一些高频干扰 1.基本的过流保护逻辑 参考&#xff1a;ST L6599 器件手册 LLC开关电源&#…

【Pikachu】XML外部实体注入实战

若天下不定&#xff0c;吾往&#xff1b;若世道不平&#xff0c;不回&#xff01; 1.XXE漏洞实战 首先写入一个合法的xml文档 <?xml version "1.0"?> <!DOCTYPE gfzq [<!ENTITY gfzq "gfzq"> ]> <name>&gfzq;</name&…

多模块集成swagger(knife4j-spring-boot-starter)

前言 单体项目、多模块单体项目、微服务项目&#xff0c;集成的方案大同小异&#xff0c;微服务会在网关做个聚合&#xff0c;后面再补充。 依赖版本 目前demo的版本如下&#xff1a; spring boot 2.7.3spring cloud 2021.0.4spring cloud alibaba 2021.0.4.0knife4j-sprin…

DataStream编程模型之数据源、数据转换、数据输出

Flink之DataStream数据源、数据转换、数据输出&#xff08;scala&#xff09; 0.前言–数据源 在进行数据转换之前&#xff0c;需要进行数据读取。 数据读取分为4大部分&#xff1a; &#xff08;1&#xff09;内置数据源&#xff1b; 又分为文件数据源&#xff1b; socket…

CSS盒子的定位>(上篇)#定位属性#相对定位-附练习

一、定位属性 1.定位方式 position属性可以选择4种不同类型的定位方式。 语法格式&#xff1a;position&#xff1a;relation | absolute | fixed参数&#xff1a;①relative生成相对定位的元素&#xff0c;相对于其正常位置进行定位。 ②absolute生成绝对定位的…

Redis/Codis性能瓶颈揭秘:网卡软中断的影响与优化

目录 现象回顾 问题剖析 现场分析 解决方案 总结与反思 1.调整中断亲和性&#xff08;IRQ Affinity&#xff09;&#xff1a; 2.RPS&#xff08;Receive Packet Steering&#xff09;和 RFS&#xff08;Receive Flow Steering&#xff09;&#xff1a; 近期&#xff0c;…

WordPress设置自动更新CSS版本号

WordPress 通常会在引用 CSS 文件时添加版本号参数&#xff08;?verx.x.x&#xff09;。如果版本号未更新&#xff0c;浏览器可能继续加载旧的文件。 解决方法&#xff1a;确保你在 functions.php 文件中正确加载了 CSS 文件&#xff0c;并动态更新版本号。例如在functions.p…

若依权限控制

springbootvue2项目中的权限控制(若依项目) 步骤: 1.登录管理员账号,为普通用户增加权限按钮 绿色部分为权限控制字符 2.在后端对应的方法上增加权限控制(这里以删除操作为例):PreAuthorize(“ss.hasPermi(‘area:store:remove’)”) 3.在前端对应的按钮上增加权限控制:v-ha…