YOLOv8改进有效涨点 | 2023 | SPD-Conv空间深度转换卷积(高效空间编码技术)

一、本文介绍

本文给大家带来的改进内容是SPD-Conv(空间深度转换卷积)技术。SPD-Conv是一种创新的空间编码技术,它通过更有效地处理图像数据来改善深度学习模型的表现。SPD-Conv的基本概念:它是一种将图像空间信息转换为深度信息的技术,从而使得卷积神经网络(CNN)能更加有效地学习图像特征。这种方法通过减少信息损失和提高特征提取的准确性,优化了模型对小物体和低分辨率图像的处理能力。我在YOLOv8中利用SPD-Conv被用于替换传统的步长卷积和池化层,在不牺牲精确度的情况下减少计算复杂度(精度甚至略有提升)。本文后面会有SPD-Conv的代码和使用方法,手把手教你添加到自己的网络结构中。(值得一提的是该卷积模块可以做到轻量化模型的作用GFLOPs由8.9降低到8.2,参数量也有一定降低)

推荐指数:⭐⭐⭐⭐⭐

专栏回顾:YOLOv8改进系列专栏——本专栏持续复习各种顶会内容——科研必备    

训练结果对比图->  

这次试验我用的数据集大概有七八百张照片训练了100个epochs,可以出模型没有完全拟合大概涨点了0.3左右,如果完全拟合效果肯定会更好。所以推荐大家使用(值得一提的是该卷积模块可以做到轻量化模型的作用GFLOPs由8.9降低到8.2,参数量也有一定降低)

 

目录

一、本文介绍

二、SPD-Conv构建块原理

2.1 SPD-Conv的基本原理

2.1.1替换步长卷积和池化层

2.1.2 空间到深度(SPD)层

2.1.3 非步长卷积层

2.2 检测效果

三、SPD-Conv完整代码

 四、手把手教你添加SPD-Conv

4.1 SPD-Conv的添加教程

4.2 SPD-Conv的yaml文件和训练截图(仔细看这个否则会报错)

4.2.1 SPD-Conv的yaml文件

4.2.2 SPD-Conv的训练过程截图 

五、SPD-Conv可添加的位置

5.1 推荐SPD-Conv可添加的位置 

5.2 图示SPD-Conv可添加的位置 

六、本文总结


二、SPD-Conv构建块原理

论文地址:论文官方地址

代码地址:


2.1 SPD-Conv的基本原理

SPD-Conv(空间到深度卷积)的基本原理是用于改进传统卷积神经网络(CNN)中对小物体和低分辨率图像处理的性能。它主要通过以下几个关键步骤实现:

1. 替换步长卷积和池化层:SPD-Conv设计用来替代传统CNN架构中的步长卷积层和池化层。步长卷积和池化层在处理低分辨率图像或小物体时会导致细粒度信息的丢失。

2. 空间到深度(SPD)层:SPD层的作用是降采样特征图的通道维度,同时保留信息。这种方式可以避免传统方法中的信息丢失。

3. 非步长卷积层:在SPD层之后,SPD-Conv使用一个非步长(即步长为1)的卷积层。这有助于在降低通道数量的同时利用可学习的参数对特征进行处理。

以下是我对这个图的理解:

1. 特征图 (a):传统的特征图,具有通道数 C_{1},高度和宽度。
2. 空间到深度变换 (b):通过空间到深度操作,将像素的空间块重新排列到深度/通道维度,增加通道数到 4C_{1},同时将空间维度缩小2倍。
3. 通道合并 (c):不同的通道组在通道维度上进行合并。
4. 加法操作 (d):合并的特征图可能会与其他处理过的特征图(图中未详细展示)进行加法操作。
5. 非步长卷积 (e):对结果特征图应用步长为1的卷积,减少通道维度至C_{2},同时保持空间分辨率,其仍是原始大小的1/2。

2.1.1替换步长卷积和池化层

论文中提出的SPD-Conv构建块是为了替代传统CNN中的步长卷积和池化层。步长卷积和池化层在处理低分辨率图像和小物体时会导致信息的丢失。SPD-Conv使用空间到深度(SPD)层,该层将特征图的空间维度转换成深度维度,通过增加通道数来保留更多信息。随后是非步长卷积层,它保持了空间维度,减少了通道数。这种替代方法避免了信息的丢失,并允许网络捕获更精细的特征,从而提高了在复杂任务上的性能。

