YOLOv5改进:Shuffle Attention注意力机制【注意力系列篇】(附详细的修改步骤,以及代码)

如果实验环境尚未搭建成功,可以参考这篇文章 ->【YOLOv5超详细环境搭建以及模型训练(GPU版本)】

文章链接为:http://t.csdnimg.cn/Ke0bb

---------------------------------------------------------------------------​

1.基本原理简介

《SA-Net: Shuffle Attention for Deep Convolutional Neural Networks》提出了一种新的注意力机制——Shuffle Attention(SA),旨在增强卷积神经网络(CNN)的特征表达能力,并且提高其在图像分类、目标检测等视觉任务中的表现。该方法通过创新的注意力机制设计,结合高效的通道和空间特征处理,为网络提供了更多的表征能力,同时保持了较低的计算开销。

Abstract:Attention mechanisms, which enable a neural network to accurately focus on all the relevant elements of the input, have become an essential component to improve the performance of deep neural networks. There are mainly two attention mechanisms widely used in computer vision studies, spatial attention and channel attention, which aim to capture the pixel-level pairwise relationship and channel dependency, respectively. Although fusing them together may achieve better performance than their individual implementations, it will inevitably increase the computational overhead. In this paper, we propose an efficient Shuffle Attention (SA) module to address this issue, which adopts Shuffle Units to combine two types of attention mechanisms effectively. Specifically, SA first groups channel dimensions into multiple sub-features before processing them in parallel. Then, for each sub-feature, SA utilizes a Shuffle Unit to depict feature dependencies in both spatial and channel dimensions. After that, all sub-features are aggregated and a “channel shuffle” operator is adopted to enable information communication between different sub-features. The proposed SA module is efficient yet effective, e.g., the parameters and computations of SA against the backbone ResNet50 are 300 vs. 25.56M and 2.76e-3 GFLOPs vs. 4.12 GFLOPs, respectively, and the performance boost is more than 1.34% in terms of Top-1 accuracy. Extensive experimental results on commonused benchmarks, including ImageNet-1k for classification, MS COCO for object detection, and instance segmentation, demonstrate that the proposed SA outperforms the current SOTA methods significantly by achieving higher accuracy while having lower model complexity.

摘要:注意机制使神经网络能够准确地聚焦于输入的所有相关元素,已成为提高深度神经网络性能的重要组成部分。在计算机视觉研究中,主要有两种广泛使用的注意机制,即空间注意力和通道注意力,它们分别旨在捕捉像素级的成对关系和通道依赖关系。虽然将它们合并可能比它们各自的实现方式效果更好,但这必然会增加计算开销。在本文中,我们提出了一种有效的Shuffle Attention(SA)模块来解决这个问题,该模块采用Shuffle Units有效地组合了两种类型的注意机制。具体而言,SA首先将通道维度分组为多个子特征,然后并行处理它们。然后,对于每个子特征,SA利用Shuffle Unit描述了空间和通道维度上的特征依赖关系。之后,所有子特征被聚合,并采用“通道洗牌”运算符以促进不同子特征之间的信息交流。所提出的SA模块既高效又有效,例如,与骨干ResNet50相比,SA的参数和计算分别为300对25.56M和2.76e-3 GFLOPs对4.12 GFLOPs,而性能提升在Top-1准确率方面超过了1.34%。对常用基准测试的广泛实验结果,包括ImageNet-1k用于分类,MS COCO用于目标检测和实例分割,表明所提出的SA在实现更高准确率的同时具有更低的模型复杂度方面显着优于当前的SOTA方法。

研究背景

卷积神经网络在计算机视觉领域表现出色,被广泛应用于图像分类、目标检测、语义分割等任务。然而,传统的卷积操作在处理不同区域的特征时,并没有区分出哪些特征更为重要,这导致了网络在对输入特征的提取和利用方面存在一定的局限性。为了弥补这一不足,注意力机制应运而生。注意力机制通过引入自适应的特征加权策略,使得网络能够动态调整对不同特征的关注程度,从而有效提高网络对输入数据的理解和表征能力。

现有的注意力机制,如SE-Net(Squeeze-and-Excitation Networks)和CBAM(Convolutional Block Attention Module),虽然在提升模型性能方面取得了显著的效果,但其设计通常伴随着较高的计算开销或复杂的模型结构。因此,如何在保证计算效率的同时,进一步增强注意力机制的特征表达能力,成为了研究的重点。

SA-Net的基本原理

SA-Net的核心创新在于提出了Shuffle Attention机制,该机制通过将打乱(shuffle)操作与通道和空间注意力机制相结合,能够更高效地提升CNN的特征提取能力。其工作原理可以分为以下几个部分:

