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

品牌网站什么意思河南今日头条新闻

品牌网站什么意思,河南今日头条新闻,logo商标设计网站,接单平台哪个靠谱点一、本文介绍 本文记录的是利用GsConv优化YOLOv9的颈部网络。深度可分离卷积(DSC)在轻量级模型中被广泛使用,但其在计算过程中会分离输入图像的通道信息,导致特征表示能力明显低于标准卷积(SC)&#xff0c…

一、本文介绍

本文记录的是利用GsConv优化YOLOv9的颈部网络深度可分离卷积(DSC)在轻量级模型中被广泛使用,但其在计算过程中会分离输入图像的通道信息,导致特征表示能力明显低于标准卷积(SC),而GsConv采用混合策略,使DSC的输出通过打乱特征更接近SC,从而优化模型的性能。本文利用GsConv+Slim Neck改进YOLOv9的颈部网络,使其在提升特征表示能力的同时降低计算成本和内存占用。


专栏目录:YOLOv9改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进方向

专栏地址:YOLOv9改进专栏——以发表论文的角度,快速准确的找到有效涨点的创新点!

文章目录

  • 一、本文介绍
  • 二、GsConv介绍
    • 2.1、设计原理
    • 2.2、优势
  • 三、GSConv的实现代码
  • 四、添加步骤
    • 4.1 修改common.py
      • 4.1.1 基础模块
    • 4.2 修改yolo.py
  • 五、yaml模型文件
    • 5.1 模型改进⭐
  • 六、成功运行结果


二、GsConv介绍

Slim-neck by GSConv: 实时检测器架构的轻量级设计

GsConv是一种新的轻量级卷积技术,其设计原理、优势如下:

2.1、设计原理

  • 为了减轻深度神经网络的高计算成本,许多轻量级模型使用深度可分离卷积(DSC)来减少参数和浮点运算(FLOPs),但深度可分离卷积的缺点是在计算过程中分离了输入图像的通道信息,导致特征表示能力低于标准卷积(SC)
  • 为了缓解DSC的固有缺陷,GsConv采用了一种混合策略,通过对SCDSC生成的特征进行打乱(shuffle),使DSC的输出尽可能接近SC。具体来说,GsConv使用SC(通道密集卷积)生成的特征渗透到DSC生成的特征的每一部分,通过均匀混合来允许SC的信息充分混合到深度可分离卷积的输出中,从而尽可能地保留特征之间的隐藏连接。

在这里插入图片描述

Slim-neck结构:

在这里插入图片描述

2.2、优势

  • 精度提升:通过添加DSC层和打乱操作,增强了非线性表达能力,从而使轻量级卷积的表示能力尽可能接近SC,在精度上有显著提升。
  • 计算成本降低GSConv在保持较低时间复杂度的情况下,能以更少的计算成本捕获更多的空间和通道特征。
  • 适应性强GSConv灵活且易于适应,可根据需要添加简单的辅助分支来完成特定设计,进一步扩展其应用范围。例如,可以添加坐标编码辅助分支来优化检测精度,或者在辅助分支上使用大核大小的DSC来解决浅网络难以捕获足够感受野的问题。

论文:https://arxiv.org/pdf/2206.02424
源码:https://github.com/AlanLi1997/Slim-neck-by-GSConv

三、GSConv的实现代码

GSConv模块的实现代码如下:


