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

比SAM小60倍的分割一切模型:MobileSAM

1 MobileSAM

SAM就是一类处理图像分割任务的通用模型。与以往只能处理某种特定类型图片的图像分割模型不同,SAM可以处理所有类型的图像。

在SAM出现前,基本上所有的图像分割模型都是专有模型。比如,在医学领域,有专门分割核磁图像的人工智能模型,也有专门分割CT影像的人工智能模型。但这些模型往往只在分割专有领域内的图像时,才具有良好性能,而在分割其他领域的图像时往往性能不佳。

1.1 模型介绍

SAM是一种prompt-guided的视觉基础模型,用于从其背景中剪切出感兴趣的对象。自Meta研究团队发布SA项目以来,SAM因其令人印象深刻的零样本传输性能和与其他模型兼容的高度通用性而备受关注,用于高级视觉应用,如具有细粒度控制的图像编辑。

许多这样的用例需要在资源受限的边缘设备上运行,比如移动应用程序。今天分享中,我们的目标是通过用轻量级图像编码器取代重量级图像编码器,使SAM对移动友好。原始SAM文件中训练这种新SAM的方式会导致性能不令人满意,尤其是当可用的训练来源有限时。

我们发现,这主要是由图像编码器和掩模解码器的耦合优化引起的,因此提出了解耦蒸馏。具体地说,将原始SAM中的图像编码器ViT-H的知识提取到一个轻量级的图像编码器中,该编码器可以自动与原始SAM中的掩码解码器兼容。

 

训练可以在不到一天的时间内在单个GPU上完成,由此产生的轻量级SAM被称为MobileSAM,它比原始SAM小60多倍,但性能与原始SAM相当。就推理速度而言,MobileSAM每幅图像运行约10ms:图像编码器运行8ms,掩码解码器运行2ms。凭借卓越的性能和更高的通用性,我们的MobileSAM比并发的FastSAM小7倍,快4倍,更适合移动应用。

论文地址:https://arxiv.org/pdf/2306.14289.pdf

代码地址:https://github.com/ChaoningZhang/MobileSAM

1.2 新框架

  • Background on SAM

在这里,我们首先总结SAM的结构及其工作原理。SAM由一个基于ViT的图像编码器和一个提示引导掩码解码器组成。图像编码器将图像作为输入并生成嵌入,然后将嵌入提供给掩码解码器。掩码解码器生成一个掩码,根据点(或框)等提示从背景中剪切出任何对象。此外,SAM允许为同一提示生成多个掩码,以解决模糊性问题,这提供了宝贵的灵活性。考虑到这一点,这项工作保持了SAM的流水线,首先采用基于ViT的编码器来生成图像嵌入,然后采用提示引导解码器来生成所需的掩码。这条管道是为“分段任何东西”而优化设计的,可用于“分段所有东西”的下游任务。

SAM的耦合知识蒸馏。左图表示完全耦合蒸馏,右图表示半耦合蒸馏。

  • Project goal

该项目的目标是生成一个移动友好型SAM(MobileSAM),以轻量级的方式实现令人满意的性能,并且比原始SAM快得多。原始SAM中的提示引导掩码解码器的参数小于4M,因此被认为是轻量级的。给定编码器处理的图像嵌入,如他们的公开演示中所示,SAM可以在资源受限的设备中工作,因为掩码解码器是轻量级的。然而,原始SAM中的默认图像编码器是基于ViT-H的,具有超过600M的参数,这是非常重量级的,并使整个SAM管道与移动设备不兼容。因此,获得移动友好SAM的关键在于用轻量级的图像编码器取代重量级的图像编码器,这也自动保持了原始SAM的所有功能和特性。

 

以ViT-B为图像编码器的SAM的耦合蒸馏和解耦蒸馏的比较。与耦合蒸馏相比,解耦蒸馏性能更好,所需计算资源少于1%。

1.3 实验

下图给出了point与bbox提示词下MobileSAM与原生SAM的结果对比,可以看到:MobileSAM可以取得令人满意的Mask预测结果。

下图从Segment everything角度对比了SAM、FastSAM以及MobileSAM三个模型,可以看到:

  • MobileSAM与原生SAM结果对齐惊人的好,而FastSAM会生成一些无法满意的结果
  • FastSAM通常生成非平滑的边缘,而SAM与MobileSAM并没有该问题

 

MobileSAM在所有方面都优于FastSAM

