特征金字塔池化

特征金字塔池化1 特征金字塔池化如上图所示 将特征图的所有像素划分为 n nn timesnn n 个网格 并将其经过核为 n nn timesnn n 步长为 n n n n n n 的池化 可以选择最大池化或者平均池化 经过较为密集的池化 4 times4 形成 形成 形成 N timesC timesn timesn 的特征图 将其串联形成的特征图 将其串联形成的特征图 将其串联形成 C times 的格式 之后 在第 2 个步骤池化得到的特征图的基础上 取不同的 nnn 值 进行下一个池

1. 特征金字塔池化

特征金字塔池化

如上图所示:

  1. 将特征图的所有像素划分为 n × n n\times n n×n个网格,对每个网格进行池化,池化层的核大小即为网格大小,宽度不符合时可以padding
  2. 取不同的n值,重复1过程;
  3. 将上述过程得到的所有结果经过flatten和concat,得到 C × N C\times N C×N格式的特征图,可以直接用于全连接。

输出的结果只与 n n n值和通道数量相关,而与输入Tensor的形状无关(当然不能太小,否则池化结果为0)

2. 实现

完整代码连接:古承风的gitee

以下是核心代码


def _spp_layer(self,x:torch.Tensor,mode='max',grid_nums:list=[16]):
        """ output_num denote an grid's width steps: --- 1. compute width for specific output_num, sqrt(num) 2. compute pooling's kernel_size and stride 3. pooling 4. concat all the output """
        N,C,H,W = x.size()
        for i in range(len(grid_nums)):
            # step1
            
            h = ceil(H/(sqrt(grid_nums[i])))
            w = ceil(W/(sqrt(grid_nums[i])))
            
            h_pad = int(((h*sqrt(grid_nums[i])+1)-H)/2)
            w_pad = int(((w*sqrt(grid_nums[i])+1)-W)/2)
            # step2
            if mode == "max":
                pool = nn.MaxPool2d(kernel_size=(h,w),stride=(h,w),padding=(h_pad,w_pad)) 
            elif mode=='avg':
                pool = nn.AvgPool2d(kernel_size=(h,w),stride=(h,2),padding=(h_pad,w_pad))
            else:
                raise ValueError(f"{ 
      mode} mode type error ,expect 'max' and 'avg'")
            
            temp = pool(x) # to origin x , means pyramid pooling
            
            # if for fully connected , could use this concat method
            if i == 0:
                output = temp.view(N,-1)
            else:
                output = torch.concat((output,temp.view(N,-1)),-1)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232170.html原文链接:https://javaforall.net

(0)
上一篇 2025年10月28日 下午2:01
下一篇 2025年10月28日 下午2:22


相关推荐

  • IIS服务器多域名部署多个HTTPS的方法

    IIS服务器多域名部署多个HTTPS的方法当我们使用 windows 服务器配置多站点 SSL 证书时 经常报错提示 至少一个其他网站正在使用同一 HTTPS 绑定 而此绑定用另一证书配置 确实要重用此 HTTPS 绑定并将其他网站重新指定使用新证书吗 由于每个站点对应的证书不同 服务器需要通过请求中不同的主机头来判断需要用哪个证书解密 然而主机头作为请求的一部分也被加密 最终 IIS 只好使用第一个绑定到该 IP PORT 的站点证书解密请求 从而有可能造成对于其他站点的请求失败而报错 默认情况下 使用 IIS8 以下版本的 HTTPS 绑定是无法指定主机名的 主机名

    2026年3月26日
    2
  • 十大经典排序算法-快速排序算法详解

    十大经典排序算法-快速排序算法详解一、什么是快速排序1.概念快速排序(QuickSort)是从冒泡排序算法演变而来的,实际上是在冒泡排序基础上的递归分治法。快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分2.算法原理这是一个无序数列:4、5、8、1、7、2、6、3,我们要将它按从小到大排序。按照快速排序的思想,我们先选择一个基准元素,进行排序我们选取4为我们的基准元素,并设置基准元素的位置为index,设置两个指针left和right,分别指向最左

    2022年7月26日
    9
  • Can not issue data manipulation statements with executeQuery()错误解决

    Can not issue data manipulation statements with executeQuery()错误解决强烈建议 尽信书 不如无书 nbsp nbsp 下午没事 就练习了下连接数据库 结果发现了一个问题 哈哈 Cannotissued nbsp 原因是这句 st executeQuery insert nbsp into nbsp student nbsp values name age intr

    2026年3月19日
    2
  • springboot面试大全

    springboot面试大全https://blog.csdn.net/Kevin_Gu6/article/details/885474241SpringBoot有哪些优点?起步依赖自动配置应用监控2springboot的核心配置文件,以及加载顺序?bootstrap(.properties/.yml)用来加载系统相关的配置application(.properties/.yml)用来…

    2022年5月5日
    37
  • Flume架构以及应用介绍

    Flume架构以及应用介绍在具体介绍本文内容之前 先给大家看一下 Hadoop 业务的整体开发流程 从 Hadoop 的业务开发流程图中可以看出 在大数据的业务处理过程中 对于数据的采集是十分重要的一步 也是不可避免的一步 从而引出我们本文的主角 Flume 本文将围绕 Flume 的架构 Flume 的应用 日志采集 进行详细的介绍 一 Flume 架构介绍 1 Flume 的概念 flume 是分布式的日志

    2026年3月19日
    2
  • 软件著作权登记申请时的60页源代码格式

    软件著作权登记申请时的60页源代码格式申请软件著作权登记的时候会被要求提交 60 页的源代码 没有经验的开发者朋友第一次申请的时候难免会遇到因代码文档格式不正确 代码里含有其他版权信息等原因被要求补正的问题 从而导致拿证时间延误 为了帮助开发者朋友一次性顺利通过软件著作权登记的审查 下面为大家分享下自己总结的 60 页源代码整理攻略 第一步 请点击下载软件著作权登记源代码模板 第二步 将打算申请软著的软件名称及版本号替换模板里左上角 自助登记安卓版应用软件 V1 0 第三步 打开软件的代码文件 复制代码 第四步 回到本文档 Ctal A

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号