yolov5创新 C3GN:引荐HorNet递归门控卷积GnConv重构目标检测颈部网络

这篇具有很好参考价值的文章主要介绍了yolov5创新 C3GN:引荐HorNet递归门控卷积GnConv重构目标检测颈部网络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

yolov5创新 C3GN:引荐HorNet递归门控卷积GnConv重构目标检测颈部网络

1、引荐HorNet递归门控卷积思想 论文地址: https://arxiv.org/pdf/2207.14284.pdf
  • 递归门控卷积GnConv模块:
    主要思想:通过门控卷积和递归设计执行高阶空间交互,新的操作具有高度的灵活性和可定制性,将自注意力中的二阶交互扩​​展到任意阶,而不会引入大量额外的计算,并通过引入高阶交互来进一步增强模型容量,具有与自注意力相似的输入自适应空间混合功能。
  • 以GnConv模块构建GnBlock:遵循与Transformer相同的元架构来构建基本块GnBlock,包含空间混合层和前馈网络 (FFN)
  • 以基本块GnBlock构建C3GN:将n个残差结构替换为n个GnBlock,没有使用shortcut操作,并使用GnConv作为CSP的学习部分。
  • 在颈部网络中我们替换了所有的Conv结构为GnConv进一步提升性能!
  • 网络结构如下:
    yolov5创新 C3GN:引荐HorNet递归门控卷积GnConv重构目标检测颈部网络
2、部分代码构建
# 创作不易,有偿出售源码@马化腾:1444151069
class GnBlock(nn.Module):
    def __init__(self, dim, shortcut=False, layer_scale_init_value=1e-6):
        super().__init__()
        self.shortcut = shortcut
        self.norm1 = LayerNorm(dim, eps=1e-6, data_format='channels_first')
        self.gnconv = GnConv(dim, dim)  # depthwise conv
        self.norm2 = LayerNorm(dim, eps=1e-6)
        self.pwconv1 = nn.Linear(dim, 2 * dim)  # pointwise/1x1 convs, implemented with linear layers
        self.act = nn.GELU()
        self.pwconv2 = nn.Linear(2 * dim, dim)
        self.gamma1 = nn.Parameter(layer_scale_init_value * torch.ones(dim),
                                   requires_grad=True) if layer_scale_init_value > 0 else None

        self.gamma2 = nn.Parameter(layer_scale_init_value * torch.ones((dim)),
                                   requires_grad=True) if layer_scale_init_value > 0 else None

    def forward(self, x):
        B, C, H, W = x.shape
        if self.gamma1 is not None:
            gamma1 = self.gamma1.view(C, 1, 1)
        else:
            gamma1 = 1
        x = (x + gamma1 * self.gnconv(self.norm1(x))) if self.shortcut else gamma1 * self.gnconv(self.norm1(x))
        input = x
        x = x.permute(0, 2, 3, 1)  # (N, C, H, W) -> (N, H, W, C)
        x = self.norm2(x)
        x = self.pwconv1(x)
        x = self.act(x)
        x = self.pwconv2(x)
        if self.gamma2 is not None:
            x = self.gamma2 * x
        x = x.permute(0, 3, 1, 2)  # (N, H, W, C) -> (N, C, H, W)
        x = (input + x) if self.shortcut else x
        return x
        
class C3GN(nn.Module):
    # CSP GnBlock with 3 GnConv
    def __init__(self, c1, c2, n=1, shortcut=True, e=0.5):  # ch_in, ch_out, number, shortcut, groups, expansion
        super().__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = GnConv(c1, c_, 3)
        self.cv2 = GnConv(c1, c_, 3)
        self.cv3 = GnConv(2 * c_, c2, 3)  # act=FReLU(c2)
        self.m = nn.Sequential(*[GnBlock(c_, shortcut) for _ in range(n)])

    def forward(self, x):
        return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), dim=1))

