Segment Anything Model (SAM)
是一款基础模型,专用于图像分割任务,以其在多样应用中的强大泛化能力而闻名。然而,它的出色性能伴随着显著的计算和资源需求,这使得在资源有限的环境(如移动设备)中进行部署变得具有挑战性。为了解决这个问题,已经提出了多种 SAM 变体,以提高效率而不牺牲准确性。
本综述首次全面回顾了这些高效的 SAM 变体。我们首先探讨推动该研究的动机,然后介绍 SAM 和模型加速中使用的核心技术。接下来,深入分析各种加速策略,并按方法进行分类。最后,提供了对这些方法的统一和全面的评估,评估它们在代表性基准上的效率和准确性,并对它们的整体性能进行明确比较。
最近,Meta提出了一种新型的基础模型,用于通用图像分割,即
Segment Anything Model (SAM)
。SAM 完全在他们提出的 SA-1B 数据集上进行训练,该数据集包含超过十亿个mask和一千一百万张图像,旨在通过任何提示(例如点、框、mask和文本)实现有效的分割。SAM 能够很好地泛化到广泛的下游任务(如边缘检测、目标提议和实例分割),只需提供适当的提示。SAM 的出现引起了研究界的广泛关注,并催生了大量相关工作,探索 SAM 在各种场景中的泛化能力,包括不同的图像分割任务、视频分析任务和 3D 视觉任务。随着 SAM 的巨大成功,升级版的
Segment Anything Model 2 (SAM 2)
也随之提出,旨在高效分割图像和视频。SAM 2 引入了流式内存机制,以扩展 SAM 在视频处理中的能力。它在 SA-1B 数据集和新收集的视频分割数据集 SA-V 上进行训练。因此,SAM 2 自然具备强大的泛化能力,并在处理分割任务时超越了 SAM。
尽管 SAM 在广泛应用中取得了成功,原始的 Segment Anything Model (SAM),特别是 SAM-H,由于运行速度慢和计算成本高面临显著的局限性。在资源受限或实时环境(如边缘设备和移动应用)中部署 SAM 时,这些挑战尤为明显。随着对在实际资源受限场景中部署机器学习模型的需求不断增加,SAM 当前的设计在广泛使用中显得效率低下。这导致了对更轻量级、高效变体的迫切需求,这些变体可以在满足模型强大分割能力的同时应对这些限制。优化 SAM 以提高效率的挑战进一步加剧,因为在实时应用、移动平台和嵌入式系统中对计算资源的需求越来越高。随着研究界努力克服这些障碍,全面了解在提高 SAM 效率方面的最新进展变得至关重要。因此,开展一项详细的调查,以研究提高 SAM 效率和扩展其在多样环境中的适用性的努力,是及时且必要的。
随着与 SAM 相关的研究不断增加,已有若干调查从不同角度提供了概述。然而,这些现有的调查主要集中在 SAM 的下游应用上,并存在几项
局限性
:
没有一项调查关注到提高 SAM 效率的新兴领域,而这一领域正在获得重要关注,对实际应用的部署至关重要。
本调查的其余部分组织如下。在第2节中,我们首先介绍原始 SAM 的背景,然后回顾可以应用于提高 SAM 效率的高效视觉表示骨干和模型压缩技术。在第3节中,我们根据目标和技术对现有方法进行分类,详细回顾每个类别。我们还讨论了进一步加速 SAM 的几个潜在研究方向。在第4节中,我们对这些模型在效率、准确性和相应的权衡方面进行公平评估。最后,在第5节中,我们简要总结了本次调查。
最近,
Segment Anything Model 2 (SAM 2)
被提出作为继任者,专注于高效的可提示视觉分割 (PVS),适用于图像和视频。为了使 SAM 2 能够在视频中分割任何内容,研究人员在 SAM 的原始架构中引入了流式记忆机制。SAM 2 采用两阶段训练:
在 SA-1B 数据集上进行可提示分割任务的预训练;
在混合数据上进行可提示分割任务的训练,处理图像和视频。
与 SAM 类似,研究人员开发了一个数据引擎,以创建一个用于视频分割的大规模数据集,命名为 SA-V 数据集。该数据集最终收集了 50,900 个视频中的 642.6K 个mask(视频中的对象分割)。在本次调查中,将 SAM 2 视为高效的 SAM 变体,并将其纳入评估和比较中。
2.1.1 模型
SAM 由三个主要组成部分构成:图像编码器、提示解码器和mask解码器,如下图 1(a) 所示。图像编码器是一个经过微小修改的 MAE预训练视觉Transformer (ViT)。它将预处理后的图像作为输入,并为每张图像输出一个图像嵌入。提示解码器用于嵌入提示:点、框、mask和文本。这两个嵌入然后输入到轻量级mask解码器,该解码器基于两个修改过的Transformer解码器块和一些预测头,生成有效的mask。
基于 SAM 的架构,SAM 2 额外引入了流式记忆机制。具体来说,这个机制包括一个记忆编码器、一个记忆库和一个记忆注意模块。SAM 2 的结构如上图 1(b) 所示。通过记忆机制,SAM 2 能够逐帧处理视频。记忆编码器生成当前帧的预测记忆并将其发送到记忆库。记忆库存储最近的预测、提示帧的特征图以及目标对象的高级语义信息(即对象指针)。记忆注意机制使来自图像编码器的图像嵌入与来自记忆库的信息充分交互,从而得到精细化的嵌入。除了记忆机制,SAM 2 还采用 MAE 预训练的 Hiera作为图像编码器,这比 ViT-H 更高效,预期可以实现更快的速度。
2.1.2 任务
可提示分割任务被提出作为 SAM 的基本任务,其目标是根据任何给定的提示(例如一个点、一个框、一个mask或文本)返回有效的mask。这个任务不仅是 SAM 训练过程中的目标,也是使 SAM 能够解决各种下游任务的基础。另一个重要任务是全mask生成,它会对图片中的所有对象进行分割。通过使用点网格对 SAM 进行提示,并根据这些稠密的提示预测mask来实现。全mask生成也是数据引擎最后阶段中的关键步骤,旨在增强 SA-1B 中mask的多样性。如下图 2 所示,可提示分割任务称为 Segment Anything (SegAny),而全mask生成任务则称为 Segment Everything (SegEvery)。这两个任务总结了 SAM 的分割能力,并为提升 SAM 效率指明了两个研究方向。在本次调查中,我们遵循这两个定义,探讨基于 SAM 的高效变体在 SegAny 和 SegEvery 任务中的表现。
2.1.3 应用
由于 SAM 及其继任者 SAM 2 在大量零样本下游任务中展示了强大的泛化能力,研究界正深入探索它们在更多场景中的应用。
SAM 的一个主要应用领域是
医学图像分割
。根据[157]的说法,该领域的工作可以分为两类。一类旨在测试 SAM 在 CT 图像、MRI 图像、病理图像等中的分割性能。另一类则专注于通过微调、自动提示或框架修改来提高 SAM 在这些任务中的适应性。此外,像[35, 57]这样的研究试图提高医学 SAM 方法的效率。SAM 还被应用于不同现实场景中的对象检测,包括土木基础设施缺陷评估中的裂缝检测和陨石坑检测,农业中的作物病虫害检测,异常检测和遥感。此外,Segment Anything 已被改编为 Edit Everything、Inpaint Anything和 Caption Anything来处理图像编辑任务。
除了图像分割任务,SAM 还广泛应用于各种视频任务。大量研究集中于两个基本任务:视频对象分割 (VOS)和视频对象跟踪 (VOT)。研究人员还探索了 SAM 在生成相关任务中的应用,例如视频超分辨率和视频数据集标注生成。除此之外,SAM 还作为视频编辑任务中的一个中间工具被进一步利用。除了 2D 任务,SAM 还扩展到 3D 视觉领域。研究[100]将 SAM 应用于 3D 重建,而研究[28]则将其应用于 3D 点云分割。最近的工作[134]旨在实现在线设置下的任何 3D 物体的实时分割。对于最近提出的 SAM 2,已经有一些研究探索其在图像和视频任务中的应用。一个流行的趋势是将 SAM 2 应用于医学图像和视频任务。像[27, 99, 135]这样的研究评估了 SAM 2 在 2D 和 3D 模态下医学图像中的表现,而一些其他研究[75, 140]则测试了其在外科视频分割任务中的表现。研究人员还在寻找更好地将 SAM 2 适应医学任务的策略。此外,SAM 2 还被应用于一些特定的图像分割任务,如数字病理语义分割、网格部件分割和太阳能电池板分割。此外,一些研究[70, 113]利用 SAM 2 在具有挑战性的规模化视频对象分割 (LSVOS) 任务中取得了良好的结果。
2.1.4 局限性
尽管 SAM 在各种任务中表现出色,但在实际应用中仍面临两个关键挑战:
它通常难以为精细结构预测完整的mask,从而导致边界不精确;
它不是实时的,资源消耗仍然很高,特别是在使用像 ViT-H 这样的重型图像编码器时。
为了解决这些问题,研究如[49, 54]旨在通过利用高分辨率图像来改善mask质量,而其他研究[131, 147, 161, 164]则专注于创建更高效的架构,以减少 SAM 的时间和资源消耗。之前的调查[78, 100, 158]已探讨了提高 SAM 质量结果的最新进展。在本次调查中,我们专注于提高 SAM 效率的努力。
2.2 高效骨干网络
SAM 的低效主要源于其重量级的图像编码器。SAM 图像编码器的尺寸详见表 1,并在后面小节中提供了 SAM 总参数的进一步估算,比如在 SAM-H 中,ViT-H 图像编码器包含大约 632M 个参数,而模型的总大小为 641M,这意味着图像编码器占模型参数的大部分。即使在最小的变体 SAM-B 中,图像编码器仍占总参数的 90% 以上。因此,快速有效地加速 SAM 的一种方法是用更高效的骨干网络替换大型图像编码器。这些高效的骨干网络可以包括纯卷积神经网络 (CNN)、高效视觉Transformer架构以及最近的Transformer替代模型[87]。
在将 KD 应用于加速 SAM 时,目标是从原始的较大 SAM 中提取知识,并将其传授给更高效的 SAM 类模型。鉴于 SAM 的编码器-解码器架构,KD 通常可以分为两种方法:蒸馏整个 SAM 模型或仅蒸馏图像编码器。大多数工作,如 [84, 103, 117, 147, 159],专注于仅蒸馏高效主干,同时保留原始 SAM 的提示编码器和掩膜解码器。然而,其他方法,如 [162, 164],旨在通过监督编码器和解码器的输出来蒸馏整个模型。
其中 b, s 分别表示低精度中的位数和缩放因子,Clamp(x, a1, a2) 将整数 x 限制在 a1/a2 之间,即当 或 时进行裁剪。神经网络的量化主要分为两种类型:后训练量化 (PTQ) 和量化感知训练 (QAT)。PTQ 在使用小的校准数据集对完全训练的模型进行量化,以减轻精度损失,而 QAT 在训练期间将模型调整为低精度,需用完整的训练数据集。因此,QAT 通常比 PTQ 更昂贵且效率较低。许多 PTQ 方法已针对 CNN和基于Transformer的架构开发。在加速 SAM 的背景下,如 [77, 103] 的研究利用 PTQ 技术,通过针对性策略压缩 SAM 以提高效率。
2.3.3 剪枝
模型剪枝通过消除冗余的权重或连接来减少模型的大小和复杂性,同时尽量保持精度。剪枝方法通常分为两种类型:结构化剪枝和非结构化剪枝 。结构化剪枝根据特定标准以组的方式删除参数,系统性地针对通道、层或块等子结构。相比之下,非结构化剪枝则专注于单个权重,通常导致稀疏和碎片化的网络。然而,由于剩余网络结构的不规则性,非结构化剪枝可能在一般硬件上并未带来有效的加速。在 [18] 中,应用结构化剪枝来减轻 SAM 的重量,通过移除大量冗余权重显著减少了模型的大小,同时保留了大部分 SAM 的能力。
本节回顾了自 SAM 受到关注以来,为开发轻量级高效的 SAM 类模型所做的努力。这些工作旨在降低模型的高计算成本并实现高效性能,同时保持 SAM 强大的分割能力和泛化能力。正如前面所述,SAM 解决了两个主要任务,包括 Segment Anything (SegAny) 和 Segment Everything (SegEvery)。因此,我们分别讨论旨在改进每个任务的研究:首先,关注加速 SegAny 任务,然后涵盖加速 SegEvery 任务的努力。值得注意的是,一些方法适用于这两个任务,将单独讨论这些贡献。此外,根据所采用的技术将所有模型分类,并在下图 3 中呈现方法论的分类。最后,概述了该领域未来研究的四个潜在方向。
3.1 加速 SegAny 任务
正如前面所分析的,SegAny 任务的主要瓶颈在于 SAM 的庞大架构。一种直接的解决方案是用更高效的主干替换编码器。或者,采用保持与 SAM 相同分割能力的不同架构也是一种方法。遵循这些策略的工作要么涉及完全从头开始训练轻量级模型,要么使用合适的监督进行知识蒸馏训练模型。此外,一些研究探索量化、剪枝或局部优化等方法,以直接压缩 SAM,而不替换编码器或构建新架构。
3.1.1 从头开始训练
本小节聚焦于完全从头开始训练 SAM 变体的工作。根据它们的架构,这些模型可以分为两种类型:与 SAM 架构不同的架构和类似 SAM 的架构。我们将按照这种分类详细探讨每种类型。
FastSAM 是第一个不依赖于 SAM 原始编码器-解码器架构的 SAM 变体之一。为了实现更快的分割,它将 SegAny 任务分为两个子任务:全实例分割和基于提示的选择。由于实例分割已被许多基于 CNN 的方法有效解决,FastSAM 提供了比基于Transformer的 SAM 更高的效率。对于实例分割,FastSAM 采用 YOLOv8-Seg 模型,并使用 YOLACT 方法来提升性能。FastSAM 可以使用点、框或文本作为提示,可靠地预测感兴趣的物体。除了加速 SegAny 任务外,FastSAM 还在 SegEvery 任务中表现出色,因为这可以与全实例分割高效地实现。然而,作为 SAM 的早期高效变体,FastSAM 仍然存在一些局限性,例如对较小物体生成低质量mask和生成边界不够平滑的mask。尽管存在这些缺点,FastSAM 通过在该领域引入基于 CNN 的架构标志着显著的进展。FastSAM 的架构如下图 4 所示。
Chen 等人首先开发了一种有效的剪枝策略,以减少 SAM 的规模和复杂度,得到的模型称为 SlimSAM。如第 2.3.3 节所述,剪枝算法旨在以结构化或个别的方式删除冗余参数。在应用于 SAM 的重型编码器时,初始步骤涉及估计权重和激活值的重要性,以确定哪些应被剪枝。评估重要性的核心思想是评估给定参数有无的损失差异。SlimSAM 引入了扰动泰勒重要性方法,该方法使用一阶泰勒展开来近似参数的重要性,并引入高斯噪声N以防止梯度变为零。这个过程被公式化如下:
一旦参数的重要性被估计,便采用一种称为交替剪枝的策略来执行结构化剪枝和后对齐。基于 ViT 的编码器首先被分为两个子结构:嵌入层和瓶颈层。该策略在修剪嵌入/瓶颈层以减小模型规模和对齐瓶颈/嵌入层以保持模型质量之间交替进行,确保效率与性能的平衡。该过程的工作流程如下图 13 所示。