当前位置: 首页 > news >正文

【论文复现】分割万物-SAM

在这里插入图片描述

📝个人主页🌹:Eternity._
🌹🌹期待您的关注 🌹🌹

在这里插入图片描述
在这里插入图片描述

❀ 分割万物-SAM

  • 介绍
  • 原理
    • 分割任务
      • 任务
      • 预训练
      • zero-shot transfer
      • 相关任务
    • 模型
      • Image Encoder
      • Prompt Encoder
      • Mask Eecoder
      • 消除歧义
      • 高效
      • Loss 和训练细节
    • 推理与部署
    • 读取图片
    • 选择模型
    • 加载模型
      • prompt
      • 推理
      • WebUI

介绍


Segment Anything(SAM)是 Meta/FAIR 提出的以 data-centric AI 理念搭建的机器视觉分割模型,堪称图像分割领域的 GPT!SAM 在 1100w 张图片上镜像训练,拥有分割万物的能力。无论是庞然大物、还是精细入微,都可以准确区分。

可以点击此处体验模型demo。

论文地址见此。

原理

分割任务


任务


任务(Task)是由 NLP 领域带来的灵感。在 NLP 中通过预测 next token 作为预训练的任务,在下游任务中使用 prompt engineering 作为应用。出于图像分割的需要,SAM 将prompt 分为以下几种类型:

  1. point
  2. box
  3. mask
  4. 文本

本文所涉及的所有资源的获取方式:这里

预训练


可提示的分割任务提出一种自然的预训练算法,模拟多种 sequence 的 prompt,并且每一次训练都与 ground truth 进行比较。

zero-shot transfer


预训练任务赋予了模型在推理时对任何提示做出适当反应的能力,因此下游任务可以通过设计合适的提示来解决。例如在实例分割中,可以提供一个检测得到的 box, SAN 就可以利用该 promp 进行实例分割。

相关任务


分割可以细分出很多领域:交互式分割、边缘检测、超像素化、目标提案生成、前景分割、语义分割、实例分割、全景分割等。而SAM时一个具有广泛适用性的模型,通过 prompt 可以适应许多现有的和新的分割任务。

模型


在这里插入图片描述
上图展示了 SAM 的结构。SAM 由以下三个部分组成。

Image Encoder


使用 MAE 预训练 ViT 模型处理高解析输入。Image Encoder 对每张图像运行,并用于提示模型。

Prompt Encoder


模型设计了两种 prompt:稀疏(points,boxes,text)、密集(masks)。点和框使用位置编码表示,与每种 prompt 的 learned embedding 相加。而文本使用来自 CLIP 的现成文本 encoder。密集型提示使用卷积进行 embedded, 与图像 embedding 相加。

Mask Eecoder


该部分有效地将 image embedding、 prompt embedding、 和输出 token 映射到一个 mask 上。修改 transformer decoder 块,将 image embedding 和prompt embedding 做双向的 cross-attention。

消除歧义


只有一个输出的情况下,如果给了一个模棱两可的提示,模型会对多个有效的 mask 进行平均处理。为了解决这个问题,模型被修改为对单个提示预测多个输出。而且可以发现,三个输出就可以解决大多数常见情况。

高效


模型设计得非常高效,在 web 浏览器上 CPU 计算只需要约 50 ms。、

Loss 和训练细节


主要使用 focal loss 和 dice loss。对于每个 mask 模型会随机产生 11 种 prompt 进行配对。

推理与部署


大部分可以使用的推理场景在文件中的 notebook 中,打开后可以根据自己的需要运行任何一个部分。

此处介绍模型的推理方法。

首先确保安装对应的依赖

pip install git+https://github.com/facebookresearch/segment-anything.git
pip install opencv-python pycocotools matplotlib onnxruntime onnx gradio

读取图片


需要使用 opencv 读取图片,使用以下代码读取一张图像:

import cv2
image = cv2.imread('imgs/example.jpg')

选择模型


SAM有三种模型可以选择,分别为sam_vit_l_0b3195、sam_vit_b_01ec64、sam_vit_h_4b8939。规模、效果以及需要的算力依次增加。

sam_checkpoint = "checkpoint/sam_vit_h_4b8939.pth"
model_type = "vit_h"device = "cuda"

加载模型


使用sam_model_registry 加载指定的模型并得到预测器。将图片作为预测器的输入即可。