3、参数量、计算量变化和检测精度对比
  • 以yolov5-6.0为基线代码,参数量、计算量变化如下:
# 创作不易,有偿出售源码@马化腾:1444151069
                 from  n    params  module                                  arguments                     
  0                -1  1      3520  models.common.Conv                      [3, 32, 6, 2, 2]              
  1                -1  1     18560  models.common.Conv                      [32, 64, 3, 2]                
  2                -1  1     18816  models.common.C3                        [64, 64, 1]                   
  3                -1  1     73984  models.common.Conv                      [64, 128, 3, 2]               
  4                -1  2    115712  models.common.C3                        [128, 128, 2]                 
  5                -1  1    295424  models.common.Conv                      [128, 256, 3, 2]              
  6                -1  3    625152  models.common.C3                        [256, 256, 3]                 
  7                -1  1   1180672  models.common.Conv                      [256, 512, 3, 2]              
  8                -1  1   1182720  models.common.C3                        [512, 512, 1]                 
  9                -1  1    656896  models.common.SPPF                      [512, 512, 5]                 
 10                -1  1    246400  models.common.GnConv                    [512, 256, 3, 1]              
 11                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          
 12           [-1, 6]  1         0  models.common.Concat                    [1]                           
 13                -1  1    506176  models.common.C3GN                      [512, 256, 1, False]          
 14                -1  1     63296  models.common.GnConv                    [256, 128, 3, 1]              
 15                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          
 16           [-1, 4]  1         0  models.common.Concat                    [1]                           
 17                -1  1    131872  models.common.C3GN                      [256, 128, 1, False]          
 18                -1  1     64192  models.common.GnConv                    [128, 128, 3, 2]              
 19          [-1, 14]  1         0  models.common.Concat                    [1]                           
 20                -1  1    505664  models.common.C3GN                      [256, 256, 1, False]          
 21                -1  1    248192  models.common.GnConv                    [256, 256, 3, 2]              
 22          [-1, 10]  1         0  models.common.Concat                    [1]                           
 23                -1  1   1981056  models.common.C3GN                      [512, 512, 1, False]          
 24      [17, 20, 23]  1    229245  Detect                                  [80, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [128, 256, 512]]
Model Summary: 366 layers, 8147549 parameters, 8147549 gradients, 18.5 GFLOPs
  • 在私有内部瓜果数据集上检测效果提升明显,yolov5s与yolov5s-c3gn-neck模型mAP对比曲线:
    yolov5创新 C3GN:引荐HorNet递归门控卷积GnConv重构目标检测颈部网络

  • 可视化结果
    yolov5创新 C3GN:引荐HorNet递归门控卷积GnConv重构目标检测颈部网络

  • 此思想可以用在不同基于Convs的目标检测器上,例如yolov3~yolov7,centernet,yolox,yolor,fasterrcnn等,本人已将yolov5-6.0版本打包好,需要改进其他网络寻求帮助可私信。其他目标检测模型创新可浏览其他帖子!!!

  • 在此感谢一位粉丝的提醒,本人上一个作品和他人的做法雷同,已将上一个作品下架,并进行了网络的调整,连夜跑实验,特此更新!文章来源地址https://www.toymoban.com/news/detail-426467.html

