图像分割之SAM(Segment Anything Model)

news2024/10/5 21:14:41

论文:Segment Anything

Github:https://github.com/facebookresearch/segment-anything

论文从zero-shot主干网络的基础出发,提出了SAM(Segment Anything Model)模型。该模型有别于传统的分割模型。传统分割模型只能输入原图输出固定的分割结果,SAM在设计上可以同时输入原图和特定提示(点、框、阴影、文本),然后根据不同的提示输出不同的分割结果图,并且SAM支持不同提示的交互式分割。SAM可以适用于多种分割场景,包括交互式分割、边界检测、超分、物体生成、前景分割、语义分割、实例分割、全景分割等众多场景。另外为了训练SAM这种多模态的模型,论文在数据上也下足了功夫,论文贡献了大规模分割数据集SA-1B,包括10亿个mask和110w图片。

要使模型具备0样本迁移能力,需要从模型容量、数据集大小、整体训练这3方面下功夫。

因此论文就从task, model, data 3个方面进行了改进。

Task

在论文的交互式分割任务中,有的提示信息,比如点的提示,存在模棱两可的情况。为了解决这样的问题,SAM模型会同时输出3个分割结果,分别为全部(whole),部分(part), 局部(subpart)。

model

论文设计了包含多模态信息的SAM分割模型,模型在相关提示下预测分割mask大概耗时50ms。

SAM模型由图片编码器模块(image encoder)、提示信息编码器模块(prompt encoder)、分割mask解码器模块(mask decoder)3部分组成。

图片编码器模块基于Vision Transformer (ViT)主干网络实现。

提示信息编码器模块支持稀疏特征点、框、文本 (points, boxes, text) 和稠密特征阴影 (masks)。

对于点和框在提取embedding的时候加入了位置编码信息的embedding,然后将两者相加得到最终的embedding。对于文本信息的编码采用了clip模型。

对于阴影信息的编码通过conv实现,并最终和图片的编码特征相加。

分割mask解码器模块采用Transformer的解码器部分实现,并在后面接入动态的头部预测模块。同时在训练过程中,从图片到提示和从提示到图片都引入了自监督(self-attention)和跨监督(cross-attention)操作。 最后上采样图片的embedding,通过一个MLP模块,经线性分类器,得到最终的概率图。

Data engine

为了建立一个大规模的分割数据集,论文建立了一套数据制作的引擎。整个过程包含3个阶段,人工手动阶段(assisted-manual),半自动阶段(semi-automatic), 全自动阶段(fully automatic)。

人工手动阶段(assisted-manual):

该阶段标注过程和训练过程是同步进行的。需要人工在标注引擎上对mask进行标注,如果一个mask的标注时间超过30s就会放弃选择标注下一个图片。随着标注图片的增加和训练过程的进行,图片编码器的主干网络从ViT-B进化为ViT-H。这样的标注-训练迭代过程持续了6轮。最终每张图片的标注时间从34s降低为14s。每个图片中的mask数量从20个提升到44个。最终在该阶段收集到了4.3M mask和 120k image。

半自动阶段(semi-automatic):

该阶段主要目的是提高mask的多样性,从而提高模型的分割能力。由于标注过程更注重mask多样性的标注,所以该阶段的平均标注时间提升到了34s/图。每个图片中的mask数量从44提升到了72。在该阶段收集了5.9M mask和180k image。

全自动阶段(fully automatic):

该阶段使用模型进行全自动标注。每个图片会被设置32*32的网格点来覆盖图片中的所有物体。并且会通过iou来选择靠谱的mask,然后再进行NMS操作,从而得到最终的mask。

该阶段共收集到1.1B mask和 11M image。

Losses and training

训练过程采用focal loss 和 dice loss的线性组合作为最终loss。

训练过程中会根据mask随机采样不同的提示进行训练。

Dataset

大规模分割数据集SA-1B,包括10亿个mask和110w图片。相比同类分割数据集,多了400倍的mask。

Images

原始图片的分辨率为3300× 4950,考虑到存储和展示的必要,将图片都缩放到短边为1500像素。即使是这样,也比coco数据集的图片分辨率480× 640大很多。

