YOLOv10全网最新创新点改进系列:融合GSConv+Slim Neck,双改进、双增强,替换特征融合层实现, 轻量化涨点改进策略,有效涨点神器!

YOLOv10全网最新创新点改进系列:融合GSConv+Slim Neck,双改进、双增强,替换特征融合层实现, 轻量化涨点改进策略,有效涨点神器!

所有改进代码均经过实验测试跑通!截止发稿时YOLOv10已改进40+!自己排列组合2-4种后,考虑位置不同后可排列组合上千万种!改进不重样!!专注AI学术,关注B站up主:Ai学术叫叫兽er!

购买相关资料后畅享一对一答疑

# YOLOv10全网最新创新点改进系列:融合GSConv+Slim Neck,双改进、双增强,替换特征融合层实现, 轻量化涨点改进策略,有效涨点神器!


详细的改进教程以及源码,戳这!戳这!!戳这!!!B站:AI学术叫叫兽 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!

一、GSConv+Slim Neck概述

1.1 Slim Neck结构图

在这里插入图片描述

1.2 GSConv结构图

在这里插入图片描述

贡献:作者提出了一种新方法 GSConv 来减轻模型的复杂度并保持准确性。GSConv可以更好地平衡模型的准确性和速度。并且,提供了一种设计范式Slim Neck,以实现检测器更高的计算成本效益。
实验过程中,与原始网络相比,改进方法获得了最优秀的检测结果。
实验结果如图:
在这里插入图片描述

开始改进YOLOv8+GSConv+Slim Neck!

二、YOLOv10+GSConv+Slim Neck

2.1 修改YAML文件

# 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


backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1,GSConv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9


head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, VoVGSCSP, [512]]  # 12

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, VoVGSCSP, [256]]  # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, VoVGSCSP, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, VoVGSCSP, [1024]]  # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

在主干这里我只添加了一个GSConv模块,根据实验需要可以灵活配置(head同)!

2.2 新建SwinTransformer.py

核心代码示例如下:





class GSConv(nn.Module):
    # GSConv https://github.com/AlanLi1997/slim-neck-by-gsconv
    def __init__(self, c1, c2, k=1, s=1, g=1, act=True):
        super().__init__()
        c_ = c2 // 2
        self.cv1 = Conv(c1, c_, k, s, None, g, 1,  act)
        self.cv2 = Conv(c_, c_, 5, 1, None, c_, 1 , 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 // 2
        y = 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-gsconv
    def __init__(self, c1, c2, k=1, s=1, g=1, act=True):
        super().__init__(c1, c2, k=1, s=1, g=1, act=True)
        c_ = c2 // 2
        self.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 supported
        return nn.ReLU(self.shuf(x2))
 
 
class GSBottleneck(nn.Module):
    # GS Bottleneck https://github.com/AlanLi1997/slim-neck-by-gsconv
    def __init__(self, c1, c2, k=3, s=1, e=0.5):
        super().__init__()
        c_ = int(c2*e)
        # for lighting
        self.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 DWConv(Conv):
    # Depth-wise convolution class
    def __init__(self, c1, c2, k=1, s=1, act=True):  # ch_in, ch_out, kernel, stride, padding, groups
        super().__init__(c1, c2, k, s, g=math.gcd(c1, c2), act=act)
 
 

 
 
class VoVGSCSP(nn.Module):
    # VoVGSCSP module with GSBottleneck
    def __init__(self, cx, c2, n=1, shortcut=True, g=1, e=0.5):
        super().__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c1, c_, 1, 1)
        # self.gc1 = GSConv(c_, c_, 1, 1)
        # self.gc2 = GSConv(c_, c_, 1, 1)
        # self.gsb = GSBottleneck(c_, 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 VoVGSCSPC(VoVGSCSP):
    # cheap VoVGSCSP module with GSBottleneck
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
        super().__init__(c1, c2)
        c_ = int(c2 * 0.5)  # hidden channels
        self.gsb = GSBottleneckC(c_, c_, 1, 1)
 


2.3 修改tasks.py

2.3.1 导包

from ultralytics.nn. SlimNeck import VoVGSCSP, VoVGSCSPC, GSConv

2.3.2 注册(包含很多改进,不需要的可删)

if m in (Classify, Conv, GGhostRegNet, ConvTranspose, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, Focus,BottleneckCSP, C1, C2, C2f, C3, C3TR, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x, RepC3, SEAttention,ContextAggregation, BoTNet, CBAM,LightConv,RepConv, SpatialAttention,Involution, CARAFE, VoVGSCSP, VoVGSCSPC,GSConv,HorBlock, SwinTransformer):

