论文阅读_Segment_Anything

论文信息

name_en: Segment Anything
name_ch: 切分任何东西
paper_addr: http://arxiv.org/abs/2304.02643
doi: 10.48550/arXiv.2304.02643
date_read: 2023-04-07
date_publish: 2023-04-05
tags: [‘深度学习’,‘多模态’]
author: Alexander Kirillov, Meta AI Research, FAIR
citation: 暂无
demo: https://segment-anything.com

读后感

论文提出 Segment Anything (SA)模型,无需精调,即可通过文本提示进行图像分割(抠图)。
SA 基于将 Transformer 模型应用到图像处理领域 ViT 备2_论文阅读_ViT,对图像的无监督学习 MAE 备2_论文阅读_MAE,以及文本图像相互映射的CLIP 论文阅读_图像生成文本_CLIP ,可以说它是图像领域大模型落地的一个精典范例。
之前的图像分割模型,比如要识别图中的猫,先需要做一些标注数据,用工具把图中的猫标注出来,然后用这些标注数据在pretrain模型的基础上fine-tune。
SA 论文解决了两个问题:把文字描述和图中形象联系起来;在不fine-tune的情况下解决zero-shot问题。另外,本文的一大亮点是:用先交互后自动的方式标注了数以十亿记的图片,实现了标注功能的自我提升。

摘要

Segment Anything (SA)即分割一切,论文的成果是最终发布了模型SAM,它无需fine-tune即可对图中任何物体进行分割,且能通过文本提示分割图像,效果可与有监督学习媲美。论文同时发布了超过1B图片,11M的mask标注的数据集SA-1B。

介绍

提示学习帮助大语言模型提升了处理zero-shot问题的能力;CLIP和ALIGN模型又提供了文本和图像对齐的方法,以供下游任务使用,比如DALL-E的生成图片。本文主要研究图像分割:通过文本提示抠图。

具体通过三个相互关联的组件来构建模型:任务、模型、数据。

任务

提示工程近年在自然语言和视觉建模方面产生巨大影响,文中提出了可提示的图像分割。如图1-(a)所示,通过提供图片,及各种各样的提示来分割出所需区域。提示可包含:描述文本、空间中的点(星)、区域(方块)等。在提示不明确的情况下,可能存在多个对象(如:衣服和穿衣服的人),至少能合理地分割其中一个对象。

在预训练阶段,构造了可能与具体使用方法相似的任务以训练模型,生成了具有泛化能力的图像分割器,以解决zero-shot问题。后期可通过提示和下游任务组合,桷建更大系统中的组件来执行新的、不同的任务。

模型

设计模型结构SAM,需要支持:灵活的提示,实时计算,歧意识别。
具体实现如图-1(b)所示,一个图像编码器生成图像嵌入,一个指令编码器生成提示嵌入,然后用一个轻量的mask解码器将二者结合用于分割任务。

图像编码器

基于ViT的图像编码器,只在图像输入时生成一次图像嵌入,嵌入生成后,可与多个提示结合,以节约算力,每次只需要 50ms,以满足web交互的需要。针对歧义问题,设计了一个提示多个mask的方案。

指令编码器

考虑两组提示:稀疏(点、框、文本)和密集(mask)。稀疏提示通过位置编码关联每个提示类型的学习嵌入和来自 CLIP(文本与图像映射)的嵌入。密集提示(mask)使用卷积嵌入,可与图像嵌入逐元素求和。

解码器

mask解码器将图像嵌入、提示嵌入和输出token映射到mask。该模型对 Transformer 解码器块进行了修改,后跟动态mask预测头。使用提示自注意力和交叉注意力来更新所有嵌入;然后对图像嵌入进行上采样;MLP 将输出token映射到动态线性分类器,再计算每个图像位置的蒙版是前景的概率。

歧义问题

如果给出的提示不明确,模型将生成多个有效mask。因此,修改模型以预测单个提示的多个输出mask,发现 3 个mask输出足以支持大多数常见情况(嵌套mask通常最多三个深度:整体、部分和子部分)。

数据引擎

大模型需要大量不同分布的图片及mask训练,而现有的数据集并不丰富。
文中提出建立一个数据引擎 data engine,模型标注数据,数据又反过来训练模型,循环往复。具体包含三个阶段:

  • 辅助手动:SAM 协助标注者注释mask。
    标注者被要求按照突出的顺序标记对象,并被鼓励在标注超过 30 秒后处理下一张图像。使用常见的公共分割数据集进行训练,然后开始交互标注,总共对模型进行了 6 次再训练,每个mask的平均注释时间从 34 秒减少到 14 秒,每张图像的平均mask数量从 20 个增加到 44 个。
  • 半自动:SAM 自动生成mask,标注者专注于注释剩余的对象,以提升mask的多样性。
    根据新收集的数据重新训练模型 5 次。对象的标记更具挑战性,平均注释时间回到 34 秒,每张图像的平均mask数量从 44 个增加到 72 个mask,其中包括自动mask。
  • 全自动:SAM 自动标注,为每张图像平均产生约 100 个高质量mask。
    在此阶段,开发了歧义感知模型,即使在模棱两可的情况下也能预测有效的mask。最终生成的数据集有99.1%来自于全自动标注。