SAM原始论文的标题是“Segment anything”,而不是“segment everything”。如SAM中所强调的,SAM执行可prompt分割的任务,该任务“在给定任何分割prompt的情况下返回有效的分割Mask”。

prompt的作用是指定要在图像中分割的内容。理论上,只要正确设置prompt,任何目标都可以被分割,因此,它被称为“Segment anything”。相比之下,“segment everything”本质上是目标建议生成,对此不需要prompt。在SAM中,选择“segment everything”(目标建议生成)作为下游任务之一,以演示其零样本传输性能。

总之,“Segment anything”解决了任何目标的可prompt分割的基础任务,而“segment everything”解决了为所有目标生成Mask建议的下游任务不一定需要prompt,FastSAM以无prompt的方式直接用YOLO v8生成Mask建议。为了实现可prompt分割,设计了一种映射算法来从提议Mask集中选择Mask。

2 运行环境与实战

2.1 conda环境准备

conda环境准备详见:annoconda

2.2 运行环境安装

git clone https://github.com/ChaoningZhang/MobileSAM
cd MobileSAMconda create -n mobilesam python=3.9
conda activate mobilesampip install -e .
pip install gradiopip install torchvision==0.15.1
pip install timm
pip install opencv-python

2.3 模型下载

下载地址:https://huggingface.co/spaces/dhkim2810/MobileSAM/tree/main

2.4 运行

cd app修改app.py中的代码demo.launch(server_name='192.168.1.160')  #地址为自己的内网IPpython app.py

相关文章:

比SAM小60倍的分割一切模型:MobileSAM

1 MobileSAM SAM就是一类处理图像分割任务的通用模型。与以往只能处理某种特定类型图片的图像分割模型不同,SAM可以处理所有类型的图像。 在SAM出现前,基本上所有的图像分割模型都是专有模型。比如,在医学领域,有专门分割核磁图…...

版本控制系统-SVN

SVN Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统。 官网:https://subversion.apache.org 资料:https://svnbook.red-bean.com、https://www.runoob.com/svn/svn-tutorial.html 下载:https://sourceforg…...

【电路笔记】-串联RLC电路分析

串联RLC电路分析 文章目录 串联RLC电路分析1、概述2、瞬态响应3、AC响应4、RCL和CLR配置5、结论 电阻器 、电感器 (L) 和电容器 © 是电子器件中的三个基本无源元件。 它们的属性和行为已在交流电阻、交流电感和交流电容文章中详细介绍。 在本文中,我们将重点讨…...

大数据毕业设计选题推荐-家具公司运营数据分析平台-Hadoop-Spark-Hive

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

【触想智能】工业显示器上市前的检测项目分享

工业显示器在上市前,需要做一项重要的工作,那就是工业显示器出厂前的产品可靠性检测。 工业显示器选择的测试项目相比商用端更为严格,常见的性能测试项目包括高温老化、防尘防水、电磁静电干扰、防摔防撞等,在工业级应用领域&…...

Vue使用epubjs电子书

npmjs: https://www.npmjs.com/package/epubjs 在线电子书转换器 安装: npm i epubjs 简单封装: src/hooks/ import Epub from "epubjs"; import type { Book, Rendition } from epubjs import type { BookOptions } from epubjs/types…...

python机器学习——决策树

决策树 # 模块导入 from sklearn.tree import ExtraTreeRegressor as ETR, DecisionTreeRegressor as DTRExtraTreeRegressor和DecisionTreeRegressor是scikit-learn库中的两种回归模型,用于拟合和预测连续型目标变量。 决策树是一种基于树结构的机器学习算法&…...

__attribute__((__used__)) 和 __attribute__((__section__(“*“ “*“)))的使用

见&#xff1a;haproxy代码 C语言注册函数和调用函数&#xff0c;便于模块化开发和编程。 #include <stdio.h>#ifdef __APPLE__ #define HA_SECTION(s) __attribute__((__section__("__DATA, " s))) #define HA_SECTION_START(s) __asm("…...

webgoat-(A1)SQL Injection

SQL Injection (intro) SQL 命令主要分为三类&#xff1a; 数据操作语言 &#xff08;DML&#xff09;DML 语句可用于请求记录 &#xff08;SELECT&#xff09;、添加记录 &#xff08;INSERT&#xff09;、删除记录 &#xff08;DELETE&#xff09; 和修改现有记录 &#xff…...

Flink的API分层、架构与组件原理、并行度、任务执行计划