Masks

通过数据引擎标注的图片具有很高的标注质量。

Mask quality

从所有数据中随机选取了500张图片以及对应的大概50000mask。让专家进行精细标注,然后和数据引擎标注的结果进行iou对比。结果是94%的图片iou超过90%,97%的图片iou超过75%。iou一致性基本在85-91%。

Mask properties

SA-1B覆盖了更广泛的图片区间,比第二大分割数据集多了11倍的图片400倍的mask。同时SA-1B包含了更多的小和中等的mask。通过mask轮廓的凹陷程度来分析mask的多样性,发现SA-1B和其他分割数据集拥有同样的mask多样性。

RAI Analysis

通过Responsible AI (RAI)分析,SA-1B覆盖了全世界各个角落的数据图片。同时在年龄、性别、肤色等维度也都没有各种歧视。表现出了更多的包容性More Inclusive Annotations for People (MIAP)。

 

实验结果:

在众多数据集上,SAM方法都优于RITM方法。

随着提示点的数量的增加,SAM的分割效果越来越高,随着提示点从1到9的增加,SAM方法和其他分割方法之间的gap越来越小。当提示点达到9个是,SAM的分割效果会略低于其他方法,这是因为SAM方法的设计初衷就不是一个高IOU的分割方法。

SAM方法在中型物体、大型物体、罕见物体、正常物体上的分割效果是优于其他分割方法的。

 

SAM可以实现基于文本的分割。同时在文本分割不准确的情况下,可以通过增加点的提示信息,来提升分割效果。

Limitations

SAM在细粒度的分割、非连续部件的分割上表现都较差。同时分割的边界也不够干净利落。

对于文本到mask的分割任务还在尝试探索阶段,尚不够鲁棒,具有很大的提升空间。

结论:

SAM首个提出在图像分割领域0样本迁移的基础模型(foundation models)的概念。也就是不需要任何实际使用场景的训练,该模型就可以直接进行分割推理。论文贡献了SAM分割模型和SA-1B分割数据集。

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正则表达式的一些元符号

正则表达式 正则表达式—通常用于判断语句中,用来检查某一字符串是否满足某一格式 正则表达式是由普通字符与元字符组成 普通字符包括大小写字母、数字、标点符号及一些其他符号元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字…

(数字图像处理MATLAB+Python)第四节:频域高通滤波与综合案例