到了这里,关于yolov5创新 C3GN:引荐HorNet递归门控卷积GnConv重构目标检测颈部网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 改进YOLOv5:自研网络新结构,可作为创新点 | ALFNet YOLO | 创新必备

    在计算机视觉领域,深度学习已经取得了显著的进展,尤其是在目标检测任务中。然而,随着网络结构不断加深和复杂化#

    2024年02月03日
    浏览(57)
  • yolov5无人机视频检测与计数系统(创新点和代码)

    标题:基于YOLOv5的无人机视频检测与计数系统 无人机技术的快速发展和广泛应用给社会带来了巨大的便利,但也带来了一系列的安全隐患。为了实现对无人机的有效管理和监控,本文提出了一种基于YOLOv5的无人机视频检测与计数系统。该系统通过使用YOLOv5目标检测算法,能够

    2024年02月02日
    浏览(56)
  • YOLOv5独家改进:多层次特征融合(SDI)结合PConv、DualConv、GSConv,实现二次创新 | UNet v2最新论文

    💡💡💡 本文独家改进: 多层次特征融合(SDI)高效结合DualConv、PConv、GSConv等实现二次创新 1)替代原始的Concat;      收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),适合paper !!! 💡💡💡 2024年计算机视觉顶会创新

    2024年01月20日
    浏览(73)
  • YOLO系列全网首发改进最新:新颖特定任务检测头TSCODE|(适用YOLOv5/v7)创新性Max,即插即用检测头,用于目标检测的特定任务上下文解耦头机制,助力YOLOv7目标检测器高效涨点!

    💡更多改进内容📚可以点击查看:YOLOv5改进、YOLOv7改进、YOLOv8改进、YOLOX改进原创目录🏆 💡 本篇内容 :YOLOv5、YOLOv7改进新型解耦头TSCODE|全网首发最新更新,创新性Max,即插即用检测头|用于目标检测的特定任务上下文解耦头,助力YOLOv7目标检测器高效涨点! @CSDN芒果汁

    2024年02月04日
    浏览(56)
  • YOLOv5 - yolov5s.yaml 文件

    🍨 本文为[🔗365天深度学习训练营学习记录博客 🍦 参考文章:365天深度学习训练营 🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/) 🚀 文章来源:[K同学的学习圈子](https://www.yuque.com/mingtian-fkmxf/zxwb45) 基于深度学习的目标检测模型的结构:输入-主干-脖子

    2024年02月06日
    浏览(41)
  • YOLOV5 分类:利用yolov5进行图像分类

    之前介绍了yolov5的目标检测示例,这次将介绍yolov5的分类展示 目标检测:YOLOv5 项目:训练代码和参数详细介绍(train)_yolov5训练代码的详解-CSDN博客 yolov5和其他网络的性能对比 yolov5分类的代码部分在这 yolov5分类的数据集就是常规的摆放方式 相同数据放在同样的目录下,目

    2024年04月12日
    浏览(30)
  • 【Yolov5】Yolov5添加ASFF, 网络改进优化

    🚀🚀🚀 Yolov5添加ASFF 🚀🚀🚀 Yolov5是单阶段目标检测算法的一种,网上有很多改进其性能的方法,添加ASFF模块就是其中一种,但是ASFF本身是用于Yolov3的,在v5中无法直接应用,且网上许多博客都是介绍这个模块的原理,没有直接可以应用的代码程序,我这里提供一种方案

    2023年04月08日
    浏览(49)
  • 【目标检测算法实现之yolov5】 一、YOLOv5环境配置,将yolov5部署到远程服务器上

    在官网:https://github.com/ultralytics/yolov5上下载yolov5源代码 下载成功如下: 在配置基础环境之前,提前压缩自己的代码文件,并通过winscp传输给linux端,传输之后,解压该文件。解压前,先创建一个文件夹,再解压。 winscp下载使用教程参考上一篇博客:使用WinSCP下载和文件传输

    2024年01月15日
    浏览(55)
  • 【YOLOv5】1.搭建Pycharm+Python+yolov5环境

    目录 一、安装Python 二、安装PyCharm 三、创建项目和虚拟环境 四、下载YOLOv5和依赖库 五、配置Pytorch 六、检验YOLOv5环境 1.Python官方下载网址:Download Python | Python.org 2.安装python3.10即可,笔者使用的pytorch版本在python3.10下不可用,所以多装了一个python3.9。 3.心得:如果安装了多个

    2024年02月13日
    浏览(42)
  • 一文详解Yolov5——基于Yolov5的火灾检测系统

    ✨ 原创不易,还希望各位大佬支持一下 textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下 👍 点赞,你的认可是我创作的动力! textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包