from segment_anything import sam_model_registry, SamPredictor
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)predictor = SamPredictor(sam)predictor.set_image(image)

prompt


SAM 可以接受多种形式的prompt。例如多个点和一个方框。同时也需要提供对应的标签。

import numpy as np
input_point = np.array([[300, 300], [350, 350]])
input_label = np.array([1, 1])
input_box = np.array([150, 100, 320, 500])

推理


推理只需要使用预测器的 predict 函数,该函数接受多个点输入,最多一个方框的输入,与对应的标签。multimask_output 表示是否输出多个预测。masks 即为模型的预测结果。

masks, _, _ = predictor.predict(point_coords=input_point,point_labels=input_label,box=input_box[None, :],multimask_output=False,
)

WebUI


为了方便大家操作,制作了一个可以输入提示的网站。使用python webui.py即可启动网站。

在 Point 一栏输入点的横纵坐标,SAM 就可以去识别点所标记的物体。支持多个点输入,例如(100,150)(250,300)就输入 “100 150 250 300” 即可。点击右侧的 Add 将点添加进 prompt 中。点击 Preview 可以预览点所在的位置。没有任何输入时点击预览可以查看图片的坐标轴。点击底部的 Run 即可根据输入的 prompt 分割图像,分给结果展示在下方。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在 Box 一栏输入方框左上角的横纵坐标与右下角的横纵坐标。方框(100,100,200,200)和(300,300,500,500)就输入为"100 100 200 200 300 300 500 500 "点击右侧的 Add 将方框添加进 prompt 中。点击 Run 运行,现在不支持点和方框的混合输出。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!

更多内容详见:这里

相关文章:

【论文复现】分割万物-SAM

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 分割万物-SAM 介绍原理分割任务任务预训练zero-shot transfer相关任务 模型Image EncoderPrompt EncoderMask Eecoder消除歧义高效Loss 和训…...

实现RAGFlow-0.14.1的输入框多行输入和消息框的多行显示

一、Chat页面输入框的修改 1. macOS配置 我使用MacBook Pro,chip 是 Apple M3 Pro,Memory是18GB,macOS是 Sonoma 14.6.1。 2. 修改chat输入框代码 目前RAGFlow前端的chat功能,输入的内容是单行的,不能主动使用Shift…...

Pointnet++改进71:添加LFE模块|高效长距离注意力网络

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入LFE模块,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.理…...

C++STL容器vector容器大小相关函数

目录 前言 主要参考 vector::size vector::max_size vector::resize vector::capacity vector::empty vector::reserve vector::shrink_to_fit 共勉 前言 本文将讨论STL容器vector中与迭代器相关的函数,模板参数T为int类型。 主要参考 cpluscplus.com 侯…...

阿里云CPU超载解决记录

现象:阿里云CPU使用率超90%连续5分钟告警,项目日志error.log中存在heap/gc/limit等内存耗尽等信息,阿里云慢查询日志每日有查询时间很长的参数一直不变的慢sql,linux服务器使用top命令并按c可以看到cpu过大是哪个命令行造成的 分…...

【工具变量】上市公司企业商业信用融资数据(2003-2022年)