1. 通道注意力机制

通道注意力机制是注意力模型的一个重要组成部分,它的作用是捕捉通道之间的依赖关系。在一个卷积层输出的特征图中,不同通道往往表示不同的特征或模式,而并非所有特征都对任务同等重要。通过计算每个通道的重要性权重,通道注意力机制能够动态调整这些特征的表达,从而增强对有用特征的关注,削弱无用或冗余的信息。

2. Shuffle操作

SA-Net的创新之处在于引入了“Shuffle”操作。该操作首先将特征通道分组,并在不同组之间打乱通道的排列顺序。打乱操作使得不同通道间的信息能够相互交互,这种信息交换可以进一步加强通道间的联系和信息整合。通过这种打乱和信息交换的方式,网络能够更有效地捕捉全局和局部的特征关系。

3. 空间注意力机制

除了通道注意力,SA-Net还结合了空间注意力机制。空间注意力的作用是通过计算特征图上不同位置的响应值,来确定图像中哪些位置对于当前任务更为重要。通过关注不同位置的特征,网络可以更好地理解图像中的关键区域和背景之间的关系,进一步增强模型的表征能力。

4. Shuffle Attention模块

SA-Net中的Shuffle Attention模块同时结合了通道注意力和空间注意力机制,形成了一个统一的注意力框架。具体而言,特征图首先通过通道打乱操作进行重组,然后应用通道注意力机制调整特征通道的权重,最后通过空间注意力机制对特征进行进一步优化。在这一过程中,网络能够自适应地调整特征的表达,从而在不同任务中获得更好的性能。

SA-Net的优势

与现有的注意力机制相比,SA-Net具有以下几个显著优势:

高效性:Shuffle Attention模块引入的打乱操作和通道与空间注意力的结合,虽然提升了网络的特征处理能力,但并没有显著增加模型的计算复杂度。相比于其他注意力机制,SA-Net在性能提升的同时,计算开销更低,非常适合在深度网络中应用。

轻量化设计:SA-Net的模块设计简单且高效,能够轻松地嵌入到现有的卷积神经网络中,无需复杂的结构调整。这种轻量化的设计保证了其在各种任务中的广泛应用。

性能提升:通过在多个数据集上进行实验,SA-Net在图像分类、目标检测等任务中均取得了显著的性能提升。尤其在深度网络中,Shuffle Attention能够有效增强网络的特征提取和表达能力,使其在处理复杂视觉任务时表现更加出色。

实验结果与应用

SA-Net在ImageNet等大型图像分类数据集上的实验结果显示,它能够在保持较低参数量和计算开销的情况下,实现显著的性能提升。此外,SA-Net在目标检测任务中的应用也取得了良好的效果,表明其注意力机制对网络的全局特征提取和局部细节处理均有很好的增强作用。

这一注意力机制的设计还可以推广到其他视觉任务,如图像分割、视频理解等。通过嵌入SA模块,深度学习模型能够在各类视觉任务中获得更强的表达能力。

结论

SA-Net通过引入Shuffle Attention机制,为卷积神经网络提供了一种高效且轻量化的注意力机制。其独特的打乱操作和通道、空间注意力的结合,既保证了特征之间的有效交互,又保持了计算开销的低廉。实验结果表明,SA-Net在多个视觉任务中都取得了显著的性能提升。该方法不仅为卷积神经网络的改进提供了新的思路,也为注意力机制在计算机视觉中的应用拓宽了研究方向。

根据下图,可以看出,与其他常见的注意力记机制,准确度更高,模型更加的轻量化

论文地址:https://arxiv.org/pdf/2102.00240.pdf

代码地址:https://github.com/wofmanaf/SA-Net

2.将SA模块加入到YOLOv5中

注意:SA 模块是一种即插即用的模块,可以在许多位置添加。不同的数据集可能需要在不同的位置添加 SA 模块,其效果也会有所不同。建议在不同位置进行多次实验以便比较效果。以下是我选择添加SA模块的位置,供大家参考,但不一定要完全按照这种方式添加。

2.1 方法一:在YOLOv5的主干网络(Backbone)中添加SA模块

2.1.1 步骤一

在【modules】目录下新建一个sa.py的文件,添加SA模块代码。代码获取链接:https://mbd.pub/o/bread/mbd-Zpuck5dv

最后在【moduels/_init_.py】文件里面导入SA模块。

2.1.2 步骤二

打开【moduels/yolo.py】文件,在文件的开头导入SA模块。

然后找到parse_model这个方法(可以通过搜索parse_model)。

最后在parse_model方法中找到for语句(for i, (f, n, m, args) in enumerate(d["backbone"] + d["head"])),在for语句中再添加一个elif语句,将SA模块添加进去。

