Slim-Neck by GSConv

paper:Slim-neck by GSConv: A better design paradigm of detector architectures for autonomous vehicles

official implementation:https://github.com/alanli1997/slim-neck-by-gsconv

背景

目标检测是计算机视觉中一个重要的下游任务。对于车载边缘计算平台,一个较大的模型难以实现实时检测的要求。大量的深度可分离卷积(depth-wise separable convolution, DSC)层建立轻量级模型又不能达到足够的精度。而且DSC的缺陷也很明显:输入图像的通道信息在计算过程中被分离开来。如1(a)(b)分别展示了标准卷积(SC, standard convolution)和DSC的计算过程。这一缺陷导致DSC的特征提取和融合能力比SC要低得多。

实际上,许多轻量模型都提出了一些方法来缓解DSC的固有缺陷:MobileNets使用大量的1x1卷积来融合独立计算的通道信息;ShuffleNets使用“channel shuffle”操作进行通道信息的交互;GhostNets使用减半的SC来保留通道之间的信息交互。但1x1卷积占用了更多的计算资源,使用channel shuffle的效果仍然不如SC,而GhostNet或多或少的又回到了SC的道路上。

许多轻量网络都使用类似的思想来设计基本架构:从网络的开始到结束只使用DSC。但DSC的缺陷在backbone中被放大了,无论是用于分类还是检测。

本文的创新点

  • 本文提出了一种新的轻量级卷积方法,即GSConv。该方法使卷积计算的输出尽可能接近SC,并降低了计算成本。
  • 本文为自动驾驶的检测架构提供了一个设计范式,即标准backbone和slim-neck。
  • 本文验证了各种广泛使用的trick在GSConv-Slim-Neck Detector上的有效性,为该领域的研究提供了参考。

方法介绍

GSConv

作者认为标准卷积SC和深度可分离卷积DSC可以一起使用。仅通过shuffle深度可分离卷积的输出通道得到的特征图仍然是"depth-wise separated",为了使DSC的输出尽可能接近SC,作者提出了一种新的方法GSConv,它是一种将SC、DSC、shuffle混合到一起的卷积。如图2所示,我们通过shuffle操作将SC得到的信息permeate到DSC生成信息的每个部分中。shuffle是一种统一的混合策略。这种方法将来自SC的信息完全混合到DSC的输出中,通过均匀地交换不同通道上的局部特征信息,而无需附加操作。

图3展示了SC、DSC和GSConv的可视化结果,可以看出GSConv的特征图明显更类似于SC,而不是DSC。

 

在轻量级模型上,我们只使用GSConv层代替SC层就显著提高了精度;在其他模型中,当我们在backbone中使用SC并在neck中使用GSConv时,模型的精度非常接近原模型;如果加上一些trick,精度和速度都超过了原模型。采用GSConv的slim-neck最大限度地减少了DSC缺陷对模型的负面影响,并有效地利用了DSC的好处。

Why GSConv

在CNN中,输入图片总是在backbone中经历类似的转换过程:空间信息一步一步的转换到通道,每次空间维度的压缩(宽度和高度)和通道维度的扩展都会导致语义信息的部分丢失。通道密集channel-dense的卷积计算最大限度的保留了通道之间的隐藏连接,而通道稀疏channel-sparse的卷积完全切断了这些连接。GSConv以较低的时间复杂度尽可能的保留这些连接。通常,卷积的时间复杂度用FLOPs来表示,则SC(channle-dense convolution)、DSC(channel-sparse convolution)和GSConv的时间复杂度表示如下 

其中 \(W\) 是输出特征图的宽度,\(H\) 是输出特征图的高度,\(K_{1}\cdot K_{2}\) 是卷积核大小,\(C_{1}\) 是每个卷积核的通道数也是输入特征图的通道数,\(C_{2}\) 是输出特征图的通道数。实验中的表3展示了5种不同卷积block对模型性能的贡献。

GSConv的优点对轻量级检测模型更为明显,这得益于通过增加DSC和shuffle而增强的非线性表达能力。但如果在模型的各个阶段都使用GSConv,网络会变得更深,加剧对data flow的阻力并显著增加推理时间。当特征图到neck部分时,它们已经变得足够细了(通道达到最大,宽度和深度达到最小),转换也变得适中。因此更好的选择是只在neck部分使用GSConv(slim-neck + standard backbone)。在这个阶段使用GSConv处理拼接的特征图正合适:冗余的重复信息更少也不需要再压缩,注意力模块在这里也效果更好,例如SPP和CA。

The Slim-neck

作者研究了提高CNN学习能力的一些方法如DenseNet、VoVNet、CSPNet,然后根据这些方法的理论设计了slim-neck的结构。作者设计slim neck来减少计算复杂度和推理时间同时保持精度。GSConv完成了降低计算复杂度的任务,而减少推理时间和保持精度的任务需要新的模型。

