最新综述!基于Transformer的视觉分割大盘点(图像/点云/域适应/高效分割)

视觉分割旨在将图像、视频帧或点云划分为多个片段或组。这项技术在现实世界中有许多应用,如自动驾驶、图像编辑、机器人传感和医学分析。在过去的十年里,基于深度学习的方法在这一领域取得了显著的进步。最近,transformers,一种基于自注意力的神经网络,最初设计用于自然语言处理,在各种视觉处理任务中已经大大超过了以前的卷积或递归方法。具体来说,ViT为各种分割任务提供了强大、统一甚至更简单的解决方案。这项调查对基于Transformer的视觉分割进行了全面的概述,总结了最近的进展。论文首先回顾背景,包括问题定义、数据集和先前的卷积方法。接下来总结了一个元体系结构,它统一了最近所有基于transformer的方法。基于这种元体系结构,本文检查了各种方法设计,包括对元体系结构和相关应用程序的修改。论文还介绍了几个密切相关的设置,包括3D点云分割、基础模型调整、domain-aware分割、高效分割和医学分割。此外,本文在几个成熟的数据集上汇编并重新评估了所审查的方法。最后确定了该领域的开放性挑战,并提出了未来研究的方向。

代码链接:https://github.com/lxtGH/Awesome-Segmenation-With-Transformer

总体而言,图1显示了本文的结构。

9590ea068086bfba578daad4703a3c88.png

背景

本节首先提出了不同分割任务的统一问题定义。然后详细介绍了常见的数据集和评估指标。接下来将在Transformer之前对以前的方法进行总结。最后回顾了Transformer的基本概念。为了便于理解本次调查,表1中列出了简短的注释以供参考。

1bc0445de35b0f964380da80dc09825b.png

问题定义

图像分割:给定输入图像,图像分割的目标是输出一组mask。根据类标签和掩码的范围,图像分割可以分为三个不同的任务,包括语义分割(SS)、实例分割(IS)和全景分割(PS),如图2(a)所示。对于SS,类可以是前景对象(事物)或背景(事物),并且每个类只有一个二进制掩码,该掩码指示属于该类的像素。每个SS掩模不与其他掩模重叠。对于IS,每个类可能有一个以上的二进制掩码,并且所有类都是前景对象。某些IS掩码可能与其他掩码重叠。对于PS,根据类定义,每个类可能具有不同数量的掩码。对于可数事物类,每个类可能有多个不同实例的掩码。对于不可计数的stuff类,每个类只有一个掩码。每个PS掩码不与其他掩码重叠。人们可以从像素视图中理解图像分割。对于SS,所有像素的身份都为零。对于IS,每个实例都有一个唯一的标识。对于PS,属于事物类的像素具有唯一的身份。stuff类的像素标识为零。从这两个角度来看,PS统一了SS和IS。论文在图2中给出了视觉示例。

b2f4954e01f1b2651ab6c7c806133341.png

视频分割:视频全景分割(VPS)需要每个像素在时间上一致的分割和跟踪结果。每个mask可以分为可数的thing类和不可数的stuff类。每个thing tube mask也有一个唯一的ID,用于评估跟踪性能。对于stuff mask,默认情况下跟踪为零。当N=C并且任务只包含事物类,并且所有事物类都没有ID时,VPS就变成了视频语义分割(VSS)。

相关问题:目标检测和实例分割(IS/VIS/VPS)是密切相关的任务。目标检测涉及预测目标边界框,这可以被认为是IS的一种粗略形式。在引入DETR模型后,许多工作将目标检测和IS视为同一任务,因为IS可以通过在目标检测中添加一个简单的掩码预测头来实现。类似地,视频目标检测(VOD)旨在检测每个视频帧中的目标。在本文的调查中,还研究了用于目标检测和VOD的基于查询的目标检测器。点云分割是另一个分割任务,目标是将点云中的每个点分割成预定义的类别。可以将语义分割、实例分割和全景分割的相同定义应用于此任务,从而产生点云语义分割(PCSS)、点云实例分割(PCIS)和点云全景分割(PCPS)。Referring segmentation是一项旨在对自然语言文本输入中描述的目标进行分割的任务。Referring segmentation有两个子任务:Referring图像分割(RIS)和Referring视频对象分割(RVOS),前者实现语言驱动的分割,后者根据所需的文本输入对视频中的特定目标进行分割和跟踪。最后,视频目标分割(VOS)涉及通过预测每一帧中的逐像素掩码来跟踪视频中的目标,给定第一帧中目标的掩码。

