YOLOv10改进 | 卷积模块 | 将Conv替换为轻量化的GSConv【轻量又涨点】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 


💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡


专栏目录:《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进


目标检测是计算机视觉中一个重要的下游任务。对于边缘盒子的计算平台来说,一个大型模型很难实现实时检测的要求。而且,一个由大量深度可分离卷积层构建的轻量级模型无法达到足够的准确度。一种新的轻量级卷积技术GSConv可以减轻模型但保持准确性。GSConv在模型的准确性和速度之间实现了优秀的权衡。在本文中,给大家带来的教程是将原来的网络中的Conv模块修改为GSConv。文章在介绍主要的原理后,将手把手教学如何进行模块的代码添加和修改,并将修改后的完整代码放在文章的最后,方便大家一键运行,小白也可轻松上手实践。以帮助您更好地学习深度学习目标检测YOLO系列的挑战。

 专栏地址YOLOv10入门 + 涨点——持续更新各种涨点方法

目录

1.原理

2. GSConv、VoVGSCSP代码实现

2.1 将GSConv、VoVGSCSP添加到YOLOv5中

2.2 更改init.py文件

2.3 新增yaml文件

2.4 注册模块

2.5 执行程序

3. 完整代码分享

4. GFLOPs

5. 进阶

6. 总结


1.原理

论文地址:Slim-neck by GSConv: A better design paradigm of detector architectures for autonomous vehicles——点击即可跳转

官方代码:代码仓库地址——点击即可跳转

Slim-neck by GSConv 是一种基于 GSConv(Grouped Spatial Convolution)的神经网络结构改进技术,主要用于减小模型的计算复杂度和参数量,同时保持或提高模型的性能。以下是对 Slim-neck by GSConv 的详细讲解:

背景和动机

随着深度学习的快速发展,模型的规模和复杂度也在不断增加,这给计算资源带来了巨大的挑战。为了在保证性能的同时减少计算开销,研究人员提出了多种方法,Slim-neck by GSConv 就是其中之一。

GSConv 的基本概念

GSConv 是 Grouped Spatial Convolution 的缩写,其核心思想是通过分组卷积(Grouped Convolution)和空间卷积(Spatial Convolution)的结合来减少计算量。具体来说,GSConv 将常规卷积分解为两个步骤:

  • 分组卷积(Grouped Convolution):将输入特征图分成若干组,每组分别进行卷积操作。这样可以减少每组卷积的计算量。

  • 空间卷积(Spatial Convolution):在每组卷积后的输出上再进行空间卷积操作,以捕捉跨组的特征。

Slim-neck 的改进

Slim-neck 是在 GSConv 的基础上进行的改进,旨在进一步简化模型结构,特别是在网络的颈部(neck)部分。网络的颈部通常是特征提取和特征聚合的关键部分,对模型性能有重要影响。Slim-neck 通过以下几方面进行优化:

  • 通道压缩:在网络的颈部部分,采用 GSConv 进行通道压缩,以减少特征图的通道数,从而降低计算量。

  • 高效连接:通过引入跳跃连接(skip connection)和高效的连接策略,确保特征信息的有效传递和利用。

  • 轻量化设计:在设计上注重轻量化,尽可能减少参数量和计算复杂度,同时保持或提高模型的性能。

Slim-neck by GSConv 的应用

Slim-neck by GSConv 在多种计算资源受限的场景下具有广泛应用,例如:

  • 移动设备:由于移动设备的计算资源有限,Slim-neck by GSConv 能够在不显著降低模型性能的前提下,减少计算量和功耗。

  • 嵌入式系统:嵌入式系统通常需要在低功耗和有限计算资源下运行,Slim-neck by GSConv 可以提供一种高效的解决方案。

  • 实时应用:在需要实时处理的应用场景中,Slim-neck by GSConv 通过减少计算延迟,提高了模型的响应速度。

实验结果与性能

通过在实际任务中的实验,Slim-neck by GSConv 通常能在保持甚至提升模型精度的同时,显著减少计算开销。例如,在图像分类、目标检测等任务中,采用 Slim-neck by GSConv 的模型相较于传统模型,计算量和参数量都有明显减少,同时性能并未显著下降,甚至在某些情况下有所提升。

总结

Slim-neck by GSConv 是一种有效的神经网络优化技术,通过分组卷积和空间卷积的结合,以及在网络颈部部分的优化,达到了降低计算复杂度和参数量的目的,适用于多种计算资源受限的应用场景。

2. GSConv、VoVGSCSP代码实现

2.1 将GSConv、VoVGSCSP添加到YOLOv5中

关键步骤一: 在/ultralytics/ultralytics/nn/modules/下新建文件gsconv.py,并在该文件的粘贴下面的代码。

import torch
from torch import nndef autopad(k, p=None):  # kernel, padding# Pad to 'same'if p is None:p = k // 2 if isinstance(k, int) else [x // 2 for x in k]  # auto-padreturn pclass Conv(nn.Module):# Standard convolutiondef __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):  # ch_in, ch_out, kernel, stride, padding, groupssuper().__init__()self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False)self.bn = nn.BatchNorm2d(c2)self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())def forward(self, x):return self.act(self.bn(self.conv(x)))def forward_fuse(self, x):return self.act(self.conv(x))class GSConv(nn.Module):# GSConv https://github.com/AlanLi1997/slim-neck-by-gsconvdef __init__(self, c1, c2, k=1, s=1, g=1, act=True):super().__init__()c_ = c2 // 2self.cv1 = Conv(c1, c_, k, s, None, g, act)self.cv2 = Conv(c_, c_, 5, 1, None, c_ , act)def forward(self, x):x1 = self.cv1(x)x2 = torch.cat((x1, self.cv2(x1)), 1)# shuffle# y = x2.reshape(x2.shape[0], 2, x2.shape[1] // 2, x2.shape[2], x2.shape[3])# y = y.permute(0, 2, 1, 3, 4)# return y.reshape(y.shape[0], -1, y.shape[3], y.shape[4])b, n, h, w = x2.data.size()b_n = b * n // 2y = x2.reshape(b_n, 2, h * w)y = y.permute(1, 0, 2)y = y.reshape(2, -1, n // 2, h, w)return torch.cat((y[0], y[1]), 1)

GSCONV 处理图片的主要流程可以概括为以下几个步骤:

1. 输入图片

  • GSCONV 的输入是一张或多张图片,这些图片首先会经过预处理,例如缩放、归一化等操作,使其符合模型的输入要求。

2. 特征提取

  • 输入图片经过一系列卷积层和激活函数,提取出不同尺度和深度的特征图。这些特征图包含了图片中物体的位置、形状、纹理等信息。

3. GSConv 层

  • 特征图进入 GSConv 层进行处理。GSConv 层首先使用 SC 进行通道密集的卷积操作,保留通道间的信息连接。

  • 然后,使用 shuffle 操作将 SC 的输出与 DSC 的输出进行混合,实现通道信息的均匀融合。

  • 最后,GSConv 层输出融合后的特征图,这些特征图包含了更加丰富和准确的信息。

4. 特征融合

  • 不同尺度和深度的特征图通过特征融合模块进行融合,例如特征金字塔网络(FPN)或特征金字塔网络(FPN)+路径聚合网络(PAN)。

  • 特征融合模块将不同层次的特征图进行拼接或求和,生成更全面和细致的特征图。

5. 目标检测

  • 融合后的特征图进入检测头进行目标检测。

  • 检测头会根据特征图预测物体的类别、位置和大小等信息。

  • 最终,模型输出检测结果,例如检测框、类别标签和置信度等。

总结: GSCONV 处理图片的主要流程可以概括为:输入图片 -> 特征提取 -> GSConv 层 -> 特征融合 -> 目标检测。其中,GSConv 层是 GSCONV 的核心部分,它通过结合 SC 和 DSC,并使用 shuffle 操作实现通道信息融合,从而在保持模型精度的同时降低计算成本。

2.2 更改init.py文件

关键步骤二:修改modules文件夹下的__init__.py文件,先导入函数

然后在下面的__all__中声明函数

2.3 新增yaml文件

关键步骤三:在 \ultralytics\ultralytics\cfg\models\v10下新建文件 yolov10_GS.yaml并将下面代码复制进去

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv10 object detection model. 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]l: [1.00, 1.00, 512]backbone:# [from, repeats, module, args]- [-1, 1, GSConv, [64, 3, 2]] # 0-P1/2- [-1, 1, GSConv, [128, 3, 2]] # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, GSConv, [256, 3, 2]] # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2fCIB, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 1, PSA, [1024]] # 10# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2fCIB, [512, True]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f, [256]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 3, C2fCIB, [512, True]] # 19 (P4/16-medium)- [-1, 1, SCDown, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 3, C2fCIB, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, v10Detect, [nc]] # Detect(P3, P4, P5)

温馨提示:因为本文只是对yolov10基础上添加模块,如果要对yolov10n/l/m/x进行添加则只需要指定对应的depth_multiple 和 width_multiple。


# YOLOv10n
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.25  # layer channel multiple
max_channels: 1024 # max_channels# YOLOv10s
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
max_channels: 1024 # max_channels# YOLOv10l 
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
max_channels: 512 # max_channels# YOLOv10m
depth_multiple: 0.67  # model depth multiple
width_multiple: 0.75  # layer channel multiple
max_channels: 768 # max_channels# YOLOv10x
depth_multiple: 1.33  # model depth multiple
width_multiple: 1.25  # layer channel multiple
max_channels: 512 # max_channels

