论文:MPViT : Multi-Path Vision Transformer for Dense Prediction
代码:代码
笔记参考:
ppt总结版
详细版
详细版2
针对任务:
密集的计算机视觉任务(例如对象检测和分割)需要有效的多尺度特征表示,以检测或分类具有不同尺寸的对象或区域。
在语义分割领域中,存在不同尺度的物体,同时对分割边缘的要求精确到了像素级。
VIT for dense predictions:
Vision Transformer(ViT)构建了一个简单的多阶段结构(即精细到粗糙),用于使用单尺度patch的多尺度表示。然而ViT的变体专注于降低自注意的二次复杂度,较少关注构建有效的多尺度表示。
MPVIT概述:
因此本文作者将重点放在了图像的多尺度多路径上,通过对图片不同尺度分块及其构成的多路径结构,提升了图像分割中Transformer的精确程度。
作用:
MPVit可以同时将图像分成多个尺度,结合精心设计的序列化模块(目的是将不同尺度的序列转化为相同长度的向量),构建了并行的多路径结构,实现了对图像不同尺度的同时利用。
过程:
通过使用 overlapping convolutional patch embedding将其拉平成为不同尺寸的token,在适当调整卷积的填充/步幅后产生具有相同序列长度的特征。同时嵌入多个大小的patch特征。
然后,将不同尺度的Token通过多条路径独立地输入Transformer encoders,并对生成的特征进行聚合,从而在同一特征级别上实现精细和粗糙的特征表示。
在特征聚合步骤中,引入了一个global-to-local feature interaction(GLI)过程,该过程将卷积局部特征与Transformer的全局特征连接起来,同时利用了卷积的局部连通性和Transformer的全局上下文。
首先对输入的图像做卷积提取特征,
而后主要分成了四个Transformer阶段,如图左侧一列所示,
中间一列是每个阶段中两个小块的展开分析图,
右侧一列则是对多路径模块中Transformer(包括局部卷积)以及全局信息模块的图解。
ViT使用单尺度的patch embedding和单路径transformer编码器
过程:
MPViT通过重叠卷积将相同大小的特征和不同大小的patch的同时嵌入。
将多尺度patch嵌入,通过重叠卷积将其拉平成为不同尺寸的token,在适当调整卷积的填充/步幅后产生具有相同序列长度的特征。
然后,来自不同尺度的token被通过多条路径独立并行送到Transformer编码器中,执行全局自我关注。
然后聚合生成的特征,从而在相同的特征级别上实现精细和粗略的特征表示。
目标是探索用于密集预测的强大骨干网络,因此构建了一个多级体系结构。
具体来说,构建了一个四阶段特征层次结构,用于生成不同尺度的特征图。
它们输出密集预测任务四个阶段中,作者在每个阶段对所提出的Multi-scale Patch Embedding(MS-PatchEmbed)和Multi-path Transformer(MP-Transformer)块进行堆叠。
由于多级体系结构具有更高分辨率的特点,因此它本质上需要更多的计算。
因此,由于其线性复杂性,我们对整个模型使用了包括Factorzed Self attention的Transformer(因子化多头自我注意)编码器。
本模块由两个3×3卷积组成,可以在不丢失显著信息的情况下对图片进行特征提取以及尺度的减小
输入图像大小为:H×W×3,
两层卷积:采用两个3×3的卷积,通道分别为C2/2,C2,stride为2,
输出图像:生成特征的大小为H/4×W/4×C2,其中C2为stage 2的通道大小。
说明:
1.每个卷积之后都是Batch Normalization 和一个Hardswish激活函数。
2.从stage 2到stage 5,在每个阶段对所提出的Multi-scale Patch Embedding(MS-PatchEmbed)和Multi-path Transformer(MP-Transformer)块进行堆叠。
多尺度Patch Embedding结构如下,对于输入特征图,使用不同大小的卷积核来得到不同尺度的特征信息(论文这么写的,但是源码看到卷积核都是3),为了减少参数,使用3x3的卷积核叠加来增加感受野达到5x5、7x7卷积核的感受野,同时使用深度可分离卷积来减少参数。
输入图像:
stage i 的输入X,通过一个k×k的2D卷积,s为stride,p为 padding。
输出的token map F的高度和宽度如下:
通过改变stride和padding来调整token的序列长度,即不同块尺寸可以具有相同尺寸的输出。
因此,我们构建了不同核尺寸的并行卷积块嵌入层,如序列长度相同但块尺寸可以为3×3,5×5,7×7
例如,如图1所示,可以生成相同序列长度,不同大小的vision token,patch大小分别为3×3,5×5,7×7。
实践:
接着,不同大小的token embedding features 分别输入到transformer encoder中。
原因:
Transformer中的self-attention可以捕获长期依赖关系(即全局上下文),但它很可能会忽略每个patch中的结构性信息和局部关系。
相反,cnn可以利用平移不变性中的局部连通性,使得CNN在对视觉对象进行分类时,对纹理有更强的依赖性,而不是形状。
因此,MPViT以一种互补的方式将CNN与Transformer结合起来。
组成:
下面的多路径Transformer和局部特征卷积,上面的Global-to-Local Feature Interaction。
在多路径的特征进行自注意力(局部卷积)计算以及全局上下文信息交互后,所有特征会做一个Concat经过激活函数后进入下一阶段。
Transformer可以关注到较远距离的相关性,但是卷积网络却能更好地对图像的局部上下文特征进行提取,因此作者同时加入了这两个互补的操作,实现了本部分。
原始transformer中attention的计算方式:
一个 query 给 n 个 key - value pair ,这个 query 会跟每个 key - value pair 做内积,会产生 n 个相似度值。传入 softmax 得到 n 个非负、求和为 1 的权重值。
output 中 value 的权重 = 查询 query 和对应的 key 的相似度
通常用内积实现,用来衡量每个key对每个query的影响大小
把 softmax 得到的权重值 与 value 矩阵 V 相乘 得到 attention 输出。
N、C分别表示 tokens数量和 embedding维度。
Factorized Attention Mechanism:
另一方面在计算原始的attention时可以明确解释attention是当前位置与其他位置的相似度,
但在factor attn的计算过程中并不是很好解释,而且丢失了内积过程。虽然FactorAttn不是对attn的直接近似,但是也是一种泛化的注意力机制有query,key和value
常规卷积操作
N_std = 4 × 3 × 3 × 3 = 108
DWconv-深度可分离卷积-Depthwise Separable Convolution
是由一个两部分卷积组成的一个网络。
主要是为了降低卷积运算参数量。
第一部分是depthwise conv ,分通道的一个卷积 就是每个卷积核对应input的每一个通道
第二部分是pointwise conv,它将第一部分各自独立的featuremap进行组合生成了新的
逐通道卷积
将不同的卷积核独立地应用在in_channels的每个通道
Depthwise Convolution的一个卷积核负责一个通道,一个通道只被一个卷积核卷积
一张5×5像素、三通道彩色输入图片(shape为5×5×3),
Depthwise Convolution首先经过第一次卷积运算,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。
所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5),如下图所示。
其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下:
N_depthwise = 3 × 3 × 3 = 27
Depthwise Convolution完成后的Feature map数量与输入层的通道数相同,无法扩展Feature map。
而且这种运算对输入层的每个通道独立进行卷积运算**,没有有效的利用不同通道在相同空间位置上的feature信息。**
(因为上面每个层的特征都分开 没有有效的利用相同空间位置上不同层的有效信息,所以有了第二部分)
因此需要Pointwise Convolution来将这些各自独立的Feature map进行组合生成新的Feature map
N_pointwise = 1 × 1 × 3 × 4 = 12
经过Pointwise Convolution之后,同样输出了4张Feature map,与常规卷积的输出维度相同
参数对比
回顾一下,常规卷积的参数个数为:
N_std = 4 × 3 × 3 × 3 = 108
Separable Convolution的参数由两部分相加得到:
N_depthwise = 3 × 3 × 3 = 27
N_pointwise = 1 × 1 × 3 × 4 = 12
N_separable = N_depthwise + N_pointwise = 39
相同的输入,同样是得到4张Feature map,Separable Convolution的参数个数是常规卷积的约1/3。
因此,在参数量相同的前提下,采用Separable Convolution的神经网络层数可以做的更深。
作用
将局部特征和全局特征聚合起来:
通过串联来执行
对输入特征做了一个Concat并进行了1×1卷积(H(·)是一个学习与特征交互的函数),该模块同时输入了存在远距离关注的Transformer以及提取局部上下文关系的卷积操作,因此可以认为就是对本阶段提取到的图像全局以及局部语义的特征融合,充分利用了图像的信息。
增加路径的数量需要减少通道C或层数L(即,transformer encoder的数量)。
作者通过减少C而不是L,从单路径(即CoaT-Lite baseline)扩展到triple-path。在消融研究中,验证了减少C比减少L获得更好的性能(见表5)。
由于stage2的特征分辨率较高,导致计算成本较高,作者在stage2中将triple-path模型的路径数设置为2。从stage3开始,三路径模型有3条路径。
triple-path模型在密集预测任务中表现出更好的性能。因此,建立了基于 triple-path结构的MPViT模型
参数设置:
使用upernet作为分割方法,并将ImageNet-1k预训练的MPViTs集成到supernet中。
接下来,为了公平比较,训练模型160k次迭代,批大小为16,使用AdamW[38]优化器,学习率为6e-5,权重衰减为0.01。
使用标准的单尺度协议报告性能。使用mmseg[11]库实现mpvit
结果:
与其他Swin-T、Focal-T和XCiT-S12/16相比,mpvits的性能(48.3%)更高,分别为+3.8%、+2.5%和+2.4%。有趣的是,mpvit也超过了更大的型号,如Swin-S/B, XCiT-S24/16, -M24/16, -S24/8和Focal-S。此外,mpvitb性能优于最近(和更大的)SOTA变压器Focal-B[67]。这些结果表明,MPViT的多尺度嵌入和多路径结构使其具有多样化的特征表示能力
上图给出了ADE20K分割任务上的性能对比,从中可以看到:
作者主要做出了一下几点贡献: