一、本文介绍
本文记录的是基于SwinTransformer的YOLOv11目标检测改进方法研究。本文利用SwinTransformer
替换YOLOv11
的骨干网络,Swin Transformer
的作用在于同时包含层次化特征表示和基于移位窗口的自注意力机制,克服了常见 Transformer
模型在视觉任务中面临的尺度差异和分辨率差异问题。本文将其应用到v11
中,使其在保持推理高效的同时,具备大模型的特点。
专栏目录:YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
专栏地址:YOLOv11改进专栏——以发表论文的角度,快速准确的找到有效涨点的创新点!
二、Swin Transformer模型轻量化设计
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
2.1 出发点
- 从语言到视觉的迁移挑战
- 尺度差异:语言Transformer以单词为基本处理单元,而视觉元素的尺度变化很大,如在目标检测中,不同物体大小不一。现有基于Transformer的模型中,token都是固定尺度,不适合视觉应用。
- 分辨率差异:图像像素分辨率远高于文本中的单词,对于语义分割等需要在像素级别进行密集预测的视觉任务,Transformer的自注意力计算复杂度与图像大小呈二次方关系,处理高分辨率图像会面临计算困难。
2.2 原理
2.2.1 层次化Transformer
- 通过从小尺寸的图像块开始,逐步在更深的
Transformer
层中合并相邻的块,构建出层次化的特征表示。例如,从最初的$4×4$大小的图像块开始,随着网络层数增加,通过合并相邻块来减少token
数量,同时改变特征维度,形成不同分辨率的特征图。
2.2.2 基于移位窗口的自注意力机制
- 局部窗口内的自注意力计算:为了提高效率,在不重叠的局部窗口内计算自注意力。假设每个窗口包含$M×M$个图像块,当$M$固定时,计算复杂度与图像块数量呈线性关系,而传统的全局自注意力计算复杂度是二次方的。
- 移位窗口分区:在连续的自注意力层之间采用移位窗口分区方法。第一个模块使用常规窗口分区策略,下一个模块的窗口配置相对于前一层进行移位。这种方法引入了跨窗口的连接,同时保持了不重叠窗口计算的高效性。
- 相对位置偏差:在计算自注意力时,引入相对位置偏差$B$,用于衡量每个头在计算相似度时的相对位置关系。这有助于模型更好地学习视觉元素之间的位置关系,提高模型性能。
2.3 结构
2.3.1 整体架构
- 图像块划分模块:首先将输入的RGB图像通过图像块划分模块划分为不重叠的图像块,每个图像块的特征是原始像素RGB值的拼接。例如,采用$4×4$的图像块大小,每个图像块的特征维度为$4×4×3 = 48$。
- 线性嵌入层:对原始值特征应用线性嵌入层,将其投影到任意维度$C$。
- Transformer块:包含多个带有改进自注意力计算的Transformer块(Swin Transformer块),这些块保持token数量不变,与线性嵌入层一起构成“Stage 1”。
- 层次化结构构建:随着网络加深,通过图像块合并层减少token数量,构建层次化表示。例如,第一个图像块合并层将每组$2×2$相邻图像块的特征进行拼接,并应用线性层,输出维度设置为$2C$,然后再应用Swin Transformer块进行特征变换,形成不同分辨率的阶段,如“Stage 2”“Stage 3”“Stage 4”等。
2.3.2 Swin Transformer块
- 由基于移位窗口的多头自注意力(MSA)模块、带有GELU非线性的2层多层感知机(MLP)组成,在每个MSA模块和MLP之前应用层归一化(LN)层,并在每个模块之后应用残差连接。
2.4 优势
- 计算效率高
- 基于移位窗口的自注意力机制使得计算复杂度与图像大小呈线性关系,相比传统的全局自注意力机制或一些基于滑动窗口的方法,在处理高分辨率图像时计算效率更高。
- 层次化特征表示灵活
- 能够构建不同分辨率的层次化特征图,适合多种视觉任务。例如,在图像分类、目标检测和语义分割等任务中,可以方便地利用这些特征图进行不同尺度的信息提取和处理。
- 性能优越
- 在多个视觉任务上取得了优异的性能,如在ImageNet - 1K图像分类任务中达到了较高的准确率,在COCO目标检测和ADE20K语义分割任务上超越了之前的 state - of - the - art方法。具体来说,在COCO测试集上,其box AP和mask AP分别超越之前的最佳结果$+2.7$和$+2.6$;在ADE20K验证集上,mIoU超越之前的最佳结果$+3.2$。
论文:https://arxiv.org/pdf/2103.14030.pdf
源码:https://github.com/microsoft/Swin-Transformer
三、实现代码及YOLOv11修改步骤
模块完整介绍、个人总结、实现代码、模块改进、二次创新以及各模型添加步骤参考如下地址: