当前位置: 首页 > news >正文

SPP——神经网络中全连接层输出尺寸限制的原因和解决办法

SPP——神经网络中全连接层输出尺寸限制的原因和解决办法

背景

在卷积神经网络(CNN)中,全连接层(Fully Connected Layer,FC)无法直接处理任意尺寸输入的主要原因在于:

  • 权重矩阵固定维度:全连接层需要预先确定输入特征维度,导致网络对输入尺寸敏感
  • 输入输出强耦合:每个输出神经元与全部输入特征相连,输入尺寸变化会破坏权重对应关系
  • 典型表现:在CNN结构中,输入图像尺寸必须与训练时完全一致

解决办法

方法技术原理关键特性适用场景
GAP全局平均池化生成通道均值向量极端压缩空间信息轻量级分类网络
SPP多级空间金字塔池化(典型4/2/1网格)保留多尺度特征需要空间信息的检测任务
AdaptivePool自适应调整池化窗口达到目标尺寸端到端不相关尺寸动态输入推理场景
FCN用1x1卷积替代全连接层完全卷积化架构语义分割等密集预测任务
Input Norm强制resize/crop输入图像实现简单但损失信息快速原型开发

SPP特点

  1. 多尺度特征

    # 经典SPP
    def spatial_pyramid_pool(x):pool1 = F.max_pool2d(x, kernel_size=4, stride=4)  # 粗糙粒度特征pool2 = F.max_pool2d(x, kernel_size=2, stride=2)  # 中等粒度特征 pool3 = F.max_pool2d(x, kernel_size=1, stride=1)  # 全局特征特征return torch.cat([pool1, pool2, pool3], dim=1)    # 通道维度拼接
  2. 尺寸无关性

    • 任意输入→固定长度输出特征
  3. 信息保留能力

    • 比GAP保留更多空间信息
    • 比起单一池化能捕获更多尺度

YOLO中的SPP

版本改进要点性能影响
YOLOv3首增SPP模块(5/9/13池化)+3~5% mAP
YOLOv4/v5升级SPPF(串行5×5池化)提速20%,精度相当
YOLOv8优化SPPF+通道压缩/扩展卷积提速29%,+1.7 mAP

SPPF

  1. 继承自YOLOv5的设计思想但进行了改进:

    • 增加前置1×1降维卷积(减少计算量)
    • 动态padding计算(适配不同分辨率)
    • 最终输出用expand卷积恢复通道数
  2. sppf实现:

class SPPF(nn.Module):def __init__(self, c1, c2=256, k=5):  # 默认输出通道压缩super().__init__()self.cv1 = Conv(c1, c2//2, 1)     # 先降维50%self.m = nn.MaxPool2d(k, stride=1, padding=k//2)self.cv2 = Conv(c2*2, c2, 1)      # 特征重组def forward(self, x):x = self.cv1(x)y1 = self.m(x)        # 第一级池化y2 = self.m(y1)       # 第二级池化y3 = self.m(y2)       # 第三级池化return self.cv2(torch.cat([x, y1, y2, y3], 1))  # 残差连接
  1. sppf处理流程图
输入特征
1x1卷积降维
原始特征x
MaxPool k=5
一级池化y1
MaxPool k=5
二级池化y2
MaxPool k=5
三级池化y3
特征拼接
1x1卷积输出

文章转载自:

http://N0pNpEcO.yyngs.cn
http://4l6oORzR.yyngs.cn
http://9aXva0mE.yyngs.cn
http://69EBvShh.yyngs.cn
http://1MODZJjw.yyngs.cn
http://r4gKyFFw.yyngs.cn
http://mv6eLuvU.yyngs.cn
http://G3oVSlrx.yyngs.cn
http://ZfRws9i1.yyngs.cn
http://AEW576UZ.yyngs.cn
http://Xp9tSDWm.yyngs.cn
http://lK0zjf46.yyngs.cn
http://ZNP222MY.yyngs.cn
http://vgsciYSK.yyngs.cn
http://ECDSsaFf.yyngs.cn
http://ZzY1rmiA.yyngs.cn
http://sK8LFq4q.yyngs.cn
http://F35GE37c.yyngs.cn
http://8jXXRvft.yyngs.cn
http://Xn83hxHz.yyngs.cn
http://omi4hpLU.yyngs.cn
http://hG3rDztL.yyngs.cn
http://VOqGdlFr.yyngs.cn
http://xQe0upOz.yyngs.cn
http://Z4BG5m75.yyngs.cn
http://Fi7v96gq.yyngs.cn
http://Wl5rtWpL.yyngs.cn
http://xv46ef5d.yyngs.cn
http://9PDsd28s.yyngs.cn
http://VuTXLPg1.yyngs.cn
http://www.dtcms.com/a/245717.html

相关文章:

  • 以前在服务器启动了docker,现在不需要了,为了安全,去掉docker服务@Ubuntu
  • NVIDIA Container Toolkit 报错 Failed to initialize NVML: Unknown Error 的解决
  • 实现AI数据高效评估的一种方法
  • SQL进阶之旅 Day 27:存储过程与函数高级应用
  • 鸿蒙 UI 开发基础语法与组件复用全解析:从装饰器到工程化实践指南
  • NAS文件共享、PACS影像存储,速率提升400%?
  • Kotlin 协程与 ViewModel 的完美结合
  • 【二分答案1-----切木棒】
  • 视频自动生成字幕原理和自动生成字幕的应用实例
  • 事件(Event)
  • 同时装两个MySQL, 我在MySQL5的基础上, 安装MySQL8
  • 循环数组中相邻元素的最大差值
  • java BIO/NIO/AIO
  • 【unitrix】 1.3 Cargo.toml 文件解析
  • SM3算法Python实现(无第三方库)
  • 【GitOps】Kubernetes安装ArgoCD,使用阿里云MSE云原生网关暴露服务
  • 山东大学《Web数据管理》期末复习宝典【万字解析!】
  • HarmonyOS运动开发:打造便捷的静态快捷菜单
  • ArkUI-X在Android上使用Fragment开发指南
  • ThreadLocal原理及内存泄漏分析
  • 【从零学习JVM|第八篇】深入探寻堆内存
  • Android 开发中,Intent 和 Bundle 组件间传递数据的几种方式
  • RedHat主机配置日志留存策略:从4周延长至6个月
  • FramePack 与其他视频生成工具的横向对比:优势、短板与差异化竞争
  • GitHub 上 PAT 和 SSH 的 7 个主要区别:您应该选择哪一个?
  • DAY 52 神经网络调参指南
  • 小白讲强化学习:从零开始的4x4网格世界探索
  • C/C++内存分布和管理
  • 以楼宇自控技术赋能节能,驱动绿色建筑可持续发展进程
  • PCL 导入VS配置的大量依赖项名称快速读取