写点什么

SAM 方法调研

作者:AI阿辉
  • 2024-03-23
    浙江
  • 本文字数:3029 字

    阅读完需:约 10 分钟

SAM 方法调研

Segment anything 方法提出这么久了(震惊,提出都快一年了),针对它改进的哪些方法是更快更好的,适合边缘端侧部署的呢?

在这里,占个坑,汇总整理记录一下

方法记录

SAM 2023.4

project:https://segment-anything.com/

Paper:https://arxiv.org/abs/2304.02643

SAM 提供的模型目前分为 ViT-B,ViT-L,ViT-H,默认为 ViT-H。主要是 image encoder 的区别。

数据集:SA-1B。包括 10 亿个掩码和 1100 万张图像


模型结构如上图 1(b)。prompt 经过 prompt encoder, 图像经过 image encoder。两部分 embedding 融合后的特征经过一个 lightweight mask decoder 得到最终的 mask。

ViT-H image encoder 是 452 ms,SegEvery 1616 ms (32*32)

参考:https://juejin.cn/post/7245838232012996668

基于 SAM 相关的项目整理汇总:https://zhuanlan.zhihu.com/p/630529550 (包括目标检测,图像修复...)

值得强调的是:

目前官方放出代码(Demo)的输入 Prompt 是点,框,出最后的任意实例 mask,这个简称为 SegAny

另一种模式是不需要提示词,直接输出图像中所有合适的实例 mask,这个简称为 SegEvery

(text prompt 效果没有放出来,想要有这个效果的可以参考 Grounded-SAM)这两种模式是有区别的,下面的很多方法在自己论文里讲的很标题党,什么 7 倍,40 倍的,都是有前提条件的。

我会根据实际情况公平比对。

FastSAM 2023.6.21

Code:https://github.com/CASIA-IVA-Lab/FastSAM

Demo:https://replicate.com/casia-iva-lab/fastsam

Paper:https://arxiv.org/pdf/2306.12156


轻量级 CNN 模型(YOLOv8-x)+ Seg 分支作为模型架构,在 2% 的 SA-1B 数据集上训练。

网络结构和 SAM 没有什么关系

整个流程分为全实例分割和提示引导选择两个阶段。图像分成多个小块,CNN 检测器对每个小块进行检测,检测到的对象边界框输入到实例分割模型,生成对象的实例掩码,所有掩码组合就是完整的图像分割掩码。

Point 输入:点与第一阶段的 mask 进行匹配

Box 输入:IoU 最大的 mask 即为匹配结果

Text 输入:利用 CLIP 将 mask 区域和 text 映射到同一空间,相似性计算,输出最相似区域

效果:

SegEvery 实现了 50 倍(32×32)的运行速度提升,另外具备文本引导的效果(CLIP)

优势在于任何模式都是一样的时间,因为它就是 YOLOv8 + Seg,第一次就输出全部 mask 了

参考:https://blog.csdn.net/a486259/article/details/131453794

MobileSAM 2023.6.27

Code:https://github.com/ChaoningZhang/MobileSAM

Paper:https://arxiv.org/pdf/2306.14289.pdf

原始 SAM 中的 image encoder 太重了,所以 MobileSAM 在这方面做文章:

解耦 encoder 和 decoder,采用更轻量型的 Encoder 替换 SAM 的重量级 Encoder,在 1% 数据训练。

作者将 image encoder 和 mask encoder 进行解耦:

将 ViT-H 的知识蒸馏到轻量级图像编码器 TinyViT, 缩小 image encoder

然后,finetune mask encoder 来对齐蒸馏小的 image encoder

效果:SegAny 模式大约需要 10 ms 比 FastSAM 快 4 倍,体积小 7 倍(论文里强调的快 4 倍就是这个前提)

SegEvery 模式比不过 FastSAM,人家是固定的 40 ms 出结果,MobileSAM 没说要多久,按它的方法设定大概需要 8+1600 = 1608 ms。

定性结果上,MobileSAM 输出的 mask 质量比 FastSAM 更好

参考:https://blog.csdn.net/amusi1994/article/details/131467638

EfficientSAM 2023.12.1

Code:https://github.com/yformer/EfficientSAM

Meta 公司出的,

出发点和 MobileSAM 一样,用更轻量化的 encoder 替换 ViT-H,但是训练方式用的不一样。

利用掩码自编码器以 SAM 图像编码器的特征嵌入作为重建目标在 ImageNet-1K 上预训练 SAMI。SAMI 预训练完成后,丢弃解码器,将轻量级编码器作为 EfficientSAM 的图像编码器,在 SA-1B 上进行微调。

效果:

