Segment Anything——论文笔记

这篇具有很好参考价值的文章主要介绍了Segment Anything——论文笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

home page:segment-anything.com
code:segment-anything

1. 概述

介绍:SAM是最近提出的一种通用分割大模型,其表现出了强大的零样本泛化能力,视觉感知模型的通用化又前进了一步。为了达到文章标题字面意义“segment anything”,那么就需要该算法具有强大的物体语义感知能力,在模型的设计阶段就不能对其所使用的类别进行假设,更类似于常见的交互式分割方法。像交互式分割这样的方法,在现有的大模型体系下提示的相关操作被描述为prompt。在SAM算法中就支持点、框、mask和文本四种不同的prompt,它的零样本泛化能力也是基于此。说到要训练分割大模型,一个问题便是如何获取足够且高质量的数据,对此文章也提出了一种数据生产的pipeline,并且将收集到的训练数据也做了开源segment-anything-downloads(1100万图像数据,10亿mask GT)。

先放一张SAM模型的感知结果:
Segment Anything——论文笔记
效果真的是很惊艳,要是再搭配上对应的文本模型,这样就具备具体语义和mask信息的感知能力了。

本文博文将围绕SAM模型运行原理数据生产过程这两个关键点,依据现有公开出来的文章内容进行梳理。

2. SAM方法

2.1 数据生产

当前网络上公开的数据集量都是比较少的,对应导致其场景适应性只能展现在某些固定的领域场景下。那么要训练一个具备“通用”价值的模型,这些数据量是不足的,对此文章提出了对应的data engine去获取训练数据。其获取数据的方法可以划分为如下几个步骤:

  • Step1:使用交互式分割这样的工具在初始数据集上完成人工标注。
  • Step2:在人工标注基础上训练一个分割模型,新到的图片数据首先会经过这个模型完成预标注,之后人工在对其进行修补,可看作为半自动化标注。
  • Step3:从第二步获取到相对足够的数据之后,再迭代一个更加强大模型,之后在图像上均匀采样点的方式去构建prompt,在新数据集下获得新的mask标注。

下图展示了SAM模型进行数据迭代的流程示意图:
Segment Anything——论文笔记
最终SAM依据上述的方法获取了1100万训练数据和10亿数量级的mask标注。这个数量级的数据展现了丰富的数据多样性,将文章获取到的数据集于其它一些常见分割数据集进行对比:

图像尺寸分布对比:
Segment Anything——论文笔记
则单从数据角度看SA-1B数据集的分布更全面,涵盖的内容更加丰富,这也会使得在此基础上训练出来的模型展现出更强的泛化能力。

2.2 SAM算法

2.2.1 算法pipeline

SAM算法定位是一种具备强大泛化能力的分割模型,也就是对于那些训练数据中未见过的数据也能进行分割,对此这个算法采取了prompt的机制,也就是支持下图中间部分的四个类型的输入(mask、points、box、text)。Segment Anything——论文笔记
同时上图也是SAM算法的原理框图,按照上面的框图可以将SAM算法划分成如下几个部分:

Image Encoder:
这里使用MAE自监督训练得到的ViT模型作为图像特征的抽取网络。

Prompt Encoder:
上文也提到了SAM算法支持的几种prompt方式,对于points、box位置编码的形式嵌入到网络中,对于mask则采用几层卷积的方式提取embedding,对于text则是采用CLIP中的文本编码器得到对应的embedding。

Mask Decoder:
这个部分负责输出具体的mask预测,这里的预测方式采用的是MaskFormer的方式,将不同的分割目标构建为不同的query,在此基础上预测mask和class。这里的mask decoder是一个轻量化的模型,它的层数为2,其结构见下图:
Segment Anything——论文笔记
以往query只作为query只有self-attention和cross-attention操作,在上图中还会将query和image进行交换形成双向的attention操作,

Resolving ambiguity:
由于SAM所使用的数据具备细粒度的特点,这就导致了一个prompt可能会存在多个符合的mask,也就是存在歧义的情况,见下图所示:
Segment Anything——论文笔记
对此,文章只提取3个mask来表示一个prompt需要分割的区域(3个mask为经验值,文中认为这个数量可以hold住大多数场景),也就是可以将这些mask划分为whole、part和sub-part三种情况。同时在预测mask的时候还会预测每个mask的IoU,在最后选择的时候会根据这个分数选择最后的mask输出。

Loss& Training:
对于mask分割部分采用focal+dice的形式,权重设置为20:1。SAM支持多种prompt输入,则在训练的过程也需要对这样的过程进行模拟。同时为了模拟实际使用中的交互分割过程,还为每个mask设计11轮的随机prompt采样。

2.2.2 SAM中实现的一些细节

如何使得网络输出带有多义性:
在之前的图例中展示了一个prompt在人的感官上会有多个mask与之匹配,则SAM模型应该也具备这样的能力,毕竟每个人的想法不太一样,既然众口难调,那么就给出模型认为正确的mask就好了。也就是说对于一个prompt模型设计3个mask token去预测对应的mask,这样可以避免只预测一个mask带来的输出结果收敛的情况。

那么对于多个prompt的情况,会在3个token的基础上添加一个token,且在输出的时候只输出新添加token的预测结果。