Flink的API分层 Apache Flink的API分为四个层次&#xff0c;每个层次都提供不同的抽象和功能&#xff0c;以满足不同场景下的数据处理需求。下面是这四个层次的具体介绍&#xff1a; CEP API&#xff1a;Flink API 最底层的抽象为有状态实时流处理。其抽象实现是Process Functi…...

Transformer:开源机器学习项目,上千种预训练模型 | 开源日报 No.66

huggingface/transformers Stars: 113.5k License: Apache-2.0 这个项目是一个名为 Transformers 的开源机器学习项目&#xff0c;它提供了数千种预训练模型&#xff0c;用于在文本、视觉和音频等不同领域执行任务。该项目主要功能包括&#xff1a; 文本处理&#xff1a;支持…...

Corel VideoStudio 会声会影2024剪辑中间的视频怎么删 剪辑中音乐太长怎么办

我很喜欢视频剪辑软件Corel VideoStudio 会声会影2024&#xff0c;因为它使用起来很有趣。它很容易使用&#xff0c;但仍然给你很多功能和力量。视频剪辑软件Corel VideoStudio 会声会影2023让我与世界分享我的想法&#xff01;“这个产品的功能非常多&#xff0c;我几乎没有触…...

数据结构初阶---复杂度的OJ例题

复杂度的OJ例题 一、消失的数字1.思路一2.思路二3.思路三 二、旋转数组1.思路一2.思路二3.思路三 一、消失的数字 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(N)时间内完成吗&#xff1f; 链接&#xff1a;力扣&…...

Prometheus|云原生|grafana的admin用户密码重置备忘记录

很久很久以前部署的一个Prometheus套装里的grafana密码给忘记了&#xff0c;回忆总是很痛苦&#xff0c;因此还是在这里简单的记录一下&#xff0c;下次就不需要满世界反翻找了。 一&#xff0c; 改库重置密码为admin grafana密码存放在哪里的&#xff1f; 必须说明一下&am…...

[hive]中的字段的数据类型有哪些

Hive中提供了多种数据类型用于定义表的字段。以下是Hive中常见的数据类型&#xff1a; 布尔类型&#xff08;Boolean&#xff09;&#xff1a;用于表示true或false。 字符串类型&#xff08;String&#xff09;&#xff1a;用于表示文本字符串。 整数类型&#xff08;Intege…...

第六章 树【数据结构和算法】【精致版】

第六章 树【数据结构和算法】【精致版】 前言版权第六章 树6.1 应用实例6.2 树的概念6.2.1树的定义与表示6.2.2 树的基本术语6.2.3树的抽象数据类型定义 6.3 二叉树6.3.1二叉树的定义6.3.2 二叉树的性质6.3.3 二叉树的存储 6.4 二叉树的遍历6.4.1 二叉树的遍历及递归实现**1-二…...

第九章:Dynamic Symbolic Execution

文章目录 Dynamic Symbolic Executionoverviewmotivationdynamic symbolic execution常用的其他技术对比Random Testingsymbolic executionCombined static and symbolic - Dynamic Execution (DSE)step1: 初始化两个具体的值 x,ystep2: 根据定义得出 z 的 concrete value 和 s…...

在搜索引擎中屏蔽csdn

csdn是一个很好的技术博客&#xff0c;里面信息很丰富&#xff0c;我也喜欢在csdn上做技术笔记。 但是CSDN体量太大&#xff0c;文章质量良莠不齐。当在搜索引擎搜索技术问题时&#xff0c;搜索结果中CSDN的内容占比太多&#xff0c;导致难以从其他优秀的博客平台中获取信息。因…...

Linux开发工具的使用(vim、gcc/g++ 、make/makefile)

文章目录 一 &#xff1a;vim1:vim基本概念2:vim的常用三种模式3:vim三种模式的相互转换4:vim命令模式下的命令集- 移动光标-删除文字-剪切/删除-复制-替换-撤销和恢复-跳转至指定行 5:vim底行模式下的命令集 二:gcc/g1:gcc/g的作用2:gcc/g的语法3:预处理4:编译5:汇编6:链接7:函…...

MySQL(10):创建和管理表

基础知识 在 MySQL 中&#xff0c;一个完整的数据存储过程总共有 4 步&#xff0c;分别是&#xff1a;创建数据库、确认字段、创建数据表、插入数据。 要先创建一个数据库&#xff0c;而不是直接创建数据表&#xff1a;从系统架构的层次上看&#xff0c;MySQL 数据库系统从大到…...