2.4 注册模块

关键步骤四:在parse_model函数中进行注册,添加GSConv,

2.5 执行程序

在train.py中,将model的参数路径设置为yolov10_GS.yaml的路径

建议大家写绝对路径,确保一定能找到

from ultralytics import YOLO# Load a model
# model = YOLO('yolov10n.yaml')  # build a new model from YAML
# model = YOLO('yolov10n.pt')  # load a pretrained model (recommended for training)model = YOLO(r'/projects/ultralytics/ultralytics/cfg/models/v10/yolov10_GS.yaml')  # build from YAML and transfer weights# Train the model
model.train(device = [3], batch=16)

🚀运行程序,如果出现下面的内容则说明添加成功🚀

3. 完整代码分享

https://pan.baidu.com/s/1QwKljAa5r7ycTylq4VHKSQ?pwd=e95d

提取码: e95d 

4. GFLOPs

关于GFLOPs的计算方式可以查看:百面算法工程师 | 卷积基础知识——Convolution

未改进的YOLOv10l GFLOPs

改进后的GFLOPs

5. 进阶

可以结合损失函数或者注意力机制进行多重改进

6. 总结

GSCONV(Generalized Shuffle Convolution)是一种创新的轻量级卷积技术,旨在解决深度可分离卷积(DSC)在信息分离方面存在的缺陷,同时保持模型的精度和效率。GSCONV 通过结合标准卷积(SC)和 DSC,并引入 shuffle 操作,实现了通道信息的有效融合,从而克服了 DSC 的局限性。具体来说,GSCONV 首先使用 SC 进行通道密集的卷积操作,保留通道间的信息连接,然后通过 shuffle 操作将 SC 的输出与 DSC 的输出进行混合,实现通道信息的均匀融合。这种设计不仅保留了 SC 的特征提取能力,还降低了 DSC 的计算成本,实现了精度与速度的平衡。GSCONV 的优势使其成为构建轻量级目标检测模型的一种有效选择,尤其适用于自动驾驶汽车和边缘计算设备等对实时性和精度要求较高的场景。

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

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

相关文章

H5实现第三方分享功能,(WhatsApp,Facebook,Messenger,Instagram,Telegram,Zalo,Twitter/X)

1. H5实现第三方分享功能 1. WhatsApp 分享 https://api.whatsapp.com/send/?phone&app_absent0&text${codeUrl}2. Facebook 分享 https://www.facebook.com/sharer/sharer.php?u${codeUrl}3. Messenger 分享 https://www.messenger.com/?${codeUrl}4. Instagra…

计算机网络:应用层 - 万维网 HTTP协议

计算机网络:应用层 - 万维网 & HTTP协议 万维网 WWW统一资源定位符 URL 超文本传输协议 HTTP非持续连接持续连接非流水线流水线 代理服务器HTTP报文 万维网 WWW 万维网是一个大规模的、联机式的信息储藏所。万维网用链接的方法能非常方便地从互联网上的一个站点…

eBPF 如何塑造 Linux 和平台工程的未来