训练时prompt的生成:
这里讨论points、box和mask类型的prompt生成,对于text部分的prompt在后面内容进行讨论,对于points的采样范围是整个mask区域,对于box是在原本mask bounding box基础上添加noise。将上面两种类型prompt作为输入得到对应的mask预测,选择预测结果中IoU值预测最高的作为下一轮迭代的输入,这个迭代的输入可以为替换为mask prompt了。 则对于下一轮迭代的时候points采样会从预测mask于GT比较的error区域中再采样得到。

text prompt生成:
在训练数据中选择那些较大的mask(大于 10 0 2 100^2 1002像素数),并通过尺寸扩增之后从图像中取出对应crop。这个crop输入到CLIP模型中去获取对应的text embedding(CLIP中图像和text是paired,有了图像可以得到对应的text描述)。再用这个text embedding作为SAM的prompt,去生成对应的mask预测。这样就使得SAM具备了text语义感知能力,下图展示了从text得到分割结果的示例:
Segment Anything——论文笔记文章来源地址https://www.toymoban.com/news/detail-499539.html

到了这里,关于Segment Anything——论文笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【论文笔记】Fast Segment Anything

    我说个数:一个月5篇基于Fast Segment Anything的改进的论文就会出现哈哈哈哈。 SAM架构的主要部分Transformer(ViT)模型相关的大量计算资源需求,这给其实际部署带来了障碍 将分段任意任务解耦为两个顺序阶段,分别是是实例分段和提示引导选择。 第一阶段取决于基于卷积神经

    2024年02月16日
    浏览(43)
  • 计算机视觉:分割一切AI大模型segment-anything

    Segment Anything Model (SAM)来源于Facebook公司Meta AI实验室。据Mata实验室介绍,SAM 已经学会了关于物体的一般概念,并且它可以为任何图像或视频中的任何物体生成 mask,甚至包括在训练过程中没有遇到过的物体和图像类型。SAM 足够通用,可以涵盖广泛的用例,并且可以在新的图像

    2024年02月11日
    浏览(60)
  • 论文阅读:Segment Anything之阅读笔记

    引言 论文:Segment Anything是Meta出的图像语义分割的算法。这个算法因其强大的zero-shot泛化能力让人惊艳,这不抽空拿来学习了一下。 该算法的代码写得很清楚、简洁和规范,读来让人赏心悦目。推荐去看源码,很有意思。 本篇文章,将以问答形式来解读阅读过程中遇到的困

    2024年02月13日
    浏览(36)
  • [segment-anything]使用onnxruntime部署sam模型,速度提高30倍!

    1、一台带有英伟达显卡的电脑 2、anaconda环境 3、CUDA以及cudnn 最近sam火遍了cv圈,号称可用一个模型分割一切,本文使用sam导出onnx模型,并通过onnxruntime(ort)进行部署,能够明显提升sam在本地的运算速度。话不多说,先看效果: pytorch运行时间: ort运行时间: 可见,sam的v

    2024年02月06日
    浏览(44)
  • 【项目学习】记录segment-anything、SAM及衍生自动标注工具使用

    本文章由三部分组成: 1.Segment Anything Model(SAM)概述:是我学习概念做的记录 可以不看直接跳过 。 2.SAM衍生的标注工具使用:试用了两个开源的SAM衍生的标注工具记录 3.遇到的问题 参考: 1.segment-anything官方demo演示 2.SA基础模型图像分割的介绍 3.segment-anything项目 Segment Anythin

    2024年02月06日
    浏览(103)
  • 【自用】SAM模型论文笔记与复现代码(segment-anything-model)

    一个 prompt encoder ,对提示进行编码, image encoder 对图像编码,生成embedding, 最后融合2个 encoder ,再接一个轻量的 mask decoder ,输出最后的mask。 模型结构示意图: 流程图: 模型的结构如上图所示. prompt会经过 prompt encoder , 图像会经过 image encoder 。然后将两部分embedding经过一个

    2024年01月24日
    浏览(47)
  • 【CV大模型SAM(Segment-Anything)】如何保存分割后的对象mask?并提取mask对应的图片区域?

    上一篇文章【CV大模型SAM(Segment-Anything)】真是太强大了,分割一切的SAM大模型使用方法:可通过不同的提示得到想要的分割目标中 详细介绍了大模型SAM(Segment-Anything)的不同使用方法 ,后面有很多小伙伴给我留言问我分割后的目标对象如何保存,这篇介绍一下分割后的ma

    2024年02月09日
    浏览(59)
  • 论文解读:Segment Anything

    Segment Anything 发表时间:2023 论文地址:https://arxiv.org/abs/2304.02643 项目地址:https://github.com/facebookresearch/segment-anything 介绍了Segment Anything(SA)项目:一个新的任务、模型集和数据集的图像分割。在数据收集循环中使用模型迭代,我们建立了迄今为止(迄今为止)最大的分割数

    2024年02月09日
    浏览(46)
  • 论文阅读 - Segment Anything

    Meta推出的Segment Anything开源之后,一下成为了CV界的网红。本文是对Segment Anything这篇论文的精读,其中会有一些个人的见解。 为了让更多人了解到SAM的重要意义,本文会尽量写的白话一些,让非深度学习工作者也能知道SAM的工作原理。 这部分写给非深度学习工作者。 几乎所

    2023年04月24日
    浏览(38)
  • 论文阅读--Segment Anything

    Title: Segment Anything Abstract: We introduce the Segment Anything (SA) project: a new task, model, and dataset for image segmentation. 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. The model is designed and trained to

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包