Segmenter论文解读

news2024/11/17 3:26:01

Segmenter: Transformer for Semantic Segmentation

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GEx3PRJZ-1675081723651)(Segmenter Transformer for Semantic Segmentation.assets/image-20230118154351952.png)]

论文:[2105.05633] Segmenter: Transformer for Semantic Segmentation (arxiv.org)

代码:[rstrudel/segmenter: ICCV2021] Official PyTorch implementation of Segmenter: Transformer for Semantic Segmentation (github.com)

期刊/会议:ICCV 2021

摘要

图像分割通常在单个图像patch的级别上是模糊的,并且需要上下文信息来达成标签共识。本文介绍了一种用于语义分割的transformer模型——segmenter。与基于卷积的方法相比,我们的方法允许在第一层和整个网络中建模全局上下文。我们以最近的Vision Transformer(ViT)为基础,并将其扩展到语义分割。为此,我们依赖于与图像patch对应的输出嵌入,并使用逐点(point-wise)线性解码器或mask transformer解码器从这些嵌入中获取类标签。我们利用预训练的图像分类模型,并表明我们可以在用于语义分割的中等大小数据集上对它们进行微调。线性解码器已经可以获得很好的结果,但是可以通过mask transformer产生类掩码来进一步提高性能。我们进行了广泛的消融研究,以显示不同参数的影响,特别是大模型和小patch尺寸的性能更好。Segmenter在语义分割中取得了很好的效果。它在ADE20K和Pascal上下文数据集上的性能都优于目前的SOTA,在Cityscape上也具有竞争力。

1、简介

语义分割是一个具有挑战性的计算机视觉问题,具有广泛的应用,包括自动驾驶、机器人、增强现实、图像编辑、医学成像等。语义分割的目标是将每个图像像素分配给对应于底层对象的类别标签,并为目标任务提供高级图像表示,例如为虚拟试穿应用检测人的边界和他们的衣服。尽管近年来进行了大量的努力并取得了很大的进展,但由于丰富的类内变化、上下文变化和由遮挡和低图像分辨率引起的模糊性,图像分割仍然是一个具有挑战性的问题。

最近的语义分割方法通常依赖于卷积编码器-解码器架构,其中编码器生成低分辨率的图像特征,解码器对特征进行上采样,并使用逐像素类得分进行分割映射。最先进的方法部署了全卷积网络(FCN),并在具有挑战性的分割基准上取得了令人印象深刻的结果。这些方法依赖于可学习的堆叠卷积,可以捕获语义丰富的信息,并在计算机视觉中非常成功。然而,卷积滤波器的局域特性,限制对图像全局信息的访问。同时,这些信息对于分割尤其重要,因为局部patch的标注往往依赖于全局图像上下文。为了避免这个问题,DeepLab方法引入了空洞卷积和空间金字塔池化的特征聚合。这允许扩大卷积网络的感受野,并获得多尺度特征。根据NLP的最新进展,一些分割方法探索了基于通道或空间注意力和点注意力的替代聚合方案,以更好地捕获上下文信息。然而,这样的方法仍然依赖于卷积骨干网络,因此偏向于局部交互。广泛使用专门的层来纠正这种偏置表明了卷积架构在分割方面的局限性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7KVuqzw-1675081723653)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127093758983.png)]

为了克服这些限制,我们将语义分割问题表述为一个seq2seq的问题,并使用transformer架构在模型的每个阶段利用上下文信息。根据设计,transformer可以捕捉场景元素之间的全局交互,并且没有内置的感应先验,参见图1。然而,全局交互建模的成本是二次的,这使得这种方法在应用于原始图像像素时非常昂贵。根据最近在Vision Transformer(ViT)上的工作,我们将图像分割为patch,并将线性补丁嵌入作为Transformer编码器的输入token。然后,由编码器产生的上下文化token序列由Transformer解码器上采样到逐像素类分数。对于解码,我们考虑将patch嵌入简单地按点线性映射到类分数或基于Transformer的解码方案,其中可学习的类嵌入与patch token一起处理以生成类掩码。我们通过消融实验对模型正则化、模型大小、输入patch大小及其在精度和性能之间的权衡,对transformer进行了扩展研究。我们的Segmenter方法在保持简单、灵活和快速的同时获得了出色的结果。特别是,当使用具有小输入patch大小的大型模型时,最佳模型在具有挑战性的ADE20K数据集上达到了53.63%的平均IoU,大大超过了之前所有最先进的卷积方法5.3%。这种改进部分源于我们的方法在模型的每个阶段捕获的全局上下文,如图1所示。