当Docker 于 2013 年突然出现时,Linux 容器似乎一夜成名。但容器(以及微服务和Kubernetes)的演变实际上是基于 Linux 操作系统中的内核原语而进行的,历时数十年。 Docker 使用这些原语(即 cgroups 和命名空间&#xf…

计算机Java项目|基于SpringBoot的基于保密信息学科平台系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

acme.sh泛证书申请

说明: 1、想每个项目都接入域名+端口访问,所以通过acme.sh申请泛域名证书 2、阿里云域名解析,并且指定公网ip地址对应的公共Nginx服务 3、acme.sh证书只有3个月,所以要用shell自动续签证书 4、阿里云域名已解析,所以二级域名、三级域名能正常解析,如下图所示, 一、阿里云…

武汉星起航:跨境电商浪潮下,中国卖家扬帆出海,书写国际新篇章

随着全球化进程的加速和互联网技术的飞速发展,跨境出口电商模式已成为中国卖家海外拓展的重要渠道。这一模式不仅为商家带来了巨大的市场机遇,更为中国卖家在全球舞台上展示其独特魅力和竞争力提供了宝贵平台。武汉星起航将从多个维度探讨中国卖家海外发…

DWC USB2.0协议学习2--架构介绍

目录 1 系统级架构 1.1 DWC_otg PMU模块 1.2 DWC_otg层次结构框图 1.3 DWC_otg功能模块框图 1.4 USB Host体系结构 1.4.1 发送FIFO 1.4.2 接收FIFO 1.5 USB Device体系结构 1.5.1专用发送FIFO 1.5.2 单个接收FIFO 2 DWC_otg_core架构 2.1 AHB总线接口单元(BIU) 2.2…

LLM大模型算法学习资源持续整理

文章目录 waytoagiLLM101llm-coursellm-cookbook waytoagi 飞书文档写的AGI知识库。 https://www.waytoagi.com/ LLM101 karpathy更新中的大模型教程: https://github.com/karpathy/LLM101n llm-course Course to get into Large Language Models (LLMs) wi…

C++初学者指南第一步---12.引用

C初学者指南第一步—12.引用 文章目录 C初学者指南第一步---12.引用1. 功能(和限制)1.1 非常量引用1.2 常量引用1.3 auto引用 2.用法2.1 范围for循环中的引用2.2 常量引用的函数形参2.3 非常量引用的函数形参2.4 函数参数的选择:copy / const…

charles破解

一、Charles官网下载安装包二、安装charles三、charles破解 一、Charles官网下载安装包 根据自己电脑系统 官网下载即可。 链接: https://www.charlesproxy.com/download/latest-release/ 二、安装charles 点击下载的安装包,然后进行安装。 三、charles破解 打…

基于信息论的高动态范围图像评价算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于信息论的高动态范围图像评价算法matlab仿真,利用一种自然图像的概率模型对图像的熵与成像动态范围之间的关系进行了数值模拟,得到了具有普遍意义上…

如何制作自己的网站

制作自己的网站可以帮助个人或组织在互联网上展示自己的品牌、作品、产品或服务。随着技术的发展,现在制作网站变得越来越简单。下面是一个简单的步骤指南,帮助你制作自己的网站。 1. 确定你的网站需求和目标 在开始之前,你需要明确你的网站的…

国家自然科学基金标书大全(2002-2024)

数据来源:在20世纪80年代初,为了促进中国的科技体制革新并改革科研资金分配机制,中国科学院的89位院士联名向党和国家领导人提出建议,设立了国家自然科学基金的设立。国自然基金自创立以来,根据国家发展科学技术方针、…

群体优化算法---石墨烯优化算法介绍以及在期权定价上的应用(Black-Scholes模型来计算欧式期权的理论价格)

介绍 石墨烯算法是一种新兴的优化算法,灵感来自于石墨烯的结构和特性。石墨烯是一种由碳原子构成的二维蜂窝状晶格结构,具有优异的机械、电学和热学性能。石墨烯算法通过模拟石墨烯原子之间的相互作用和迁移,来求解复杂的优化问题 基本概念…

JavaEE之HTTP协议(1)_HTTP基础知识,HTTP 请求、响应格式,方法,状态码

一、HTTP协议 1.1 基本概念: HTTP全称超文本传输协议,是一种无状态的、应用层的协议,它基于请求/响应模型。客户端(通常是Web浏览器)通过发送HTTP请求到服务器来获取或发送信息,服务器则返回HTTP响应作为回应。HTTP协…

七天速通javaSE:第四天 递归算法

文章目录 前言一、递归的介绍二、递归模型(n!)1 阶乘的定义:2. 阶乘的递归代码实现3. 递推与回归的内部逻辑三、练习 前言 本文将学习递归算法。在计算机科学中,递归算法是一种将问题不断分解 为同一类子问题来解决问题的方法。递…

sd卡一插上就提示格式化是怎么回事?sd卡数据如何恢复?

sd卡一插上就提示格式化是怎么回事?里面的数据怎么办?下面小编总结了SD卡提示格式化的原因和对应解决办法分享给大家! SD卡好好的,为什么一插电脑上就提示需要格式化呢?当SD卡提示格式化时,可以考虑下面几类…

项目1111

中文显示姓名列和手机号 SELECT contact_name AS 姓名, contact_phone AS 手机号 FROM 2_公司id; 使用explain测试给出的查询语句,显示走了索引查询 EXPLAIN SELECT * FROM 7_订单数量 WHERE countid LIKE e%; 统计用户订单信息,查询所有用户的下单数量…

项目实战系列三: 家居购项目 第六部分

文章目录 🌈Ajax检验注册名🌈Ajax添加购物车🌈上传与更新家居图片🌈作业布置🍍会员登陆后不能访问后台管理🍍解决图片冗余问题🍍分页导航完善 🌈Ajax检验注册名 需求分析 注册会员时…

【osgEarth】Ubuntu 22.04 源码编译osgEarth 3.5

下载源代码 git clone --depth1 https://dgithub.xyz/gwaldron/osgearth -b osgearth-3.5 下载子模块 git submodule update --init 如果下载不过来,就手动修改下.git/config文件,将子模块的地址替换成加速地址 (base) yeqiangyeqiang-Default-string…