数据集

表2列出了常用的分割数据集。

02d17f6a57d5311b7c0f1d056a2997cd.png

Transformer之前的分割方法

语义分割:在ViT和DETR出现之前,SS通常被认为是一个密集像素分类问题,正如FCN最初提出的那样。然后,以下工作都是基于FCN框架进行的。这些方法可以分为以下几个方面,包括更好的编码器-解码器框架、更大的kernel、多尺度池化、多尺度特征融合、non-local建模、高效建模以及更好的边界划定。Transformer提出后,以全局上下文建模为目标,几项工作设计了自注意算子的变体,以取代CNN预测头。

实例分割:IS旨在检测和分割每个目标,这超出了目标检测的范围。大多数IS方法专注于如何表示目标检测之外的实例掩码,可分为两类:自顶向下的方法和自底向上的方法。前者用一个额外的掩模头扩展了物体探测器。掩模头的设计是多种多样的,包括FCN头、各种掩模编码和动态卷积。后者从语义分割映射执行实例聚类以形成实例掩码。自顶向下方法的性能与检测器的选择密切相关,而自底向上方法取决于语义分割结果和聚类方法。

全景分割:PS之前的工作主要集中在如何更好地融合SS和IS的结果,将PS视为两个独立的任务。基于IS子任务,根据生成实例掩码的方式,以前的工作也可以分为两类:自顶向下和自底向上。

视频分割:VSS的研究主要集中在更好的时空融合或在视频中使用额外线索进行加速。VIS需要对每个实例进行分段和跟踪。大多数VIS方法侧重于学习实例式的空间、时间关系和特征融合。

点云分割:该任务旨在将点云分组为语义或实例类别,类似于图像和视频分割。根据输入场景的不同,通常将其分为室内场景或室外场景。室内场景分割主要包括点云语义分割(PSS)和点云实例分割(PIS)。PSS通常使用PointNet来实现,而PIS可以通过两种方法来实现:自顶向下的方法和自底向上的方法。

方法综述

本节基于类似DETR的元架构,论文回顾了基于transformer的分割的关键技术。如图3所示,元架构包含一个特征提取器、目标查询和一个transformer解码器。

3eaf0246b383237a71a2907f46bd1a3e.png

元结构

主干:在ViT之前,CNN是计算机视觉任务中特征提取的标准方法。为了确保公平的比较,许多研究工作使用了相同的CNN模型,如ResNet50。一些研究人员还探索了将CNN与自注意力层相结合来对长程依赖性进行建模。另一方面,ViT利用标准的transformer编码器进行特征提取。它有一个特定的图像输入管道,其中输入图像被分割成固定大小的补丁,例如16* 16大小的补丁。然后通过线性嵌入层对这些补丁进行处理。然后,将位置嵌入添加到每个patch中。之后,一个标准的transformer编码器对所有补丁进行编码。它包含多个多头自注意和前馈层。

Neck:特征金字塔网络(FPN)已被证明在尺度变化建模的目标检测和实例分割中是有效的。FPN将来自不同阶段的特征映射到解码器的相同信道维度C中。一些工作通过使用膨胀或可变形卷积的跨尺度建模设计了更强的FPN。例如,Deformable DETR提出了一种可变形FPN,用于使用可变形注意力对跨尺度融合进行建模。Lite DETR通过以交错方式对高级特征和低级特征进行有效采样,进一步完善了可变形的跨尺度注意力设计。输出特征用于对方框和掩码进行解码。

目标查询:目标查询是在DETR[22]中首次引入的。它充当检测器中使用的动态锚点。在实践中,它是一种可学习的嵌入。表示最大实例数。查询维度d通常与特征通道c相同。目标查询通过交叉注意力层进行细化。每个目标查询表示图像的一个实例。在训练过程中,每个GT都被分配了一个相应的查询用于学习。在推理过程中,选择得分较高的查询作为输出。因此,目标查询通过消除对手工制作的组件(如非最大值抑制(NMS))的需要,简化了检测和分割模型的设计。