总之,我们的工作提供了以下四个贡献:(i)我们提出了一种基于Vision Transformer(ViT)的新的语义分割方法,它不使用卷积,通过设计捕获上下文信息,并且优于基于FCN的方法。(ii)我们提出了一系列具有不同分辨率的模型,允许在精度和运行时间之间进行权衡,从最先进的性能到具有快速推断和良好性能的模型。(iii)我们提出了一种基于transformer的解码器,它生成的类掩码优于我们的线性基线,并且可以扩展到执行更一般的图像分割任务。(iv)我们证明,我们的方法在ADE20K和Pascal Context数据集上都产生了SOTA,并且在Cityscape上具有竞争力。

2、相关工作

语义分割:基于全卷积网络(FCN)与编码器-解码器结构相结合的方法已成为语义分割的主流方法。最初的方法依赖于连续堆叠的卷积,然后是空间池化来执行密集预测。连续方法对高级特征图进行采样,并在解码时将其与低级特征图结合起来,以捕获全局信息并恢复锐利的物体边界。为了扩大第一层卷积的感受野,有几种方法提出了空洞卷积或可分离卷积。为了在更高层次上捕获全局信息,最近的工作使用空间金字塔池来捕获多尺度的上下文信息。Deeplabv3+将这些增强功能与可分离空间金字塔池化结合起来,提出了一种简单有效的编码器-解码器FCN架构。最近的工作用编码器特征映射上的注意力机制取代粗粒度池化,以更好地捕获长期依赖关系。

虽然目前的分割方法大多集中在改进FCN,但**卷积对局部操作的限制可能意味着全局图像上下文处理效率低,分割结果不佳。**因此,我们提出了一个纯transformer架构,在编码和解码阶段在模型的每一层捕获全局上下文。

Vision Transformer:在许多自然语言处理(NLP)任务中,Transformer是目前最先进的方法。这种模型依赖于自注意机制,并捕捉句子中token(单词)之间的长期依赖关系。此外,transformer非常适合并行化,便于在大型数据集上进行训练。transformer在NLP中的成功启发了计算机视觉中的几种方法,将CNN与自注意机制相结合,以解决目标检测,语义分割,全景分割,视频处理和少样本分类。

最近,Vision Transformer(ViT)引入了一种用于图像分类的无卷积 transformer架构,其中输入图像被处理为patch token序列。虽然ViT需要在非常大的数据集上进行训练,但DeiT提出了一种基于token的蒸馏策略,并在ImageNet-1K数据集上使用CNN作为训练教师模型,获得了具有竞争力的Vision Transformer模型。并发工作将这项工作扩展到视频分类和语义分割。更详细地说,SETR使用ViT骨干网络和标准CNN解码器。Swin Transformer使用ViT的变体,由局部窗口组成,在层和UpperNet之间移动,作为金字塔FCN解码器。

在这里,我们提出了Segmenter,一种用于语义图像分割的Transformer编码器解码器架构。我们的方法依赖于ViT骨干网络,并引入了一个受DETR启发的掩码解码器。我们的架构不使用卷积,通过设计捕获全局图像上下文,并在标准图像分割基准测试中获得具有竞争力的性能。

3、我们的方法:Segmenter

Segmenter是完全基于transformer的编码器-解码器架构,将一系列patch嵌入映射到像素级类标注。该模型的概述如图2所示。patch序列由3.1节中描述的transformer编码器编码,并由3.2节中描述的逐点线性映射或掩码transformer解码。我们的模型采用逐像素交叉熵损失进行端到端训练。在推理时,上采样后应用argmax以获得每个像素的单个类。

3.1 编码器

一个图像 x ∈ R H × W × C x\in \R^{H×W ×C} xRH×W×C被分割成 x = [ x 1 , . . . , x N ] ∈ R N × P 2 × C x = [x_1,..., x_N] \in \R^{N×P^2×C} x=[x1,...,xN]RN×P2×C,其中 ( P , P ) (P, P) (P,P)为patch大小, N = H W / P 2 N = HW/P^2 N=HW/P2为patch数量, C C C为通道数量。将每个patch拉平为一维向量,然后线性投影到patch embedding上,得到 x 0 = [ E x 1 , . . . , E x N ] ∈ R N × D x_0 = [E_{x_1},...,E_{x_N}] \in \R^{N×D} x0=[Ex1,...,ExN]RN×D其中 E ∈ R D × ( P 2 C ) E \in \R^{D×(P^2C)} ERD×(P2C)。为了获取位置信息,可学习位置嵌入 p o s = [ p o s 1 , . . . , p o s N ] ∈ R N × D pos = [pos_1,...,pos_N] \in \R^{N×D} pos=[pos1,...,posN]RN×D加入到patch序列中,得到token z 0 = x 0 + p o s z_0 = x_0 + pos z0=x0+pos的输入序列。

