如果实验环境尚未搭建成功,可以参考这篇文章 ->【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