三、验证是否成功即可

执行命令

python train.py

示例如图:

在这里插入图片描述

改完收工!
关注B站:AI学术叫叫兽
从此走上科研快速路
遥遥领先同行!!!!

详细的改进教程以及源码,戳这!戳这!!戳这!!!B站:AI学术叫叫兽 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!
AI学术叫叫兽在这!家人们,给我遥遥领先!!!
[AI学术叫叫兽在这!家人们,给我遥遥领先!!!](https://space.bilibili.com/3546623938398505?plat_id=1&share_from=space&share_medium=android&share_plat=android&share_session_id=9ac46a33-0bcf-40d3-a9f8-3ff85e402116&share_source=COPY&share_tag=s_i&tim

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: gsconv slim-neck 是一种新型的神经网络结构,它可以有效地减轻模型的复杂度,同时提升精度。 一般情况下,神经网络的复杂度越高,模型就越庞大、计算量就越大,同时也越容易出现过拟合的问题。针对这个问题,gsconv slim-neck 结构主要通过两种方式来降低神经网络的复杂度: 一是采用深度可分离卷积代替传统的卷积,减少神经网络的参数量和计算量,从而提高模型的训练和运行效率。 二是在神经网络的设计中引入了一种“瓶颈结构”,即在模型的中间位置设置一个较小的通道,保证了更加有效地信息传递和特征提取,同时也带来了更小的计算和存储开销。 此外,gsconv slim-neck 还采用了立体空洞卷积等高阶方法,进一步提高了模型的特征提取能力和准确性,并在训练数据规模较小的情况下表现出了更强的鲁棒性。 综上,gsconv slim-neck 在保证模型准确性的基础上,有效地减轻了模型的复杂度,提高了神经网络的效率,为神经网络的设计和应用提供了新的思路和方法。 ### 回答2: gsconv slim-neck是一种神经网络结构优化方法,旨在减轻模型的复杂度和提高精度。它采用了两种优化策略gsconvslim-neck。通过这两种策略的结合运用,可以使神经网络模型更加轻量化和高效,有效避免过拟合等问题,从而提高模型的性能表现。 首先,gsconv(Global Softmax Convolution)是一种结合全局softmax和卷积操作的卷积神经网络(CNN)模块,它可以有效地将特征图的维度降低。具体来说,在该模块中,全局softmax操作会将每个特征图通道的所有值归一化,从而得到每个通道上的注意力分布权重。然后,将该权重作为卷积核来执行卷积操作,将特征图的维度降低到1,从而减少模型中的参数数量和计算复杂度,提高模型的计算效率。 其次,slim-neck是一种细颈设计(Bottlenect)结构,可以有效地缩小神经网络模型的通道数,减少网络所需的存储空间和计算资源,并且有利于控制过拟合。在该结构中,通过将一部分卷积的输出通道数降到较低的水平来压缩特征图,然后再使用较小的通道数进行卷积操作,从而减少了模型的参数数量和计算量。 综合gsconvslim-neck策略gsconv slim-neck 能够在保持精度不变的情况下,大幅度减小神经网络模型的复杂度。通过在CNN模型的不同次中结合这两种优化策略,可以提高模型的泛化能力和准确性,并且在实际应用中具有更优的性能表现。因此,gsconv slim-neck 作为一种高效的神经网络优化方法,在图像识别、语音识别、自然语言处理等领域中具有广泛的应用前景。 ### 回答3: gsconv slim-neck是一种卷积神经网络模型压缩技术,旨在减轻模型的复杂度同时提升精度。相对于传统的模型压缩技术,如权重剪枝和量化,gsconv slim-neck技术可以更好地完成这个任务。 gsconv slim-neck技术的主要原理是使用一种特殊的卷积操作方式,即group sparse convolution,来减少模型中神经元的数量并提高精度。该操作将神经元分为多个group,其中每个group包含一些神经元,这些神经元权重之间是高度相关的。在进行卷积操作时,只有少数group参与计算,因此模型的复杂度得以减少。 与此同时,gsconv slim-neck技术还使用了一种称为neck卷积的操作,可以将一个大的卷积核分解为多个小的卷积核,从而进一步提高了模型的精度。这种操作类似于一种特殊的卷积神经网络结构——Inception,但是更加高效。 总之,gsconv slim-neck技术通过使用group sparse convolution和neck卷积两种技术手段,成功地实现模型压缩和精度提升的目标。这项技术在计算机视觉等领域得到了广泛的应用,可以为实际应用场景提供更加高效和准确的神经网络模型
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值