L L L层组成的transformer编码器应用于token序列 z 0 z_0 z0,生成上下文化编码序列 z L ∈ R N × D z_L \in \R^{N×D} zLRN×D。transformer层由一个多头自注意(MSA)块和一个按点分层的两层MLP块组成,在每个块之前应用层归一化(LN),在每个块之后添加残差连接:
a i − 1 = MSA ( LN ( z i − 1 ) ) + z i − 1 a_{i-1}=\text{MSA}(\text{LN}(z_{i-1}))+z_{i-1} ai1=MSA(LN(zi1))+zi1

a i = MLP ( LN ( a i − 1 ) ) + a i − 1 a_{i}=\text{MLP}(\text{LN}(a_{i-1}))+a_{i-1} ai=MLP(LN(ai1))+ai1

其中 i ∈ { 1 , . . . , L } i \in \{ 1,...,L\} i{1,...,L}。自注意机制由三个点线性层组成,将token映射到中间表示,查询 Q ∈ R N × d Q \in \R^{N×d} QRN×d,键 K ∈ R N × d K \in \R^{N×d} KRN×d,值 V ∈ R N × d V \in \R^{N×d} VRN×d。自我注意力的计算方法如下:
MSA ( Q , K , V ) = softmax ( Q K T d ) V \text{MSA}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt{d}})V MSA(Q,K,V)=softmax(d QKT)V
transformer编码器映射输入序列 z 0 = [ z 0 , 1 , . . . , z 0 , N ] z_0 = [z_{0,1},..., z_{0,N}] z0=[z0,1,...,z0,N],位置编码为 z L = [ z L , 1 , . . . , z L , N ] z_L = [z_{L,1},..., z_{L,N}] zL=[zL,1,...,zL,N],是解码器使用的包含丰富语义信息的上下文化编码序列。在下一节中,我们将介绍解码器。

3.2 解码器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fX9i54Mj-1675081723653)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127101234168.png)]

将patch编码序列 z L ∈ R N × D z_L \in \R^{N×D} zLRN×D解码为分割映射 s ∈ R H × W × K s \in \R^{H×W ×K} sRH×W×K,其中 K K K为类数。解码器学习将来自编码器的patch级编码映射到patch级类得分。接下来,通过双线性插值将这些patch级类分数上采样到像素级分数。我们在下面描述一个线性解码器,它作为一个基线,以及我们的方法,一个掩码转换器,参见图2。

Linear。对patch编码 z L ∈ R N × D z_L \in \R^{N×D} zLRN×D应用逐点线性层,得到patch级类logits z l i n ∈ R N × K z_{lin} \in \R^{N×K} zlinRN×K。然后将序列重塑为二维特征映射 s l i n ∈ R H / P × W / P × K s_{lin} \in \R^{H/P ×W/P ×K} slinRH/P×W/P×K,并双线性上采样到原始图像大小 s ∈ R H × W × K s \in \R^{H×W ×K} sRH×W×K。然后在类维度上应用一个softmax来获得最终的分割图。