上图是SPD-Conv论文中的一个图表,展示了如何在YOLOv5的结构中实施SPD-Conv(在YOLOv8中同样适用)。图中标红的部分代表了SPD-Conv替换传统卷积操作的地方。YOLOv5的架构被分为三个主要部分:

1. 主干网络(Backbone):这是特征提取的核心部分,每个SPD和Conv层的组合都替换了原始YOLOv5中的步长卷积层。
2. 颈部(Neck):这部分用于进一步处理特征图,以获得不同尺度的特征,从而提高检测不同大小物体的能力。它也包含SPD和Conv层的组合,以优化特征提取。
3. 头部(Head):这是决策部分,用于物体检测任务,包括定位和分类。头部保持了YOLO原始架构的设计。

直连线表示直接的前向连接,虚线代表跳跃连接,用于整合不同层次的特征。


2.1.2 空间到深度(SPD)层

空间到深度(SPD)层是SPD-Conv中的一个关键组件,其作用是将输入特征图的空间块(像素块)重新排列进入深度(通道)维度,以此来增加通道数,同时减少空间分辨率,但不丢失信息。通过这种方式,这一转换允许CNN捕捉和保留在处理小物体和低分辨率图像时经常丢失的精细信息。SPD层后面紧跟的是非步长卷积层,它进一步处理重新排列后的特征图,确保有效特征的提取和使用​​。通过这种方法,SPD-Conv能够在特征提取阶段保留更丰富的信息,从而提高模型对于小物体和低分辨率图像的识别性能。


2.1.3 非步长卷积层

在SPD-Conv的背景下,非步长卷积层采用的是步长为1的卷积操作,意味着在卷积过程中,滤波器(或称为卷积核)会在输入特征图上逐像素移动,没有跳过任何像素。这样可以确保在特征图的每个位置都能应用卷积核,最大程度地保留信息,并生成丰富的特征表示。非步长卷积层是紧随空间到深度(SPD)层的一个重要组成部分。在SPD层将输入特征图的空间信息重新映射到深度(通道)维度后,非步长卷积层(即步长为1的卷积层)被用来处理这些重新排列的特征图。由于步长为1,这个卷积层不会导致任何进一步的空间分辨率降低,这允许网络在不损失细节的情况下减少特征图的通道数。这种方法有助于改善特征的表征,特别是在处理小物体或低分辨率图像时,这些场景在传统CNN结构中往往会丢失重要信息。


2.2 检测效果

上图比较了标准YOLOv5m模型和集成了SPD-Conv的改进版本YOLOv5-SPD-m的性能。紫色框表示标准YOLOv5m的预测,绿色框显示了YOLOv5-SPD-m的预测。蓝色框代表地面真相(ground truth)。红色箭头突出了两个模型预测之间的差异。

从图像中我们可以看出,YOLOv5-SPD-m(绿色框)的预测与地面真相更为接近,与YOLOv5m(紫色框)的预测相比,这表明将SPD-Conv整合进YOLOv5能增强模型准确检测物体的能力,这对于需要精确定位和识别的应用来说至关重要,例如自动驾驶或监控。

三、SPD-Conv完整代码

我们将该卷积直接放在'ultralytics/nn/modules/conv.py'文件下,然后其余使用方法看章节四(该卷积课可以直接替换主干网络上的卷积)。

class SPDConv(nn.Module):"""Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)."""default_act = nn.SiLU()  # default activationdef __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):"""Initialize Conv layer with given arguments including activation."""super().__init__()c1 = c1 * 4self.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.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)"""Apply convolution, batch normalization and activation to input tensor."""return self.act(self.bn(self.conv(x)))def forward_fuse(self, x):"""Perform transposed convolution of 2D data."""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))

 四、手把手教你添加SPD-Conv

4.1 SPD-Conv的添加教程

添加教程这里不再重复介绍、因为专栏内容有许多,添加过程又需要截特别图片会导致文章大家读者也不通顺如果你已经会添加注意力机制了,可以跳过本章节,如果你还不会,大家可以看我下面的文章里面详细的介绍了拿到一个任意机制(C2f、Conv、Bottleneck、Loss、DetectHead)如何添加到你的网络结构中去。