Transformer Decoder:Transformer 解码器是基于Transformer 的分割和检测模型中的关键架构组件。其主要操作是交叉注意力。对于检测,FFN预测目标边界框的标准化中心坐标、高度和宽度。对于分割,使用输出嵌入来执行具有特征F的点积,进一步输出二进制掩码logits。Transformer 解码器迭代地重复交叉注意力和FFN操作,以细化目标查询并获得最终预测。中间预测用于训练期间的辅助损失,并在推理期间丢弃。解码器最后一级的输出被作为最终的检测或分割结果。图3(b)中显示了详细的过程。

掩码预测表示:基于Transformer的分割方法采用两种格式来表示掩模预测:将像素预测表示为FCN,将permask-wise表示为DETR。前者用于语义感知分割任务,包括SS、VSS、VOS等。后者用于实例感知分割任务中,包括is、VIS和VPS,其中每个查询表示每个实例。

二分匹配和损失函数:在训练过程中,目标查询通常与二分匹配[117]相结合,唯一地分配GT的预测。这意味着每个目标查询都会在训练过程中建立一对一的匹配。这种匹配是基于GT和预测之间的匹配成本。匹配成本被定义为预测和GT之间的距离,包括标签、方框和掩码。通过匈牙利算法[117]最小化成本,每个目标查询都由其相应的基本事实进行分配。对于目标检测,每个对象查询都使用分类和框回归损失进行训练[111]。对于实例感知分割,每个目标查询都经过分类损失和分割损失的训练。输出掩码是通过目标查询和解码器特征之间的内积获得的。分割损失通常包括二进制交叉熵损失和dice损失[118]。

方法分类

表3中总结了方法、技术、相关任务和相应的参考文献。

b9db0c4195eaeeac48c4f4342bbdfef1.png

Strong Representations

学习一个强大的特征表示总是能得到更好的分割结果。以SS任务为例,SETR[202]是第一个用ViT骨干取代CNN骨干的任务。它在ADE20k数据集上实现了最先进的结果,没有任何麻烦。在ViT之后,研究人员开始设计更好的视觉转换器。本文将相关工作分为三个方面:更好的视觉transformer设计、混合CNN/transformer/MLP和自监督学习。

更好的ViT设计:这些工作没有引入local bias,而是遵循原始的ViT设计和处理功能,使用原始的MHSA进行token混合。

混合CNN/transformer/MLP:许多工作不是修改ViT,而是将local bias引入到ViT中,或者直接使用具有大kernel的CNN。

自监督学习:SSL近年来取得了巨大的进步[138],[139]。与监督学习相比,SSL更好地利用了未标记的数据,并且可以很容易地扩展。

解码器中的交互设计

本节回顾了transformer解码器的设计。论文将解码器设计分为两组:一组用于图像分割中的改进交叉注意力设计,另一组用于视频分割中的时序交叉注意力设计。前者侧重于设计一个更好的解码器来细化原始DETR中的原始解码器。后者将基于查询的目标检测器和分割器扩展到视频领域,用于VOD、VIS和VPS,重点是建模时间一致性和关联性。

改进交叉注意力设计:交叉注意力是用于分割和检测的元架构的核心操作。当前用于改进交叉注意力的解决方案主要集中于设计新的或增强的交叉注意力算子和改进的解码器架构。

时序交叉注意力设计:在视频域中扩展目标查询后,每个目标查询都表示跨不同帧的跟踪目标,如图4所示。

335898c7bfba34c146a60eb11a813589.png

优化目标查询

与Faster RCNN[111]相比,DETR[22]需要更长的收敛时间表。由于目标查询的关键作用,一些方法已经开始研究如何加快训练进度和提高性能。根据目标查询的方法,本文将以下文献分为两个方面:添加位置信息和采用额外监督。位置信息提供了对查询特征进行采样以进行更快训练的提示。除了DETR中的默认损失函数外,额外的监督重点是设计特定的损失函数。