最终产生SA-1B数据集,超过 10 亿个带mask的数据集,图片全部由SAM自动标注,平均每个图像100个mask。

模型效果

建立自己去meta网站试一试,不用梯子即可使用。
https://segment-anything.com/demo
自己上传图片试了一下,把头发和脸分开,两只手可以分开,肉色的衣服和皮肤,边缘还比较完美,mask后效果就很像动画效果。不知道修图师和插画师作何感想,娃们还会不会再去学插画和素描?是不是应该先去研究一下AlphaGo出来之后,围棋班有没有受影响?

本地搭建环境

源码基于Pytorch,从predictor_example来看,接口非常简单,只要稍微做过一些图像模型的人都能看懂,mask区域被直接返回,我没找到调用CLIP的图文对齐部分,只试用了切割部分。

下载源码

git clone https://github.com/facebookresearch/segment-anything.git
按README.txt中提示安装即可

基于docker运行

docker pull pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime

进入docker后,安装jupyter

pip install jupyter_nbextensions_configurator jupyter_contrib_nbextensions
jupyter notebook --allow-root -y --no-browser --ip=0.0.0.0

我的环境还安装了以下工具

apt-get update
apt-get install build-essential libgl1-mesa-glx libglib2.0-0
pip install matplotlib torchvision pycocotools onnx black isort opencv-python

测试一下不同参数量的模型:

ViT-B(base), ViT-L(Large), ViT-H(Huge)。

默认使用ViT-H,下载约2.4G,GPU内存用满11G。
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth
效果如下:

下载ViT-B,下载约358M,GPU内存用到8G左右,
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth
比较后可以看到,大模型的mask效果明显更好一些:

不是特别大的模型,如果有GPU,在家用速度也能接受,从此拥有了自己的抠图小助手。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用in函数嵌入子查询作为条件时查出结果为空

用in函数嵌入子查询作为条件时查出结果为空 问题: SELECT * FROM SGGCDB_VIEW sv WHERE RES_ID IN (SELECT urrv.RES_ID FROM IBPS_ERP.USER_ROLE_RES_VIEW urrv WHERE urrv.ID_ 1069978138403930112 )结果未空值。 原因: 首先,SELECT u…

【Linux系统:进程控制】

目录 1 进程创建 1.1 fork函数 1.2 写时拷贝 1.3 fork常规用法 1.4 fork调用失败的原因 2 进程终止 2.1 进程退出场景 2.2 进程常见退出方法 3 进程等待 3.1 进程等待必要性 3.2 进程等待的方法 3.2.1 wait方法 3.2.2 waitpid方法 3.3 获取子进程status 4 进程程序替…

有趣的小知识(四)从基站到天线:深入了解如何优化网站速度的关键技术

一、全面认识基站 1.1 基站的定义 基站是一种通信设施,用于提供无线通信服务。它通常由一座塔、天线、收发信设备、电源和辅助设备等组成,可以与移动设备(如手机、平板电脑等)进行无线通信。基站是是无线终端(如手机)接入互联网…

寻找CSDN平行世界的另一个你

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 寻找CSDN平行世界的另一个你摘要前言列表测试目的摘要 本文作了一个测试,看看在 CSDN 的博文中,艾特()某个好友,TA是否能够…

为一副通用纸牌设计数据结构

为一副通用纸牌设计数据结构 大家好,我是易安,今天我们来聊一道笔试题,这也是我曾经面试华为时做过的题,今天分享给大家。 题目: 如何设计一个通用的扑克牌数据结构?请解释如何继承它来实现特定的扑克游戏…

国内外人工智能AI工具网站大全(一键收藏,应有尽有)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 国内外人工智能AI工具网站大全(一键收藏,应有尽有)摘要一、AI写作工具二、AI图像工具2.1、常用AI图像工具2.2、AI图片插画生成2.3、AI图片背景移除…

分享10个前端开发者需要掌握的DOM技巧

Web开发不断发展,掌握最新的趋势和最佳实践对每位开发者来说都至关重要。Web开发的最重要方面之一就是使用文档对象模型(DOM)。在本文中,我们将探讨10个必须掌握的DOM技巧和技巧,配有代码示例,这将帮助您成…