elif m in {SA}:args = [ch[f],  ch[f]]

添加的位置截图如下:

2.1.3 步骤三

修改模型。在【models】目录下新建一个yolov5-sa.yaml文件网络结构配置文件。将SA模块添加到YOLOv5结构中(这里我将SA模块添加到主干网络的倒数第二层)。 代码获取链接:https://mbd.pub/o/bread/mbd-Zpuck5dv

2.1.4 训练过程

修改train.py文件训练模型,这里只修改YOLO模型对象,改为自己刚刚创建的文件,其余这里选择默认。

成功运行的网络结构截图如下:

开始训练模型的部分截图如下:

训练结果保存在【runs/tain】目录下。

注:如果训练过程出现如下错误,需要打开train.py文件,在scaler.scale(loss).backward()前添加torch.use_deterministic_algorithms(False)即可解决问题

错误提示:

2.2 方法二:在C3模块的残差结构中添加SA模块

2.2.1 步骤一

在【modules】目录下新建一个c3_sa.py的文件.将SA模块添加到C3模块的残差结构中。 代码获取链接:https://mbd.pub/o/bread/mbd-Zpuck5dv

然后在【moduels/_init_.py】文件里面导入Bottleneck_SA,C3_SA模块。

2.2.2 步骤二

打开【models/yolo.py】文件,在文件的开头导入C3_SA模块。

找到parse_model这个方法(可以通过搜索parse_model)。

然后在parse_model方法中找到for语句(for i, (f, n, m, args) in enumerate(d["backbone"] + d["head"])),在for语句中的两个位置添加C3_SA模块。

2.2.3 步骤三

修改模型。在【models】目录下新建一个yolov5-c3-sa.yaml文件网络结构配置文件。(这里我将主干中的C3模块替换为C3_SA模块,除此之外,也可以将Neck的C3模块替换为C3_SA模块)。 代码获取链接:https://mbd.pub/o/bread/mbd-Zpuck5dv

2.2.4 训练过程

在train.py文件中修改模型的配置文件路径,使用yolov5-c3-ca.yaml文件,然后运行train.py。

成功运行的网络结构截图如下:

开始训练模型的部分截图如下:

训练结果保存在【runs/train】"目录下。

3.完整的项目文件下载路径

我们提供完整的项目文件,你也可以直接下载到本地,然后打开项目,修改数据集配置文件【NEU-DET.yaml】的数据集路径即可训练模型。 完整代码获取链接:https://mbd.pub/o/bread/mbd-Zpuck5dv

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

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

相关文章

C++第五讲(1):STL--string--各个函数的使用方法

C第五讲:STL--string 1.STL简介2.string类2.1string类的常见构造2.1.1重点1: string()2.1.2重点2:string(const string& str)2.1.3使用3:string(const string& str, size_t pos, size_t len npos)…

svg图片怎么转成高清png?五款软件一键解决!

在这个视觉为王的时代,无论是设计师还是内容创作者,都渴望拥有清晰、高质量的图像来提升作品的吸引力。而SVG(可缩放矢量图形)以其无损放大、文件小巧的优势,在图标、图形设计中备受欢迎。但有时候,我们也需…

空间随心而变:气膜场馆的无限可能—轻空间

在气膜场馆内,空间的定义绝不仅限于传统的固定形式。无论是运动场、会议厅,还是展览馆,气膜场馆都能灵活应对各种需求,随时变换使用功能。这种灵活的空间配置为各类活动提供了更多可能性,让每个角落都能充分发挥其作用…

SpringMVC源码-SpringMVC源码请求执行流程及重点方法doDispatch讲解

一、开始请求 在浏览器访问http://localhost:8080/spring_mymvc/userlist这个接口,是个get请求。 FrameworkServlet类的service方法会被请求到: 调用路径如下: service:945, FrameworkServlet (org.springframework.web.servlet) service:764, HttpSer…

视频美颜SDK与直播美颜工具API的架构设计与实现

视频美颜SDK的出现,不仅大大提升了用户体验,还为开发者提供了实现实时美颜功能的技术支持。接下来,小编将与大家深入探讨视频美颜SDK与直播美颜工具API的架构设计与实现方案,帮助开发者更好地理解这一技术的核心原理。 一、视频美…

完美解决Idea中如何对Java Agent进行断点调试的方式

1、前言 在日常开发中,可能会存在写一个Java Agent到项目中去,Agent的实现可能是复杂的,有时候会出现attach到进程上后,发现没效果,也不知道怎么调试,只能通过打日志的方式实现,效率实在是太低…

开放式蓝牙耳机哪个品牌更靠谱?5款高性价比开放式耳机推荐