mask transformer。对于基于transformer的解码器,我们引入了一组 K K K个可学习类嵌入 c l s = [ c l s 1 , . . . , c l s K ] ∈ R K × D cls = [cls_1,...,cls_K] \in \R^{K×D} cls=[cls1,...,clsK]RK×D,其中 K K K为类数。每个类嵌入都是随机初始化的,并分配给单个语义类。它将用于生成类掩码。解码器将类嵌入 c l s cls cls与patch编码 z L z_L zL联合处理,如图2所示。解码器是由 M M M层组成的transformer编码器。我们的mask transformer通过计算L2归一化patch嵌入 z M ′ ∈ R N × D z_M' \in \R^{N×D} zMRN×D与解码器输出的类嵌入 c ∈ R K × D c \in \R^{K×D} cRK×D之间的标量积来生成 K K K个掩码。类掩码集的计算如下:
Masks ( z M ′ , c ) = z M ′ c T \text{Masks}(z_M',c)=z_M'c^T Masks(zM,c)=zMcT
其中, Masks ( z M ′ , c ) ∈ R N × K \text{Masks}(z_M',c) \in \R^{N×K} Masks(zM,c)RN×K为patch序列集。然后将每个掩码序列重塑为二维掩码,形成 s m a s k ∈ R H / P × W / P × K s_{mask} \in \R^{H/P ×W/P ×K} smaskRH/P×W/P×K,并对原始图像大小进行双线性上采样,得到特征映射 s ∈ R H × W × K s \in \R^{H×W ×K} sRH×W×K。然后在类维度上加一个softmax,再加一个LN,得到像素级的类得分,形成最终的分割图。Mask sequences are softly exclusive to each other,即 ∑ k = 1 K s i , j , k = 1  for all  ( i , j ) ∈ H × W \sum_{k=1}^K s_{i,j,k}=1 \ \text{for all} \ (i,j) \in H \times W k=1Ksi,j,k=1 for all (i,j)H×W

我们的mask transformer的灵感来自于DETR, MaxDeepLab和SOLO-v2,它们引入了对象嵌入来产生实例掩码。然而,与我们的方法不同,MaxDeepLab使用了一种基于CNN和transformer的混合方法,并由于计算限制将像素和类嵌入分成两个流。使用纯Transformer架构和利用patch级编码,我们提出了一种在解码阶段联合处理patch和类嵌入的简单方法。这种方法允许产生随输入变化的动态滤波器。当我们在这项工作中处理语义分割时,我们的掩码transformer也可以通过用对象嵌入取代类嵌入来直接进行泛视分割。

4、实验结果

4.1 数据集和评估指标

数据集:ADE20K、Pascal Context、CityScape。

评估指标:MIOU。

4.2 实施细节

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9zWGHDHO-1675081723654)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127154626513.png)]

Transformer模型:对于编码器,我们在Vision Transformer ViT的基础上构建,并考虑表1中描述的“Tiny”、“Small”、“Base”和“Large”模型。Transformer编码器中变化的参数是层数和token大小。multi-headed self-attention (MSA) block的head大小固定为64,head数量是token大小除以head大小,MSA后面MLP的隐藏大小是token大小的4倍。我们也使用DeiT,一个ViT的变体。我们考虑代表不同分辨率图像的模型,并使用输入patch大小8×8, 16×16和32 × 32。在下文中,我们使用缩写来描述模型变体和patch大小,例如SegB/16表示输入patch大小为16 × 16的“Base”变量。基于DeiT的模型用†表示,例如Seg-B†/16。

ImageNet上预训练:我们的Segmenter模型在ImageNet上进行预训练,ViT在ImageNet-21k上进行预训练,具有强大的数据增强和正则化,其变体DeiT在ImageNet-1k上进行预训练。原始的ViT模型仅使用随机裁剪进行训练,而有些工作提出的训练程序使用dropout和随机深度的组合作为正则化,Mixup和RandAugment作为数据增强。这显著提高了ImageNet top-1的精度,即在ViT-B/16上获得了+2%的增益。我们在ADE20K上微调了ViT-B/16。接下来,所有的Segmenter模型都将使用改进的ViT模型进行初始化。我们使用图像分类库timm和谷歌research提供的公开模型。这两个模型都在图像分辨率为224的情况下进行了预训练,并在ImageNet-1k上以384的分辨率进行了微调,除了ViT-B/8已以224的分辨率进行了微调。我们保持patch大小固定,并根据数据集以更高的分辨率微调语义分割任务的模型。由于patch大小是固定的,提高分辨率会导致更长的token序列。我们根据预先训练好的位置嵌入在图像中的原始位置进行双线性插值,以匹配微调序列长度。3.2节中描述的解码器初始化时使用截断正态分布的随机权重。

数据增强。在训练过程中,我们遵循语义分割库MMSegmentation的标准管道处理,这意味着裁剪,随机调整图像大小到0.5和2.0之间的比例,以及随机左右翻转。我们随机裁剪大图像,并将小图像填充为固定大小,ADE20K为512×512, Pascal-Context为480×480, Cityscape为768×768。在ADE20K上,我们训练了我们最大的模型Seg-L-Mask/16,分辨率为640×640,与Swin Transformer使用的分辨率相匹配。

