YOLOv11改进:SE注意力机制【注意力系列篇】(附详细的修改步骤,以及代码,与其他一些注意力机制相比,不仅准确度更高,而且模型更加轻量化。)

news/2024/11/8 15:43:51 标签: YOLO

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

文章链接为:YOLOv11超详细环境搭建以及模型训练(GPU版本)-CSDN博客

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

1.基本原理简介

Abstract:The central building block of convolutional neural networks (CNNs) is the convolution operator, which enables networks to construct informative features by fusing both spatial and channel-wise information within local receptive fields at each layer. A broad range of prior research has investigated the spatial component of this relationship, seeking to strengthen the representational power of a CNN by enhancing the quality of spatial encodings throughout its feature hierarchy. In this work, we focus instead on the channel relationship and propose a novel architectural unit, which we term the “Squeeze-and-Excitation” (SE) block, that adaptively recalibrates channel-wise feature responses by explicitly modelling interdependencies between channels. We show that these blocks can be stacked together to form SENet architectures that generalise extremely effectively across different datasets. We further demonstrate that SE blocks bring significant improvements in performance for existing state-of-the-art CNNs at slight additional computational cost. Squeeze-and-Excitation Networks formed the foundation of our ILSVRC 2017 classification submission which won first place and reduced the top-5 error to 2.251%, surpassing the winning entry of 2016 by a relative improvement of ∼25%.

摘要:卷积神经网络(CNNs)的核心构建模块是卷积算子,它使网络能够通过在每一层的局部感受野内融合空间信息和通道信息来构建信息丰富的特征。大量先前的研究已经调查了这种关系的空间组成部分,旨在通过增强整个特征层次结构中空间编码的质量来增强CNN的表征能力。在这项工作中,我们转而关注通道关系,并提出了一种新颖的架构单元,我们将其称为“挤压激励”(SE)块,它通过明确建模通道之间的相互依赖关系,自适应地重新校准通道特征响应。我们展示了这些块可以堆叠在一起形成SENets架构,能够极其有效地泛化到不同的数据集上。我们进一步证明了SE块在现有的最先进CNN中带来了显著的性能提升,而计算成本增加略微。挤压激励网络奠定了我们的ILSVRC 2017分类提交的基础,赢得了第一名,并将前5错误率降低到2.251%,相对改进约为25%,超过了2016年的获胜作品。

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

代码地址:https://github.com/hujie-frank/SENet

主要原理与思想

Squeeze-and-Excitation Networks(简称SE网络)是一种旨在提高卷积神经网络(CNN)性能的神经网络架构模块。它由Jie Hu等人在2018年提出,主要思想是通过在每个卷积层后引入一种“注意力机制”,使网络能够自适应地调整每个通道(channel)的权重,从而增强对有用特征的关注,抑制无用或冗余特征。

1.通道注意力机制:

在传统的卷积神经网络中,不同通道的特征图往往被视为同等重要,而SE网络引入了一种机制,允许网络根据输入图像自适应地调整每个通道的重要性。这意味着网络可以为更相关的通道分配更高的权重,从而增强这些通道的输出特征。

2.Squeeze操作:

对于每一个通道,通过全局平均池化(Global Average Pooling)将每个通道的空间特征压缩(squeeze)为一个标量。这一步骤可以捕捉全局的空间信息。

3.Excitation操作:

接下来,网络通过一个全连接层,使用非线性激活函数(如ReLU和Sigmoid)对这些标量进行建模。这一步骤的目的是生成一个针对每个通道的权重,这些权重会用于后续的特征重标定(recalibration)。

4.特征重标定(Feature Recalibration):

最后,网络将这些权重与原始的特征图进行按通道的加权乘法(逐通道乘法)。这意味着每个通道的特征图会根据它的权重进行缩放,增强了对关键特征的关注。

主要贡献

提高了网络的表达能力:通过引入SE模块,网络能够更好地区分有用和无用的特征,提高了网络的表达能力和分类精度。轻量级且通用性强:SE模块非常轻量,并且可以无缝集成到现有的各种卷积网络架构中,如ResNet、Inception等,几乎不增加计算量和参数量,但显著提高了网络性能。

实验效果

在ImageNet等多个图像分类任务中,加入SE模块的网络显著提升了分类精度,并且表现出良好的泛化能力。总体而言,Squeeze-and-Excitation Networks通过引入通道注意力机制,显著增强了卷积神经网络对重要特征的关注能力,是深度学习领域一个非常重要的创新。

