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 输入到全连接层中,进行分类任务;

PS:有没有个疑问,为什么这样做就可以确定其维度呢?以上面的例子为例,输入同一个卷积网络的图片尺寸不一致,体现在最终特征图上也只是W和H维度的不同,C维度的大小不取决于输入图片大小,而是取决于得到该特征图的卷积层中卷积核的个数,所以同一个卷积网络C维度是固定的,SPP池化只需要将W和H调整统一即可;

优缺点:

优点:

  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)中的一个重要组件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu Linux使用前准备动作_使用root登录图形化界面

Ubuntu默认是不允许使用 root 登录图形化界面的。这是出于安全考虑的设置。但如果有需要,可以通过以下步骤来实现使用 root 登录: 1、设置 root 密码 打开终端,使用当前的管理员账户登录系统。在终端中输入命令sudo passwd root&#xff0c…

ubuntu下连接了192.168.1.x和192.168.2.x两个网络段,如何让这个两个网段互相通信?

在 Ubuntu 上连接两个网络段(如 个人终端A 192.168.1.10 和 个人终端B 192.168.2.10),需要配置路由和网络转发功能,使这两个网段能够相互通信。以下是实现方法: 步骤 1:确认网络配置 1. 确保 Ubuntu 机器…

React Native Mac 环境搭建

下载 Mac 版Android Studio 下载 安装 JDK 环境 Flutter 项目实战-环境变量配置一 安装 Node.js 方式一 通过Node.js 官网下载 下载完成后点击安装包进行安装 安装完成

第75期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

vue2-基础核心

vue简介 动态构建用户界面的渐进式 JavaScript 框架 vue的特点: 遵循MVVM模式 采用组件化模式,提高代码复用率,让代码更好维护 声明式编码,无需直接操作DOM,提高开发效率,编码简洁、体积小,运行效率高 本…

移动应用开发:使用Android Studio 实现登录页与注册页跳转

文章目录 前期一,添加UI控件触发跳转二,编写LoginActivity活动代码三,运行程序查看效果 前期 需创建两个活动页面,登录页和注册页,可参考:《Android Studio实现简易登录页》《Android Studio实现简易注册页…

C++小白实习日记——Day 5 gitee怎么删文件,测试文件怎么写循环

昨晚一直内耗,一个程序写了三天写不出来,主要是耗时太多了,老板一直不满意。想在VScode上跑一下,昨晚一直报错。今天来公司重新搞了一下, 主要工作有: 1,读取当前时间用tscns 2,输…

ssm143校园一卡通系统软件的设计与实现+jsp(论文+源码)_kaic

毕 业 设 计(论 文) 题目:校园一卡通系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本校园一卡通系统就是…

[Go]-sync.map使用详解

sync.Map是 Go 语言中在并发环境下使用的安全映射类型。 一、为什么需要sync.Map 在 Go 语言中,普通的map不是并发安全的。当多个 goroutine 同时读写一个普通map时,可能会导致程序出现未定义的行为,比如数据竞争、程序崩溃等。而sync.Map则…

迁移学习理论与应用

迁移学习(Transfer Learning)是一种机器学习技术,旨在将一个任务(源任务)上学到的知识迁移到另一个相关但不完全相同的任务(目标任务)上,从而提高目标任务的学习效果。这种方法的核心…

孙玲:从流水线工人到谷歌程序员

这是《开发者说》的第24期,本期我们邀请的开发者是孙玲,她出生于湖南娄底一个贫穷的农村家庭,2009年高考落榜,她去了深圳一家电子厂,在流水线上给电池喷码,每天12个小时轮班,月薪2300&#xff0…

深度解析FastDFS:构建高效分布式文件存储的实战指南(上)

文章目录 一、FastDFS简介1.1 概述1.2 特性 二、FastDFS原理架构2.1 FastDFS角色2.2 存储策略2.3 上传过程2.4 文件同步2.5 下载过程 三、FastDFS适用场景四、同类中间件对比4.1 FastDFS和集中存储方式对比4.2 FastDFS与其他文件系统的对比 五、FastDFS部署5.1 单机部署5.1.1 使…

Argo workflow 拉取git 并使用pvc共享文件

文章目录 拉取 Git 仓库并读取文件使用 Kubernetes Persistent Volumes(通过 volumeClaimTemplates)以及任务之间如何共享数据 拉取 Git 仓库并读取文件 在 Argo Workflows 中,如果你想要一个任务拉取 Git 仓库中的文件,另一个任…

Xilinx 7 系列 FPGA的各引脚外围电路接法

Xilinx 7系列FPGA的外围电路接法涉及到多个方面,包括电源引脚、时钟输入引脚、FPGA配置引脚、JTAG调试引脚,以及其他辅助引脚。 本文大部分内容由ug475, Product Specification——7 Series FPGAs Packaging and Pinout《7系列FPGA的封装与引脚》整理汇…

CDH大数据平台搭建

各大开源以及商用厂商的大数据产品汇总: https://zhuanlan.zhihu.com/p/675011462 Ambari 界面: 一、安装一个新的虚拟机 配置要求:8核,10G内存,最好是200G 修改yum源: 修改阿里云的镜像文件&#xff1…

计算机毕业设计 | SpringBoot+vue汽车资讯网站 汽车购买咨询管理系统(附源码+论文)

1,绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理汽车资讯网站的相关信息成为必然…

24.11.19 web框架

2.2配置环境变量 2.3maven命令测试 mvn -v 测试maven查看版本 2.4maven仓库配置 配置远程仓库地址 配置本地仓库 2.5idea中配置maven 2.6通过配置idea 创建maven项目 创建项目时 构建系统 选到maven 初次创建项目时 会把maven的基础依赖库(jar包) 下载到本地仓库 需要等待一…

【Golang】——Gin 框架中的模板渲染详解

Gin 框架支持动态网页开发,能够通过模板渲染结合数据生成动态页面。在这篇文章中,我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据,并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染?1.1 概…

【list的模拟实现】—— 我与C++的模拟实现(十四)

一、list节点 ​ list是一个双向循环带头的链表&#xff0c;所以链表节点结构如下&#xff1a; template<class T>struct ListNode{T val;ListNode* next;ListNode* prve;ListNode(int x){val x;next prve this;}};二、list迭代器 2.1、list迭代器与vector迭代器区别…

QString 转 char*问题与方法(const_cast的使用问题)

1、背景:今天有QString的变量&#xff0c;将QString的值传递给void func(char * ptr)&#xff0c;于是就有了类似下面这一段离谱的代码 当时我还在想为什么var的值为空了&#xff0c;为什么呢。 2、原因:就是因为右边函数返回的是一个临时指针对象&#xff0c;给到了右边&…