添加教程->YOLOv8改进 | 如何在网络结构中添加注意力机制、C2f、卷积、Neck、检测头


4.2 SPD-Conv的yaml文件和训练截图(仔细看这个否则会报错)

4.2.1 SPD-Conv的yaml文件

下面的配置文件为我修改的SPD-Conv的位置(这里需要注意的是你可以和初始的yaml对比一下修改了SPD-Conv的参数被修改了,你如果不修改该卷积那么则不需要修改另外两个参数)

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, SPDConv, [128]]  # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, SPDConv, [256]]  # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, SPDConv, [512]]  # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, SPDConv, [1024]]  # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f, [256]]  # 15 (P3/8-small)- [-1, 1, SPDConv, [256]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f, [512]]  # 18 (P4/16-medium)- [-1, 1, SPDConv, [512]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)


4.2.2 SPD-Conv的训练过程截图 

下面是添加了SPD-Conv的训练截图。

(最近有人说我改的代码是没有发全的,我不知道这群人是怎么说出这种话的,希望大家如果用我的代码成功的可以在评论区支持一下,我也好发更多的改进毕竟免费给大家看。同时有问题皆可在评论区留言我看到都会回复) 

大家可以看下面的运行结果和添加的未知所以不存在我发的代码不全或者运行不了的问题大家有问题也可以在评论区评论我看到都会为大家解答(我知道的)。

​​​


五、SPD-Conv可添加的位置

5.1 推荐SPD-Conv可添加的位置 

SPD-Conv是一种即插即用的模块,其可以添加的位置有很多,添加的位置不同效果也不同,所以我下面推荐几个添加的位,置大家可以进行参考,当然不一定要按照我推荐的地方添加。

  1. 残差连接中:在残差网络的残差连接中加入SPD-Conv

  2. Neck部分:YOLOv8的Neck部分负责特征融合,这里添加修改后的C2f_SPD-Conv可以帮助模型更有效地融合不同层次的特征。

  3. 检测头中的卷积:在最终的输出层前加入SPD-Conv可以使模型在做出最终预测之前,更加集中注意力于最关键的特征。

文字大家可能看我描述不太懂,大家可以看下面的网络结构图中我进行了标注。


5.2 图示SPD-Conv可添加的位置 

2949694815404620bdfb5875286c8e73.png​​​


六、本文总结

到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv8改进有效涨点专栏,本专栏目前为新开的平均质量分98分,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,目前本专栏免费阅读(暂时,大家尽早关注不迷路~)如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

专栏回顾:YOLOv8改进系列专栏——本专栏持续复习各种顶会内容——科研必备

3d51a0611af1442f833362eaf18fbae2.gif

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

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

相关文章

LiveGBS流媒体平台GB/T28181功能-概览中负载信息直播、回放、播放、录像、H265、级联查看负载会话列表

LiveGBS常见问题-概览中负载信息具体表示什么直播、回放、播放、录像、H265、级联等 1、负载信息2、负载信息说明3、会话列表查看3.1、会话列表 4、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负载信息说明 直播&#x…

GeoServer本地部署与远程访问Web管理页面——“cpolar内网穿透”

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除、插入…

Linux常用命令——atq命令

在线Linux命令查询工具 atq 列出当前用户的at任务列表 补充说明 atq命令显示系统中待执行的任务列表,也就是列出当前用户的at任务列表。 语法 atq(选项)选项 -V:显示版本号; -q:查询指定队列的任务。实例 at now 10 minu…

个人Windows电脑通过Cloudreve+Cpolar搭建PHP云盘系统公网可访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局&#…

GPC-数据鉴别(DAP)模式验证

概述: 9.2.1 数据鉴别(DAP)模式验证 应用提供方可以要求对其加载到卡片的应用代码进行完整性和真实性的验证。在本规范中详述的具备“DAP 验证权限”的应用提供方安全域,代表应用提供方提供了这种验证服务。授权管理者可以要求对所有加载到卡片的应用…

Socket和Http通信原理

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议,主要利用三元组【ip地址,协议,端口】。 Http协议即超文本传输协议&a…

实用篇 | 利用Flask+Postman为深度学习模型进行快速测试(超详细)