添加位置信息:Conditional DETR发现,DETR中的交叉注意力高度依赖于用于定位四个极端的内容嵌入。作者引入了条件空间查询来明确地探索极值区域。采用额外监督:DN-DETR发现二分图匹配的不稳定性导致了DETR的缓慢收敛,并提出了去噪损失来稳定查询学习。特别是,作者将带有噪声的GT边界框输入到变换器解码器中,并训练模型来重建原始框。

使用查询进行关联

得益于查询表示的简单性,最近的几项工作将其作为解决下游任务的关联工具。主要有两种用法:一种用于实例级关联,另一种用于任务级关联。前者采用了实例判别的思想,例如视频中的实例匹配问题,如联合分割和跟踪。后者采用查询到链接的特征进行多任务学习。

实例级关联:该领域的研究可以分为两个方面:一个是设计额外的跟踪查询,另一个是直接使用目标查询。

任务级关联:一些作品使用目标查询来链接不同任务之间的特征,以实现互利。与直接融合多任务特征不同,使用对象查询融合不仅选择了最具判别力的部分进行融合,而且比密集特征融合更有效。

Conditional Query Fusion

除了使用目标查询进行多任务预测外,还有几项工作对跨模态和跨图像任务采用了条件查询设计。该查询是以任务输入为条件的,并且解码器头使用这样的条件查询来获得相应的分割掩码。根据不同输入的来源,论文将这些作品分为两个方面:语言特征和图像特征。

表4中列出了代表作的比较。

2cf3159eb0cba0221727a36e8cf51126.png

相关领域及其他领域

本节将重新审视采用ViT进行分割任务的几个相关领域。这些领域包括点云分割、域感知分割、标签和模型高效分割、类别不可知分割、跟踪和医学分割。表5中列出了几部具有代表性的作品进行比较。

faf0db512c5f211ae07e769b093e559d.png

点云分割

语义级点云分割:与图像分割和视频语义分割一样,采用transformer进行语义级处理主要侧重于学习强表示。一些工作还专注于更好的预训练或提取2D预训练模型的知识,如PointBert等。

实例级点云分割:以前的PCIS/PCPS方法基于手动调整的组件,包括预测自上而下方法的手工选择的几何特征的投票机制,以及用于对自下而上方法的投票进行聚类的启发式方法。这两种方法都涉及许多手工制作的组件和后处理。Transformer在实例级点云分割中的使用类似于图像或视频域,大多数作品使用二分匹配作为室内和室外场景的实例级掩码。

调整基础模型

论文将本节分为两个方面:视觉适配器设计和开放式词汇学习。前者引入了新的方法,使预先训练的大型基础模型适应下游任务。后者尝试通过预训练视觉语言模型和对不可见分割数据集的零样本知识传递来检测和分割未知对象。视觉适配器设计的核心思想是提取基础模型的知识,并设计更好的方法来适应下游设置。对于开放式词汇学习,核心思想是将预先训练的VLM特征与当前检测器对齐,以实现新的类别分类。

Vision Adapter and Prompting Modeling:根据NLP中即时调整的想法,早期的工作在冻结基础模型中采用了可学习的参数,以更好地传输下游数据集。这些工作使用小型图像分类数据集进行验证,并获得比原始零样本结果更好的结果[209]。同时,有几项工作为视频识别任务设计适配器和冻结基础模型。特别地,预先训练的参数被冻结,并且只有少数可学习的参数或层被调谐。

Open Vocabulary Learning:最近的研究集中在开放词汇和开放世界环境中,他们的目标是检测和分割训练中没有看到的新类别。与零样本学习不同,开放词汇设置假设大量词汇数据或知识可以为最终分类提供线索。

Domain-aware Segmentation

域适应:无监督域自适应(UDA)旨在将用源(合成)域训练的网络自适应为目标(真实)域,而不访问目标标签。UDA有两种不同的设置,包括语义分割和目标检测。

多数据集分割:多数据集分割的目标是学习不同领域的通用分割模型。MSeg重新定义了分类法,并通过重新标记几个现有的语义分割基准来对齐像素级注释。

标签和模型高效分割

