点击下方卡片,关注「AI视界引擎」公众号
SAM解决了两个实际但具有挑战性的分割任务:任何事物分割(SegAny),它使用一个特定点来预测感兴趣物体的Mask,以及所有事物分割(SegEvery),它预测图像上所有物体的Mask。SegAny对SAM来说速度较慢,因为其重量级的图像编码器,而MobileSAM通过解耦知识蒸馏解决了这个问题。
然而,SAM的SegEvery效率瓶颈在于其Mask解码器,因为它需要首先生成大量具有冗余网格搜索提示的Mask,然后执行过滤以获得最终有效Mask。作者提出通过仅使用有效提示直接生成最终Mask来提高效率。作者提出的做法不仅可以将Mask解码器的总时间减少至少16倍,而且还可以实现卓越的性能。
具体来说,作者的做法在LVIS数据集上,以mask AR@度量标准,对零样本物体 Proposal 的平均性能提升为3.6%(42.5% vs 38.9%)。定性结果表明,作者的方法生成的Mask非常精细,同时避免过度分割。本项目针对比原始SAM更快的SegEvery,称为MobileSAMv2,以与MobileSAM区分,MobileSAM旨在更快地SegAny。
此外,作者还证明了新提示采样与MobileSAM中的解耦图像编码器兼容,为高效的SegAny和SegEvery提供了统一的框架。
代码:https://github.com/ChaoningZhang/MobileSAM
1 Introduction
自然语言处理(NLP)领域被ChatGPT革新,这是生成人工智能(AIGC,即人工生成内容)发展史上的一个里程碑。GPT-series模型在网络文本数据集上进行训练,对于其发展起到了重要作用。随着基础模型在NLP领域的成功,视觉基础模型如CLIP通过对比学习联合学习文本编码器。
最近,一种称为SAM的视觉基础模型(简称为分割任何事物模型)被发布,以解决两个实用的图像分割任务:任何事物分割(SegAny)和所有事物分割(SegEvery)。这两个任务都执行无类别Mask分割,不同之处在于分割的目标。SegAny利用一个特定提示(如一个点或一个框)来分割图像中一个感兴趣的事物。相比之下,SegEvery旨在分割图像中的所有事物。SAM由于在两个任务上的出色表现,因此在各种应用中得到了广泛使用。
SAM在工作时与两个模块协同工作:基于Transformer的图像编码器(见图1)和提示引导的Mask解码器。当剩余部分不致混淆时,它们通常简称为图像编码器和Mask解码器。轻量级Mask解码器采用双向注意力机制,以实现图像表示和提示标记之间的有效交互,以生成细粒度Mask。SegAny速度较慢的原因是其图像编码器比Mask解码器重100+倍。这个问题由MobileSAM通过解耦方式蒸馏一个轻量级图像编码器得到解决。为了分割所有事物,SegEvery需要首先多次运行Mask解码器,以生成许多 Proposal Mask,并选择高质量且不重叠的。这使得计算瓶颈从图像编码转向Mask生成和过滤。
本质上,SegEvery不是可提示分割任务,因此可以使用不使用提示直接生成Mask。这种免提示方法已经尝试过,生成的Mask边界不太满意。双向注意力机制的Mask解码器解决这个问题,但代价是使SegEvery变得非常慢。为此,遵循SegEvery的做法,提示Mask解码器以保证生成的Mask质量,并通过减少提示数量来解决其低速问题。
SegEvery提示图像编码器使用网格搜索的前景点。当网格搜索稀疏时,许多小事物或具有意义的部分可能无法检测到。因此,SegEvery采用高网格密度,如零样本目标 Proposal 的64×64点,这通常会产生大量冗余提示。本质上,它采用了一种策略,先生成许多冗余的Mask,然后过滤掉冗余的Mask。从直觉上讲,这个过程可以通过只生成有效Mask来简化,从而节省Mask生成的时间和去除Mask过滤的需要。受此直觉的启发,作者提出了一种高效的提示采样方法,该方法寻求目标感知的提示。幸运的是,在现代目标检测中,这是一个已经得到很好解决的问题。
在本工作中,作者采用YOLOv8,该架构是使用边界框进行高效检测的SOTA(状态of the art)方法。为了避免过度拟合任何特定数据集,模型应在开放世界数据集上进行训练,其中选择SA-1B数据集的一部分作为子集。作者可以使用生成的框的中心作为目标感知的点提示,也可以直接采用框本身作为提示。点提示的一个问题是,它需要预测每个提示三个输出Mask来解决歧义问题。而框则更具有信息量,歧义较少,因此更适合在高效SegEvery中采用。总的来说,这个项目旨在使SegEvery更快,同时实现竞争力的性能。作者将这个项目称为MobileSAMv2,以与MobileSAM区分,MobileSAM旨在使SegAny更快。
总的来说,这项工作的贡献可以总结如下:
-
确定导致SAM中SegEvery速度慢的原因,并提出了目标感知的框提示来替换默认的网格搜索点提示,这显著提高了其速度,同时实现了总体优越的性能。
-
证明了提出的目标感知的框提示采样策略与MobileSAM中蒸馏的图像编码器兼容,这进一步为高效的SegAny和SegEvery提供了一个统一的框架。
2 Related Work
SAM的发展
自2023年4月以来,SAM已在许多GitHub项目和研究文章中得到广泛研究。其SegAny的性能已在各种具有挑战性的设置中得到研究,包括医学图像,伪装物体,和透明物体。总体而言,SAM展示了强大的泛化性能,但当设置变得更加具有挑战性时,可以改进。其在对抗设置下的泛化已在Attack-SAM中得到研究,表明SAM的输出Mask可以被恶意生成的扰动轻易地操纵。
后续工作进一步研究了在跨模型可迁移性和跨样本可迁移性中SAM中产生的对抗扰动性能。对SAM的全面健壮性评估已在后续工作中中得到研究,表明SAM对风格迁移、常见损坏、局部遮挡具有健壮性,但对对抗扰动不健壮。SAM的多样性已在另一项工作线中得到证明。
尽管SAM在原始论文SAM中证明与文本提示兼容,但此功能不包括在其官方代码中。基于SAM的项目Grounded SAM将Grounding DINO与SAM结合,实现文本引导的可提示分割。具体而言,Grounding DINO利用一个框生成一个边界框,可以作为SAM预测Mask的提示。Semantic Segment Anything引入CLIP为SAM预测的Mask分配标签。
SAM还展示了在图像编辑,修复任务和视频中的目标跟踪方面的多样性。除了2D,SAM还可以用于3D目标重构,即从单张图像中辅助3D模型生成。PersoanlizeSAM将SAM进行一次定制,实现个性化。已在[12]中引入高质量标记来提高预测Mask的质量。
类别无关分割
检测是计算机视觉中的基本任务,它将感兴趣的目标在图像上定位。检测大致通过一个框来定位目标,而分割则通过为每个像素分配一个Mask来执行更细粒度的定位。从给定的Mask中可以推导出一个框,但反过来则不行,这表明分割任务比检测任务更复杂。除了分配Mask外,图像分割(如语义分割)通常涉及从预定义的类别集中预测其相应的语义标签。然而,在实际应用中,因为实际世界中可能有无限个类别,这远远不够实用。
为此,一些研究工作试图通过不考虑其语义标签来扩展它们到开放世界。类别无关的目标检测首次正式提出于[Class-agnostic object detection],平均召回率被确立为评估其性能的度量,并作为新的预训练技术使用。多模态Transformer在[19]中展示出令人满意的性能。开集世界实例分割已广泛用于实现类别无关的检测和分割。与它们将目标视为整体不同,后续工作调查了开放世界物体部分的分割。
最近,SAM解决了SegEvery任务,该任务包括所有物体及其有意义部分的所有事物。已在多个GitHub项目中(CLIP-SAM,Segment-Anything-CLIP,segment-anything-with-clip)表明,使用SAM从SegEvery获得的类别无关分割Mask可以与CLIP结合,在开放世界中产生语义感知的分割。
3 Segment Everything
任务定义
传统的图像分割预测像素级的Mask及其相应的类别标签。然而,不同数据集之间的类别可以具有歧义。例如,CIFAR10数据集有一个_狗_类别,而ImageNet-1K有几百个类别来表示各种狗的品种。另一个设置可能将它们划分为小狗或成年狗,而不是它们的品种。这使得在考虑语义时开放世界图像分割变得不可行。当与标签预测解耦时,开放世界图像分割相对容易,但仍是一个具有挑战性的问题。没有语义信息,图像中的一个区域是否被认为是一个物体或由Mask表示的物品可以具有主观性。这种不准确的本质至少部分地与粒度的歧义有关。
例如,当粒度过大时,它可能只检测到一个大目标,而忽略其有意义的物体部分。当粒度过小时,每个像素都可以独立分割,这是琐碎且没有意义的。换句话说,开放世界图像分割需要分割所有事物,包括整个物体及其有意义的部分,即一切。本质上,这是一个在开放世界中执行零样本物体 Proposal 生成的类别无关分割任务。这个任务称为_SegEvery_,遵循SAM采用相同的名称以避免混淆。
提示感知解决方案
SAM是解决可提示分割任务的先驱工作。具体来说,它通过一个特定提示分割任何感兴趣的目标,称为SegAny。基于这个,SAM通过提示SAM解码器使用前景点的搜索网格来解决SegEvery任务。这种方法的一个潜在问题是,其性能高度依赖于网格密度。直觉上,网格密度越高,性能越好,但计算开销也会显著增加。
与MobileSAM解耦重型图像编码器以实现更快的SegAny不同,这个项目名为MobileSAMv2以进行术语区分,旨在通过提出一种新的采样策略来减少采样提示的数量,从而使SegEvery更快。作者的解决方案在提高效率的同时实现了总体优越的性能。在接下来的部分中,作者将说明作者解决方案背后的动机以及其详细的实现。
4 Method
Motivation and Framework
在SAM中提出的提示感知解决方案已经展示了在具有挑战性的SegEvery任务上的出色性能。它采用了一种先生成冗余Mask,然后过滤它们以获得最终有效Mask的策略。从直觉上讲,这个过程可能是不必要的繁琐,可以通过仅提示有效提示来简化,从而节省Mask生成的时间,且无需执行任何过滤。作者方法的核心在于将默认的网格搜索提示采样替换为目标感知的提示采样。
这种策略可以简化为确定图像上某个特定区域的物体是否存在。现代目标检测任务已经通过边界框定位物体来解决这个问题。大多数生成的边界框彼此重叠,因此需要预过滤后才能作为有效的提示使用。如果没有额外的先验知识,作者可以推理出过滤左边界框中心点作为前景点,并假设边界框中心点在物体上。
此外,SAM的Mask解码器也接受一个边界框作为提示。因此,作者还尝试直接使用剩下的边界框作为提示。总的来说,作者提出的SegEvery框架包括两个阶段:目标感知的提示采样和提示引导的Mask解码。第一阶段通过依赖现代目标检测网络来采样提示。第二阶段遵循SAM执行提示引导的Mask解码。
Object-Aware Prompt Sampling
目标发现已被广泛应用于某些情况(如视觉语言任务)作为避免全面滑动窗口搜索的前处理技术。受到它们的实践启发,作者提出利用目标发现来采样提示。本质上,目标发现是将目标定位为一个边界框,这是可以由现代目标检测模型实现但排除其分类头的方法。过去的十年中,目标检测模型的发展取得了巨大的进步。YOLO家族模型已成为实时性能方面的实际标准选择。
为了防止过度适应任何特定领域,所选的YOLOv8模型需要在一个开放世界数据集上进行训练,该数据集包括SA-1B数据集的较小子集。模型采用边界框和Mask的监督进行训练,然后仅使用边界框损失进行微调。这种训练方法也方便与提示免费方法进行比较。这样会产生许多重叠的边界框,需要在使用它们作为提示之前进行过滤。遵循标准做法,作者采用NMS来过滤重叠的边界框。在过滤后的边界框中,作者可以使用其中心作为目标感知的点提示,或者直接使用边界框本身作为提示。
在实践中,选择后者策略,原因有很多。尽管中心点是目标感知的,但它基于一个假设,即框内的目标覆盖了中心点。这在大多数情况下都是正确的,但在所有情况下都不是绝对的。点提示的另一个问题是,它需要预测三个输出Mask来解决歧义问题,这需要额外的Mask过滤。相比之下,框提示更有信息量,可以生成质量更高、歧义更少的Mask,从而减轻预测三个Mask的需要,因此对高效的SegEvery更有利。
Prompt-guided Mask Decoding
遵循SAM以批量方式进行提示引导的Mask解码。与图像编码器设置图像样本数量为批量不同,这里,批量概念是提示数量。值得注意的是,SAM中的提示引导的Mask解码器也接受一个边界框作为输入。因此,在技术上,直接提示Mask解码器一组保存了计算中心点过程的边界框是可以实现的。虽然这不是作者原始动机,但不会增加任何额外成本,作者发现这种做法可以带来非平凡的性能提升。换句话说,它可以被视为一种免费技巧来提高任务性能。在SAM中的提示感知解决方案需要进行Mask过滤。
经验上,作者发现这个过程非常慢,因为Mask是高维的。这与有效的框过滤不同,因为框只有四个维度。在作者提出的SegEvery框架中,这种繁琐的Mask过滤是可选的,因为作者可以通过仅提示有效提示来避免它。换句话说,作者保留所有生成的Mask,因为提示是以目标感知的方式进行抽样的。
5 Experiments
SegEvery在SAM中被视为一个零样本目标 Proposal 任务,使用标准平均召回(AR)作为性能评估的度量。作者遵循SAM中的做法,采用AR@K(K为允许的最大Mask数量)作为K proposals(mask AR@K)的Mask,其中K是允许设置的较大值。根据AR的定义,当K允许设置为较大值时,AR@K会更高,这构成一个更宽松的度量。然而,在SAM中,AR@1000只被报告,但作者选择报告AR@K,其中K的范围从10到1000。为了保持通用性并节省计算资源,作者选择在LVIS数据集中随机选择100张图像的结果进行报告。
Main Results
使得SegEvery比SegAny更耗计算的原因在于需要运行mask decoder与许多采样提示SAM。作者提出的目标感知提示采样通过减少总提示数量来提高其效率。接下来,作者将详细说明它们在所需计算时间方面的差异,大致将提示引导的mask decoding流水线分为两个阶段:提示编码(包括预采样)和mask decoding(包括后过滤)。mask decoding比简单的提示编码更耗计算。除了冗余采样提示外,SegEvery在SAM中通过将multi-mask选项设置为true生成了比所需(或AR@K允许)更多的Mask(或AR@K允许)。
具体来说,一个点可以提示mask decoder生成具有不同粒度(小、中、大)的三个输出Mask。将multi-mask选项设置为true已在SAM中证明可以实现SegEvery(如零样本目标 Proposal )的优越性能,但代价是要求过滤更多冗余Mask。实际上,作者发现(GPU处理的)mask过滤在SAM中可能比mask生成本身更不敏感,因为访问和从内存中删除高维Mask可能非常慢。感兴趣的读者建议查看他们的官方代码以获取详细信息。
直观上,在SAM中对网格搜索提示采样所需的时间取决于网格密度(见图1)。不同的任务可能需要不同的网格密度。在SAM的官方示例中,它采用32×32的网格密度,实现了效率和性能的良好折衷。对于零样本目标 Proposal 的评价,SAM中采用64×64的网格密度。
效率比较
SegEvery与提出的采样策略需要运行目标发现算法以获得目标感知的提示,这需要比SAM中的默认网格搜索采样更多的提示采样时间,但需要编码更少的提示。对于Mask生成,花费在Mask解码器上的时间与采样提示的数量成正比。作者发现,当提示数量接近320时,性能饱和,这是设置为检测框的最大数量。当目标发现生成的Mask数量少于320时,计算需求较少,这在许多情况下发生。然而,在进行效率分析时,作者将最耗计算场景(最大320提示)与网格搜索策略进行比较。
表2中的结果表明,提出的提示采样策略显著提高了(提示引导)Mask解码器的效率,至少提高了16倍。本文方法中用于提示编码的计算占非平凡的百分比,因为需要运行目标发现以进行提示采样。更高效的目标发现算法留待未来工作。
性能比较
遵循SAM中建议的零样本目标 Proposal 实现实践。默认为将网格密度设置为,生成总共()的Mask,然后根据mask AR@指标选择最多1000个Mask。尝试减少网格密度并/或设置multi-mask为false(单Mask模式)。
表3的结果表明,通过上述两种方法生成的Mask更少会导致性能下降,表明默认网格搜索采样策略高度依赖生成冗余Mask以选择最终所需的Mask。此外,通过比较SAM(默认网格搜索提示采样)和MobileSAMv2(提出的目标感知提示采样),可以得到多个重要观察结果。
首先,在使用相同类型的提示(点)并将multi-mask设置为false的条件下,作者发现MobileSAMv2(最大320个点)与SAM使用4096个点的性能相当,表明作者的提示采样策略中目标的感知性质显著避免了冗余。在将multitask设置为true时,默认的网格密度可以获得更高的性能(59.2%),这构成了网格搜索策略的最佳设置。
类似地,也可以通过将multi-mask设置为true来提高作者目标感知点采样的性能。需要注意的是,预测三个不同粒度的输出Mask的原因是为了解决点提示的歧义问题。相比之下,框提示要信息量大得多,可以大大减少歧义。这得到了表3中框提示在单Mask模式下性能显著提升的结果的支持。
最后,与网格搜索采样策略(个点,multi-mask模式)的最佳结果(59.2%)相比,提出的采样策略(最大320个框提示)可以达到可比的性能(59.3%)。当限制最大提示数为256时,作者的策略仍然在相同条件下获得具有竞争力的性能(58.5%)。
还在表4中报告了其他K值下的AR@。当设置为相对较小的值时,作者发现建议目标感知的采样策略,提示数量更少,会导致性能大幅提升。总体而言,提出的方法平均性能提升为3.6%(42.5% vs 38.9%)。
On the Compatibility with Distilled Image Encoders
在上述中,作者只考虑了提示引导的Mask解码器,然而整个 Pipeline 需要运行一次图像编码器,然后才能运行Mask解码器。如图1所示,对于网格搜索点采样,SegEvery的时间消耗在图像编码器上相对较小。
然而,当采用作者的目标感知提示采样策略时,Mask解码器上的时间减少到大约100毫秒。因此,考虑通过在SAM中替换原始的ViT-H图像编码器,而在MobileSAM项目中使用的一个提炼的图像编码器来减少图像编码器上的时间。使用不同提炼的图像编码器的结果如表5所示。
作者观察到,当使用EfficientViT-L2时,性能略有下降(从59.2%到56.3%)。考虑到EfficientViT-l2运行约为20ms,而ViT-H运行超过400ms,因此替换图像编码器是有价值的。由于MobileSAM中引入的解耦知识蒸馏的简单性和有效性,作者预计将出现更强大的提炼图像编码器,以进一步减轻性能下降。值得一提的是,MobileSAM和MobileSAMv2解决的是两个相互独立的 issue:更快地SegAny和更快地SegEvery。将它们结合在一起构成一个_统一的_框架,用于高效地SegAny和SegEvery。
6 Additional Comparison and Ablation Study
Comparison with Prompt-free Approach
正如Faster SAM中所述,SegEvery本质上不是一个可提示分割任务,因此可以以提示免的方式实现。这种方法已在Faster SAM中尝试,主要通过在YOLOv8-det中增加protonet模块来生成mask原型。实例mask是通过将mask原型与具有与原型维度相同长度(默认为32)的mask系数进行卷积获得的,这在数学上是点积。
在这里,作者指出SAM中的Mask解码器也通过将mask系数(称为mask tokenSAM)与mask原型(称为image embeddingSAM)进行点积来生成Mask,它们具有相同的(32)维度,以便计算点积。
直观上,生成的Mask质量取决于mask系数和mask原型的相互作用。SAM的Mask解码器采用双向注意力机制,在执行最终产品之前使mask原型和mask系数之间相互作用。这种相互作用是确保SAM中高质量Mask的关键基础。相比之下,提示免方法中没有显式的mask系数和mask原型的相互作用。
使用单个共享mask原型,它通常在图像的不同区域预测多个目标,因此需要边界框来裁剪Mask。这可以帮助移除框外的无关Mask,但仍然无法生成如SAM中那样高质量Mask,至少部分原因是由于mask系数和mask原型的相互作用不足。
尽管提示免方法实现了最快的速度,但它导致了非平凡的性能下降(见表6)。
提示免方法性能不满意的主要原因是mask边界(见图2)较差。与提示免方法相比,两个提示感知方法(SAM和MobileSAMv2)生成的Mask具有更细粒度的边界。SAM倾向于过度分割事物,而MobileSAMv2通过利用其目标感知属性来缓解这一趋势。
Ablation Study
采用mask AR@1000作为度量标准,作者发现建议采样策略通常生成的提示少于1000个,这促使作者探索建议的提示采样策略中最大(BBox)提示数量的影响。
表7的结果表明,增加BBox提示的数量对于更高的mask AR是有利的,但是当它接近320时会饱和。因此,默认将MobileSAMv2中的最大提示数量设置为320。
7 Conclusion and Future work
不同于MobileSAM项目通过蒸馏轻量级图像编码器使SegAny更快,本项目通过在提示引导的Mask解码器中提出新的提示采样策略使SegEvery更快。用目标感知提示采样替换网格搜索,显著提高了SegEvery的效率,同时实现了整体优越的性能。
作者还证明了作者目标感知的提示采样与MobileSAM项目中提炼的图像编码器兼容。总的来说,作者的工作是朝着一个统一的框架,用于高效的SegAny和SegEvery迈出的第一步。未来的工作需要寻找更优越的图像编码器和目标发现模型。
参考
[1]. MobileSAMv2: Faster Segment Anything to Everything
点击上方卡片,关注「AI视界引擎」公众号