深层次挖掘 Segment Anything Model 论文中的精华(1)

1,030 阅读14分钟

本文正在参加「金石计划」

初窥 Segment Anything Model (SAM) 模型

这个模型是 Meta AI 实验室研究出来的一个模型,能够在一张图像上,通过鼠标点选、选择矩形框、输入文字等方式进行交互,“高亮”分割出用户的意图目标。举例如下图所示,分为两部分,左边是一系列可用的操作方式,我之后用到的图片都是 meta 自带的图片,当然也支持上传自己的图片。右边是通过左边不同操作显示出来的图像分割结果。

我们可以进行的操作有图片中显示的“Hover & Click“、”Box“、”Everything" 和 “Cut-Outs”四种操作。“Hover & Click” 可以通过鼠标点选来展示用户要分割的目标,这里是一匹马:

image.png

”Box“ 可以通过鼠标拖拽出一个矩形框,来展示框中要进行分割的目标,这里是一只狗:

image.png

”Everything" 不需要任何的操作,可以将图片中所有可以分割的目标都展示出来,这里是一堆果蔬:

image.png

“Cut-Outs” 这个暂时还没有搞懂是什么意思,点上去没什么反应。

另外我们还可以和其他系统进行交互,比如 VR/AR ,或者和语音、文本交互。话题稍微扯远一点,我觉得这个东西有点元宇宙的味道了,之前我其实在 b 站看到有个 up 大佬已经自己做了一套这样的 MR 系统,但是他只是加入了 chatgpt 和虚拟人物进行交互,如果加入了“万物可分割”的 SAM 进去,刀剑神域游戏是不是真的实现出来也未可知,到那个时候可就是现实、虚拟真正的交互,或者叫虚实融合!感兴趣的同学可以自行前往观看,文末有链接。

image.png

看到这里是不是已经很震撼了!其实图像语义分割任务出现很久了,但是像这种貌似能“分割万物”的分割大模型还是第一次见到。效果我们看到了,但是这个产品的惊艳之处不在于模型的创新,而是在论文中展现出来的一系列新的想法和实践,这才是更加厉害之处,下面我们来逐行解读论文中的这些精华内容。论文地址在文末,想要的同学自取。

论文摘要章节精读

(1)上来第一句话信息量巨大,这是一种图像语义分割的新任务,而且不仅公布了模型,连数据都公开了,更重要的是代码也公布在 github 上,简直就是天使!想要获取的同学自行在文末的链接查找前往。那个谁谁谁学着点!我就不点名了!

a new task, model, and dataset for image segmentation

(2)这里我们可以了解到两个关键信息,一个是 meta 做了一个数据收集循环器(data collection loop),这就很厉害了,其实本论文中涉及到的模型都是之前已经有的,他只是进行了整合利用,之前分割模型效果一般的原因就在于数据集很难标注,分割任务的数据集可比分类数据集难做多了,人工工作量巨大,如果能把这个数据的问题解决了,自然就能解决很大一部分问题了,而 meta 的一部分主要工作放在了数据上面。另外一个关键信息就是训练一个大模型好像没有使用预想的上亿张图像,只是在数据中使用了一个在 1100 万量级上做了 11 亿个掩码的数据集。另外 meta 是真的不拿我们当外人,关键是这个数据人家还提供给我们了,泪目了。有想要的同学去文末链接自行获取。

在千万级数据集上能做一个通用的图像分割模型是不是一个新的思路?是不是有可能能在千万级甚至百万级的数据上做一个 OCR 通用大模型?做一个目标检测通用大模型?我觉得有条件的同学可以开始尝试了!毕竟 SAM 只是做了图像分割领域通用大模型,其他领域不都还没有呢!到了后半年应该各种 CV 领域的大模型也会冒出来了。

Using our efficient model in a data collection loop, we built the largest segmentation dataset to date (by far), with over 1 billion masks on 11M licensed and privacy respecting images

(3)这里又有两个爆炸性信息,一个是模型在设计和训练的时候是加入了“提示”的,其实在上面的案例中演示的各种操作就算是各种提示,这在以前的图像分割任务中是很难想象的,是一种解决图像分割任务一种新模型的创新,也就是在图像分割任务中加入提示工程(prompt engineering)。

另外一个是经过这样的训练产生的模型,能在新的图片集或者任务中实现“零样本”的效果,这其实是一种趋势,从最近半年的 GPT 大火我们就可以看出来,大模型确实可以实现零样本的效果,并且能适应新的数据集或者任务。但是这里有一个厉害的地方就是,他们在众多任务上评估了模型的能力,发现它的零样本性能甚至比以前的完全监督的模型更棒。简直颠覆了我的所学知识,这就像有个人告诉我一个业余随便踢球的司机带球过了职业的梅西......这我还说什么呢,冲就是了,直接拿来用吧同志们!