弱监督分割:弱监督分割方法学习具有较弱注释的分割,例如图像标签和对象框。对于弱监督语义分割,先前的工作使用类激活图(CAM)改进了典型的CNN管道,并使用改进的CAM作为训练标签,这需要额外的模型来进行训练。

无监督分割:无监督分割在没有任何标签的情况下实现分割。在ViTs之前,最近的进展利用了自监督学习的思想。DINO发现自监督ViT特征自然包含关于输入图像分割的明确信息。研究发现,CLS标记和特征之间的注意力映射描述了对象的分割。移动端分割:大多数基于transformer的分割方法都有巨大的计算成本和内存需求,这使得这些方法不适合移动设备。与以前的实时分割方法不同,移动分割方法需要部署在移动设备上,同时考虑功率成本和延迟。

类不可知分割和跟踪

细粒度目标分割:一些应用程序,如图像和视频编辑,通常需要目标掩码边界的细粒度细节。大多数基于transformer的方法都采用了视觉transformer,因为它们具有细粒度的多尺度特征和长程上下文建模。

视频目标分割:最近的VOS方法主要集中在设计更好的基于内存的匹配方法。受图像识别任务中Non-local network的启发,代表作STM是第一个采用跨帧注意力的作品,其中先前的特征被视为记忆。

医学图像分割

CNN在医学图像分析方面取得了里程碑式的成就。特别是,U形架构和skip-connection[335],[336]已被广泛应用于各种医学图像分割任务。随着ViTs的成功,最近的代表作将视觉转换器引入U-Net架构,并取得了更好的效果。

基准结果

图像分割数据集的主要结果:

6619f85b8ee3f500f35e0396cc60d2da.png 763f504fd752f67c57c57c4d113b8de1.png 3874d14535bea19102dd6e9a276e4de2.png

视频分割数据集的主要结果

0febc1688ca9575143c12be6504fb86d.png d9a57098c09e055ccdb92ecf825a122b.png 5701829c892786a5ad67f6f841390e97.png

未来方向

  • 通用和统一的图像/视频分割:使用Transformer来统一不同的分割任务是一种趋势。最近的工作使用基于查询的转换器来使用一种架构执行不同的分割任务。一个可能的研究方向是在各种分割数据集上仅通过一个模型来统一图像和视频分割任务。这些通用模型可以在各种场景中实现通用和稳健的分割,例如,检测和分割各种场景中的稀有类有助于机器人做出更好的决策。这些将在包括机器人导航和自动驾驶汽车在内的多个应用中更加实用和稳健。

  • 多模态联合学习:由于缺乏inductive biases,Transformer在处理任何形式时都是通用的。因此,使用Transformer来统一视觉和语言任务是大势所趋。分割任务提供像素级提示,这也可能有利于相关的视觉语言任务,包括文本图像检索和字幕生成。最近的工作在一个通用转换器架构中联合学习分割和视觉语言任务,这为跨多模态组合分割学习提供了方向。

  • 针对分割的终身学习:现有的分割方法通常在具有一组预定义类别的封闭世界数据集上进行基准测试,即假设训练和测试样本具有预先已知的相同类别和特征空间。然而,现实场景通常是开放的世界和非平稳的,其中新的类可能连续发生。例如,在自动驾驶车辆和医疗诊断中,可能会意外出现看不见的情况。在现实和封闭世界场景中,现有方法的性能和能力之间存在明显差距。因此,希望将新的概念逐渐且持续地纳入分割模型的现有知识库,使该模型能够终身学习。

  • 动态场景中的长视频分割:长视频带来了一些挑战。首先,现有的视频分割方法被设计用于处理短视频输入,并且可能难以在较长时间内关联实例。因此,新方法必须结合长期内存设计,并考虑更长时间内实例的关联。其次,长时间保持分割遮罩的一致性可能很困难,尤其是当实例移入和移出场景时。这需要新的方法来结合时间一致性约束并随着时间的推移更新分割掩码。第三,长视频中可能会出现严重遮挡,因此准确分割所有实例具有挑战性。新的方法应该结合遮挡推理和检测来提高分割的准确性。最后,长视频输入通常涉及各种场景输入,这会给视频分割模型带来领域鲁棒性挑战。新方法必须结合领域自适应技术,以确保模型能够处理不同的场景输入。简言之,解决这些挑战需要开发新的长视频分割模型,该模型结合了高级内存设计、时间一致性约束、遮挡推理和检测技术。

  • 生成式分割:随着更强的生成模型的兴起,最近的工作通过生成建模解决了图像分割问题,其灵感来自更强的变换器解码器和扩散模型中的高分辨率表示。采用生成式设计避免了转换器解码器和对象查询的设计,使整个框架更加简单。然而,这些生成模型通常会引入复杂的训练管道。需要一个更简单的培训渠道来进行进一步的研究。

  • 基于视觉推理的分割:视觉推理要求机器人理解场景中物体之间的连接,这种理解在运动规划中起着至关重要的作用。先前的研究已经探索将分割结果作为视觉推理模型的输入,用于各种应用,如对象跟踪和场景理解。联合分割和视觉推理可能是一个很有前途的方向,有可能为分割和关系分类带来互利。通过将视觉推理融入分割过程,研究人员可以利用推理的力量来提高分割精度,而分割可以为视觉推理提供更好的输入。