优化器。为了对语义分割任务的预训练模型进行微调,我们使用了标准的像素级交叉熵损失,而不进行权重再平衡。我们使用随机梯度下降(SGD)作为基础学习率 γ 0 γ_0 γ0的优化器,并将权重衰减设置为0。在DeepLab的开创性工作之后,我们采用了“poly”学习率衰减 γ = γ 0 ( 1 − N i t e r / N t o t a l ) 0.9 γ = γ_0(1−N_{iter}/N_{total})^{0.9} γ=γ0(1Niter/Ntotal)0.9,其中 N i t e r N_{iter} Niter N t o t a l N_{total} Ntotal表示当前迭代数和总迭代数。对于ADE20K,我们将基础学习率 γ 0 γ_0 γ0设置为10−3,并训练160K次迭代,batch size为8。对于Pascal Context,我们将 γ 0 γ_0 γ0设置为10−3,并训练80K迭代,batch size为16。对于Cityscape,我们将 γ 0 γ_0 γ0设置为10−2,并训练80K迭代,batch size为8。该计划类似于DeepLabv3+,学习速率除以因子10,除了Cityscape,我们使用因子1。

推理。为了在推断过程中处理不同的图像大小,我们使用了一个与训练大小匹配的分辨率的滑动窗口。对于多尺度推断,遵循标准实践,我们使用缩放因子为(0.5,0.75,1.0,1.25,1.5,1.75)的图像的重新缩放版本,并对结果进行左右翻转和平均。

4.3 消融实验

在本节中,我们将在ADE20K验证集上对比我们方法的不同变体。我们研究了模型正则化、模型大小、patch大小、模型性能、训练数据集大小,将Segmenter与卷积方法进行比较,并评估不同的解码器。除非另有说明,我们使用基线线性解码器并使用单尺度推断报告结果。

正则化:我们首先比较了两种形式的正则化,dropout和随机深度,并表明随机深度始终改善transformer分割训练效果。CNN模型也依赖批归一化BN,也是一种正则化。而Transformer在训练时通常由层归一化LN结合dropout作为正则化器组成。Dropout随机忽略作为块输入的token,随机深度在正向传递过程中随机跳过模型的可学习块。我们比较了基于ViT-S/16骨干网络的Seg-S/16上的正则化。从表2可以看出,将随机深度设置为0.1,随机降低10%的层数,性能持续提高,当dropout设置为0时,与未正则化的基线相比,提高了0.36%。正则化始终会影响性能,无论是单独还是与随机深度结合。这与一些工作中观察到dropout对图像分类的负面影响是一致的。从现在开始,所有的模型都将随机深度设置为0.1,并且没有dropout。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPzn1tO5-1675081723656)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127161612872.png)]

Transformer大小:我们现在研究Transformer尺寸对性能的影响,方法是在固定patch大小为16的情况下改变层数和token大小。表3显示了性能与骨干网络大小的良好关系。当token维度翻倍时,从Seg-S/16到Seg-B/16,我们得到了2.69%的改进。当层数翻倍时,从Seg-B/16到Seg-L/16,我们得到了2.65%的改进。最后,我们最大的Segmenter模型Seg-L/16在ADE20K验证数据集上使用单一尺度推理的简单解码方案实现了50.71%的mIoU。FCN模型中大量使用的任务特定层的缺失表明基于transformer的方法提供了更有表现力的模型,非常适合于语义分割。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P7qiqeNT-1675081723657)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127161626767.png)]

patch大小:用patch序列表示图像提供了一种通过改变patch大小在速度和准确性之间权衡的简单方法。虽然增加patch大小会导致图像的表现更粗糙,但是在更小尺寸的序列中它将处理的更快。表3的第三和第四部分报告了ViT作为骨干网络和不同patch大小的性能。我们观察到,patch大小是影响语义分割性能的一个关键因素。这对模型大小同样重要。事实上,从32到16的patch大小,我们观察到Seg-B改善了5%。对于Seg-B,我们也报告了patch大小为8的结果,并报告了mIoU为49.54%,将ViT-B/8到ViT-L/16的差距缩小到1.17%,同时需要的参数大大减少。这一趋势表明,减少patch大小是一种稳健的改进来源,它不引入任何参数,但需要在较长的序列上计算注意力,增加了计算时间和内存占用。如果计算上可行,ViT-L/8可能是性能最好的模型。更高效计算和内存的transformer处理更大序列的小patch是一个有前景的方向。

