yolov7添加spd-conv注意力机制

一、spd-conv是什么?

SPD-Conv(Symmetric Positive Definite Convolution)是一种新颖的卷积操作,它主要应用于处理对称正定矩阵(SPD)数据。在传统的卷积神经网络(CNN)中,卷积操作通常用于处理图像数据,而SPD-Conv的引入则将卷积扩展到了处理更加复杂的数据结构,例如在计算机视觉、医学影像分析和材料科学等领域中广泛存在的对称正定矩阵数据。

        1.SPD矩阵的特点

对称正定矩阵是一类特殊的矩阵,具有严格的数学定义,通常表示为X∈Rn×nX∈Rn×n,其中 XX 是对称正定矩阵,满足 XT=XXT=X 和对于任意非零向量 vv,有 vTXv>0vTXv>0。这种矩阵广泛应用于协方差矩阵、距离度量、流形学习等领域,并且在一些任务中,数据被表示为SPD矩阵,例如医学图像的核磁共振(MRI)图像。

        2.SPD-Conv的引入

  • SPD-Conv是针对SPD数据设计的卷积操作。与传统的卷积操作不同,SPD-Conv考虑了SPD矩阵的特殊结构和性质。它在对SPD数据进行卷积时,保持了输入和输出的对称正定性,确保了卷积结果仍然是对称正定矩阵。这种特性使得SPD-Conv适用于处理一些需要保持数据结构特性的任务,例如在医学影像中保持图像的对称性和正定性。
  • SPD-Conv是一种新的构建块,用于替代现有的CNN体系结构中的步长卷积和池化层。它由一个空间到深度(SPD)层和一个非步长卷积(Conv)层组成。
  • 空间到深度(SPD)层的作用是将输入特征图的每个空间维度降低到通道维度,同时保留通道内的信息。这可以通过将输入特征图的每个像素或特征映射到一个通道来实现。在这个过程中,空间维度的大小会减小,而通道维度的大小会增加。
  • 非步长卷积(Conv)层是一种标准的卷积操作,它在SPD层之后进行。与步长卷积不同,非步长卷积不会在特征图上移动,而是对每个像素或特征映射进行卷积操作。这有助于减少在SPD层中可能出现的过度下采样问题,并保留更多的细粒度信息。
  • SPD-Conv的组合方式是将SPD层和Conv层串联起来。具体来说,输入特征图首先通过SPD层进行转换,然后输出结果再通过Conv层进行卷积操作。这种组合方式可以在不丢失信息的情况下减少空间维度的尺寸,同时保留通道内的信息,有助于提高CNN对低分辨率图像和小型物体的检测性能。

总结起来,SPD-Conv是一种新的构建块,旨在解决现有CNN体系结构中步长卷积和池化层的问题。它由一个空间到深度(SPD)层和一个非步长卷积(Conv)层组成,能够提高模型对低分辨率图像和小型物体的检测性能,并降低对“良好质量"输入的依赖。

二、使用步骤

1.第一步:先在models/common.py加上


class space_to_depth(nn.Module):# Changing the dimension of the Tensordef __init__(self, dimension=1):super().__init__()self.d = dimensiondef forward(self, x):return torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)

2.第二步:models/yolo.py加上

 elif m is space_to_depth:c2 = 4 * ch[f]

同时在769行里面加入space to death

3.第三步:修改yolov7的yaml文件

# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple# anchors
anchors:- [12,16, 19,36, 40,28]  # P3/8- [36,75, 76,55, 72,146]  # P4/16- [142,110, 192,243, 459,401]  # P5/32# yolov7 backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [32, 3, 1]],  # 0[-1, 1, Conv, [64, 3, 2]],  # 1-P1/2[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [128, 3, 2]],  # 3-P2/4[-1, 1, Conv, [64, 1, 1]],[-2, 1, Conv, [64, 1, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],  # 11[-1, 1, MP, []],[-1, 1, Conv, [128, 1, 1]],[-3, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [128, 3, 2]],[[-1, -3], 1, Concat, [1]],  # 16-P3/8[-1, 1, Conv, [128, 1, 1]],[-2, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]],  # 24[-1, 1, MP, []],[-1, 1, Conv, [256, 1, 1]],[-3, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 2]],[[-1, -3], 1, Concat, [1]],  # 29-P4/16[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [1024, 1, 1]],  # 37[-1, 1, MP, []],[-1, 1, Conv, [512, 1, 1]],[-3, 1, Conv, [512, 1, 1]],[-1, 1, Conv, [512, 3, 2]],[[-1, -3], 1, Concat, [1]],  # 42-P5/32[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[[-1, -3, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [1024, 1, 1]],  # 50]# yolov7 head
head:[[-1, 1, SPPCSPC, [512]], # 51[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[37, 1, Conv, [256, 1, 1]], # route backbone P4[[-1, -2], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]], # 63[-1, 1, Conv, [128, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[24, 1, Conv, [128, 1, 1]], # route backbone P3[[-1, -2], 1, Concat, [1]],[-1, 1, Conv, [128, 1, 1]],[-2, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[-1, 1, Conv, [64, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [128, 1, 1]], # 75[-1, 1, MP, []],[-1, 1, Conv, [128, 1, 1]],[-3, 1, Conv, [128, 1, 1]],[-1, 1, Conv, [128, 3, 2]],[[-1, -3, 63], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]],[-2, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[-1, 1, Conv, [128, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [256, 1, 1]], # 88[-1, 1, MP, []],[-1, 1, Conv, [256, 1, 1]],[-3, 1, Conv, [256, 1, 1]],[-1, 1, Conv, [256, 3, 2]],[[-1, -3, 51], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]],[-2, 1, Conv, [512, 1, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[-1, 1, Conv, [256, 3, 1]],[[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],[-1, 1, Conv, [512, 1, 1]], # 101[-1,1,space_to_depth,[1]],   # 2 -P2/4[-1, 1, Conv, [512, 1, 1]], # 103[75, 1, RepConv, [256, 3, 1]],[88, 1, RepConv, [512, 3, 1]],[103, 1, RepConv, [1024, 3, 1]],[[104,105,106], 1, IDetect, [nc, anchors]],   # Detect(P3, P4, P5)]

总结

以上只是·简单添加了一层spd,需要添加多层spd-con可以直接修改yolov7的yaml配置文件,不需要修改其他。

备注:
spd添加层数地方只可以在512层的网络中修改,其他的层数修改会报错,图像张量不匹配,128.256以及1024经过变换之后张量改变对不上。

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

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

相关文章

人工智能_大模型013_AIGC生成式模型的增强检索_RAG知识补充检索_补充私域和实时场景知识_关键字检索增强---人工智能工作笔记0149

什么是RAG,RAG的意思就是,如果一套生成式AIGC大模型,你昨天训练了以后,那么今天的知识,还没有给他进行训练,那么回答的时候,他就会遗漏今天的知识,那么我们就可以通过检索的手段,把今天的知识,检索出来,然后补充道prompt中,给这个大模型.让他参考,这样就包含了今天的知识相当于…

CY8C42(1.PSoC4 Pioneer Kit开箱及基本使用)

1.开箱 最近了解到赛普拉斯有一种芯片,属于PSoC系列,与传统MCU不同,有点类似跨界芯片,于是就买来玩玩了,老实说用完还是很特别的,因为我没有用过FPGA,不确定是不是FPGA的开发流程(有…

怎样理解vue2和vue3里的双向数据绑定

在 Vue.js 中,双向数据绑定意味着当数据变化时,视图会自动更新;反之,当用户通过视图交互导致数据变化时,数据本身也会被更新。这种机制极大地简化了用户界面和数据之间的同步过程。 1. Vue2的实现 Vue2使用的是Objec…

MySQL的事务与隔离级别

1. 什么是事务? 数据库中的事务是指对数据库执行一批操作,而这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。这个时候就需要用到事务。 最经典的例子就是转账,你要给朋友小白转 1000 块钱&…

一代传奇宗庆后:把员工宠成上帝

作者:积溪 琥珀酒研社快评: 梅子真是哭了 一代传奇就此陨落 咱们又少了一个良心企业家 2月25日10时30分 娃哈哈集团创始人、董事长宗庆后 在杭州逝世,享年79岁 在过去一个多月的病危期间 他的病房里最显眼的 不是呼吸机、检测仪 而…

智慧城市中的公共服务创新:让城市生活更便捷

目录 一、引言 二、智慧城市公共服务创新的实践 1、智慧交通系统 2、智慧医疗服务 3、智慧教育系统 4、智慧能源管理 三、智慧城市公共服务创新的挑战 四、智慧城市公共服务创新的前景 五、结论 一、引言 随着信息技术的迅猛发展,智慧城市已成为现代城市发…

技术总结: PPT绘图

目录 写在前面参考文档技巧总结PPT中元素的连接立方体调整厚度调整图形中的文本3D 图片调整渐变中的颜色 写在前面 能绘制好一个好看的示意图非常重要, 在科研和工作中好的示意图能精准表达出自己的想法, 减少沟通的成本, 可视化的呈现也可以加强自身对系统的理解, 时间很久后…

分分钟搞定JSON解析

json 库能够解析字符串或文本中的 JSON 内容。 该库将 JSON 解析为 Python 字典或列表,也能将 Python 字典或列表转换为 JSON 字符串。 解析 JSON 如下的 JSON 格式的字符串: json_string {"first_name": "Guido", "last_na…

【Web】速谈FastJson反序列化中TemplatesImpl的利用

目录 简要原理分析 exp 前文:【Web】关于FastJson反序列化开始前的那些前置知识 简要原理分析 众所周知TemplatesImpl的利用链是这样的: TemplatesImpl#getOutputProperties() -> TemplatesImpl#newTransformer() -> TemplatesImpl#getTransl…

瑞芯微RK3588 C++部署Yolov8检测和分割模型

最近这一个月在研究国产瑞芯微板子上部署yolov8的检测和分割模型,踩了很多坑,记录一下部署的过程和遇到的一些问题: 1 环境搭建 需要的环境和代码主要包括: (1)rknn-toolkit2-1.5.2:工具链&am…

微服务day04-基于Feign的远程调用

一.Feign的认识 是http客户端,因为使用RestTemplate存在一些问题:代码可读性差,参数配置费事,不够优雅… String url"http://userservice/user/"order.getUserId(); User userrestTemplate.getForObject(url,User.cla…

01.23 校招 实习 内推 面经

绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、蔚来24届实习招聘特辑 | 软件&算法类(内推) 蔚来24届实习招聘特辑 | 软件&算法类(内推) 2、校招 | 普天科技2024校园招聘 校招…

初始计算机组成原理

1.初始计算机组成原理 本人相关文章:Linux之计算机概论 声明:大部分图片均来自网络,侵删 一个完整的计算机系统包括硬件子系统和软件子系统两大部分。 组成一台计算机的物理设备的总称叫做计算机硬件子系统,是看得见摸得着的实体,是计算机工…

华工的各类型PPT模板

华工的各类型PPT模板,包括原创的PPT及改良内容的PPT,适合科研/比赛/组会汇报等 前言各种毕业答辩夏令营答辩复试答辩奖学金答辩比赛/项目答辩组会汇报 前言 设计不易,排版不易,内容编排不易 待更新项目1 原创声明:不经…

【论文阅读】(2006)Dual-Optimal Inequalities for Stabilized Column Generation

文章目录 摘要一、介绍二、对偶最优不等式(Dual-Optimal Inequalities)三、确定P的最优原始解四、二元切割下料问题4.1 约束聚合4.2 相等约束4.3 计算结果 五、切割下料问题5.1 计算结果 六、三元组的深度对偶最优不等式(Deep Dual-Optimal I…

C/C++ 乘积尾零问题(蓝桥杯)

如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 5650,4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 9937 1173 6866 3397 4759 7557 3070 2287 1453 9899…

代码随想录算法训练营第三十六天|435. 无重叠区间, 763.划分字母区间, 56. 合并区间

435. 无重叠区间 - LeetCode 思路: 本题是一个去除重叠区间的问题, 首先按照区间的 end_point 排序, 从第二个区间开始, 如果第二个区间和第一个区间有交集, 就要移除第二个区间。 因为容易证明之后的区间区间如果和…

做测试还是测试开发,选职业要慎重!

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程,一周学完让你面试通过率提高90%!(自动化测试) 突然发现好像挺多人想投测开和测试的,很多人面试的时候也会被问到这几个职位的区别,然后有测…

每日五道java面试题之mysql数据库篇(三)

目录: 第一题. 百万级别或以上的数据如何删除?第二题. 前缀索引第三题. 什么是最左前缀原则?什么是最左匹配原则?第四题. B树和B树的区别第五题. 使用B树和B树好处 第一题. 百万级别或以上的数据如何删除? 关于索引:…

【设计】设计一个web版的数据库管理平台后端精要

需求 springboot设计开发一个系统,在这个系统的数据库表中存放着2000个数据库实例,有MySQL、Oracle、sql server3种数据库类型,用户可以在页面上选择不同的实例,连接这些实例上的数据库,来执行业务sql 实现 Service…