Kotlin 是后端开发的未来

Kotlin 是后端开发的未来 严格类型、命名参数、多范式语言 您今天遇到的每个后端开发人员都会说他们使用 JavaScript、Python、PHP 或 Ruby 编写代码。近年来,您会遇到一小部分人转而使用 Kotlin 作为他们创建 Web 服务器的语言选择。由于我在学习Ktor,所…

项目部署---shell脚本自动部署项目

通过shell脚本自动部署项目 操作步骤: 在Linux中安装Git在Linux中安装maven编写shell脚本(拉取代码、编译、打包、启动)为用户授予执行shell脚本的权限执行shell脚本 执行过程:Linux服务器(编译、打包、启动&#x…

巧用千寻位置GNSS软件|点测量状态栏与工具栏全解析

众所周知,点测量是提供点位坐标多种模式测量、测量模式切换、测量数据简单成图等多种方式的点位地理信息测量功能。下面我们来解析在千寻位置GNSS软件中点测量功能下的各状态栏和工具栏。图5.1-1点击【测量】->【点测量】,如图5.1-1 所示,…

面向削峰填谷的电动汽车多目标优化调度策略

说明书 MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略 关键词:电动汽车 削峰填谷 多目标 充放电优化 参考文档:店主自己整理的说明文档,公式、约束、数据齐全,可联系我查看 仿真平台:MATLAB YA…

Android 设置背景颜色透明度

前言 本章是对设计给出的颜色做透明度的处理 原因 一般情况下我们是不需要做处理的,那为什么又需要我们做透明度呢,原因就是咱们的设计小哥哥、小姐姐们没有自己做处理,如果处理了的话,我们直接使用设计标注的AHEX颜色就行&a…

Vue+echart 图根据网页自适应resize缩放

const chartBar null;data{return {chartBar :null} }//关键代码activated() {// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug// if (this.chartBar) {this.chartBar.resize();// }},chartBar echarts.init(document.getElementBy…

信息安全和网络安全

安全五要素: 机密 完整 并且能判断数据是否被篡改 可用 可控 可审查性 对于网络及网络交易,信息安全的基本需求是: 机密性完整性不可抵赖性 计算机系统安全保护的五个等级: 注释:其中的安全标记保护级是属于强…

【Spring】—Spring中Bean的配置、作用域

一、Bean的配置 Spring用于生产和管理Spring容器中的Bean,需要开发者对Spring的配置文件进行配置。在实际开发中,最常采用XML格式的配置方式,即通过XML文件来注册并管理Bean之间的依赖关系。 在Spring中,XML配置文件的根元素是…

深度学习在表面缺陷检测领域的应用

随着工业对原材料质量要求的提高,圆钢表面缺陷检测已成为工业生产的重要组成部分。 表面缺陷检测技术主要分为两类,即传统的无损检测方法和机器视觉检测方法,后者因其实时性和高精度而得到更广泛的应用。 作为现代工业生产的重要原材料&…

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测 目录分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测分类效果基本介绍模型描述程序设计参考资料分类效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention多输入分类预测,CNN-BiLSTM结合注意力机制多输…

【教程】解决VSCode中Python第三方库无法自动补全

背景 学习ROS的时候,发现ROS的第三方库无法自动补齐 解决过程 查询到的一个解决方法是,禁用Pylance扩展 禁用之后第三方库可以自动补齐了但是原来自带库的语法高亮消失了此解决方法不是上策 解决方法 打开 .vscode 文件夹下面的 setting.json 文件 …

QN88封装国产FPGA

QN88GW1N-9管脚名GW2A-18管脚名AL3S10EG4S201VCCVCCIO_L1_1VCC_12VSSVSSIO_L2_1IO_L1_13IOL2AVCCO7IO_L3_1,MOSI,D1IO_L2_14IOL5A/JTAGSEL_N/LPLL_T_inIOL7A/LPLL1_T_inIO_L4_1IO_L1N_15IOL11A/TMSIOR25B/TMSIO_L5_1,SPICSNIO_L1P_16IOL11B/TCKIOR26A/TCKINITNGND7IOL12B/TDIIO…

常见漏洞扫描工具AWVS、AppScan、Nessus的使用

HVV笔记——常见漏洞扫描工具AWVS、AppScan、Nessus的使用1 AWVS1.1 安装部署1.2 激活1.3 登录1.4 扫描web应用程序1.4.1 需要账户密码登录的扫描1.4.2 利用录制登录序列脚本扫描1.4.3 利用定制cookie扫描1.5 扫描报告分析1.5.1 AWVS报告类型1.5.2 最常用的报告类型&#xff1a…