【论文笔记】Slim-neck by GSConv

news2025/2/25 15:56:32

文章目录

  • 前言
  • 1. 简介
  • 2. GSConv
  • 4. 为什么要在Neck中使用GSConv
  • 3. Slim-Neck
    • Slim-Neck中的模块
    • Slim-Neck针对YOLO系列的设计
  • 一些问题
  • 总结
  • References

前言

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

论文地址:https://arxiv.org/abs/2206.02424

Github:https://github.com/AlanLi1997/Slim-neck-by-GSConv


1. 简介

目标检测是计算机视觉中一项艰巨的下游任务。对于车载边缘计算平台,大模型很难达到实时检测的要求。而且,由大量深度可分离卷积层构建的轻量级模型无法达到足够的准确性。因此本文引入了一种新方法 GSConv 来减轻模型的复杂度并保持准确性。GSConv 可以更好地平衡模型的准确性和速度。并且,提供了一种设计范式,Slim-Neck,以实现检测器更高的计算成本效益。在实验中,与原始网络相比,本文方法获得了最先进的结果(例如,SODA10M 在 Tesla T4 上以 ~100FPS 的速度获得了 70.9% mAP0.5)

MobileNet、ShuffleNets这些轻量级模型都采用了DSC操作来提升检测器的速度。但是当这些模型应用于自动驾驶汽车的时候,准确性就不够了。

但是,DSC 的缺点也很明显:输入图像的通道信息在计算过程中是分离的。
在这里插入图片描述
对于自动驾驶,速度和准确性同样重要。通过 GSConv 引入了 Slim-Neck 方法,以减轻模型的复杂度同时可以保持精度。GSConv 更好地平衡了模型的准确性和速度。

如上图所示,作者在SODA10M无人驾驶数据集上比较了最先进了Slim Neck 检测器和原始检测器的速度和准确度,并证实了该方法的有效性。

2. GSConv

在这里插入图片描述
通过上图可以知道,GSConv首先输入进行一个普通卷积的下采样,然后使用DWConv深度卷积,并将两个conv的结果拼接起来(一个SC一个DSC);最后进行shuffle操作 ,让之前两个卷积的对应通道数挨在一起,通过上方图片也可以看出来。(表述的可能不太清楚,看图片我觉得要清晰一点哈哈哈)

搭配代码食用或许能更好理解一点:

class GSConv(nn.Module):
    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, act)	# g:gract:分组卷积
        self.cv2 = Conv(c_, c_, 5, 1, None, c_, act)	# 分组为c_
 
    def forward(self, x):
        x1 = self.cv1(x)
        x2 = torch.cat((x1, self.cv2(x1)), 1)
        # shuffle
        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)

这么做的目的,主要还是为了使DSC的输出尽可能接近SC,这也是GSConv地目的。使用 shuffle 将 SC 生成的信息(密集卷积操作)渗透到 DSC 生成的信息的每个部分。这种方法允许来自 SC 的信息完全混合到 DSC 的输出中,没有花里胡哨的东西。
在这里插入图片描述
如上图所示,展现了普通卷积、DSC卷积和GSC卷积地结果。可以看出,GSConv地太feature map与 SC 的相似性明显高于 DSC 与 SC 的相似,就说明模型的准确性非常接近普通卷积。

看到这,感觉就像是一半普通卷积,一半深度可分离卷积,把他们拼接在了一起。。

当在 Backbone 使用 SC,在Neck使用 GSConv(slim-neck)时,模型的准确率非常接近原始;如果添加一些技巧,模型的准确性和速度就会超过原始模型。采用 GSConv 方法的Slim-Neck可最大限度地减少 DSC 缺陷对模型的负面影响,并有效利用 DSC 的优势。

综上,GSConv的贡献总结如下:

  1. 引入了一种新方法 GSConv 来代替 SC 操作。该方法使卷积计算的输出尽可能接近 SC,同时降低计算成本;

  2. 为自动驾驶汽车的检测器架构提供了一种新的设计范式,即带有标准 Backbone 的 Slim-Neck 设计;

  3. 验证了不同 Trick 的有效性,可以作为该领域研究的参考。


4. 为什么要在Neck中使用GSConv

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

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

看得不是很懂啊这段,先留个坑吧,对此我暂时的理解是backbone正在将语义信息传输到通道中,如果此时你使用GSConv,就会导致这些语义信息的丢失。

3. Slim-Neck

Slim-Neck中的模块

作者研究了增强 CNN 学习能力的通用方法,例如 DensNet、VoVNet 和 CSPNet,然后根据这些方法的理论设计了 Slim-Neck 结构。

首先,使用轻量级卷积方法 GSConv 来代替 SC。其计算成本约为 SC 的60%~70%,但其对模型学习能力的贡献与后者不相上下。然后,在 GSConv 的基础上继续引入 GSbottleneck。如下图所示。
在这里插入图片描述
同样,使用一次性聚合方法来设计跨级部分网络 (GSCSP) 模块 VoV-GSCSP。VoV-GSCSP 模块降低了计算和网络结构的复杂性,但保持了足够的精度。图 5 (b) 显示了 VoV-GSCSP 的结构。值得注意的是,如果我们使用 VoV-GSCSP 代替 Neck 的 CSP,其中 CSP 层由标准卷积组成,FLOPs 将平均比后者减少 15.72%。

最后,需要灵活地使用3个模块,GSConv、GSbottleneck 和 VoV-GSCSP。

代码如下:

class GSBottleneck(nn.Module):
    # GS Bottleneck https://github.com/AlanLi1997/slim-neck-by-gsconv
    def __init__(self, c1, c2, k=3, s=1):
        super().__init__()
        c_ = c2 // 2
        # for lighting
        self.conv_lighting = nn.Sequential(
            GSConv(c1, c_, 1, 1),
            GSConv(c_, c2, 1, 1, act=False))
        # for receptive field
        self.conv = nn.Sequential(	# 没用到
            GSConv(c1, c_, 3, 1),
            GSConv(c_, c2, 3, 1, act=False))
        self.shortcut = Conv(c1, c2, 3, 1, act=False)
 
    def forward(self, x):
        return self.conv_lighting(x) + self.shortcut(x)
        
class VoVGSCSP(nn.Module):
    # VoV-GSCSP https://github.com/AlanLi1997/slim-neck-by-gsconv
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
        super().__init__()
        c_ = int(c2 * e)
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(2 * c_, c2, 1)
        self.m = nn.Sequential(*(GSBottleneck(c_, c_) for _ in range(n)))
    def forward(self, x):
        x1 = self.cv1(x)
        return self.cv2(torch.cat((self.m(x1), x1), dim=1))

Slim-Neck针对YOLO系列的设计

在这里插入图片描述


一些问题

  1. 为什么要放在Neck而不放在backbone,没看懂他的解释。

总结

本篇介绍了GSConv来代替SC,并在此基础上提出了仅在Neck使用(即Slim-Neck + 标准Backbone),因为在backbone中使用GSConv可能会导致计算复杂度过高,而在Neck部分此时的feature map已经变得细长(通道维度达到最大,宽高维度达到最小),不再需要进行变换。然后引出了另外的模块GSbottleneck 和 VoV-GSCSP在Neck使用。文章后面还提到了Slim-Neck针对YOLO系列的几种设计。

References

改进Yolov5 | 用 GSConv+Slim Neck 一步步把 Yolov5 提升到极致!!!
目标检测算法——YOLOv5/YOLOv7改进之GSConv+Slim Neck(优化成本)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA学习笔记12

1.键盘输入语句 1.1 介绍 ​ *在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。 1.2 步骤 ​ 1.导入该类的所在包,java.util.* ​ 2.创建该类对象(声明变量) ​ 3.调用里面的功能 import java.…

后端:跨端轻量JavaScript引擎的实现与探索

一、JavaScript 1.JavaScript语言 JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。 ECMAScript发展史: 时间版本说明1997年7月ES1.0 发布当年7月,ECMA262 标准出台1998年6月ES2.0 发布该版本修改完全符合…

2024年sCrypt编程马拉松即将开幕

BSV区块链的建设者们,你们在哪?2024年sCrypt编程马拉松即将拉开帷幕! 2024年3月16日至17日,我们将在旧金山市举办一场以比特币智能合约(即 sCrypt)和比特币通证(如Ordinals)相结合为…

快速搭建宠物医院服务小程序的步骤,无需编程经验

如果你是一家宠物医院或者宠物服务机构,想要拥有一款方便用户预约、查询信息的小程序,那么乔拓云网提供的轻应用小程序是你的不二选择。下面将为你详细介绍如何轻松打造宠物医院服务小程序。 1. 进入乔拓云网后台,点击【轻应用小程序】中的【…

天翼云登录参数JavaSrcipt逆向

天翼云登录参数 password 、comParam_curTime、comParam_seqCode、comParam_signature JavaSrcipt逆向 目标网站 https://m.ctyun.cn/wap/main/auth/login?redirect/my 目标参数 要逆向的有 password、comParam_curTime、comParam_seqCode、comParam_signature 四个参数 …

面试redis篇-08数据淘汰策略

