Segment Anything Model (SAM):论文解读(导读)

Segment Anything Model (SAM):论文解读(导读)

论文地址:https://arxiv.org/abs/2304.02643
项目地址:https://github.com/facebookresearch/segment-anything

前一段时间Meta 发布了号称能分割一切的大模型SAM。论文我看了下,算上参考文献有30多页,而且一半都是附录。今天给大家简单介绍下这篇论文的大概,后面有时间再逐步剖析这篇论文。

模型定位与论文结构

在这里插入图片描述
模型定位为一个能“分割一切”的分割基础大模型,它能通过“提示”(promptable)的方式进行分割,因此可以零样本迁移到下游其他任务(如实例分割、边缘检测等)以及其他分布的数据集上。

论文分正文和附录两个部分,其中附录内容甚至比正文还要长,这是因为Meta把实现的细节都在附录部分详细介绍了,两个部分内容有交叉重复。整体来看,论文主要介绍从这三个角度进行了介绍:任务(Task)、模型结构(Model)以及数据引擎(Data engine)。
在这里插入图片描述

任务

如图1(a)所示,SAM要实现能通过多种提示(prompt)方式进行分割。在chatgpt中,我们可以输入文字作为提示得到我们想要的答案,在SAM中,我们的提示有多种,有:point(在图片上点个点儿)、box、mask(类似于涂鸦)、text(比如:cat)。也就是说,我们可以输入图片和任意一种提示,就可以得到分割结果(具体如何实现的我们在模型部分介绍)。

然而还有一点需要考虑的是,如果输入的是“模糊”的提示,该如何处理?如下图第二列,我们点了个点儿作为提示,那么我们是想分割什么?书包?人?还是拉链?
在这里插入图片描述

模型

模型结构如下图所示:
在这里插入图片描述

SAM的模型结构比较简单,由三个部分组成:Image-encoder、promt- encoder以及mask-decoder。在推理阶段,模型的工作流程为:输入图片经过image-encoder得到image-embedding,输入promp经过promt- encoder得到prompt-embedding ,两个embedding同时输入到mask-decoder得到分割mask。这儿要说的是,论文说,图像只需要输入到Image-encoder一次,后面只需根据我们的需要选择提示方式以及生成mask(可以多次输入提示,生成不同的mask)。因此论文中说,在image embedding给定的情况下,可以很快得到分割mask:
在这里插入图片描述

Image-encoder

没啥可说的,用了一个MAE预训练的ViT。在这里插入图片描述

prompt-encoder

对于mask类型的提示,文中使用卷积讲mask转为embedding;points使用位置编码(别的论文的编码方式,详见原文);box使用一对位置编码(左上角和右下角);text提示直接使用CLIP的text-encoder。
在这里插入图片描述

mask-decoder

这部分结构如下所示:
在这里插入图片描述
这儿相比于transformer的decoder有一些改进,比如block中有一个token to image attention(更新token的)和image to token attention(更新image-embedding的)。
需要注意的是,这儿只用了两个block, 也就是说decoder部分非常浅,这也是文中说它高效的原因(计算量少)。从另一个角度上考虑,我们指导transformer一般堆得很深来保证能力,而这儿只用了两层,说明它主要还是靠image-encoder的特征提取能力。
经过两层block后,image-embedding经过反卷积,token经过3层mlp后,二者点乘获得mask。

数据引擎

我们知道,chatgpt得益于从web上获得的大量语料库,然而分割却无法获得这么多数据(主要还是标注mask很难大量获得)。
因此,论文提出了这个数据引擎,在训练中实现“左脚踩右脚螺旋升天”。通过这种方法,论文也提出刘一个大规模数据(SA-1B)在这里插入图片描述
数据引擎一共分成三个阶段:模型辅助标注、半自动、全自动标注。文中也大量介绍了数据集相关的内容,感兴趣的朋友可以看看原文。
在这里插入图片描述

下游迁移应用

论文给了四个zero-shot迁移应用的例子:Zero-Shot Single Point Valid Mask Evaluation、Zero-Shot Edge Detection、Zero-Shot Object Proposals、Zero-Shot Instance Segmentation。
举个例子,对于实例分割,我们可以使用一个目标检测器获得box,然后拿它作为prompt输入到SAM中获得实例分割结果。
总之,还有很多作者未提及的迁移应用方法等待我们去探索。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值