2.将SE模块加入到YOLOv11中

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

YOLOv11的主干网络(Backbone)中添加SE模块

2.1 步骤一

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

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

2.2 步骤二

打开【ultralytics/nn/tasks.py】文件,在文件的开头导入SE模块。

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

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

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

添加的位置截图如下:

2.3 步骤三

修改模型。在【ultralytics/cfg/models/11】目录下新建一个yolov11-se.yaml网络结构配置文件。将SE模块添加到YOLOv11结构中(这里我将SE模块添加到主干网络的倒数第三层)。 代码获取链接:https://mbd.pub/o/bread/mbd-Z5WXmJ9x

2.4 训练过程

为了方便训练,可以在项目目录下新建一个名为train.py的文件,这样以后只需执行train.py就可以开始训练模型了。 代码获取链接:https://mbd.pub/o/bread/mbd-Z5WXmJ9x

(如果train.py文件已经存在,只需要修改其中模型和数据集的配置文件路径即可。我这里给出的train.py文件中只是列举了常用的超参数,如果需要修改其他的超参数,可以进入【ultralytics/cfg/default.yaml】文件修改即可。)

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

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

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

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

我们提供完整的项目文件,你也可以直接下载到本地,然后打开项目,修改数据集配置文件【NEU-DET.yaml】的数据集路径即可训练模型。 

完整项目代码获取链接:https://mbd.pub/o/bread/mbd-Z5WXmJ9x


http://www.niftyadmin.cn/n/5744085.html

相关文章

一篇Spring Boot 笔记

一、Spring Boot 简介 Spring Boot 是一个用于创建独立的、基于 Spring 的生产级应用程序的框架。它简化了 Spring 应用的初始搭建和开发过程,通过自动配置等功能,让开发者能够快速地构建应用,减少了大量的样板代码和复杂的配置。 二、核心特…

100种算法【Python版】第59篇——滤波算法之扩展卡尔曼滤波

本文目录 1 算法步骤2 算法示例2.1 示例描述2.2 python代码3 算法应用:机器人位姿估计扩展卡尔曼滤波(EKF)是一种处理非线性系统的状态估计算法。它通过线性化非线性系统来实现类似于线性卡尔曼滤波的效果。 1 算法步骤 (1)初始化 初始状态: x ^ 0 ∣ 0 \hat{x}_{0|0}

《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析

本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 我们定义一颗树的复杂度 Ω Ω Ω,它由两部分组成: 叶子结点的数量;叶子结点权重向量的 L 2 L2 L2范数; 公式(…

代码随想录之字符串刷题总结

目录 1.反转字符串 2.反转字符串II 3.替换数字 4.翻转字符串里面的单词 5.右旋&&左旋字符串 1.反转字符串 题目描述: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外…

十五:java web(7)-- Spring Boot

目录 1. Spring Boot 简介 1.1 简介 1.2 Spring Boot 的特点 1.3 Spring Boot 和 Spring 的关系 2. Spring Boot 快速入门 2.1 创建第一个 Spring Boot 项目 3. Spring Boot 配置管理 3.1 application.properties 和 application.yml 配置 这两种都可以 好像现在更推荐…

计算机网络——TCP篇

TCP篇 基本认知 TCP和UDP的区别? TCP 和 UDP 可以使用同一个端口吗? 可以的 传输层中 TCP 和 UDP在内核中是两个完全独立的软件模块。可以根据协议字段来选择不同的模块来处理。 TCP 连接建立 TCP 三次握手过程是怎样的? 一次握手:客户端发送带有 …

VMware 虚拟机使用教程及 Kali Linux 安装指南

VMware 虚拟机使用教程及 Kali Linux 安装指南 在现代计算机科学与网络安全领域,虚拟化技术的应用越来越广泛。VMware 是一款功能强大的虚拟化软件,可以帮助用户在同一台物理机上运行多个操作系统。本文将详细介绍如何使用 VMware 虚拟机,并…

R包下载太慢安装中止的解决策略-R语言003

在使用R语言的过程中,经常会遇到因R包下载速度太慢而导致安装失败或中断的情况。几乎每个使用R的生物信息学研究人员都体会过这种困扰!这主要是由于网络环境和服务器位置的原因,使得R包下载速度极为缓慢,进而影响了正常的研究工作…