高通平台实战:手把手教你解析和修改CDT中的board-id(附常见报错排查)

高通平台深度实战&#xff1a;CDT中board-id的解析与定制化修改指南 引言&#xff1a;为什么需要关注board-id&#xff1f; 在Android底层开发中&#xff0c;board-id就像设备的"身份证号"&#xff0c;它决定了系统如何识别硬件配置并加载对应的设备树和驱动。对于从…...

别再死记硬背了!用MATLAB 5分钟搞定控制系统的稳定裕度计算(附代码)

用MATLAB高效计算控制系统稳定裕度的工程实践指南 在自动控制系统的设计与分析中&#xff0c;稳定裕度是评估系统鲁棒性的关键指标。传统手工计算不仅耗时费力&#xff0c;还容易出错。本文将展示如何利用MATLAB这一强大工具&#xff0c;在5分钟内完成从传递函数定义到稳定裕度…...

别只埋头改Bug!从Flutter高德地图鸿蒙适配,聊聊跨平台插件架构设计的最佳实践

从Flutter高德地图鸿蒙适配看跨平台插件架构设计的黄金法则 当Flutter遇上鸿蒙&#xff0c;开发者们既兴奋又忐忑。兴奋的是跨平台开发框架与国产操作系统的强强联合&#xff0c;忐忑的是两者结合带来的技术适配挑战。去年我们团队在将高德地图SDK集成到Flutter鸿蒙应用时&…...

OpenClaw 是基于 Node.js 开发的本地 AI 智能体网关,部署核心是先装 **Node.js ≥ 22**,再用 npm 全局安装并完成配置向导

OpenClaw 是基于 Node.js 开发的本地 AI 智能体网关&#xff0c;部署核心是先装 Node.js ≥ 22&#xff0c;再用 npm 全局安装并完成配置向导。以下是完整部署流程&#xff1a; 一、环境准备&#xff08;必做&#xff09; 1. 安装 Node.js 22 OpenClaw 要求 Node.js ≥ 22&…...

如何高效利用孔祥仁线性代数网课?我的实战笔记与技巧分享

如何高效利用孔祥仁线性代数网课&#xff1f;我的实战笔记与技巧分享 线性代数作为数学领域的重要分支&#xff0c;在计算机科学、物理学、工程学等多个学科中都有广泛应用。对于许多学生来说&#xff0c;这门课程既抽象又充满挑战。孔祥仁老师的线性代数网课以其"零废话&…...

快速验证汽车电子创意:用快马AI十分钟搭建CAN总线通信原型

在汽车电子和工业控制领域&#xff0c;CAN总线通信是最基础也最重要的技术之一。最近我在做一个车载设备的小项目&#xff0c;需要快速验证CAN通信功能。传统开发方式往往要花大量时间搭建底层驱动&#xff0c;但这次我尝试用InsCode(快马)平台的AI辅助功能&#xff0c;居然十分…...

别再只用电容了!从π型RC到电子滤波,手把手教你选对硬件滤波方案(附电路图)

硬件滤波方案实战指南&#xff1a;从基础RC到电子滤波的工程决策 在嵌入式系统和电源设计中&#xff0c;噪声抑制是每个工程师必须面对的挑战。想象一下&#xff0c;你精心设计的传感器电路因为电源噪声导致数据跳变&#xff0c;或者音频放大器传出令人不快的嗡嗡声——这些问题…...

嵌入式系统电源时序控制原理与实现

1. 电源时序控制基础概念在现代电子系统中&#xff0c;多电压域设计已成为常态。一个典型的嵌入式系统可能同时需要1.2V&#xff08;核心逻辑&#xff09;、3.3V&#xff08;外设接口&#xff09;和1.5V&#xff08;特殊功能模块&#xff09;等多种电压。这些电源的上电顺序对系…...

别再手动拼URL了!Spring Cloud项目里用OpenFeign调用其他服务,保姆级配置避坑指南

别再手动拼URL了&#xff01;Spring Cloud项目里用OpenFeign调用其他服务&#xff0c;保姆级配置避坑指南 微服务架构下&#xff0c;服务间的HTTP调用是家常便饭。很多开发者还在用RestTemplate手动拼接URL、处理序列化&#xff0c;不仅代码冗长&#xff0c;还容易出错。想象一…...

实现网页完整捕获:Full Page Screen Capture技术解析与应用指南

实现网页完整捕获&#xff1a;Full Page Screen Capture技术解析与应用指南 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chr…...