为了进一步研究patch大小的影响,我们在图3中显示了由Segmenter模型生成的随着patch大小减小的分割图。我们观察到,对于32的patch大小,模型学习了一个全局有意义的分割,但产生了较差的边界,例如,左边的两个人是由一个blob预测的。当观察人体轮廓时可以观察到,减小patch大小会导致相当清晰的边界。很难分割实例,因为背景中的细街灯杆仅以8的分辨率捕获。在表4中,我们报告了关于对象大小的平均IoU,并将Segmenter与DeepLabv3+与ResNeSt骨干网络进行了比较。为了重现DeepLabv3+结果,我们使用了MMSegmentation库中的模型。我们观察到,与Seg-B/16相比,Seg-B/8的改进主要来自小型和中型实例,分别获得1.27%和1.74%的增益。此外,我们观察到Segmenter相对于DeepLab的最大改进来自于大型实例,其中Seg-L-Mask/16显示了6.39%的改进。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lBDUAtQx-1675081723657)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127161640943.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yjZDVuIy-1675081723658)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127162705496.png)]

不同的解码器:在本节中,我们将比较不同的解码器变体。我们评估3.2节中介绍的mask transformer,并将其与线性基线进行比较。mask transformer有两层,具有与编码器相同的token和隐藏大小。表4报告了mIOU性能。mask transformer在线性基线上提供一致的改进。Seg-B†/16获得了最显著的1.6%的增益,Seg-B-Mask/32获得了1.1%的改进,Seg-L/16获得了0.6%的增益。在表4中,我们还检查了不同模型的增益与目标大小的关系。我们观察了小型和大型对象的增益,显示了使用动态滤波器(dynamical filter)的好处。在大多数情况下,大对象的增益更为显著,例如,Seg-B/32为1.4%,Seg-B†/16为2.1%,Seg-L/16为1.7%。mask transformer学习的类嵌入在语义上是有意义的,也就是说,相似的类就在附近,参见图8了解更多细节。

Transformer对比FCN:表4和表6比较了我们的方法与FCN模型以及DeepLabv3+与ResNeSt骨干网络,这是最好的全卷积方法之一。我们的transformer方法提供了对这种最先进的卷积方法的显著改进,突出了transformer捕捉全局场景理解的能力。segmenter在大型实例上的表现始终优于DeepLab, Seg-L/16的改进超过4%,Seg-L-Mask/16的改进超过6%。然而,DeepLab在小型和中型实例上的性能与Seg-B/16相似,同时具有相似的参数数量。Seg-B/8和Seg-L/16在小型和中型实例上表现最好,但计算成本较高。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KMv1wxqd-1675081723659)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127162716078-16748080364111.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PNPts4iL-1675081723659)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127201635144.png)]

效果:在图4中,我们将我们的模型与几种最先进的方法进行了比较,就每秒处理图像数量和mIoU而言,并显示了Segmenter优于基于FCN的模型的明显优势(绿色曲线)。我们还表明,我们的方法与最近的基于transformer的方法相比,我们最大的模型Seg-L-Mask/16与Swin-L相当,并且优于SETR-MLA。我们观察到Seg/16模型在精度与计算时间方面表现最好,而Seg- B-Mask/16提供了很好的权衡。Seg-B-Mask/16在推理速度相似的情况下优于基于FCN的方法,与SETR-MLA匹配,但速度快两倍,所需参数更少,在推理速度和性能方面优于Swin-B。Seg/32模型学习上一节讨论的更粗粒度的分割映射,并为Seg-B-Mask /32提供每秒400张图像的快速推断,会比ResNet-50快4倍,但是性能差不多。为了计算每秒的图像,我们使用V100 GPU,将图像分辨率固定为512,对于每个模型,我们最大限度地提高内存允许的batch size,以便进行公平的比较。

数据集的大小:Vision Transformer强调了大数据集在图像分类任务中获得良好性能的重要性。在语义分割数据集的规模上,我们分析了表5中使用越来越大的数据集训练时Seg-S/16在ADE20k数据集上的性能。当训练集大小低于8k图像时,我们观察到性能的重要下降。这表明,即使在微调过程中,transformer在足够的数据量下表现最好。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-061G3GSc-1675081723660)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127162731242.png)]

4.4 对比SOTA

在本节中,我们将在ADE20K、Pascal上下文和城市景观数据集上比较分段器的性能与最先进的方法。

ADE20K。在ImageNet-1k上预训练的Seg-B†/16与最先进的FCN方法DeepLabv3+ ResNeSt200[63]相匹配,如表6所示。加入我们的掩码变压器,Seg-B†-Mask/16提高了2%,达到50.08% mIoU,优于所有FCN方法。我们的最佳模型Seg-L-Mask/16达到了53.63%的最先进性能,超过了mIoU DeepLabv3+ ResNeSt-200和基于变压器的方法SETR[67]和Swin-L UperNet[35]的5.27%。