文章目录 一:频域高通滤波(1)理想的高通滤波器(2)巴特沃斯高通滤波器(3)指数高通滤波器(4)梯形高通滤波器 二:综合案例——人像美化(1&#xff09…

vue2实现高德地图 JSAPI 2.0海量点标记(标注和标注图层)->自定义点位->定时刷新点位

前提: 需要注册高德开放平台,之后创建应用并且开通Web端(JS API)平台,然后拿到securityJsCode和key 1. 基础抽取(还原示例) 1.1 组件代码 代码说明: 需要修改securityJsCode和key为自己的allowCollision为标注是否避让marker,默认为false不避让markers为地图上的标记数组layer…

【Axure教程】中继器表格寻找和标记数据

在系统表格中,我们想在表格中快速找到对应的数据,通常我们会用条件筛选来完成,但是用筛选的方式,其他数据就看不到了,少了两种条件之间的对比。所以如果需要数据对比的情况下,我们更多的是用标记数据的方式…

Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换

前言 关于FOV FOV 是在任何给定时间通过人眼、相机取景器或在显示屏上可见的可观察世界的范围。它指的是整个区域的覆盖范围,而不是单个固定焦点。FOV 还描述了一个人可以看到可见世界的角度。 FOV 越宽,可以看到的可观察世界就越多。它是水平、垂直和对…

vue3中使用外部字体

首先要找一个免费网站,去下载你想用的字体,推荐 DaFont - Download fonts 或者问UI要,ui在设计图的时候也会下载对应的特殊字体的包,所以问她要方便快捷 ~~ 如果是进入网站下载的话,操作步骤如下: 在官网…

MTN模型LOSS均衡相关论文解读

一、综述 MTN模型主要用于两个方面,1.将多个模型合为一个显著降低车载芯片负载。2.将多个任务模型合为一个,有助于不同模型在共享层的特征可以进行互补,提高模型泛化性能的同时,也有可能提高指标。传统的方法是直接不同任务loss相…

谷歌打响全面反击战!官宣AI重构搜索、新模型比肩GPT-4,朝着ChatGPT微软开炮

明敏 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 万众瞩目,谷歌的反击来了。 现在,谷歌搜索终于要加入AI对话功能了,排队通道已经开放。 当然这还只是第一步。 大的还在后面: 全新大语言模型PaLM 2正式亮相,谷歌声称…

vue解决跨域的几种办法

当我们遇到请求后台接口遇到 Access-Control-Allow-Origin 时,那说明跨域了。 跨域是因为浏览器的同源策略所导致,同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,同源是指&…

【C#】本地下载附件(Excel模板)

系列文章 【C#】单号生成器(编号规则、固定字符、流水号、产生业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:h…

腾讯云发布金融国产化战略、《腾讯云银行核心系统分布式转型白皮书》

5月11日,在腾讯金融云国产化战略峰会上,腾讯云发布金融国产化战略:腾讯云将持续加大技术投入打造新一代国产化精品产品,并依托产品构建全栈领先的国产数字化基座。同时,腾讯云还将携手伙伴,共同构建国产数字…

PD虚拟机增加CentOS虚拟机磁盘空间

mac环境下安装了PD虚拟机,近期由于需求需要,扩容了其中一台CentOS7的磁盘空间。 做以下记录: 1.PD虚拟机操作: 2. CentOS7内部操作: 2.1 lsblk -f 查看 2.2 fdisk -f 查看,物理磁盘已增加容量 2.3 fdis…

leetcode 1035. Uncrossed Lines(不交叉的线)

把数组nums1和nums2的元素排成2行, 从左到右把相同的元素连线,但是任意2条线不能交叉。 比如Example1中,可以连2个4,也可以连2个2,但是不能同时连,因为会交叉。 找出最多的连线数。 思路: 一开…

Leetcode2383. 赢得比赛需要的最少训练时长

Every day a Leetcode 题目来源:2383. 赢得比赛需要的最少训练时长 解法1:模拟 可以分开考虑在比赛开始前,需要最少增加的精力和经验数量。 每次遇到一个对手,当前精力值都需要严格大于当前对手,否则需要增加精力值…

设计测试用例(万能思路 + 六种设计用例方法)(详细 + 图解 + 实例)

目录 一、设计测试用例的万能思路 二、设计用例的方法 1. 等价类 2. 边界值 3. 判定表法 4. 正交法 5. 场景设计法 6. 错误猜测法 一、设计测试用例的万能思路 针对某个物品/功能进行测试。 万能思路:功能测设 界面测试 性能测试 兼容性测试 易用性测试…

NASM 编译器 - 产生机器码“66”,导致无法正确打印

【问题描述】 代码hello-DOS.asm,实现功能:打印“hello world” ; hello-DOS.asm - single-segment, 16-bit "hello world" program ; ; assemble with "nasm -f bin -o hi.com hello-DOS.asm" [BITS 32]org 0x100 ; .com…

el-table多级嵌套列表,菜单使用el-switch代替

需求:根据el-table实现多级菜单复选,并且只要是菜单就不再有复选框,也没有全选按钮,一级菜单使用el-switch代替原有的列复选框,子级如果全部选中,那么父级的el-switch也会被选中,如下图&#xf…

2023年微单相机市场电商数据分析(京东数据查询分析)

5月10日,尼康发布了Z8微单相机,首发价格27999元。规格、性能等都可以看到官方的详细讲解。不过从目前业内人士以及数码爱好者的评价来看,Z8的配置匹配27999元的价格是比较有优势的。 并且有很多人表示,Z8一经推出很有可能会对自身…

6. N 字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P A H NA P L S I I GY I R 之后,你的输出需要从左往右逐…

mysql查询列添加序号

添加序号查询结果 # 每次值1 # 值从0开始 SELECT (i:i1) AS 序号,user.* FROM user, (SELECT i:0) AS itable;