谈到开放式蓝牙耳机哪个品牌更靠谱,市场上有许多优秀的选择。以前也经常使用入耳式耳机,但总是会感觉耳机插在耳朵里不舒服,戴久了耳朵很疼,跑步的时候还总掉。还有在过马路的时候接电话、听音乐,几乎感知不到周围环境…

CHARLS数据库系列教程(4)--多模型效应分析、Per SD、P for trend及限制立方样条图绘制

CHARLS 是一项具备中国大陆 45 岁及以上人群代表性的追踪调查,旨在建设一个高质量的公共微观数据库,采集的信息涵盖社会经济状况和健康状况等多维度的信息,以满足老龄科学研究的需要。 为利用国际上最佳的数据采集方式,并确保研究…

TiDB 性能测试的几个优化点

作者: 数据源的TiDB学习之路 原文来源: https://tidb.net/blog/513a4eef 背景 前段时间参与了一个 TiDB 的性能测试,具体是在三台海光服务器(512G内存、128 core 分8个NUMA、4块3.5T SSD)搭建一个混合部署的 TiDB …

Arthas tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测)

文章目录 二、命令列表2.3 monitor/watch/trace/stack/tt 相关2.3.4 tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测)举例1:记录调用举例2:显示所…

系统集成项目管理工程师难度如何?

软考中级职称系统集成项目管理工程师是中级各专业资格中考试难度较小的,考试相对比较容易,通过率一般在20%左右,适合零基础考生或基础薄弱考生报考。但是考生还是需要认真进行备考,系统集成项目管理工程师综合知识考察的范围比较广…

【AI学习】DDPM 无条件去噪扩散概率模型实现(pytorch)

这里主要使用pytorch实现基本的无条件去噪扩散模型,理论上面的推导这里不重点介绍。 原文理论参考: 前向和反向过程示意图 前向过程和后向过程 扩散过程包括正向过程和反向过程。前向过程是基于噪声调度的预定马尔可夫链。噪声表是一组方差 &#xff0…

物理学基础精解【40】

文章目录 矢量积矢量积(又称叉积、外积)的几何意义一、面积表示二、垂直性三、方向性四、应用实例五、数学表达 矢量积(叉积)的坐标表示法矢量积的坐标表示法的几何意义矢量积的性质矢量积的应用 矢量积(又称叉积、外积…

OptiTrack与Xsens光、惯动捕中用于动画制作的尖端设备对比

随着动画、电影、游戏等数字内容行业的迅速发展,捕捉演员的动作并将其转化为虚拟角色的技术越来越受到重视。两种主要的动作捕捉技术——光学捕捉系统和惯性动作捕捉系统——代表了当前市场的最前沿。本文将对比两种技术的代表性设备:OptiTrack的光学动作…

服务器数据恢复—raid磁盘故障导致数据库文件损坏的数据恢复案例

服务器存储数据恢复环境&故障: 存储中有一组由3块SAS硬盘组建的raid。上层win server操作系统层面划分了3个分区,数据库存放在D分区,备份存放在E分区。 RAID中一块硬盘的指示灯亮红色,D分区无法识别;E分区可识别&a…

使用PHP获取商品描述API:解锁电商数据的金钥匙

在电子商务领域,获取商品的详细信息对于商家和消费者来说至关重要。taobao作为中国最大的在线购物平台之一,提供了丰富的API接口供开发者使用。其中,商品描述API允许开发者获取商品的详细描述,这对于提升用户体验和优化商品页面至…

How FAR ARE WE FROM AGI?(ICLR AGI Workshop 2024)概览

关注B站可以观看更多实战教学视频:hallo128的个人空间 How FAR ARE WE FROM AGI?官网 How FAR ARE WE FROM AGI?(ICLR AGI Workshop 2024) 该研讨会将于2024年5月11日在奥地利维也纳以混合模式举行,作为 ICLR 2024年会议的一部…

2024平价电容笔推荐!精选五大靠谱电容笔测评盘点!

现在电子设备已经成为我们生活、学习和工作中不可或缺的重要工具。而电容笔作为与电子设备紧密配合的配件,其重要性也日益凸显,为我们的数字操作体验带来极大的便利和提升。然而,市场上电容笔的品牌众多,价格、性能和品质参差不齐…

MES系统实现制造业生产自动化、智能化与透明化

万界星空科技MES系统通过集成硬件和软件,实现对生产过程的实时监控、数据采集、任务调度、资源分配、质量控制、文档管理等功能,旨在优化企业的生产流程,提高生产效率,降低成本,并确保产品质量。涵盖了离散制造、流程制…

诚实的人力资源招聘人员告诉你,为什么大多数求职者无法获得工作机会

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…