def autopad(k, p=None, d=1):"""Pads kernel to 'same' output shape, adjusting for optional dilation; returns padding size.`k`: kernel, `p`: padding, `d`: dilation."""if d > 1:k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k]  # actual kernel-sizeif p is None:p = k // 2 if isinstance(k, int) else [x // 2 for x in k]  # auto-padreturn pclass Conv(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):"""Initializes a standard convolution layer with optional batch normalization and activation."""super().__init__()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):"""Applies a convolution followed by batch normalization and an activation function to the input tensor `x`."""return self.act(self.bn(self.conv(x)))def forward_fuse(self, x):"""Applies a fused convolution and activation function to the input tensor `x`."""return self.act(self.conv(x))class DWConv(Conv):"""Depth-wise convolution."""def __init__(self, c1, c2, k=1, s=1, d=1, act=True):  # ch_in, ch_out, kernel, stride, dilation, activation"""Initialize Depth-wise convolution with given parameters."""super().__init__(c1, c2, k, s, g=math.gcd(c1, c2), d=d, act=act)class GSConv(nn.Module):# GSConv https://github.com/AlanLi1997/slim-neck-by-gsconvdef __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):super().__init__()c_ = c2 // 2self.cv1 = Conv(c1, c_, k, s, p, g, d, Conv.default_act)self.cv2 = Conv(c_, c_, 5, 1, p, c_, d, Conv.default_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.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)class GSConvns(GSConv):# GSConv with a normative-shuffle https://github.com/AlanLi1997/slim-neck-by-gsconvdef __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):super().__init__(c1, c2, k, s, p, g, act=True)c_ = c2 // 2self.shuf = nn.Conv2d(c_ * 2, c2, 1, 1, 0, bias=False)def forward(self, x):x1 = self.cv1(x)x2 = torch.cat((x1, self.cv2(x1)), 1)# normative-shuffle, TRT supportedreturn nn.ReLU()(self.shuf(x2))class GSBottleneck(nn.Module):# GS Bottleneck https://github.com/AlanLi1997/slim-neck-by-gsconvdef __init__(self, c1, c2, k=3, s=1, e=0.5):super().__init__()c_ = int(c2*e)# for lightingself.conv_lighting = nn.Sequential(GSConv(c1, c_, 1, 1),GSConv(c_, c2, 3, 1, act=False))self.shortcut = Conv(c1, c2, 1, 1, act=False)def forward(self, x):return self.conv_lighting(x) + self.shortcut(x)class GSBottleneckns(GSBottleneck):# GS Bottleneck https://github.com/AlanLi1997/slim-neck-by-gsconvdef __init__(self, c1, c2, k=3, s=1, e=0.5):super().__init__(c1, c2, k, s, e)c_ = int(c2*e)# for lightingself.conv_lighting = nn.Sequential(GSConvns(c1, c_, 1, 1),GSConvns(c_, c2, 3, 1, act=False))class GSBottleneckC(GSBottleneck):# cheap GS Bottleneck https://github.com/AlanLi1997/slim-neck-by-gsconvdef __init__(self, c1, c2, k=3, s=1):super().__init__(c1, c2, k, s)self.shortcut = DWConv(c1, c2, k, s, act=False)class VoVGSCSP(nn.Module):# VoVGSCSP module with GSBottleneckdef __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):super().__init__()c_ = int(c2 * e)  # hidden channelsself.cv1 = Conv(c1, c_, 1, 1)self.cv2 = Conv(c1, c_, 1, 1)self.gsb = nn.Sequential(*(GSBottleneck(c_, c_, e=1.0) for _ in range(n)))self.res = Conv(c_, c_, 3, 1, act=False)self.cv3 = Conv(2 * c_, c2, 1)def forward(self, x):x1 = self.gsb(self.cv1(x))y = self.cv2(x)return self.cv3(torch.cat((y, x1), dim=1))class VoVGSCSPns(VoVGSCSP):def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):super().__init__(c1, c2, n, shortcut, g, e)c_ = int(c2 * e)  # hidden channelsself.gsb = nn.Sequential(*(GSBottleneckns(c_, c_, e=1.0) for _ in range(n)))class VoVGSCSPC(VoVGSCSP):# cheap VoVGSCSP module with GSBottleneckdef __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):super().__init__(c1, c2)c_ = int(c2 * 0.5)  # hidden channelsself.gsb = GSBottleneckC(c_, c_, 1, 1)

四、添加步骤

4.1 修改common.py

此处需要修改的文件是models/common.py

common.py中定义了网络结构的通用模块,我们想要加入新的模块就只需要将模块代码放到这个文件内即可。

4.1.1 基础模块

模块改进方法:直接加入GSConv模块
将上方的实现代码粘贴到common.py文件夹下,GSConv模块添加后如下:

在这里插入图片描述

注意❗:在4.2小节中的yolo.py文件中需要声明的模块名称为:GSConvVoVGSCSP

4.2 修改yolo.py

此处需要修改的文件是models/yolo.py

yolo.py用于函数调用,我们只需要将common.py中定义的新的模块名添加到parse_model函数下即可。

GSConv模块以及VoVGSCSP模块添加后如下:

在这里插入图片描述


五、yaml模型文件

5.1 模型改进⭐

在代码配置完成后,配置模型的YAML文件。

此处以models/detect/yolov9-c.yaml为例,在同目录下创建一个用于自己数据集训练的模型文件yolov9-c-gsconv.yaml

yolov9-c.yaml中的内容复制到yolov9-c-gsconv.yaml文件下,修改nc数量等于自己数据中目标的数量。

此处是将YOLOv9颈部网络修改成GSConv+Slim Neck,原因是:

为了加速预测的计算,CNN中的馈送图像几乎必须在Backbone中经历类似的转换过程:空间信息逐步向通道传输。并且每次特征图的空间(宽度和高度)压缩和通道扩展都会导致语义信息的部分丢失。密集卷积计算最大限度地保留了每个通道之间的隐藏连接,而稀疏卷积则完全切断了这些连接。