The model is designed and trained to be promptable, so it can transfer zero-shot to new image distributions and tasks. We evaluate its capabilities on numerous tasks and find that its zero-shot performance is impressive – often competitive with or even superior to prior fully supervised results.

(4)meta 不仅将数据公开,而且将数据的制作思路也公开了,这不仅是授人以鱼,简直就是授人以渔啊!诚意满满,人家的格局是想让大家一起促进 CV 领域的发展,看看这心胸、这眼界,相比之下,那个谁谁谁又输人一筹。

We are releasing the Segment Anything Model (SAM) and cor- responding dataset (SA-1B) of 1B masks and 11M images at https://segment-anything.com to foster research into foundation models for computer vision.

我这里可以简单介绍一下这份数据的内容,它来自一家摄影公司的真实的高质量的千万级的摄影数据集,图片中没有敏感信息。总共通过 meta 的 “data engine” 自动制作了 11 亿个掩码标签,这就是核心的技术了,上面说了这个图像分割的工作有一部分难点就是数据的制作,如果能靠机器自动标注那就会节省很大的工作量,而 meta 的 data engine 很明显就是做这件事的神器。这个数据集中每张图片中平均的掩码标签有 100 个,每张图片的平均像素是 1500×2250 。

论文引言章节精读

(1)从这句话中我们可以看出来本论文是受到了 NLP 大预言模型的思路启发,其实现在很多模型的爆发式出现都是因为被大模型“震惊”到了,大模型的研究方向之前肯定是有人在研究的,但是可能是因为怕资金投入太大回不了本或者是其他原因,所以都是且做且看不敢 all in ,直到 ChatGPT 出来之后,人们被大模型的效果震撼到了,所以加快了大模型的研究,现在出现了一茬又一茬的大模型浪潮就是这个道理。有个不恰当的比喻但是很能说明这种现象,开始各国都有核物理研究理论成果,但是直到原子弹实弹炸了小日子,各国被震惊到了,发现这玩意这么牛 X ,所以各大国纷纷加快了这玩意的研究。言归正传,因为大语言模型如 GPT3 系列在训练好之后,在不同任务上能够表现出零样本的能力,甚至效果比专门微调还表现的略胜一筹,所以 Meta 公司也认为在图像分割领域也可以通过大模型来完成。

Large language models pre-trained on web-scale datasets are revolutionizing NLP with strong zero-shot and few-shot generalization [10]. These “foundation models” [8] can generalize to tasks and data distributions beyond those seen during training.

(2)虽然在计算机视觉和语言编码器方面取得了很大进展,但对于计算机视觉还是有很多困境,其实一方面就是因为并不存在丰富的训练数据。其实不光是图像分割领域,哪个领域都有数据的问题,只要能把数据处理好,其实就是完成了一大块工作了。

While much progress has been made on vision and language encoders, computer vi- sion includes a wide range of problems beyond this scope, and for many of these, abundant training data does not exist.

(3)本论文的目标是使用提示工程来解决不同数据的分割问题,这取决于三个组成部分:任务、模型和数据。任务就是提出了一个新的多种提示方式+分割的任务(下图中 a 部分),模型是本文提出来的 SAM 模型由两个编码器和一个解码器组成的(下图中 b 部分),数据就是指由 data engine 自动产生的掩码标注数据,data engine 通过自循环不断更新自己的标注能力,最终实现全自动训练数据标注,并将数据用于训练 SAM 。

image.png

With this model, we aim to solve a range of downstream segmentation problems on new data distributions using prompt engineering. The success of this plan hinges on three components: task, model, and data. 

(4)此任务需要一个支持灵活提示方式的模型(不同的提示方式上面已经介绍过了),并且可以通过交互的方式在提示之后实时输出分割出来的掩码。这里我们就能初步领略到 meta 以后的战略计划了,它们做这个模型只是第一步,后面肯定会在交互上面下功夫,这也是为什么我在上面提那个刀剑神域的原因,他们真的是在一步步朝着元宇宙的方向前进着。

为了训练这个模型需要一个多样化的、大规模的数据源。但是很不幸没有用于分割的大规模数据源,为了解决这个问题,他们构建了一个“data engine”,这样就能使用 data engine 来高效收集和制作数据来改进 SAM 模型,并且不断迭代这个过程。

我们其实可以看到 data engine 是个新的东西,以前我们都是在模型的结果上做文章来提升性能,但是现在好像不管是 CV 还是 NLP 都已经被 Transformer 开始大统一了,模型上没有新的突破,所以 Meta 另辟蹊径,从数据上开始下手来提升模型在任务中的性能,这是不是也是一种以后可以研究的方向呢?

 This task requires a model that supports flexible prompting and can output segmentation masks in realtime when prompted to allow for interactive use. To train our model, we need a diverse, large-scale source of data. Unfortunately, there is no web-scale data source for seg- mentation; to address this, we build a “data engine”, i.e., we iterate between using our efficient model to assist in data collection and using the newly collected data to improve the model. 

