【深度学习】语义分割:论文阅读:(CVPR 2022) MPViT(CNN+Transformer):用于密集预测的多路径视觉...
时间:2023-05-08 13:07:00
目录标题写在这里
- 0详情
- 1摘要
- 2 主要工作
- 3 网络结构
-
- 3.1 Conv-stem
- 3.2 Multi-Scale Patch Embedding
- 3.3 Multi-path Transformer
-
- 3.3.1 多路径Transformer以及局部特征
-
- CoaT自注意因素分解
- 卷积可分离深度
- 3.3.2Global-to-Local Feature Interaction
- 4 实验- Semantic segmentation
- 5总结
0详情
论文:MPViT : Multi-Path Vision Transformer for Dense Prediction
代码:代码
笔记参考:
ppt总结版
详细版
详细版2
1摘要
针对任务:
密集的计算机视觉任务(如对象检测和分割)表示需要有效的多尺度特征,对不同尺寸的对象或区域进行检测或分类。
在语义分割领域中,存在不同尺度的物体,同时对分割边缘的要求精确到了像素级。
VIT for dense predictions:
Vision Transformer(ViT)单尺度构建了一个简单的多阶段结构(即精细到粗糙)patch多尺度表示ViT变体注重降低自注的二次复杂性,少注重构建有效的多尺度表示。
MPVIT概述:
- 与现有不同Transformer视角,探索多尺度path embedding与multi-path结构,提出了Multi-path Vision Transformer(MPViT)。
因此,本文将重点放在图像的多尺度、多路径上多路径结构由不同尺度的图片分块及其组成,提升了图像分割中Transformer精度。
作用:
MPVit结合精心设计的序列化模块,图像可以同时分为多个尺度(目的是将不同尺度的序列转换为相同长度的向量),构建并行多路径结构,同时利用不同尺度的图像。
过程:
-
通过使用 overlapping convolutional patch embedding将其拉平成为不同尺寸的token,在适当调整卷积的填充/步幅后,具有相同序列长度的特征。同时,嵌入多个尺寸patch特征。
-
然后,不同尺度的Token独立输入多条路径Transformer encoders,聚合生成的特征,从而在同一特征水平上实现精细粗糙的特征表示。
-
在特征聚合在步骤中,介绍了一个global-to-local feature interaction(GLI)过程,过程局部局部特征与Transformer连接整体特征,利用卷积的局部连通性Transformer全局上下文。
2 主要工作
- 提出一有多路径结构多尺度嵌入法,用于表示密集预测任务的精细和粗糙特征。
- 介绍了全局到本地特征交互(GLI),同时利用卷积的局部连通性和Transformer上下文表示特征。
- 性能优于最先进的vit,参数和操作次数较少。
3 网络结构
首先,制作输入图像提取卷积特征,
然后主要分为四个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.1 Conv-stem
本模块由两个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)堆砌块。
3.2 Multi-Scale Patch Embedding
多尺度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。
实践:
- 由于堆叠同尺寸卷积可以提升感受野且具有更少的参数量,
选择两个连续3×3卷积层构建5×5感受野,用三个3×3卷积构建7×7感受野 - 对于triple-path使用三个连续的3个结构×三卷积,通道大小为C’,padding为1,步幅为s,在降低空间分辨率时,s为2,否则为1。
因此,给定conv-stem的输出X,通过MS-PatchEmbed可以得到同样大小的H/s x C/s x C的特征
说明: - 模型参数和算开销,采用3×3深度可分离卷积,包括3×3深度卷积和1×1点卷积。
- 每个卷积之后都是Batch Normalization 和一个Hardswish激活函数。
接着,不同大小的token embedding features 分别输入到transformer encoder中。
3.3 Multi-path Transformer
原因:
Transformer中的self-attention可以捕获长期依赖关系(即全局上下文),但它很可能会忽略每个patch中的结构性信息和局部关系。
相反,cnn可以利用平移不变性中的局部连通性,使得CNN在对视觉对象进行分类时,对纹理有更强的依赖性,而不是形状。
因此,MPViT以一种互补的方式将CNN与Transformer结合起来。
组成:
下面的多路径Transformer和局部特征卷积,上面的Global-to-Local Feature Interaction。
在多路径的特征进行自注意力(局部卷积)计算以及全局上下文信息交互后,所有特征会做一个Concat经过激活函数后进入下一阶段。
3.3.1 多路径Transformer和局部特征卷积
Transformer可以关注到较远距离的相关性,但是卷积网络却能更好地对图像的局部上下文特征进行提取,因此作者同时加入了这两个互补的操作,实现了本部分。
- Transformer
由于每个图像块内作者都使用了自注意力,并且存在多个路径,因此为了减小计算压力,作者使用了CoaT中提出的有效的因素分解自注意(将复杂度降低为线性):
- CNN
为了表示局部特征 L,采用了一个 depthwise residual bottleneck block,包括1×1卷积、3×3深度卷积和1×1卷积和残差连接。
在三个Transformer模块的左侧存在一个卷积操作,其实就是通过卷积的局部性,将图像的局部上下文引入模型中,多了这些上下文信息可以弥补Transformer对于局部语义理解的不足。
CoaT的因素分解自注意
原始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的过程中,空间复杂度是O(NN), 时间复杂度是O(NN*C),
- 为了降低复杂度,类似于LambdaNet中的做法(以恒等函数和softmax的注意力分解机制:),将attention的方法改为如下形式
- 通过使用2个函数对其进行分解,并一起计算第2个矩阵乘法(key和value)来近似softmax attention map:
- 为了归一化效果将比例因子 根号下c分之一添加回去,带来了更好的性能。
首先空间复杂度变为O(NC), 时间复杂度变为O(NCC),
注意这里计算量减少的原因:
MS Patch Embedding输出的特征图分辨率较高,所以N远大于C。因为N>>C,所以复杂度都降为原来的C/N倍。
另一方面在计算原始的attention时可以明确解释attention是当前位置与其他位置的相似度,
但在factor attn的计算过程中并不是很好解释,而且丢失了内积过程。虽然FactorAttn不是对attn的直接近似,但是也是一种泛化的注意力机制有query,key和value
深度可分离卷积
常规卷积操作
- 每个channel的图像与filter做卷积,然后将每个通道进行合并。
- 对于一张5×5像素、三通道(shape为5×5×3),经过3×3卷积核的卷积层(假设输出通道数为4,则卷积核shape为3×3×3×4,最终输出4个Feature Map,如果有same padding则尺寸与输入层相同(5×5),如果没有则为尺寸变为3×3
卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。
因此卷积层的参数数量可以用如下公式来计算:
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
- 逐点卷积
Pointwise Convolution的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。
所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个输出Feature map
由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为:
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的神经网络层数可以做的更深。
3.3.2Global-to-Local Feature Interaction
作用
将局部特征和全局特征聚合起来:
通过串联来执行
对输入特征做了一个Concat并进行了1×1卷积(H(·)是一个学习与特征交互的函数),该模块同时输入了存在远距离关注的Transformer以及提取局部上下文关系的卷积操作,因此可以认为就是对本阶段提取到的图像全局以及局部语义的特征融合,充分利用了图像的信息。
4 实验- Semantic segmentation
-
增加路径的数量需要减少通道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分割任务上的性能对比,从中可以看到:
- MPViT优于其他同尺寸的ViT方案;
- MPViT-S以48.3%的指标大幅超越了Swin-T、Focal-T以及XCiT-S12/16;
- MPViT-B以50.3%的指标超越了近期SOTA方案Focal-B。
5总结
作者主要做出了一下几点贡献:
- 通过多路径并行设计实现了对多尺度信息的利用
- 通过深度卷积操作实现了全局上下文的利用(Mask2Former也有一摸一样的结构)
- 通过对照试验探究了多尺度多路径模型在不同尺度及路径数量下的效果