The element modules of the slim-neck

GSConv的计算成本大约是SC的50%,但对模型学习能力的贡献与后者相当。作者在GSConv的基础上提出了GS bottleneck,如图4(a)所示。然后又使用one-shot aggregation(就是VoVNet,具体介绍见VoVNet(CVPR workshop 2019)原理与代码解析-CSDN博客)方法设计了cross stage partial network(GSCSP)模块,VoV-GSCSP。图4(b),(c),(d)展示了VoV-GSCSP的三种设计方案。其中(b)简单直接推理速度快,(c)(d)的特征重用率更高。

The slim-neck for the YOLO family

YOLO系列由于其高效的检测能力在工业中得到了广泛的应用。作者使用slim-neck来替换Scaled-YOLOv4l和YOLOv5l中的neck,改造后的neck和原始neck部分结构比较如下 

 

实验结果

作者在PASCAL VOC 2007+12数据集上测试了用五种不同卷积构建的YOLOv5n模型,结果如表3所示,GSConv取得了最好的结果。 

表5展示了图4中三种不同VoV-GSCSP结构的效果,可以看到,VoV-GSCSP1的性能最好且延迟最低。 

表6展示了YOLOv5n中使用不同注意力模块的实验结果。Part I中的所有模型使用slim-neck + slim-backbone的结构,Part II中的模型只使用slim-neck。作者发现使用不同的注意力模块对参数量和推理时间的影响差异不大,但对精度的影响是显著的。其中CA*3+SPPF*1在所有情况下就取得了最高的精度(关于CA的介绍见Coordinate Attention(CVPR 2021)-CSDN博客)。 此外当推理时间接近时,slim-neck的精度要远好于slim-backbone-neck结构。

代码

这里实现非常简单,就不作解释了。

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, 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 // 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)

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE4_AI_行为树_行为树快速入门指南

声明:学习笔记。 在 行为树快速入门指南 中,你将学会如何创建一个敌方AI,该AI看到玩家后会做出反应并展开追逐。当玩家离开视线后,AI将在几秒钟后(这可根据你的需求进行调整)放弃追逐,并在场景中…

git的实际运用

1. SSH配置和Github仓库克隆 注意博主在这里演示的SSH密钥生成方式,下面追加的五行不成功时可手动到.ssh下的config文件中添加即可 $ tail -5 config Host github.comHostName github.comPreferredAuthentications publickeyIdentityFile ~/.ssh/test 演示 2. 关联…

[AIGC] Spring Boot中的切面编程和实例演示

切面编程(Aspect Oriented Programming,AOP)是Spring框架的关键功能之一。通过AOP,我们可以将代码下沉到多个模块中,有助于解决业务逻辑和非业务逻辑耦合的问题。本文将详细介绍Spring Boot中的切面编程,并…

流程控制 JAVA语言基础

任何简单或复杂的算法都可以由三种基本结构组成:顺序结构,选择结构,循环结构。 顺序结构 比较一般的结构,程序从上到下执行。 选择结构 我们从最简单的单路选择开始,符合条件的进入语句序列,不符合条件的…

基于Java公司配件库存管理系统设计与实现【附项目源码】分享

基于Java公司配件库存管理系统设计与实现: 源码地址:https://download.csdn.net/download/weixin_43894652/88842718 基于Java的公司配件库存管理系统设计与实现需求文档 一、项目背景和目标 随着公司业务的不断拓展,配件库存管理逐渐成为…

旭日x3派部署自己训练的模型(安全帽识别、视频流推理、yolov5-6.2)

旭日x3派部署自己训练的模型(安全帽识别、视频流推理、yolov5-6.2)windows,框架pytorch,python3.7 效果模型训练模型转换1、pt模型文件转onnx2、检查onnx模型3、准备校准数据4、onnx转bin 上板视频流推理1、图片推理2、视频流推理…

ArrayBlockingQueue与LinkedBlockingQueue底层原理

ArrayBlockingQueue与LinkedBlockingQueue底层原理 在线程池中,等待队列采用ArrayBlockingQueue或者LinkedBlockingDeque,那他们是怎么实现存放线程、阻塞、取出的呢? 一、ArrayBlockingQueue底层原理 1.1 简介 ArrayBlockingQueue是一个阻塞…

centos7 install rocketmq 宿主机快速搭建RocketMQ单机开发环境

为什么采用宿主机而不采用 Docker 方式快速搭建 在搭建 RocketMQ 测试环境时,我们可以选择在宿主机上直接安装和配置,也可以使用 Docker 容器来快速搭建。然而,为什么我们选择了在宿主机上安装而不是使用 Docker 方式呢? 调整配置…

