号称分割一切的图片分割模型开源了——Segment Anything Meta SAM
https://github.com/facebookresearch/segment-anything
https://segment-anything.com/demo#
https://ai.facebook.com/tools/fairseq/
以前,要解决任何类型的分割问题,有两类方法。第一种是交互式分割,允许分割任何类别的对象,但需要人通过迭代细化掩码来指导。第二种,自动分割,允许分割提前定义的特定对象类别(例如,猫或椅子),但需要大量的手动注释对象来训练(例如,数千甚至数万个分割猫的例子)。这两种方法都没有提供通用的、全自动的分割方法。
Segment Anything Meta SAM综合了以上2种方法。它是一个单一的模型,可以轻松地执行交互式分割和自动分割。该模型允许以灵活的方式使用它,只需为模型设计正确的提示(点击、分割框、文本等),就可以完成分割任务。此外,Segment Anything Meta SAM在包含超过 10 亿个掩码的多样化、高质量数据集上进行训练,这使其能够泛化到新类型的对象和图像。
在 Segment Anything Meta SAM 中,该模式包含三个重要组成部分:
图像编码器。
提示编码器。
掩码解码器。
Segment Anything Model 是一种以最少的人工干预构建全自动可提示图像分割模型的方法。模型提供了一键分割图片的方法,当然模型也可以运行我们输入一个坐标点,一个输入框,或者输入一个对象的文本来分割输入的对象。
任何突破性的深度学习模型的基础都是它所训练的数据集。Segmentation Anything Model 也不例外。Segment Anything 数据集包含超过 1100 万张图像和 11 亿个mask遮罩。最终的数据集称为SA-1B 数据集。
训练 Segment Anything 能力的模型肯定需要这样的数据集。但我们也知道这样的数据集是不存在的,手动标注这么多图像是不可能的。那么,数据集是如何策划的?简而言之,SAM 帮助注释了数据集。数据标注者使用 SAM 交互式地标注图像,然后使用新标注的数据来训练 SAM。重复此过程,从而产生了 SAM 的环内数据引擎。
这个数据引擎+在数据集上训练 SAM 分为三个阶段:
辅助手动阶段
半自动阶段
全自动阶段
在第一阶段,注释者使用预训练的 SAM 模型在浏览器中以交互方式分割图像中的对象,在第一阶段之后,数据集包含来自12 万张图像的430 万个掩码。Segment Anything Model 在此数据集上重新训练。
在第二个半自动阶段,突出的物体已经使用 SAM 进行了分割。注释者还对未注释的不太显眼的对象进行了注释。这个阶段在18 万张图像中产生了额外的 590 万个掩码,SAM 在这些图像上进行了再训练。
在最后的“全自动阶段”,标注完全由 SAM 完成,到这个阶段,它已经在超过 10M 的掩码上进行了训练,自动蒙版生成应用于 11M 图像,生成 1.1B 蒙版。
“Segment Anything Dataset 的最终版本使其成为最大的公开图像分割数据集。与 OpenImages V5 相比,数据集中的图像多 6 倍,遮罩多 400 倍。
SAM 允许用户通过单击或通过交互式单击点来分割对象以分割或者排除对象。还可以使用边界框分割模型。
SAM在面对被分割对象的歧义时可以输出多个有效掩码,这是解决现实世界中分割问题的重要且必要的能力。
SAM 可以自动发现并屏蔽图像中的所有对象。
SAM 可以在预计算图像嵌入后实时为任何提示生成分割掩码,允许与模型进行实时交互。
同时meta提供了在线试玩demo,我们可以直接在官方提供的网站上面上传自己的图片进行试玩
https://segment-anything.com/demo#
试玩demo提供了好几种分割方法
1、我们可以直接在图片任意一个对象上点击,模型会根据点击的地方,自动分割周边的对象。
2、我们也可以选择box进行对象框的选择来进行对象的分割。
3、我们也可以选择everything,让模型自动进行所有对象的分割。
4、模型提供了多mask对象分割模型
SAM 可以成为 AR/VR、内容等领域的强大创造组件、以及科学领域,医学领域和更通用的人工智能系统提供服务。相信随着计算机硬件的升级,一些大的模型便可以让普通用户来使用。
https://github.com/facebookresearch/segment-anything
Segment Anything Model代码已经开源,我们后期详细进行相关代码实现部分分享。
from segment_anything import SamAutomaticMaskGenerator, sam_model_registry
sam = sam_model_registry["<model_type>"](checkpoint="<path/to/checkpoint>")
mask_generator = SamAutomaticMaskGenerator(sam)
masks = mask_generator.generate(<your_image>)