1、什么是swin transformer?
swin transformer 是一种基于 transformer 架构的计算机视觉模型,旨在解决传统 transformer 应用在图像处理时存在的计算成本高和效率低的问题。
2、CNN 与 transformer对比:
(1)基本工作原理:
- CNN:
- 通过卷积操作提取局部特征,主要依赖于卷积核在空间上滑动以提取图像的局部特征。
- CNN 具有平移不变性,即它可以在不同位置提取相同的局部特征,适合处理具有空间结构的输入(如图像)。
- CNN 的层次化设计(逐层提取特征)使其能够从低级别的边缘、纹理等特征到高级别的语义信息逐渐提取信息。
- transformer:
- transformer 使用自注意力机制(Self-Attention)来建模输入中不同位置之间的全局依赖关系。它能够直接捕捉输入的长距离依赖性,而不局限于局部特征。
- 在视觉任务中,Transformer 不需要像 CNN 那样通过卷积核逐步提取特征,而是通过自注意力直接处理全局信息,捕捉输入的整体关系。
(2)特征提取:
- CNN:
- CNN 通过局部卷积操作提取局部特征,逐层构建全局特征。非常擅长处理图像等有局部相关性的任务。
- 由于卷积核的局部性质,CNN 在捕捉长距离依赖性时表现不足,需要多层网络叠加才能逐渐获取全局信息。
- transformer:
- 能够通过自注意力机制直接捕捉输入的全局依赖性,无需逐层堆叠来获取长距离信息。
(3)处理高分辨率图像的能力:
- CNN:
- CNN 由于依赖局部卷积计算,处理高分辨率图像时相对高效,特别是通过池化操作(Pooling)可以快速降低图像分辨率,减少计算量。
- 然而,池化操作可能会导致信息丢失,特别是对于需要高精度细节的任务。
- transformer:
- transformer 的自注意力计算随着输入大小呈二次增长,导致处理高分辨率图像时的计算量和内存需求非常大。因此,在直接处理高分辨率图像时效率较低。
(4)参数:
- CNN:
- CNN 的卷积核在整个输入上共享参数,降低了模型的复杂度,同时也减少了需要学习的参数数量。这种共享机制使得 CNN 能够更有效地在有限数据下训练模型。
- CNN 通常在较小规模的数据集上也能表现良好.
- transformer:
- transformer 的自注意力机制中没有参数共享的概念。每一个输入位置(或每一层)都有自己独立的权重和注意力计算。虽然这增加了模型的表达能力,但也显著增加了模型的参数数量,因此需要更多的训练数据来避免过拟合。
- transformer 由于参数数量庞大,对训练数据的需求更高。
(5)并行化处理:
- CNN:
- 卷积操作本身可以并行化,但CNN在处理序列数据时需要逐层进行计算,某些情况下可能不如Transformer的并行效率高。
- transformer:
- 由于transformer的自注意力机制可以并行处理输入序列中的所有元素,它们在训练和推理过程中可以更高效地利用GPU和TPU等硬件资源。这种并行化能力使得transformer在处理长序列时特别高效。
(6)适用性:
- CNN:
- CNN 是专门为处理图像等空间数据设计的,因此在视觉任务(如图像分类、目标检测、语义分割等)中表现优异。但 CNN 的局限在于它不擅长处理非图像数据或其他需要长距离依赖性的任务。
- transformer:
- transformer 最早用于自然语言处理(NLP)任务,但由于其自注意力机制的通用性,它能够扩展到多种任务,包括图像、文本、音频、视频等领域。通过适当的架构调整,transformer 在视觉任务(如 Vision Transformer 和 Swin Transformer)中也开始展现强大的性能。
3、transformer到vision transformer(ViT)有什么主要改变,为什么要进行这些改变?这些改进的作用和效果。
输入变化:
ViT将图像切分为多个固定大小的Patch,并将这些图像块展平为一维向量后通过线性变换生成嵌入(类似于文本中的词嵌入),输入到transformer模型中进行处理。每个图像块表示一个序列元素(可以将整个图片理解为一句话,每个小patch相当于其中的一个单词)。可以用于各种计算机视觉任务,如图像分类、目标检测、语义分割等。
改变原因:传统 transformer 处理的是自然语言中的序列(如单词序列),图像数据是二维的像素矩阵,直接作为输入会导致高维度和计算复杂度。
作用和效果:这种方法将图像数据转化为可以被 transformer 处理的格式,并通过自注意力机制捕捉图像块之间的关系,使模型能够直接处理图像的全局信息。
4、vision transformer到swin transformer主要有什么改变,为什么要进行这些改变?这些改进的作用和效果。
局部窗口和滑动窗口自注意力机制:
swin transformer 引入了 局部窗口自注意力(Local Window Attention)机制,将自注意力的计算限制在固定大小的局部窗口内,而不是像 ViT 那样对整个图像块序列进行全局自注意力计算。此外,swin transformer 通过滑动窗口(Shifted Window)的方式实现窗口间的交互。
改变原因:ViT 的自注意力机制对所有图像块之间进行计算,当处理高分辨率图像时,计算复杂度随图像大小呈二次增长,导致效率低下。局部窗口自注意力减少了计算量,使得处理大尺寸图像更加高效。
作用和效果:局部窗口机制显著降低了计算复杂度,同时保持了模型对局部特征的精细捕捉能力。滑动窗口则确保不同窗口之间的信息传递,使得模型能够捕捉全局依赖关系。这样既能高效处理高分辨率图像,又能保留全局上下文信息。
5、swin transformer的框架
Swin Transformer 的架构采用了类似卷积神经网络(CNN)中的 金字塔结构,包括多个阶段,每个阶段的特征图分辨率逐步减小,通道数量逐步增加。架构的核心是 局部窗口自注意力机制(Local Window Attention),在每个局部窗口内计算自注意力,同时通过 滑动窗口(Shifted Window) 机制在不同窗口之间传递信息,确保全局上下文的捕捉。
主要模块:
- Patch Splitting(图像块划分):输入图像被划分为固定大小的图像块(patch),每个块被展平并通过线性变换转化为嵌入向量。
- Swin Transformer Blocks:每个阶段包含多个 Swin Transformer Block,核心是局部窗口自注意力机制,结合了标准的多头自注意力(Multi-Head Self-Attention, MSA)和前馈神经网络(Feed Forward Neural Network, FFN)。
- 分层设计:Swin Transformer 通过多层设计来处理不同尺度的特征,特征图的分辨率随着每个阶段逐步降低(例如,图像经过多次下采样)
(1)Patch Merging:
这里假设输入的特征矩阵高和宽都是4×4的,以2×2作为一个窗口,每个窗口中相同位置上的元素取出来,得到了4个2×2的矩阵,通过concat在深度上进行一个拼接,接下来进行一个layernorm和一个线性连接层,对我们每一个像素进行一个深度方向的线性映射,最终我们得到2个2×2的特征图,与我们输入的特征图相比,高和宽缩减为原来的一半,深度进行了翻倍。
(2)W-MSA:
根据之前学的transformer我们可以知道,每一个像素点都要和剩下的进行一次计算。以图为例,左边没划分窗口的要计算16×16=256次,右边就是4×4×4=64次,根据计算次数可以看出,划分窗口后计算量明显减少了。但是这个局部窗口的自注意力的缺点就是窗口之间无法进行信息交互,感受野变小了,只能看到局部的特征。
(3)MSA计算量和W-MSA计算量:
在进行计算量详细介绍之前,我们先回忆一下矩阵乘法的复杂度怎么算:
矩阵乘法的复杂度:
计算量公式推导:
根据上面介绍的矩阵乘法我们可以推出上图中标注的计算量,将所有的计算量加起来后(这里忽略了 忽略根号dk和softmax的计算量)得到我们的公式(1)。
W-MSA的长宽不再是H和W,我们将其设为M,将会得到×
个大小为M×M的小窗口,将公式中的H和W换为M后再乘上我们小窗口的个数就得到了W-MSA的计算量,也就是我们的公式(2)。
(4)shifted Window:
下面是上一个图的区域5和区域3的窗口,我们给它标数字。窗口中的每个像素我们都要给它计算q,k,v,每个像素的q要和所有的像素的k进行一个匹配。这里假设我们知道了0的q,我们对其他所有像素进行一个匹配,就得到了右边的α0,0到α0,15(圈出所有3区域的α)。"α" _0,0 到"α" _0,15 (圈出所有3区域的α)。根据注意力公式,还要除以根号dk,然后再进行一个softmax就可以得到每个像素的权重了,但是我们计算区域5的信息时,不希望引入区域3的信息,所以我们给区域3的所有数据加上一个-100,这时区域3就变成了一个很大的负数,这样经过softmax后区域3的所有数据都变成了0,最后再进行乘V的加权平均的操作。通过这个方法我们就将区域3和区域5分隔开了,两个区域就在这个窗口可以同时计算了。对其他像素就是同理。注意,在计算完后记得将数据恢复到原来的位置。
(5)Relative position bias:
6、swin transformer 的优点
(1)滑动窗口机制:通过滑动窗口的方式,模型不仅保留了局部信息,还能通过多层滑动窗口逐渐捕捉到全局上下文信息。滑动窗口使得模型不仅保留了局部信息的高效处理能力,同时能够通过多个窗口位置覆盖全局信息,增强模型的表现力。
(2)计算效率高:swin transformer 通过引入局部窗口自注意力机制,只在局部区域内进行自注意力计算,,避免了全局自注意力计算的高计算复杂度。这种方法使得swin transformer 可以处理高分辨率图像,而不会像传统的transformer那样面临计算量随图像尺寸指数级增长的问题。
(3)分层结构(Hierarchical Structure):swin transformer 采用分层设计,类似于卷积神经网络(CNN)的金字塔结构,通过多层逐步减少特征图的分辨率。这种结构使模型能够从低级局部特征到高级全局特征逐渐提取信息,提升模型的表现,并减少计算成本。
(4)适应性强:swin transformer 设计灵活,可以适应多种视觉任务。它不仅能用于图像分类,还可以扩展到目标检测、语义分割、目标跟踪等任务。
(5)更好地处理长距离依赖性:Transformer 本质上擅长建模全局关系。而 Swin Transformer 在此基础上,通过逐层窗口机制,可以高效地同时捕捉局部和全局的依赖性,提升图像理解的效果。
(6)较好的扩展性:swin transformer 通过模块化设计,可以轻松地扩展到更大规模的模型,也可以适应不同的视觉任务。此外,由于它基于 transformer 架构,模型可以与自然语言处理任务中的 transformer 架构共享一些特性,具有较强的通用性。
(7)在多种任务上的优越表现:在多项视觉任务上的表现都超过了以往的模型,如图像分类(在 ImageNet 上的优异表现)、目标检测(COCO 数据集)以及语义分割(ADE20K 数据集)。它结合了 Transformer 和 CNN 的优点,成为一种性能优越的视觉模型。