一、测算方式:参考《会计研究》张新民老师的做法 净商业信用NTC(应付账款应付票据预收账款)-(应收账款应收票据预付账款),用总资产标准化; 应付账款AP应付账款应付票据预收账款,用总资产标准化 一年以上应付账款比例LAP是企业一年以上(包括一…...

2024数字科技生态大会 | 紫光展锐携手中国电信助力数字科技高质量发展

2024年12月3日至5日,中国电信2024数字科技生态大会在广州举行,通过主题峰会、多场分论坛、重要签约及合作发布等环节,与合作伙伴共绘数字科技发展新愿景。紫光展锐作为中国电信的战略合作伙伴受邀参会,全面呈现了技术、产品创新进…...

ES语法(一)概括

一、语法 1、请求方式 Elasticsearch&#xff08;ES&#xff09;使用基于 JSON 的查询 DSL&#xff08;领域特定语言&#xff09;来与数据交互。 一个 ElasticSearch 请求和任何 HTTP 请求一样由若干相同的部件组成&#xff1a; curl -X<VERB> <PROTOCOL>://&l…...

(vue)el-cascader多选级联选择器,值取最后一级的数据

(vue)el-cascader多选级联选择器&#xff0c;取值取最后一级的数据 获取到&#xff1a;[“养殖区”,“鸡棚”,“E5001”] 期望&#xff1a;[“E5001”] 问题: 解决方法 增加change事件方法&#xff0c;处理选中的value值 1.单选 <el-cascaderv-model"tags2":o…...

友思特方案 | 精密制程的光影贴合:半导体制造中的高功率紫外光源

导读 为新能源锂电行业赋能第四站&#xff1a;半导体制造中的高功率紫外光源&#xff01;稳定输出、灵活控制的曝光设备是新能源/半导体行业高端生产中减少误差、提高效率的核心技术&#xff0c;友思特 ALE 系列 UV LED 紫外光源集合6大优势&#xff0c;为精密制造的健康发展提…...

README写作技巧

做一个项目&#xff0c;首先第一眼看上去要美观&#xff0c;这样才有看下去的动力。做项目亦是如此&#xff0c;如果每一步应付做的话&#xff0c;我想动力也不会太大&#xff0c;最终很大概率会放弃或者进度缓慢。 1.README组成 README是对项目的一个说明&#xff0c;它对观看…...

【密码学】分组密码的工作模式

1.电码本模式&#xff08;ECB&#xff09; 优点: 每个数据块独立加密&#xff0c;可并行加密&#xff0c;实现简单。 缺点: 相同明文会产生相同密文&#xff0c;不具备数据完整保护性。 适用于短消息的加密传输 (如一个加密密钥)。 工作流程&#xff1a;用相同的密钥分别对…...

SQL 和 NoSQL 有什么区别?

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;和NoSQL数据库是两种不同类型的数据库管理系统&#xff0c;它们在多个方面存在显著的区别。以下是对SQL和NoSQL主要区别的详细分析&#xff1a; 一、数据存储与模型 SQL数据库 使用关系模型来…...

提升网站流量的关键:AI在SEO关键词优化中的应用

内容概要 在当今数字时代&#xff0c;提升网站流量已成为每个网站管理员的首要任务。而人工智能的技术进步&#xff0c;为搜索引擎优化&#xff08;SEO&#xff09;提供了强有力的支持&#xff0c;尤其是在关键词优化方面。关键词是连接用户需求与网站内容的桥梁&#xff0c;其…...

Harnessing Large Language Models for Training-free Video Anomaly Detection

标题&#xff1a;利用大型语言模型实现无训练的视频异常检测 原文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2024/papers/Zanella_Harnessing_Large_Language_Models_for_Training-free_Video_Anomaly_Detection_CVPR_2024_paper.pdf 源码链接&#xff1a;ht…...

如何通过自学成长为一名后端开发工程师?

大家好&#xff0c;我是袁庭新。最近&#xff0c;有星友向我提出了一个很好的问题&#xff1a;如何通过自学成为一名后端开发工程师&#xff1f; 为了解答这个疑问&#xff0c;我特意制作了一个视频来详细分享我的看法和建议。 戳链接&#xff1a;如何通过自学成长为一名后端开…...

HDR视频技术之六:色调映射

图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域&#xff0c;因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备&#xff08;例如普通人家使用的电视&#xff0…...

(洛谷题目)P11060 【MX-X4-T0】「Jason-1」x!

思路&#xff1a; 理解问题&#xff1a;首先&#xff0c;我们要理解题目的要求&#xff0c;即判断一个非负整数n的阶乘n!是否是n1的倍数。 阶乘的定义&#xff1a;根据阶乘的定义&#xff0c;n!是所有小于等于n的正整数的乘积。特别地&#xff0c;0!被定义为1。 特殊情况处理…...

TEXT2SQL工具vanna本地化安装和应用

TEXT2SQL工具vanna本地化安装和应用 Vanna和Text2SQL环境安装和数据准备 conda虚拟环境安装数据准备ollama环境准备 ollama安装和运行ollama下载模型测试下API方式正常使用 chromaDB的默认的embedding模型准备 vanna脚本跑起来 Vanna和Text2SQL TEXT2SQL即文本转SQL&#xf…...

Bloom 效果

1、Bloom 效果是什么 Bloom效果&#xff08;中文也可以叫做高光溢出效果&#xff09;&#xff0c;是一种使画面中亮度较高的区域产生一种光晕或发光效果的图像处理技术&#xff0c;Bloom效果的主要目的是模拟现实世界中强光源在相机镜头或人眼中造成的散射和反射现象&#xff…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...