利用FlaskPostman为深度学习模型进行快速测试,以及算法中的一些实例,以后会更新一些新的模板~~ #本文环境:服务器Ubuntu20.04(docker) 目录 1.下载postrman 2.编写flas的app文件 3.在postrman发送请求 4.实例 在服务器创建app.py文件 …

基于Python手把手教你实现flappy bird游戏

目录 前言开始前的准备工作进入正题结束语 前言 想必玩过游戏的都知道,Flappy Bird是一款简单却富有挑战性的经典的小鸟飞行游戏,让许多玩家为之痴迷,而作为开发者,那肯定要通过技术手段来再做一遍这款经典游戏。那么本文就来通…

Maven生命周期

Maven生命周期 通过IDEA工具的辅助,能很轻易看见Maven的九种生命周期命令,如下: 双击其中任何一个,都会执行相应的Maven构建动作,为啥IDEA能实现这个功能呢?道理很简单,因为IDEA封装了Maven提供…

Pillow操控图像,Python必备神器全面解析!

更多资料获取 📚 个人网站:ipengtao.com Pillow 是一个强大的 Python 图像处理库,它提供了丰富的功能,能够处理图像的加载、编辑、处理和保存。这个库建立在 Python Imaging Library (PIL) 的基础上,并延续了 PIL 的开…

医院信息化专业人员必备医院业务运作及管理流程知识(详细)

业务流程是一家医院运作的基础,医院所有业务都需要流程加以驱动。熟知医院各项业务,了解医院管理流程,有利于医院工作人员更好地投入自身岗位,提高工作效率。本文整理了常见医院业务运作及管理流程,仅供参考! 【门诊业务】 一、门诊业务的特点: 1.接诊病人多,就诊时…

【部署】Deploying Trino on linux

文章目录 一. Requirements1. Linux operating system2. Java 环境3. Python 二. Installing Trino三. Configuring Trino1. 节点配置2. JVM 配置3. Config properties4. Log levels5. Catalog properties 四. Running Trino 一. Requirements 1. Linux operating system 64位…

Django总结

文章目录 一、Web应用Web应用程序的优点Web应用程序的缺点应用程序有两种模式C/S、B/S C/S 客户端/服务端局域网连接其他电脑的MySQL数据库1.先用其他电脑再cmd命令行ping本机ip2.开放MySQL的访问 B/S 浏览器/服务端基于socket编写一个Web应用 二、Http协议1.http协议是什么2.h…

智能优化算法应用:基于动物迁徙算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于动物迁徙算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于动物迁徙算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.动物迁徙算法4.实验参数设定5.算法结果6.参考…

用Python创建日历详细指南与实用示例

更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 用Python创建日历详细指南与实用示例,全文4800字,阅读大约15分钟。 在日常生活和工作中,创建和管理日历是一项关键任务。Python提供了丰富…

广州招聘用什么平台

广州招聘一般都会通过“广州吉鹿力招聘网”这个平台进行。广州吉鹿力招聘网是一个拥有多年经验的招聘平台,用户可以通过广州吉鹿力招聘网来寻找适合自己的职位,对于求职者来说,广州吉鹿力招聘网的要求相对较高,广州吉鹿力招聘网是…

【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角

专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 本章将介绍视觉SLAM的基本问题之一:如何描述刚体在三维空间中的运动? 旋转向…

机器学习(1)机器学习类型和机器学习的主要概念

0.前提 深度学习(Deep Learing)是机器学习(Machine Learning)领域中的一个新的研究方向,在如今的时代研究深度学习的大模型是十分热门的。我不知道有多少人有关注到最近openai的事件啊,说个比较让我惊讶的…

[ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup

前言 由于懒我直接把上交的wp稍加修改拉上来了,凑活看 文章目录 前言Pwntest_ncnc_shell ReverseCreakmeEasyRebabyReeasy_z3mix_reeasy_flower_tea Webwhere_is_the_flag圣杯战争!!!绕进你的心里easy_websitewafrez_ini1z_Ssqldouble_picklewebincludefuzz!恐怖G…

网盘系统设计:万亿 GB 网盘如何实现秒传与限速?

Java全能学习面试指南:https://javaxiaobear.cn 网盘,又称云盘,是提供文件托管和文件上传、下载服务的网站(File hostingservice)。人们通过网盘保管自己拍摄的照片、视频,通过网盘和他人共享文件&#xff…