结论

这项调查对基于Transformer的视觉分割的最新进展进行了全面回顾,据论文所知,这是第一次。本文涵盖了基本的背景知识和transformers之前的工作概述,并总结了120多个用于各种分割任务的深度学习模型。最近的作品根据分割器的元架构分为六类。此外本文回顾了五个密切相关的领域,并报告了几种具有代表性的分割方法在广泛使用的数据集上的结果。为了确保公平的比较,本文还在相同的设置下重新对几部代表作进行了基准测试。最后指出了基于Transformer的视觉分割的未来研究方向。

参考

[1] Transformer-Based Visual Segmentation: A Survey

以下是一个基于transformer图像分割代码示例: ```python import torch import torch.nn as nn import torch.nn.functional as F class Transformer(nn.Module): def __init__(self, in_channels, out_channels, num_heads, hidden_dim, num_layers): super(Transformer, self).__init__() self.in_channels = in_channels self.out_channels = out_channels self.num_heads = num_heads self.hidden_dim = hidden_dim self.num_layers = num_layers self.transformer_encoder = nn.TransformerEncoder( nn.TransformerEncoderLayer(d_model=in_channels, nhead=num_heads, dim_feedforward=hidden_dim), num_layers=num_layers) self.conv1 = nn.Conv2d(in_channels, hidden_dim, kernel_size=3, padding=1) self.conv2 = nn.Conv2d(hidden_dim, out_channels, kernel_size=1) def forward(self, x): # input shape: [batch_size, in_channels, height, width] # apply 3x3 convolution x = F.relu(self.conv1(x)) # reshape to fit transformer input shape x = x.permute(2, 3, 0, 1) # [height, width, batch_size, hidden_dim] x = x.reshape(x.shape[0]*x.shape[1], x.shape[2], x.shape[3]) # [height*width, batch_size, hidden_dim] # apply transformer x = self.transformer_encoder(x) # reshape to fit convolutional output shape x = x.reshape(x.shape[0]//self.num_heads, self.num_heads, x.shape[1], x.shape[2]) # [height*width, num_heads, batch_size//num_heads, hidden_dim//num_heads] x = x.permute(2, 3, 0, 1) # [batch_size//num_heads, hidden_dim//num_heads, height, width, num_heads] x = x.reshape(x.shape[0], x.shape[1], x.shape[2], x.shape[3]*x.shape[4]) # [batch_size//num_heads, hidden_dim//num_heads, height, width*num_heads] # apply 1x1 convolution x = self.conv2(x) return x ``` 该模型包含一个Transformer编码器和两个卷积层,以将输入图像转换为分割掩码。在前向传递期间,输入图像首先通过一个3x3卷积层,然后转换为适合Transformer输入形状的张量。接下来,将该张量输入Transformer编码器进行变换。最后,将输出张量转换为适合卷积层的形状,并通过1x1卷积层生成分割掩码。 使用此代码示例时,您应该将其与其他训练代码和数据集集成,并根据您的实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值