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

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

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

一、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.dtcms.com/a/98235.html

相关文章:

  • 28_跨域
  • Android设计模式之模板方法模式
  • 如何在 AI 搜索引擎(GEO)霸屏曝光,快速提升知名度?
  • RabbitMQ高级特性--重试特性
  • 【C++初阶】第12课—list
  • 人工智能入门(1)
  • 字符和字符串的输入方式
  • 安当SLAc操作系统安全登录解决方案:破解设备供应商Windows权限失控困局
  • 全自动数字网络机器人:重塑未来的无形引擎 ——从金融量化到万物互联,为何必须“ALL IN”?
  • MySQL 中的表连接(JOIN)详解
  • 六十天前端强化训练之第三十五天之Jest单元测试大师课:从入门到实战
  • 【C++20】format格式化输出
  • 每日一题 == 674. 最长连续递增序列
  • 26_ajax
  • qgis点从面图层上拾取属性
  • NLP高频面试题(二十四)——RAG相关内容简介
  • 【Java】public class Person{}和public Person{} 和 public Person person究竟都有哪些区别呢。
  • Java---类与对象
  • NLP高频面试题(二十三)对抗训练的发展脉络,原理,演化路径
  • 关于跨域与.NET的处理方案
  • 软考-高级-系统架构设计师【考试备考资料下载】
  • 自学-408-《计算机网络》(总结速览)
  • 区块链在教育领域的创新应用:改变传统教育的未来
  • 黑盒测试的等价类划分法(输入数据划分为有效的等价类和无效的等价类)
  • 综合实验
  • qt之使用redis与其他程序(python)交互同通信
  • 基于SpringBoot实现的高校实验室管理平台功能四
  • 多线程 -- Thread类
  • vue学习
  • Linux内核同步机制:解锁并发编程的奥秘