Segment Anything Model (SAM)
本质是一个带prompt的图像大模型
prompt
demo:Segment Anything | Meta AI
points(位置编码):不只是一个点,可以多点,甚至加点减点
box(位置编码)
everything:基于32*32的网格点,推理时可调整
text(通过clip一类的模型获取词嵌入):只有论文有,demo中没体现。纯text提示效果不是特别好,不如text+point的形式。这里有意思的点是训练时用了图像嵌入,推理时用了文本嵌入。
“““
首先通过CLIP等模型生成词嵌入,作为提示词输入到SAM模型中,得到对应物体的MASK。我们考虑了一个更高层次的任务:从自由格式的文本中分割对象。这个实验证明了SAM处理文本提示的能力。虽然在之前的所有实验中我们都使用了完全相同的SAM,但在这个实验中,我们对SAM的训练过程进行了修改,使其能够识别文本,但这种方式并不需要新的文本注释。具体来说,对于每个手动收集的面积大于1002的掩码,我们提取CLIP图像嵌入。然后,在训练过程中,我们将提取的CLIP图像嵌入作为SAM的第一次交互。这里的关键观察是,由于CLIP的图像嵌入是与其文本嵌入对齐的,因此我们可以使用图像嵌入进行训练,但使用文本嵌入进行推理。也就是说,在推理时,我们将文本通过CLIP的文本编码器运行,然后将得到的文本嵌入作为提示给SAM(详见附录D.5)
”””
mask(卷积):图里有简单mask作为prompt,demo里没有。


多个mask输出处理prompt的歧义,针对单个提示预测多个输出掩码,3个掩码输出足以处理大多数常见情况。
结构
图像编码器:基于MAE(vit)
提示编码器:
考虑两组提示:稀疏提示(点、框、文本)和密集提示(掩码)。我们用位置编码[95]来表示点和框,并将其与每种提示类型的学习嵌入和来自CLIP的现成文本编码器中的自由格式文本相加。密集提示(即掩码)使用卷积进行嵌入,并与图像嵌入进行逐元素相加。
掩码解码器:
掩码解码器能够高效地将图像嵌入、提示嵌入和输出标记映射到一个掩码。采用了一个经过修改的Transformer解码器块,后面跟着一个动态掩码预测头。我们修改后的解码器块在两个方向上(从提示到图像嵌入和从图像嵌入到提示)使用提示自注意力和交叉注意力来更新所有嵌入。运行两个块之后,我们对图像嵌入进行上采样,并且一个多层感知机(MLP)将输出标记映射到一个动态线性分类器,然后该分类器计算图像每个位置的前景掩码概率。
代码
代码及结构解读
【大模型系列】一文看懂SAM大模型_sam模型-CSDN博客
https://www.51cto.com/article/790784.html
推理
如果只是想试验效果,最方便的不是看各种博客,而是看官方git代码,作者提供了notebooks下的3个ipynb进行推理。并且sam无需编译,对环境要求不高,只要自己下载个模型文件即可。
predictor_example.ipynb可以尝试不同prompt下及其可视化效果,multimask_output 参数控制是否需要多种mask输出
automatic_mask_generator_example.ipynb 支持无prompt时的自动分割,并提供了几个参数调整效果
onnx_model_example.ipynb基于onnx
sam2
最大的变化是支持视频分割,还有就是速度、准确率、实时、zero-shot 泛化
SAM2(segment anything 2)使用指南【1】:使用SAM2分割图片,根据不同提示信息分割图片-CSDN博客
扩展阅读
【持续更新】Segment Anything Model (SAM)分割一切大模型相关论文和项目介绍_分割一切模型 在线-CSDN博客
其他在sam上的研究主要有以下方向:
- 给one-shot 解决尺度歧义
- count数数
- 处理特殊对象,具体方法包括:自适应、自动生成提示
- 轻量化
- 提升效果
- 提速
论文解读
更多推荐



所有评论(0)