原理 当Redis中的内存不够用时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略。 Redis支持8种不同策略来选择要删除的key: noeviction: 不淘汰任何key,但是内存满时不允许写入新数据,默认就是…

一款开源.NET WPF界面库介绍

一款开源.NET WPF界面库介绍 这是一个WPF版的Layui前端UI样式库,该控件库参考了Web版本的LayUI风格,利用该控件库可以完成现代化UI客户端程序,让你的客户端看起来更加简洁丰富又不失美感 如何使用 步骤一 : 添加LayUI.Wpf Nuget包; Inst…

vscode与vue/react环境配置

一、下载并安装VScode 安装VScode 官网下载 二、配置node.js环境 安装node.js 官网下载 会自动配置环境变量和安装npm包(npm的作用就是对Node.js依赖的包进行管理),此时可以执行 node -v 和 npm -v 分别查看node和npm的版本号: 配置系统变量 因为在执…

备战蓝桥杯Day17 - 链表

链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分:数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接,形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …

消息中间件篇之Kafka-高性能设计

一、高性能设计 消息分区:不受单台服务器的限制,可以不受限的处理更多的数据。 顺序读写:磁盘顺序读写,提升读写效率。 页缓存:把磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问。 零拷贝&a…

互联网加竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

C#,动态规划(DP)N皇后问题(N Queen Problem)的回溯(Backtracking)算法与源代码

1 N皇后问题(N Queen Problem) 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 2 回溯算法 回溯算法实际上一个类似枚…

水果FL Studio21.2.3.4004里的一个动态视觉插件Fruity Dance的教程

这是一篇关于水果(FL Studio)里的一个动态视觉插件Fruity Dance的教程。前部分较多地引用了FL的帮助文档,后部分结合了我操作的一些经验。 (文中这种颜色的字可略过不看,属于一些基础操作的解释补充) 准备材…

Qt6.8 GRPC功能使用(1)标准GRPC C++ exmple编译环境搭建

MSYS2 环境搭建 1. MSYS2 安装 https://www.msys2.org/#installation 网页中找到Installation, 提供下载, 本次下载版本是 [msys2-x86_64-20240113.exe](https://github.com/msys2/msys2-installer/releases/download/2024-01-13/msys2-x86_64-202401…

NXP实战笔记(十一):32K3xx基于RTD-SDK在S32DS上配置DFLASH、MemAcc、Fee

目录 1、概述 2、RTD-SDK配置之Cache_Ip 3、RTD-SDK配置之Mem_43_InFls 4、RTD-SDK配置之MemAcc 5、RTD-SDK配置之Fee 6、代码示例 1、概述 S32K3目前安装的RTD普遍使用的是R22-11版本的AUTOSAR规范,作为一直使用AUTOSAR4.2.2的程序员来讲,属实迭代…

备考2025年考研数学(三):2015-2024年考研数学真题练一练

今天,我们继续分享2015年-2024年的考研数学三填空题,随机做5道真题,并提供解析。看看正在备考2025年考研的你能做对几道。 考研数学和政治、英语一项,都是拉分大户,但是数学如果掌握了技巧,吃透了知识点的话…

跨境电商营销进化史:从传统广告到智能化策略的全面探析

随着全球化的不断推进和互联网技术的飞速发展,跨境电商在过去几年里取得了显著的发展。在这个竞争激烈的市场中,企业们纷纷调整营销策略以应对不断变化的消费者需求和市场趋势。本文Nox聚星将和大家探讨跨境电商营销策略的演变过程,从传统的推…

H6601 惠海 降压恒压芯片 支持12V24V36V48V60V72V80V 外围简单 动态负载良好 纹波小

降压恒压芯片的工作原理及其特性: 开关模式:降压恒压芯片通常使用开关模式电源供应(SMPS)技术,通过高速开关晶体管(通常是MOSFET)来控制电流的流动,从而将输入电压降低到所需的输出…

提速互联 智向未来 | 广和通AIoT模组及解决方案惊艳MWC 2024

2月26日,以“未来先行”为主题的世界移动通信大会2024(以下简称:MWC 2024)在巴塞罗那正式拉开帷幕。全球移动运营商、垂直行业客户、生态伙伴齐聚一堂,共同探讨5G-A、人工智能、NTN、可持续循环等全球科技趋势与创新技…

GaussDB SQL调优:选择合适的分布列

一、背景 GaussDB是华为公司倾力打造的自研企业级分布式关系型数据库,该产品具备企业级复杂事务混合负载能力,同时支持优异的分布式事务,同城跨AZ部署,数据0丢失,支持1000扩展能力,PB级海量存储等企业级数…