Pascal Context性能如表7所示。Seg-B†模型与FCN方法具有竞争力,更大的Seg-L/16模型已经提供了最先进的性能,优于SETR-L。我们的掩码变压器Seg-L-Mask/16可以进一步提高性能,比线性解码器提高2.5%,达到59.04% mIoU的性能。特别地,我们报告了Segmenter比OCR HRNetV2-W48提高2.8%,比SETR-L MLA提高3.2%。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5rovmyZc-1675081723660)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127202959851.png)]

Cityscapes:表8报告了segmenter在Cityscape上的性能。我们使用了Seg-L-Mask/16的mask transformer的变体,在解码器中只有一层,因为由于768×768的大输入分辨率,两层不适合内存。Seg-B和Seg-L方法与其他最先进的方法相比都具有竞争力,Seg-L-Mask/16的mIoU达到81.3%。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aL74WcCY-1675081723661)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127203503829.png)]

定性的结果。图5显示了segmenter和DeepLabv3+与ResNeSt骨干网络的定性比较,其中模型由MMSegmentation库提供。我们可以观察到Deeplabv3+倾向于生成更清晰的对象边界,而Segmenter在大型实例上提供更一致的标签,并更好地处理部分遮挡。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZegKi650-1675081723661)(Segmenter Transformer for Semantic Segmentation.assets/image-20230127203558206.png)]

5、总结

本文介绍了一种纯transformer的语义分割方法。编码器部分建立在最近的Vision transformer(ViT)上,但不同之处在于我们依赖于所有图像patch的编码。我们观察到transformer很好地捕获了全局上下文。将简单的逐点线性解码器应用于patch编码已经取得了很好的效果。用mask transformer解码进一步提高了性能。我们相信,我们的端到端编码器-解码器transformer是朝着语义分割、实例分割和全景分割的统一方法迈出的第一步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3+ts error TS7053:

在远程仓库拉取线上正常运行的项目,编译之后出现报错出现问题,逐步排查node版本是否与别人一致2.检查node_modules是否与别人一致检查到这一步就发现了是因为依赖版本不一致导致的原因因为目前vue-tsc等依赖更新频繁把这两个依赖的版本号锁死&#xff0c…

vuex

目录 1、什么是vuex 2、vuex的工作方式 3、vuex的使用场景 4、工作流程:View -> Actions -> Mutations -> State -> View 5、vuex的核心API ​ (1)state: ​ (2)mutations ​ &#xff…

Pinia的使用(以vue3+ts+vite为例)

文章目录Pinia1. 安装2. 引入vue33. 初始化store仓库4. 修改state5. 解构store6. store中的方法和计算属性(actions、getters)7. API7.1 $reset7.2 $subscribe 和 $onAction8. 插件案例:持久化插件Pinia Pinia官方文档 Pinia GitHub地址 1…

VSCode vscode-pandoc插件将中文Markdown转换为好看的pdf文档(使用eisvogel模板)

Markdown的使用经常需要转变其他格式,在VSCode里有个很好用的插件:vscode-pandoc,先进行下载。 打开设置(左下角的小齿轮) 输入pandoc 在HTML Opt String中粘贴入: -s -t html5可将Markdown转换输出HTML。…

STL-----map的常见使用

1,MAP的说明Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可…

3.1.8 多态

文章目录1.概念2.特点3.入门案例练习4 多态的好处5 多态的使用6 练习:多态成员使用测试7 拓展7.1 综合案例7.2 多态为了统一调用标准7.3 静态变量和实例变量的区别7.4 向上转型和向下转型1.概念 多态是面向对象程序设计(OOP)的一个重要特征&…

【数据结构初阶】第三篇——单链表

链表的概念及其结构 初始化链表 打印单链表 增加结点 头插 尾插 在给定位置之前插入 在给定位置之后插入 删除结点 头删 尾删 删除给定位置的结点 查找数据 修改数据 链表的概念及其结构 基本概念 链表是一种物理存储结构上非连续,非顺序的存储结构&a…

盘点保护隐私安全的浏览器,密码锁屏这个功能,真香

在互联网时代,大家都比较关心自己的隐私安全。一些互联网公司和在线客服会跟踪用户的在线活动,收集用户的个人信息,有时候甚至因为个人的不良习惯导致信息泄露,因此选择隐私和安全性好的浏览器尤其重要。下面给大家介绍隐私安全做…

