【即插即用涨点模块-卷积】SPDConv空间深度卷积,助力小目标与低分辨有效涨点【附源码+注释】

news2025/4/1 9:02:18

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于深度学习的行人跌倒检测系统】
9.【基于深度学习的PCB板缺陷检测系统】10.【基于深度学习的生活垃圾分类目标检测系统】
11.【基于深度学习的安全帽目标检测系统】12.【基于深度学习的120种犬类检测与识别系统】
13.【基于深度学习的路面坑洞检测系统】14.【基于深度学习的火焰烟雾检测系统】
15.【基于深度学习的钢材表面缺陷检测系统】16.【基于深度学习的舰船目标分类检测系统】
17.【基于深度学习的西红柿成熟度检测系统】18.【基于深度学习的血细胞检测与计数系统】
19.【基于深度学习的吸烟/抽烟行为检测系统】20.【基于深度学习的水稻害虫检测与识别系统】
21.【基于深度学习的高精度车辆行人检测与计数系统】22.【基于深度学习的路面标志线检测与识别系统】
23.【基于深度学习的智能小麦害虫检测识别系统】24.【基于深度学习的智能玉米害虫检测识别系统】
25.【基于深度学习的200种鸟类智能检测与识别系统】26.【基于深度学习的45种交通标志智能检测与识别系统】
27.【基于深度学习的人脸面部表情识别系统】28.【基于深度学习的苹果叶片病害智能诊断系统】
29.【基于深度学习的智能肺炎诊断系统】30.【基于深度学习的葡萄簇目标检测系统】
31.【基于深度学习的100种中草药智能识别系统】32.【基于深度学习的102种花卉智能识别系统】
33.【基于深度学习的100种蝴蝶智能识别系统】34.【基于深度学习的水稻叶片病害智能诊断系统】
35.【基于与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于深度学习的智能草莓病害检测与分割系统】
37.【基于深度学习的复杂场景下船舶目标检测系统】38.【基于深度学习的农作物幼苗与杂草检测系统】
39.【基于深度学习的智能道路裂缝检测与分析系统】40.【基于深度学习的葡萄病害智能诊断与防治系统】
41.【基于深度学习的遥感地理空间物体检测系统】42.【基于深度学习的无人机视角地面物体检测系统】
43.【基于深度学习的木薯病害智能诊断与防治系统】44.【基于深度学习的野外火焰烟雾检测系统】
45.【基于深度学习的脑肿瘤智能检测系统】46.【基于深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于深度学习的橙子病害智能诊断与防治系统】48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】64.【基于深度学习的水下海生物检测识别系统】
65.【基于深度学习的道路交通事故检测识别系统】66.【基于深度学习的安检X光危险品检测与识别系统】
67.【基于深度学习的农作物类别检测与识别系统】68.【基于深度学习的危险驾驶行为检测识别系统】
69.【基于深度学习的维修工具检测识别系统】70.【基于深度学习的维修工具检测识别系统】
71.【基于深度学习的建筑墙面损伤检测系统】72.【基于深度学习的煤矿传送带异物检测系统】
73.【基于深度学习的老鼠智能检测系统】74.【基于深度学习的水面垃圾智能检测识别系统】
75.【基于深度学习的遥感视角船只智能检测系统】76.【基于深度学习的胃肠道息肉智能检测分割与诊断系统】
77.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】78.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统】
79.【基于深度学习的果园苹果检测与计数系统】80.【基于深度学习的半导体芯片缺陷检测系统】
81.【基于深度学习的糖尿病视网膜病变检测与诊断系统】82.【基于深度学习的运动鞋品牌检测与识别系统】
83.【基于深度学习的苹果叶片病害检测识别系统】84.【基于深度学习的医学X光骨折检测与语音提示系统】
85.【基于深度学习的遥感视角农田检测与分割系统】86.【基于深度学习的运动品牌LOGO检测与识别系统】
87.【基于深度学习的电瓶车进电梯检测与语音提示系统】88.【基于深度学习的遥感视角地面房屋建筑检测分割与分析系统】
89.【基于深度学习的医学CT图像肺结节智能检测与语音提示系统】90.【基于深度学习的舌苔舌象检测识别与诊断系统】
91.【基于深度学习的蛀牙智能检测与语音提示系统】92.【基于深度学习的皮肤癌智能检测与语音提示系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

  • 摘要
  • 方法详解
    • 1. SPD-Conv结构
    • 2. 实现细节
  • 创新点
  • SPD-Conv的作用机制
    • 在目标检测中的应用(YOLOv5-SPD)
    • 在图像分类中的应用(ResNet-SPD)
  • 总结与启示
  • SPDConv模块源码与注释

摘要

在这里插入图片描述

  • 核心问题:现有CNN架构在低分辨率图像和小物体检测任务中性能显著下降,根源在于普遍使用的跨步卷积(strided convolution)和池化层会导致细粒度信息丢失。
  • 解决方案:提出新型CNN构建模块SPD-Conv,完全替代跨步卷积和池化层,由空间到深度(SPD)层+非跨步卷积层组成。
  • 效果
    • 在目标检测(YOLOv5改造)和图像分类(ResNet改造)任务中验证
    • 在COCO、Tiny ImageNet等数据集上显著提升AP和top-1准确率
    • 对小物体检测(APs提升最高达19%)和低分辨率图像效果尤为突出

在这里插入图片描述

方法详解

1. SPD-Conv结构

在这里插入图片描述

组件功能数学表达特点
SPD层特征图下采样输入: X ( S , S , C 1 ) X(S,S,C_1) X(S,S,C1) → 输出: X ′ ( S s c a l e , S s c a l e , s c a l e 2 C 1 ) X'(\frac{S}{scale}, \frac{S}{scale}, scale^2C_1) X(scaleS,scaleS,scale2C1)无信息丢失的下采样
非跨步卷积通道数调整使用stride=1的卷积核,输出 X ′ ′ ( S s c a l e , S s c a l e , C 2 ) X''(\frac{S}{scale}, \frac{S}{scale}, C_2) X′′(scaleS,scaleS,C2)保留全部判别性特征

2. 实现细节

  • SPD层工作流程

    1. 按scale因子切片特征图(如scale=2时得到4个子图)
    2. 沿通道维度拼接子图
    3. 示例:640x640输入 → SPD(scale=2) → 320x320输出(通道数×4)
  • 与传统方法对比

    方法信息保留适用场景计算效率
    跨步卷积丢失高频信息高分辨率场景
    最大池化丢失空间细节大物体检测
    SPD-Conv完全保留小物体/低分辨率中等

创新点

  1. 架构革新

    • 首次完全消除CNN中的跨步操作
    • 统一处理下采样(替代池化和跨步卷积)
  2. 理论突破

    • 证明传统下采样是性能瓶颈的理论依据
    • 提出信息无损下采样范式
  3. 工程价值

    • 即插即用:兼容主流CNN架构(YOLO/ResNet等)
    • 开源实现:提供PyTorch/TensorFlow支持
  4. 性能优势

    • COCO数据集小物体AP提升最高达19%
    • Tiny ImageNet分类准确率提升2.84%

SPD-Conv的作用机制

在目标检测中的应用(YOLOv5-SPD)

在这里插入图片描述

  1. 改造点

    • 替换7个stride=2卷积层(Backbone 5层 + Neck 2层)
    • 保持原网络宽度/深度缩放策略
  2. 效果增强原理

    • 多尺度特征保留:SPD层将空间信息转化为通道信息
    • 小物体检测:1/4分辨率下仍保持有效特征
  3. 可视化对比

    • 传统YOLOv5:漏检被遮挡物体(长颈鹿)
    • YOLOv5-SPD:成功检测微小物体(人脸+长椅)

在图像分类中的应用(ResNet-SPD)

在这里插入图片描述

  1. 改造策略

    • 移除原始max pooling层(因输入分辨率已较低)
    • 替换4个stride=2卷积
  2. 分类优势

    • 低分辨率图像(64x64)纹理特征保留更完整
    • 错误案例分析:ResNet18误分类样本被SPD版本正确识别

总结与启示

  1. 核心结论

    • 传统下采样方法是小物体检测的性能瓶颈
    • SPD-Conv在同等参数量下实现显著性能提升
  2. 应用指导

    • 推荐场景:监控摄像头、医学影像、卫星图像等小物体/低分辨率任务
    • 慎用场景:高分辨率大物体检测(可能增加不必要计算量)

SPDConv模块源码与注释

#论文地址:https://arxiv.org/pdf/2208.03641.pdf
#代码地址:https://github.com/LabSAINT/SPD-Conv

import torch
import torch.nn as nn