SegAny 模式,用了一种新的方式来比较效率,在有一个 box prompt 的前提下,算法每秒处理图像数。

速度和质量都好于 MobileSAM

(人家 FastSAM 和 MobileSAM 都直接给出了大致的运行 time,到你这又用了新的标准)

看上图吞吐量略小于其他两个方法,那 SegEvery 模式的运行速度自然也是比不过它们。

CVPR 2024 录用,555 满分论文。

参考(标题党)文章:加快20倍!Meta重磅提出EfficientSAM:快速分割一切!-CSDN博客

RepViT-SAM 2023.12.10

Project:https://jameslahm.github.io/repvit-sam/

Code:https://github.com/THU-MIG/RepViT

Paper:https://arxiv.org/abs/2312.05760

MobileSAM 采用的 TinyViT 还是有大量内存和计算开销。RepViT 将 ViT 的设计融入 CNN,在移动设备上实现了性能和延迟的平衡

所以本办法将 RepViT 的 RepViT-M2.3 作为图像编码器提取图像特征,采用 1% 的 SA-1B 数据进行训练。(训练过程和 MobileSAM 一样)

在应用方面,该方案进行了多种任务适配,如 Mask 预测、边缘检测。

效果

给出了在 iPhone 上的运行时间

运行效率和效果比 MobileSAM 好,不过可惜同一时刻,EdgeSAM 登场了。

EdgeSAM 2023.12.11

Project:https://www.mmlab-ntu.com/project/edgesam/

Code:https://github.com/chongzhou96/EdgeSAM

Paper:https://arxiv.org/abs/2312.06660

EdgeSAM 采用和 RepViT-SAM 一样的 image encoder :RepViT。但是它还做了额外的改进。

分析不同蒸馏策略并证实:任务不可知的编码器蒸馏难以学习到 SAM 所具备的全部知识

提出:循环使用 bbox 与 point 提示词,同时对提示词编码器与 Mak 解码器进行蒸馏,以便于蒸馏模型能够准确的学习到提示词与 Mask 之间的复杂关系

参考:【论文解读】EdgeSam:可在手机上运行的轻量化SAM

SegAny 模式,速度和精度都是比 MobileSAM 高,无法和 EfficientSAM 完全进行定量的公平对比。

SegEvery 模式,速度还是传统的 encoder + decoder = 5 + 1024 * 1 = 1029ms

(https://github.com/chongzhou96/EdgeSAM/issues/5)

作者放出来的 demo video 看上去效果很好,基本完成了在移动端上交互得到 mask 的需求。

结果比 RepViT-SAM 更好

MobileSAMv2 2023.12.15

Code:https://github.com/ChaoningZhang/MobileSAM

解决 SAM 中 SegEvery 的效率瓶颈 mask decoder,采用了具有对象感知的框提示,替代默认的网格搜索点提示

核心就是用目标检测算法(YOLOv8)的边界框作为提示框来进行分割

区别于 MobileSAM(目标是更快的 SegAny),MobileSAMv2 目的就是更快的 SegEvery

SegEvery 模式需要 47 + 50 = 97ms(320 个目标)。比 MobileSAM 快 16 倍

所以如果目的就是 SegEvery 要更快,那么就是在 FastSAM 和 MobileSAMv2 之间选

TinySAM 23.12.22

Code:https://github.com/xinghaochen/TinySAM

Demo:https://openxlab.org.cn/apps/detail/shuh15/TinySAM

Paper:https://arxiv.org/abs/2312.13789


网络架构没有变化

全阶段知识蒸馏,模型后量化,层次化分割

SegEvery 模式是一个分层策略,如上图所示,替代了原来的 32*32 的点网格采样,减少了 50% 的候选对象,大致为 512 个目标。

效果:

SegEvery 模式。精度上比 FastSAM 和 MobileSAM 好,速度比 MobileSAM 好,大致为 930 ms

据称比 sam 的 everything 推理加速两倍

EfficientViT-SAM 2024.2.7

https://github.com/mit-han-lab/efficientvit

【论文阅读】【二维图像分割】EfficientViT-SAM: Accelerated Segment Anything Model Without Performance Loss

截止 2024 年 2 月 24 号, 目前看上去又快又好的方法

总结

目前移动端部署有现成代码的:MobileSAM

目前看上去在移动端上 Demo 效果最好的:EdgeSAM

目前看上去性能最好的:EfficientViT-SAM

接下来我会根据它们实际的效果做尽量公平的对比


发布于: 刚刚阅读数: 7
用户头像

AI阿辉

关注

某司工程师 2020-02-04 加入

AI计算机视觉算法工程师

评论

发布
暂无评论
SAM 方法调研_深度学习_AI阿辉_InfoQ写作社区