大数据技术架构(组件)11——Hive:日期函数

1.4.5、日期函数1.4.5.1、from_unixtimeselect from_unixtime(1638602968),from_unixtime(1638602968,yyyy-MM-dd HH:mm:SS),from_unixtime(1638602968,yyyy-MM-dd);1.4.5.2、unix_timestampselect unix_timestamp();1.4.5.3、to_dateselect to_date(2021-12-04 2021-12-04 15:…

【授权与认证】OAuth 2.0 和 OIDC 的异同点

开发者谈 | OAuth 2.0 和 OIDC 协议的关系?(内含必看案例) 【Web 安全】CSRF 攻击详解 OAuth 2.0 OAuth 2.0 的一个简单解释OAuth 2.0 的四种方式什么是Oauth2.0,Oauth2.0的四种授权模式 简单说,OAuth 就是一种授权…

【前端】Vue项目:旅游App-(16)home+hooks:窗口滚动到底部动态加载新数据、抽取到hook

文章目录目标过程与代码监听窗口的滚动窗口上事件监听的移除封装到一个hook回调函数法(不推荐)返回值法(推荐)效果总代码修改或添加的文件hooks的useScrollhome-content参考本项目博客总结:【前端】Vue项目&#xff1a…

git 使用tag

文章目录概述示例创建标签 tag查看tag删除本地标签推送标签git 根据tag创建分支回退到tag参考概述 常常为发布上线某个版本打上一个标签,表示这是什么版本,这样后续找起来就很方便。 如果没有标签只能通过commit历史去查找,而且commit版本显…

每日学术速递1.30

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 更多Ai资讯: 今天带来的arXiv上最新发表的3篇文本图像的生成论文。 Subjects: cs.LG、cs.Cv、cs.AI、cs.CL 1.StyleGAN-T: Unlocking the Power of GANs for Fast Large-Scale Text-to-Im…

Spire.Doc for Java v11.1.1 Patch

Spire.Doc for Java是一个专业的 Word API,它使 Java 应用程序能够在不依赖 Microsoft Word 的情况下创建、转换、操作和打印 Word文档。 通过使用这个多功能库,开发人员能够毫不费力地处理大量任务,例如插入图像、超链接、 数字签名、书签和…

Mybatis-plus(下)

一,乐观锁可参考官方文档:https://baomidou.com/pages/0d93c0/场景:当两个工作人员同时去处理一条投诉工单的时候当两个人一起点开了投诉工单详情 并一起编辑处理 随后同时反馈给用户时 此时就会出现矛盾 当系统正常 没有bug的时候 是会出现两…

SpringCloud_Sleuth分布式链路请求跟踪

目录一、概述1.为什么会出现这个技术?需要解决哪些问题?2.是什么3.解决二、搭建链路监控步骤1.zipkin2.服务提供者3.服务消费者(调用方)4.依次启动eureka7001/8001/805.打开浏览器访问: http://localhost:9411一、概述…

网络流量监控对DMS系统排错分析案例

背景 DMS系统是某汽车集团的经销商在线系统,是汽车集团的重要业务系统。本次分析重点针对DMS系统性能进行分析,以供安全取证、性能分析、网络质量监测以及深层网络分析。 该汽车总部已部署NetInside流量分析系统,使用流量分析系统提供实时和…

Qt扫盲-QDebug理论总结

QDebug理论使用总结一、概述二、使用1. 基础使用2. 格式化选项3.将自定义类型写入流一、概述 每当开发人员需要将调试或跟踪信息写入设备、文件、字符串或控制台时,都会使用QDebug。这个就可以方便我们调试,基本上Qt所有的内容都能通过调试打印出来&…

14.重载运算与类型转换

文章目录重载运算与类型转换14.1基本概念直接调用一个重载的运算符函数某些运算符不应该被重载使用与内置类型一致的含义赋值和复合赋值运算符选择作为成员或者非成员14.2输入和输出运算符14.2.1重载输出运算符<<输出运算符尽量减少格式化操作输入输出运算符必须是非成员…

智能家居之主机---计划筹备

智能家居之主机---计划筹备前言绪言前期构思硬件平台结构平台前言 绪言 感觉有一年多没发过文章了&#xff0c;这一年多太忙了&#xff0c;来到新的公司后要学的太多了&#xff0c;代码风格&#xff0c;架构&#xff0c;操作系统&#xff0c;各种通讯协议&#xff0c;伺服驱动…