(5)他们提出了一种带有提示的图像分割任务,其目标是在给定任何分割提示的情况下返回有效的分割掩码。提示可以包括标识对象的空间或文本信息,例如上面鼠标点击的点、选中的框、文字等不同过得形式,输出的有效掩码也应该至少是一个对象的合理掩码,比如,我们点了一件上衣和点了一件裤子,可能我想找的是衣服,也可能我想找的是人,但是结果都显现了出来,在没有更进一步的明确意图,这也都是合理的。

image.png

we propose the promptable segmentation task, where the goal is to return a valid segmenta- tion mask given any segmentation prompt . A prompt simply specifies what to segment in an image, e.g., a prompt can include spatial or text information identifying an object. The requirement of a valid output mask means that even when a prompt is ambiguous and could refer to multiple objects the output should be a reasonable mask for at least one of those ob- jects. 

(6)SAM 是有三个部分组成的:用一个强大的图像编码器计算图像嵌入,用一个提示编码器计算提示嵌入,然后将两个信息组合在输入到一个轻量级的掩码解码器中,以预测分割掩码。这样设计是有一定的用意的,通过将 SAM 分离为三个部分,可以在不同的提示下重用相同的图像嵌入,这样肯定能减少计算成本。

we find that a simple design satisfies all three constraints: a powerful image encoder computes an image embedding, a prompt encoder embeds prompts, and then the two infor- mation sources are combined in a lightweight mask decoder that predicts segmentation masks. We refer to this model as the Segment Anything Model, or SAM (see Fig. 1b). By separating SAM into an image encoder and a fast prompt encoder / mask decoder, the same image embedding can be reused (and its cost amortized) with different prompts.

(7)给定一个图像嵌入,一个提示编码器和一个掩码解码器,在 Web 浏览器中从提示到预测出掩码,耗时约为 50 毫秒。这是很令人震惊的事情,因为一个图像分割的人任务,人家不仅做的可以“分割万物”,而且速度还快,你不服不行,其实这篇论文中有个重要的思想其实和 chatgpt 类似,就是在做一个交互的产品,而且是快速交互的产品,只不过这个是指用于图像分割的领域。论文中为了使 SAM 具有更强的感知能力,将其设计为为单个提示预测多个掩码的模式,例如点击衣服的提示,我们可以同时让其预测人和衣服来增强模型的感知分割能力。

  Given an image embedding, the prompt encoder and mask decoder predict a mask from a prompt in ∼50ms in a web browser. We focus on point, box, and mask prompts, and also present initial results with free-form text prompts. To make SAM ambiguity-aware, we design it to predict mul- tiple masks for a single prompt allowing SAM to naturally handle ambiguity, such as the shirt vs. person example.

(8)他们构建了一个 “data engine” 。建设这个数据引擎分为三个阶段:手动辅助、半自动和全自动。在第一阶段,SAM 协助人工注释掩码,类似于经典的图像分割任务,大部分都是人工做的。在第二阶段,SAM 通过提示出来的可能的对象位置来自动生成一部分掩码标签,对于没有生成掩码的地方则通过人工加掩码的方式进行补充,从而帮助模型增加掩码多样性。在最后阶段,我们使用规则的网格点提示给 SAM ,平均每张图像产生约 100 个高质量掩码,完全地成为了自动化的阶段。最终数据集 SA-1B 就是在这个阶段完成的。

Our solution is to build a “data engine”, i.e., we co-develop our model with model-in-the-loop dataset annotation (see Fig. 1c). Our data engine has three stages: assisted-manual, semi-automatic, and fully automatic. In the first stage, SAM assists annotators in annotating masks, similar to a classic interactive segmentation setup. In the second stage, SAM can automatically generate masks for a subset of objects by prompting it with likely object locations and annotators focus on annotating the remaining objects, helping increase mask diversity. In the final stage, we prompt SAM with a regular grid of foreground points, yielding on average ∼100 high-quality masks per image.

这里展示的是一部分数据集,我们可以看到从上到下的每一行中,掩码标签数量在增加,各种细小的对象掩码都被 SAM 标注出来,这都是自动化完成的!并且经过了人类的校验。

image.png

(9)为了避免大规模数据中存在的偏见或者负面的信息,meta 也是做了大量的工作,SA-1B 中的图像涵盖的图像内容覆盖不同的国家,也跨越了不同经济体,它们尽量做到去除偏见,让 SAM 在不同人群中的表现相近,这样在产品推广后会少很多麻烦和阻力,而且对用户也比较友好。

 Images in SA-1B span a geographically and economically di- verse set of countries and we found that SAM performs sim- ilarly across different groups of people. Together, we hope this will make our work more equitable for real-world use cases. 

未完待续...

参考

文中不妥之处欢迎讨论指正,另外更文不易,禁止转载和抄袭。