GSConv尽可能地保留这些连接。但是如果在模型的所有阶段都使用它,模型的网络层会更深,深层会加剧对数据流的阻力,显著增加推理时间。当这些特征图走到Neck时,它们已经变得细长(通道维度达到最大,宽高维度达到最小),不再需要进行变换。因此,更好的选择是仅在Neck使用GSConv。在这个阶段,使用GSConv处理concatenated feature maps刚刚好:冗余重复信息少,不需要压缩,注意力模块效果更好。

使用VoV-GSCSP模块则降低了计算和网络结构的复杂性,但保持了足够的精度。

# YOLOv9# parameters
nc: 1  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
#activation: nn.LeakyReLU(0.1)
#activation: nn.ReLU()# anchors
anchors: 3# YOLOv9 backbone
backbone:[[-1, 1, Silence, []],  # conv down[-1, 1, Conv, [64, 3, 2]],  # 1-P1/2# conv down[-1, 1, Conv, [128, 3, 2]],  # 2-P2/4# elan-1 block[-1, 1, RepNCSPELAN4, [256, 128, 64, 1]],  # 3# avg-conv down[-1, 1, ADown, [256]],  # 4-P3/8# elan-2 block[-1, 1, RepNCSPELAN4, [512, 256, 128, 1]],  # 5# avg-conv down[-1, 1, ADown, [512]],  # 6-P4/16# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 7(可替换)# avg-conv down[-1, 1, ADown, [512]],  # 8-P5/32# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 9(可替换)]# YOLOv9 head
head:[# elan-spp block[-1, 1, SPPELAN, [512, 256]],  # 10# up-concat merge[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 7], 1, Concat, [1]],  # cat backbone P4# elan-2 block[-1, 1, VoVGSCSP, [512]],  # 13# up-concat merge[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 5], 1, Concat, [1]],  # cat backbone P3# elan-2 block[-1, 1, VoVGSCSP, [256]],  # 16 (P3/8-small)# avg-conv-down merge[-1, 1, GSConv, [256, 3, 2]],[[-1, 13], 1, Concat, [1]],  # cat head P4# elan-2 block[-1, 1, VoVGSCSP, [512]],  # 19 (P4/16-medium)# avg-conv-down merge[-1, 1, GSConv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]],  # cat head P5# elan-2 block[-1, 1, VoVGSCSP, [512]],  # 22 (P5/32-large)# multi-level reversible auxiliary branch# routing[5, 1, CBLinear, [[256]]], # 23[7, 1, CBLinear, [[256, 512]]], # 24[9, 1, CBLinear, [[256, 512, 512]]], # 25# conv down[0, 1, Conv, [64, 3, 2]],  # 26-P1/2# conv down[-1, 1, Conv, [128, 3, 2]],  # 27-P2/4# elan-1 block[-1, 1, RepNCSPELAN4, [256, 128, 64, 1]],  # 28# avg-conv down fuse[-1, 1, ADown, [256]],  # 29-P3/8[[23, 24, 25, -1], 1, CBFuse, [[0, 0, 0]]], # 30  # elan-2 block[-1, 1, RepNCSPELAN4, [512, 256, 128, 1]],  # 31# avg-conv down fuse[-1, 1, ADown, [512]],  # 32-P4/16[[24, 25, -1], 1, CBFuse, [[1, 1]]], # 33 # elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 34# avg-conv down fuse[-1, 1, ADown, [512]],  # 35-P5/32[[25, -1], 1, CBFuse, [[2]]], # 36# elan-2 block[-1, 1, RepNCSPELAN4, [512, 512, 256, 1]],  # 37# detection head# detect[[31, 34, 37, 16, 19, 22], 1, DualDDetect, [nc]],  # DualDDetect(A3, A4, A5, P3, P4, P5)]

六、成功运行结果

分别打印网络模型可以看到GSConv模块VoVGSCSP已经加入到模型中,并可以进行训练了。

yolov9-c-gsconv

                 from  n    params  module                                  arguments                     0                -1  1         0  models.common.Silence                   []                            1                -1  1      1856  models.common.Conv                      [3, 64, 3, 2]                 2                -1  1     73984  models.common.Conv                      [64, 128, 3, 2]               3                -1  1    212864  models.common.RepNCSPELAN4              [128, 256, 128, 64, 1]        4                -1  1    164352  models.common.ADown                     [256, 256]                    5                -1  1    847616  models.common.RepNCSPELAN4              [256, 512, 256, 128, 1]       6                -1  1    656384  models.common.ADown                     [512, 512]                    7                -1  1   2857472  models.common.RepNCSPELAN4              [512, 512, 512, 256, 1]       8                -1  1    656384  models.common.ADown                     [512, 512]                    9                -1  1   2857472  models.common.RepNCSPELAN4              [512, 512, 512, 256, 1]       10                -1  1    656896  models.common.SPPELAN                   [512, 512, 256]               11                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          12           [-1, 7]  1         0  models.common.Concat                    [1]                           13                -1  1   1779968  models.common.VoVGSCSP                  [1024, 512]                   14                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          15           [-1, 5]  1         0  models.common.Concat                    [1]                           16                -1  1    578688  models.common.VoVGSCSP                  [1024, 256]                   17                -1  1    298624  models.common.GSConv                    [256, 256, 3, 2]              18          [-1, 13]  1         0  models.common.Concat                    [1]                           19                -1  1   1648896  models.common.VoVGSCSP                  [768, 512]                    20                -1  1   1187072  models.common.GSConv                    [512, 512, 3, 2]              21          [-1, 10]  1         0  models.common.Concat                    [1]                           22                -1  1   1779968  models.common.VoVGSCSP                  [1024, 512]                   23                 5  1    131328  models.common.CBLinear                  [512, [256]]                  24                 7  1    393984  models.common.CBLinear                  [512, [256, 512]]             25                 9  1    656640  models.common.CBLinear                  [512, [256, 512, 512]]        26                 0  1      1856  models.common.Conv                      [3, 64, 3, 2]                 27                -1  1     73984  models.common.Conv                      [64, 128, 3, 2]               28                -1  1    212864  models.common.RepNCSPELAN4              [128, 256, 128, 64, 1]        29                -1  1    164352  models.common.ADown                     [256, 256]                    30  [23, 24, 25, -1]  1         0  models.common.CBFuse                    [[0, 0, 0]]                   31                -1  1    847616  models.common.RepNCSPELAN4              [256, 512, 256, 128, 1]       32                -1  1    656384  models.common.ADown                     [512, 512]                    33      [24, 25, -1]  1         0  models.common.CBFuse                    [[1, 1]]                      34                -1  1   2857472  models.common.RepNCSPELAN4              [512, 512, 512, 256, 1]       35                -1  1    656384  models.common.ADown                     [512, 512]                    36          [25, -1]  1         0  models.common.CBFuse                    [[2]]                         37                -1  1   2857472  models.common.RepNCSPELAN4              [512, 512, 512, 256, 1]       38[31, 34, 37, 16, 19, 22]  1  21542822  DualDDetect                             [1, [512, 512, 512, 256, 512, 512]]
yolov9-c-gsconv summary: 850 layers, 47311654 parameters, 47311622 gradients, 219.6 GFLOPs
http://www.15wanjia.com/news/29374.html

相关文章:

  • cp网站开发搭建2023年9月疫情又开始了吗
  • 网站开发开发需求今日最新国内新闻重大事件
  • 8上的信息课做网站作业浙江网站建设推广
  • app软件下载网站源码临沂seo优化
  • 创同盟做网站百度免费打开
  • 怎样加入好大夫网站做医生手机网站怎么优化关键词
  • 免费发布信息网站搭建网站要多少钱
  • 张店网站建设定制太原关键词优化软件
  • 一分钟用自己的电脑做网站网站制作的步骤
  • 江西省工程建设信息官方网站新闻今日头条最新消息
  • 网络规划设计师属于高级职称吗seo网站关键词优化
  • 筑站网络推广天津网站优化公司
  • 企业网站需要多少费用软文发稿
  • 淄博网站制作公司托管广告联盟接单赚钱平台
  • 网站推广与宣传怎么做mac日本官网入口
  • 做旅游产品的网站有哪些seo和sem是什么意思啊
  • jsp网站服务建设开题报告中国培训网是国家公认的吗
  • 新网站前期如何做seo上海培训机构有哪些
  • 沈阳网站建设-中国互联百度高级搜索入口
  • 怎么样做网站赚钱新品怎么推广效果最好
  • 广州建设网站企业初学者做电商怎么入手
  • 上海商城网站建设公司阿里巴巴国际贸易网站
  • 世界上第二大互联网公司是武汉seo学徒
  • 家装网站自己做的其他搜索引擎
  • 广州物流网站建设最新足球新闻头条
  • wordpress删除谷歌自提上海官网seo
  • 网站建设去超速云建站淘宝怎么提高关键词搜索排名
  • 菜鸟必读 网站被入侵后需做的检测 2国内外十大免费crm软件推荐
  • 石家庄正规制作网站公司深圳seo
  • 动漫网站建设毕业设计新闻头条今日新闻下载