# 自动填充函数,用于确保卷积操作后输出的特征图尺寸与输入相同
def autopad(k, p=None, d=1):  # kernel, padding, dilation
    """计算填充大小,使得卷积操作后输出尺寸与输入相同。
    
    参数:
        k (int or list): 卷积核大小
        p (int or list, optional): 填充大小,默认为None
        d (int or list, optional): 膨胀因子,默认为1
    
    返回:
        p (int or list): 计算后的填充大小
    """
    if d > 1:
        k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k]  # 计算实际卷积核大小
    if p is None:
        p = k // 2 if isinstance(k, int) else [x // 2 for x in k]  # 自动计算填充大小
    return p

# 定义SPDConv类,继承自nn.Module
class SPDConv(nn.Module):
    """标准卷积层,支持多种参数配置,包括输入通道数、输出通道数、卷积核大小、步幅、填充、分组、膨胀因子和激活函数。
    
    参数:
        c1 (int): 输入通道数
        c2 (int): 输出通道数
        k (int, optional): 卷积核大小,默认为1
        s (int, optional): 步幅,默认为1
        p (int or list, optional): 填充大小,默认为None
        g (int, optional): 分组数,默认为1
        d (int or list, optional): 膨胀因子,默认为1
        act (bool or nn.Module, optional): 是否使用激活函数,默认为True
    """
    default_act = nn.SiLU()  # 默认激活函数为SiLU

    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):
        """初始化卷积层。
        
        参数:
            c1 (int): 输入通道数
            c2 (int): 输出通道数
            k (int, optional): 卷积核大小,默认为1
            s (int, optional): 步幅,默认为1
            p (int or list, optional): 填充大小,默认为None
            g (int, optional): 分组数,默认为1
            d (int or list, optional): 膨胀因子,默认为1
            act (bool or nn.Module, optional): 是否使用激活函数,默认为True
        """
        super().__init__()
        c1 = c1 * 4  # 将输入通道数乘以4
        self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False)  # 定义卷积层
        self.bn = nn.BatchNorm2d(c2)  # 定义批量归一化层
        self.act = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()  # 定义激活函数

    def forward(self, x):
        """前向传播函数,对输入进行卷积、批量归一化和激活操作。
        
        参数:
            x (torch.Tensor): 输入张量
        
        返回:
            torch.Tensor: 处理后的张量
        """
        # 将输入张量按通道维度进行切片并拼接,增加通道数
        x = torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)
        # 应用卷积、批量归一化和激活函数
        return self.act(self.bn(self.conv(x)))

    def forward_fuse(self, x):
        """前向传播函数(融合版本),对输入进行卷积和激活操作,不包含批量归一化。
        
        参数:
            x (torch.Tensor): 输入张量
        
        返回:
            torch.Tensor: 处理后的张量
        """
        # 将输入张量按通道维度进行切片并拼接,增加通道数
        x = torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)
        # 应用卷积和激活函数
        return self.act(self.conv(x))


在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

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

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

相关文章

全流程剖析需求开发:打造极致贴合用户的产品

全流程剖析需求开发:打造极致贴合用户的产品 一、需求获取(一)与用户沟通(二)观察用户工作(三)收集现有文档 二、需求分析(一)提炼关键需求(二)建…

《Python Web网站部署应知应会》No4:基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上)

基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上) 摘要 本文详细探讨了一个基于Flask框架的高性能博客系统的设计与实现,该系统集成了本地AI大模型生成内容的功能。我们重点关注如何在高并发、高负载状态下保持系统的高性能和…

STM32_HAL开发环境搭建【Keil(MDK-ARM)、STM32F1xx_DFP、 ST-Link、STM32CubeMX】

安装Keil(MDK-ARM)【集成开发环境IDE】 我们会在Keil(MDK-ARM)上去编写代码、编译代码、烧写代码、调试代码。 Keil(MDK-ARM)的安装方法: 教学视频的第02分03秒开始看。 安装过程中请修改一下下面两个路径,避免占用C盘空间。 Core就是Keil(MDK-ARM)的…

多线程—JUC(java.util.concurrent)

上篇文章: 多线程—synchronized原理https://blog.csdn.net/sniper_fandc/article/details/146713129?fromshareblogdetail&sharetypeblogdetail&sharerId146713129&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 Calla…

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

写在前面 本文内容 本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度…

多线程 - 线程安全引入

写一个代码,让主线程创建一个新的线程,由新的线程负责完成一系列的运算(比如:1 2 3 ... 1000),再由主线程负责获取到最终结果。 但打印结果为 result 0,略微思考,明白了要让 t 线…

【面试八股】:CAS指令

一、CAS 面试题 1. 说说CAS、CAS有什么问题(ABA)?(美团一面) Compare And Swap 对比交换(原子指令) CAS是 CPU指令 操作系统原生 API,JVM对它进行了封装(C),供我们使用。 通过判断 内存 和 …

