FastSAM
FastSAM
论文地址 https://arxiv.org/abs/2306.12156
代码地址 https://github.com/CASIA-IVA-Lab/FastSAM.git
最近提出的分段任意模型(SAM)在许多计算机视觉任务中产生了重大影响。它正在成为许多高级任务的基础步骤,如图像分割、图像字幕和图像编辑。然而,其巨大的计算成本使其无法在行业场景中得到更广泛的应用。计算主要来自高分辨率输入的Transformer架构。在本文中,我们为这项基本任务提出了一种具有可比较性能的加速替代方法。通过将任务重新表述为分段生成和提示,我们发现具有实例分段分支的常规CNN检测器也可以很好地完成该任务。具体而言,我们将该任务转换为研究充分的实例分割任务,并仅使用SAM作者发布的SA-1B数据集的1/50直接训练现有的实例分割方法。使用我们的方法,我们在50倍的运行时速度下实现了与SAM方法相当的性能。我们给出了充分的实验结果来证明它的有效性。
1.Introduction
SAM被认为是里程碑式的视觉基础模型,它可以通过各种用户交互提示来引导图像中的任何对象的分割。SAM利用在广泛的SA-1B数据集上训练的Transformer模型,使其能够熟练处理各种场景和对象。SAM开创了一个令人兴奋的新任务,即Segment Anything。由于其通用性和潜力,这个任务具备成为未来广泛视觉任务基石的所有要素。然而,尽管SAM及其后续模型在处理segment anything任务方面展示了令人期待的结果,但其实际应用仍然具有挑战性。显而易见的问题是与SAM架构的主要部分Transformer(ViT)模型相关的大量计算资源需求。与卷积模型相比,ViT以其庞大的计算资源需求脱颖而出,这对于其实际部署,特别是在实时应用中构成了障碍。这个限制因此阻碍了segment anything任务的进展和潜力。
本文设计了一个实时解决方案,称为FastSAM,用于segment anything任务。本文将segment anything任务分解为两个连续的阶段,即全实例分割和提示引导选择。第一阶段依赖于基于卷积神经网络(CNN)的检测器的实现。它生成图像中所有实例的分割掩码。然后在第二阶段,它输出与提示相对应的感兴趣区域。通过利用CNN的计算效率,本文证明了在不太损失性能质量的情况下,可以实现实时的segment anything模型。
(a) Fast SAM 和 SAM 在单个 NVIDIA GeForce RTX 3090 上的速度比较。
(b) 在 BSDS500 数据集上进行边缘检测的比较。
(c ) COCO 数据集上对象提议的 Box AR@1000 评估中 Fast SAM 和 SAM 的比较。SAM 和 FastSAM 都使用 PyTorch 进行推理,只有 FastSAM(TRT) 使用 TensorRT 进行推理。
本文提出的FastSAM基于YOLACT方法的实例分割分支的目标检测器YOLOv8-seg。
此外,还采用了由SAM发布的广泛SA-1B数据集,通过仅在SA-1B数据集的2%(1/50)上直接训练该CNN检测器,它实现了与SAM相当的性能,但大大降低了计算和资源需求,从而实现了实时应用。
本文还将其应用于多个下游分割任务,展示了其泛化性能。在MS COCO 上的对象提议任务中,该方法在AR1000上达到了63.7,比使用32×32点提示输入的SAM高1.2点,但在单个NVIDIA RTX 3090上运行速度提高了50倍。
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701125615800-457367581.png)
实时的segment anything模型对于工业应用非常有价值。它可以应用于许多场景。
所提出的方法不仅为大量视觉任务提供了新的实用解决方案,而且速度非常快,比当前方法快几十倍或几百倍。此外,它还为通用视觉任务的大型模型架构提供了新的视角。对于特定任务来说,特定的模型仍然可以利用优势来获得更好的效率-准确性平衡。
在模型压缩的角度上,本文方法通过引入人工先验结构,展示了显著减少计算量的可行路径。
本文贡献可总结如下:
- 引入了一种新颖的实时基于CNN的Segment Anything任务解决方案,显著降低了计算需求同时保持竞争性能。
- 本研究首次提出了将CNN检测器应用于segment anything任务,并提供了在复杂视觉任务中轻量级CNN模型潜力的见解。
- 通过在多个基准测试上对所提出的方法和SAM进行比较评估,揭示了该方法在segment anything领域的优势和劣势。
2.Preliminary
回顾了分段任意模型,并对分段任意任务进行了明确的定义。
Segment Anything Model 提出了在大规模视觉数据集上的训练方法和性能。SAM提供了高精度的识别分割性能,在零样本任务中表现出独特的能力。作为一个基础模型,它不仅展示了强大的交互式分割方法,还展示了在各种分割任务中的卓越适应性,从而扩展了计算机视觉的视野。SAM是理解开放世界形象的基础模型潜力的一个引人注目的例子,然而SAM面临着一个重大限制——缺乏实时处理能力。这限制了它在即时分割结果至关重要的场景中的广泛应用。
Segment Anything Task 分割任务被给定任何形式的提示的情况下,都会生成有效的分割掩码的过程。这些提示的范围包括前景/背景点集、粗略框或遮罩、自由格式文本或指示要在图像中分割的内容的任何信息。我们已经发现,在大多数实际应用中,分段任何任务都可以有效地分解为两个阶段。第一阶段涉及检测和分割图像中的所有对象,就像全景分割过程一样。第二阶段取决于提供的提示,以将感兴趣的特定对象从分割的全景中分离出来。该任务的解耦显著降低了其复杂性,从而提供了提出任何模型的实时分段的可能性。
3. Methodology
3.1. Overview
下图展示了FastSAM网络架构图。该方法包括两个阶段,即全实例分割和提示引导选择。
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701130656907-321698792.png)
前一个阶段是基础阶段,第二个阶段本质上是面向任务的后处理。与端到端的Transformer方法不同,整体方法引入了许多与视觉分割任务相匹配的人类先验知识,例如卷积的局部连接和感受野相关的对象分配策略。这使得它针对视觉分割任务进行了定制,并且可以在较少的参数数量下更快地收敛。
FastSAM包含两个阶段:全实例分割(AIS)和提示引导选择(PGS)。
先使用YOLOv8-seg 对图像中的所有对象或区域进行分割。然后使用各种提示来识别感兴趣的特定对象。主要涉及点提示、框提示和文本提示的利用。
3.2. All-instance Segmentation
Model Architecture.
YOLOv8 的架构是基于其前身YOLOv5 发展而来的,融合了最近算法(如YOLOX 、YOLOv6 和YOLOv7 )的关键设计。YOLOv8的主干网络和特征融合模块(neck module)将YOLOv5的C3模块替换为C2f模块。更新后的头部模块采用解耦结构,将分类和检测分开,并从基于Anchor的方法转向了基于Anchor-Free的方法。
Instance Segmentation
YOLOv8-seg应用了YOLACT的实例分割原理。它通过主干网络和特征金字塔网络(Feature Pyramid Network, FPN)从图像中提取特征,集成了不同尺度的特征。输出包括检测分支和分割分支。检测分支输出目标的类别和边界框,而分割分支输出k个原型(在FastSAM中默认为32个)以及k个掩码系数。分割和检测任务并行计算。分割分支输入高分辨率特征图,保留空间细节,并包含语义信息。该特征图经过卷积层处理,上采样,然后通过另外两个卷积层输出掩码。与检测头部的分类分支类似,掩码系数的范围在-1到1之间。通过将掩码系数与原型相乘并求和,得到实例分割结果。
YOLOv8可以用于各种目标检测任务。而通过实例分割分支,YOLOv8-Seg非常适用于segment anything任务,该任务旨在准确检测和分割图像中的每个对象或区域,而不考虑对象的类别。原型和掩码系数为提示引导提供了很多可扩展性。例如,可以额外训练一个简单的提示编码器和解码器结构,以各种提示和图像特征嵌入作为输入,掩码系数作为输出。在FastSAM中,本文直接使用YOLOv8-seg方法进行全实例分割阶段。
3.3 Prompt-guided Selection
在使用YOLOv8成功地对图像中的所有对象或区域进行分割后,segment anything 任务的第二阶段是利用各种提示来识别感兴趣的特定对象。这主要涉及到点提示、框提示和文本提示的利用。
Point prompt.
点提示的目标是将所选点与第一阶段获得的各种掩码进行匹配,以确定点所在的掩码。类似于SAM在方法中采用前景/背景点作为提示。在前景点位于多个掩码中的情况下,可以利用背景点来筛选出与当前任务无关的掩码。通过使用一组前景/背景点,我们能够选择感兴趣区域内的多个掩码。这些掩码将被合并为一个单独的掩码,完整标记出感兴趣的对象。此外,还可以利用形态学操作来提高掩码合并的性能。
Box prompt.
框提示涉及将所选框与第一阶段中对应的边界框进行IoU(交并比)匹配。目标是识别与所选框具有最高IoU得分的掩码,从而选择感兴趣的对象。
Text prompt.
在文本提示的情况下,我们使用CLIP模型提取文本的相应嵌入。然后,确定与每个掩码的固有特征进行匹配的图像嵌入,并使用相似度度量方法进行匹配。选择与文本提示的图像嵌入具有最高相似度得分的掩码。
通过精心实施这些基于提示的选择技术,FastSAM可以可靠地从分割图像中选择特定的感兴趣对象。上述方法为在实时情况下完成segment anything任务提供了高效的方式,从而极大地增强了YOLOv8模型在复杂图像分割任务中的实用性。对于更有效的基于提示的选择技术,将留待未来探索。
4. Experiments
首先分析了FastSAM的运行效率。
然后,我们在实际场景、效率和部署中对四个零任务以及应用程序进行了实验。在实验的第一部分,我们的目标是测试Fast-SAM和SAM在能力上的相似性。在SAM之后,我们还测试了四个不同级别的任务:(1)低级:边缘检测,(2)中级:对象建议生成,(3)高级:实例分割,最后,(4)高级:用自由格式文本输入分割对象。我们的实验还进一步验证了FastSAM在实际应用和速度方面的能力。
实施细节。除非另有说明,否则以下条件适用:(1)FastSAM采用YOLOv8-x[16]模型作为其架构的主要部分,输入大小为1024;(2) FastSAM的训练是在SA-1B数据集的2%上进行的[19];(3) 我们使用默认的超参数集为100个时期训练模型,除了边界框重新划分模块中的reg max从16更改为26以预测大型实例
4.1. Run-time Efficiency Evaluation
SAM使用Transformer架构来构建端到端算法。Transformer是一个通用的体系结构,可以表示各种任务的多种形式的映射函数。为了分割任何东西,SAM通过对大规模数据的学习过程来学习视觉导向的归纳偏见。相反,利用人类在结构设计中的先验知识,FastSAM获得了一个相对紧凑的模型。从图3中可以看出,FastSAM产生了相对令人满意的结果。在表1中,我们报告了SAM和Fast-SAM在单个NVIDIA GeForce RTX 3090 GPU上的运行速度。可以看出,FastSAM在所有提示次数上都超过了SAM。此外,FastSAM的运行速度不会随着提示而改变,这使其成为Everything模式的更好选择。
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701133210840-727043071.png)
4.2. Zero-Shot Edge Detection
Approach. FastSAM是使用BSDS500在边缘检测的基本低级任务上进行评估的。具体来说,我们从Fast-SAM的所有实例分割阶段的结果中选择掩码概率图。之后,将Sobel滤波应用于所有掩码概率图,以生成边缘图。最后,我们以边缘NMS步骤结束
Results.
代表性的边缘图如图4所示。根据定性观察,尽管FastSAM的参数明显较少(仅68M),但它产生了一个总体良好的边缘图。与基本事实相比,FastSAM和SAM都倾向于预测更多的边,包括一些在BSDS50中没有注释的逻辑边。表2定量地反映了这种偏差。表2显示,我们使用SAM获得了类似的性能,特别是更高的R50和更低的AP
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701133335999-1338617257.png)
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701134115228-1877133361.png)
4.3. Zero-Shot Object Proposal Generation
Background.
略
我们直接使用FastSAM第一阶段生成的边界框作为对象建议。为了评估性能,我们在LVIS[13]和COCO[25]数据集上进行了测试,遵循现有的评估策略。除此之外,在SAM的实验设置之后,我们还通过使用第一阶段的所有实例掩码来测试掩码建议的准确性。
Details.
我们在LVIS数据集上报告了SAM、ViTDet[23]和FastSAM的结果。由于SAM没有公布其详细的评估代码,我们使用官方LVIS评估代码[13]复制了类别不可知的掩码和盒子召回。然而,我们未能重现SAM报告[20]中提出的ViTDet和SAM的Mask AR结果。尽管如此,我们认为我们的评估结果仍然反映了FastSAM与SAM相比的几个特点。
Results.
结果如表3、4和5所示。结果表明,我们的方法在盒子方案生成任务中具有显著的优势。表3显示了COCO验证集上各种方法的平均召回率(AR)。其中,EdgeBoxes[38]、Geodesic[21]、Sel.Search[34]和MCG[2]是不需要训练的方法,而DeepMask[29]和OLN[17]是在COCO训练集中对VOC类别进行训练的监督方法,然后在所有类别中进行测试。相反,我们的方法和SAM[20]实现了完全零样本传输。从表中可以看出,我们的方法和SAM[20]在AR@10与之前的监督方法(如OLN[17])相比,精度更高。然而,在AR@1000,我们的方法显著优于OLN[17]。这是因为以前的方法是在COCO中的某些类别上训练的,导致在推理过程中这些猫自我的置信水平更高。然而,由于我们的方法和SAM是零样本,这导致不同类别的置信水平平衡,从而召回COCO中没有的更多类别。更多的比较可以在图5中看到。
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701134151915-1287172808.png)
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701134250179-986543203.png)
在表4中,我们报告了bboxAR@1000VitDet-H[23]、SAM[20]和我们的方法在LVIS v1数据集上的结果。我们的方法大大超过了SAM计算最密集的模型SAM-H E64,超过了5%。然而,与在LVIS数据集上训练的VitDet-H[23]相比,它还不够。产生这些结果的原因是,在我们的训练过程中,我们使用了地面实况(gt)边界框(bbox)信息作为监督信号。另一方面,SAM[20]仅使用掩码作为监控信号,其推理时的bbox是通过从掩码中提取外盒来生成的
4.4. Zero-Shot Instance Segmentation
与SAM方法类似,我们通过使用ViTDet[23]生成的边界框(bbox)作为提示来完成实例分割任务。如第3.3节所述,我们选择具有最高并集交集(IoU)的掩码,并将bbox作为预测掩码
表6给出了评估结果。在这项任务上,我们未能实现高AP。我们推断这主要是由于分割掩模的准确性或基于框的掩模选择策略。第6节给出了几个例子
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701135130777-269211486.png)
4.5. Zero-Shot Object Localization with Text Prompts
我们在图6中显示了定性结果。FastSAM可以根据文本提示很好地分割对象。无论如何,文本到掩模分割的运行速度并不令人满意,因为每个掩模区域都需要输入到CLIP特征提取器中。如何将CLIP嵌入提取器组合到FastSAM的骨干网络中,仍然是关于模型压缩的一个有趣的问题
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701135328679-105021746.png)
5. Real-world Applications
Anomaly Detection.
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701135521422-155258006.png)
Salient Object Segmentation.
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701135551979-1267510945.png)
Building Extracting.
![img](https://img2023.cnblogs.com/blog/2009774/202307/2009774-20230701135633998-1192981698.png)
6. Discussion
略
7. Conclusion
在本文中,我们重新思考了 Segment Anything 的任务和模型架构选择,并提出了一种替代方案,其运行速度比 SAM-ViT-H (32 × 32 )快 50 倍。
实验证明,Fast SAM 可以很好地解决多个下游任务。然而,Fast SAM 还存在一些可以改进的弱点,例如评分机制和实例掩码生成范式。这些问题将留待未来的研究解决。