电池的性能指标

1 电池基本概念 电池是通过电化学反应将化学能转换为电能的设备。根据是否可反复充电使用,可分为干电池和蓄电池两类。 电池中涉及电化学反应的部分为电极和电解质,电化学反应发生在电极和电解质接触的表面,电解质仅负责协助带电粒子的移动…

腾讯云服务器入站规则端口开放使用指南(CentOS系统)

第一步:开放安全组入站规则 来源处0.0.0.0/0是对IPv4开发,::/0是对IPv6开放; 协议端口按照提示填写即可。云服务器防火墙开放 第三步:本地防火墙开放 sudo firewall-cmd --zonepublic --add-port你的端口号/tcp --perma…

瑞典斯凯孚SKF激光对中仪维修TKSA40/60

SKF对中仪维修型号包括:TKSA40、TKSA20、TKSA31、TKSA41、TKSA51、TKSA71等 斯凯孚SKF激光对中仪维修产品技术参数及注意事项: 该设备有两个无线测量单元、大尺寸测位传感器和更大功率的激光器,即使在严苛的条件下也能实现测量。 显示器单元…

显著性检验P值...

显著性检验&#xff1a;P值和置信度_显著性p<0.05,p<0.01,p<0.001-CSDN博客 看论文里面一般在结果后面都会加上 虽然学过概率统计&#xff0c;但是一直不懂在结果这里加上这个代表什么含义&#xff0c;以及如何计算&#xff0c;参考上面链接进行学习。 P值指的是比较…

蓝桥杯刷题|03入门真题

目录 [蓝桥杯 2020 省 B1] 整除序列 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码及思路 [蓝桥杯 2020 省 AB3] 日期识别 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码及思路 [蓝桥杯 2019 省 B] 特别数的和 题目描述 输入格式 输出格…

Web本体语言OWL

语义网&#xff08;Semantic Web&#xff09;&#xff1a; 语义网是万维网联盟&#xff08;W3C&#xff09;提出的一种愿景&#xff0c;旨在增强现有Web的表达能力和智能处理能力&#xff0c;通过标准化的技术手段赋予网络数据更加精确和可计算的语义&#xff0c;使得机器能够…

分布式系统常见负载均衡实现模式

分布式系统常见负载均衡实现模式 1. 4层负载均衡1.1. 负载均衡的常见需求1.2. 负载均衡的实现模式1.2.1 DR模式1.2.2 TUN模式1.2.3 NAT模式1.2.4 FULLNAT模式1.2.5 4种模式的差异 1.3. 负载均衡的均衡算法1.3.1 静态负载均衡1.3.2 轮询法1.3.3 加权循环法1.3.4 IP 哈希法1.3.5 …

数式Oinone应邀参加国有企业数字化优秀案例分享会,现场演讲引发热议

活动背景 为了贯彻落实党的二十大精神,加快中国数字化发展的步伐,以及推动国有资本和国有企业的高质量发展,广东省首席信息官协会于3月14日举办了“第七期国有企业数字化优秀案例分享会”。 此次会议吸引了广深两地:广东建科院、广州白云山中一药业有限公司、越秀交通、中国能…

腾讯云4核8G服务器支持多少人在线?CPU性能如何?

腾讯云轻量4核8G12M服务器配置446元一年&#xff0c;646元12个月&#xff0c;腾讯云轻量应用服务器具有100%CPU性能&#xff0c;系统盘为180GB SSD盘&#xff0c;12M带宽下载速度1536KB/秒&#xff0c;月流量2000GB&#xff0c;折合每天66.6GB流量&#xff0c;超出月流量包的流…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Progress)

进度条组件&#xff0c;用于显示内容加载或操作处理等进度。 说明&#xff1a; 该组件从API version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Progress(options: ProgressOptions<Type>) 创建进度组件&a…

操作多级(一、二、三级)指针才是我们的该有的姿态~

Hello&#xff0c;很有缘在这篇文章上我们相遇了&#xff0c;那么我就用题目巩固我们多级指针的知识&#xff0c;当然这里的题目是比较有点难度的&#xff0c;我们需要有点基础呀&#xff0c;如果你能轻松理解题目那说明你对指针的了解已经很有基础了呢&#xff0c;那废话不多说…

this是什么?为什么要改变this?怎么改变 this 指向?

目录 this 是什么&#xff1f; 箭头函数中的 this 为什么要改变 this 指向&#xff1f; 改变 this 指向的三种方法 call(无数个参数) apply(两个参数) bind(无数个参数) this 是什么&#xff1f; 在对象方法中&#xff0c;this 指的是所有者对象&#xff08;方法的拥有者…
最新文章