el-radio-group 中 el-radio-button value未能绑定上数值数据

这样绑定到admin后不会随着admin的值显示 在value加上 : 后成功显示

JSP(实验):带验证码的用户登录

[实验目的] 1.掌握应用request对象获取表单提交的数据。 2.掌握解决获取表单提交数据产生中文乱码的问题。 3.掌握使用response对象进行定时跳转功能。 4.掌握使用session对象完成登录和注销功能。 [实验要求] 设计带验证码…

集多功能为一体的软件,支持批量操作。

今天我给大家分享一个超实用的小工具,真的是太好用了!这个软件是吾爱大神无知灰灰制作的,它能直接一键把webp格式的图片转换成png格式。 webp转为png 一键操作,支持压缩 其实,作者最近在工作中经常遇到webp格式的图片…

linux压缩指令

今天我们来了解一下linux压缩指令,压缩是我们文件传输的一种重要手段,对此,我们是必须学习压缩指令的,那么话不多说,来看. 1.grep过滤查找,管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。 基本语法&#x…

污水处理厂人员定位方案-UWB免布线高精度定位

1. 方案概述 本方案采用免布线UWB基站与北斗卫星定位融合技术,结合UWBGNSS双模定位工卡,实现污水处理厂室内外人员高精度定位(亚米级)。系统通过低功耗4G传输数据,支持实时位置监控、电子围栏、聚集预警、轨迹回放等功…

Elasticsearch 高级

Elasticsearch 高级 建议阅读顺序: Elasticsearch 入门Elasticsearch 搜索Elasticsearch 搜索高级Elasticsearch高级(本文) 1. nested 类型 1.1 介绍 Elasticsearch 中的 nested 类型允许你在文档内存储复杂的数据结构,比如一个…

C语言笔记数据结构(链表)

希望文章能对你有所帮助,有不足的地方请在评论区留言指正,一起交流学习! 目录 1.链表 1.1 链表概念和组成 1.2 链表的分类 1.3 顺序表和链表 2.单链表(无头单向不循环链表) 2.1 结点的创建 2.2 创建新的结点 2.3 单链表的打印 2.4 尾…

Leetcode 两数相除

✅ LeetCode 29. 两数相除 — 思路总览 🧩 题目要求 给定两个整数 dividend 和 divisor,实现 整数除法,不能使用乘法 *、除法 / 和取余 % 运算符。 要求返回的结果应为 向零截断的整数商,即: 正数向下取整&#xf…

人工智能图像识别Scala介绍

Scala 一.Scala 简介 Scala即Scalable Language(可伸缩的语言),Scala 语言是由 Martin Odersky 等人在 2003 年开发的,并于 2004 年首次发布。意味着这种语言设计上支持大规模软件开发,是一门多范式的编程语言。 Sc…

C++中使用CopyFromRecordset将记录集拷贝到excel中时,如果记录集为0个,函数崩溃,是什么原因

文章目录 原因分析解决方案1. 检查记录集是否为空2. 安全调用COM方法3.进行异常捕获4. 替代方案:手动处理空数据 总结 在C中使用CopyFromRecordset将空记录集(0条记录)复制到Excel时崩溃的原因及解决方法如下: 原因分析 空记录集…

c#的.Net Framework 的console 项目找不到System.Window.Forms 引用

首先确保是建立的.Net Framework 的console 项目,然后天健reference 应用找不到System.Windows.Forms 引用 打开对应的csproj 文件 在第一个PropertyGroup下添加 <UseWindowsForms>true</UseWindowsForms> 然后在第一个ItemGroup 下添加 <Reference Incl…

蓝桥杯嵌入式学习笔记

用博客来记录一下参加蓝桥杯嵌入式第十六届省赛的学习经历 工具环境准备cubemx配置外部高速时钟使能设置串口时钟配置项目配置 keil配置烧录方式注意代码规范头文件配置 模块ledcubemx配置keil代码实现点亮一只灯实现具体操作的灯&#xff0c;以及点亮还是熄灭 按键cubemx配置k…

Blender多摄像机怎么指定相机渲染图像

如题目所说&#xff0c;当blender的场景里面有摄像机的时候&#xff0c;按F12可以预览渲染结果&#xff0c;但是当有多个摄像机的时候就不知道使用哪个进行渲染了。 之前在网上没有找到方法&#xff0c;就用笨方法&#xff0c;把所有的摄像机删除&#xff0c;然后设置自己需要…