计算机视觉:比SAM快50倍的分割一切视觉模型FastSAM

目录

引言

1 FastSAM介绍

1.1 FastSAM诞生

1.2 模型算法

1.3 实验结果

2 FastSAM运行环境构建

2.1 conda环境构建

2.2 运行环境安装

2.3 模型下载

3 FastSAM运行

3.1 命令行运行

3.1.1 Everything mode

 3.1.2 Text prompt

3.1.3 Box prompt (xywh)

3.1.4 Points prompt

 3.2 通过代码调用

4 总结


引言

MetaAI提出的能够“分割一切”的视觉基础大模型SAM提供了很好的分割效果,为探索视觉大模型提供了一个新的方向。虽然sam的效果很好,但由于SAM的backbone使用了vit,导致推理时显存的占用较多,推理速度偏慢,对硬件的要求较高,在项目应用上有很大的限制。

SAM的详细讲解:https://blog.csdn.net/lsb2002/article/details/131421165

一些研究在尝试解决这个问题,其中一个是清华团队的Expedit-SAM,对模型进行加速,论文结果最多可以提速1.5倍。主要思路是用2个不需要参数的操作:token clustering layer和token reconstruction layer。token clustering layer通过聚类将高分辨率特征转到低分辨率,推理时用低分辨率的进行卷积等操作,这样可以加速推理时间;token reconstruction layer是将低分辨率特征重新转回高分辨率。个人测试好像没有明显提升,不过已经打开了sam推理加速的思路。

1 FastSAM介绍

1.1 FastSAM诞生

最近发布的FastSAM(Fast Segment Anything),论文结果最快提升50倍,参数更少,显存占用减少,适合应用部署。

FastSAM是基于YOLOv8-seg的,这是一个配备了实例分割分支的对象检测器,它利用了YOLACT 方法。作者还采用了由SAM发布的广泛的SA-1B数据集。通过直接在仅2%(1/50)的SA-1B数据集上训练这个CNN检测器,它实现了与SAM相当的性能,但大大减少了计算和资源需求,从而实现了实时应用。作者还将其应用于多个下游分割任务,以显示其泛化性能。在MS COCO的对象检测任务上,在AR1000上实现了63.7,比32×32点提示输入的SAM高1.2分,在NVIDIA RTX 3090上运行速度快50倍。

实时SMA对工业应用都是有价值的。它可以应用于许多场景。所提出的方法不仅为大量的视觉任务提供了一种新的、实用的解决方案,而且它的速度非常高,比目前的方法快数十或数百倍。它还为一般视觉任务的大型模型架构提供了新的用途。作者认为,对于专业的任务,专业的模型具备更好的效率和准确性的权衡。然后,在模型压缩的意义上,FastSAM的方法证明了一个路径的可行性,通过引入一个人工的结构,可以显著减少计算工作量。

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

代码地址:https://github.com/CASIA-IVA-Lab/FastSAM

web demo:https://huggingface.co/spaces/An-619/FastSAM

1.2 模型算法

以yolov8-seg的instance segmentation为基础,检测时集成instance segmentation分支。

FastSAM主要分成2步:全实例分割(all instance Segmentation)和基于prompt的mask输出(Prompt-guided Selection)。

全实例分割(all instance Segmentation)

  • 模型:基于yolov8-seg的模型.
  • 实例分割:yolov8-seg实现了实例分割,结果包含了检测和分割分支。检测分支输出box和类别cls,检测分支输出k(默认为32)个mask分数,检测和分割分支是并行的。看推理代码的模型,这块其实就是yolov8的segment网络,具体可以看yolov8的segment训练代码。

Prompt-guided Selection

利用prompt挑选出感兴趣的特点目标,类似sam,支持point/box/text。

  • point prompt:点prompt用点和实例分割输出的mask进行匹配。和sam一样,利用前景点/背景点作为prompt。如果一个前景点落在多个mask中,可以通过背景点进行过滤。通过使用一组前景/背景点,能够在感兴趣的区域内选择多个mask,然后将这些mask合并为一个mask,用于完整的标记感兴趣的对象。此外,利用形态学操作来提高掩模合并的性能。
  • box prompt:与实例分割输出的mask的box和输入的box进行iou计算,利用iou得分过滤mask。
  • text prompt:利用clip模型,利用图像编码和文本编码直接的相似性,提取分数较高的mask。因为引入clip模型,text prompt的运行速度比较慢。

1.3 实验结果

FastSAM利用yolov8-x模型;取SA-1B数据集的2%进行监督训练;为了检测更大的instance,将yolov8的reg_max参数从16改成26;输入图像的size为1024。在4种级别的任务上与SAM的zero-shot对比:边缘检测、目标Proposal、实例分割、提示输入分割。

  • 边缘检测:将模型的全景实例分割结果用sobel算子得到边缘,FastSAM与SAM性能相近,都倾向于预测更多的边(数据集中没有标注的边)
  • 目标Proposal:在coco上对比了SAM、ViTDet、OLN和FastSAM,FastSAM与SAM略差,但其是zero-shot transfer,而OLN在voc上进行预训练
  • 实例分割:使用ViTDet [23]生成的边界框(bbox)作为提示符来完成实例分割任务,FastSAM比SAM差一些。
  • 提示输入分割:与SAM性能类似,但是运行效率有些低下(这主要是受CLIP模型的影响)

 

 

 

 

 

2 FastSAM运行环境构建

2.1 conda环境构建

conda环境准备详见:annoconda

2.2 运行环境安装

conda create -n fastsam python=3.9
conda activate fastsam

git clone https://ghproxy.com/https://github.com/CASIA-IVA-Lab/FastSAM.git
cd FastSAM

pip install -r requirements.txt
pip install git+https://ghproxy.com/https://github.com/openai/CLIP.git

2.3 模型下载

创建模型保存模型的目录weights

mkdir weights

模型下载地址:模型

模型下载后,存储到weights目录下

(fastsam) [root@localhost FastSAM]# ll weights/
总用量 141548
-rw-r--r-- 1 root root 144943063 8月  21 16:28 FastSAM_X.pt

3 FastSAM运行

原始图片如下,通过FastSAM对这张图片进行处理

3.1 命令行运行

3.1.1 Everything mode

python Inference.py --model_path ./weights/FastSAM_X.pt --img_path ./images/dogs.jpg

 3.1.2 Text prompt

python Inference.py --model_path ./weights/FastSAM_X.pt --img_path ./images/dogs.jpg  --text_prompt "the yellow dog"

 

3.1.3 Box prompt (xywh)

python Inference.py --model_path ./weights/FastSAM_X.pt --img_path ./images/dogs.jpg --box_prompt "[[570,200,230,400]]"

 

3.1.4 Points prompt

python Inference.py --model_path ./weights/FastSAM_X.pt --img_path ./images/dogs.jpg  --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"

 3.2 通过代码调用

vi test.py
from fastsam import FastSAM, FastSAMPrompt

model = FastSAM('./weights/FastSAM_X.pt')
IMAGE_PATH = './images/dogs.jpg'
DEVICE = 'cpu'
everything_results = model(IMAGE_PATH, device=DEVICE, retina_masks=True, imgsz=1024, conf=0.4, iou=0.9,)
prompt_process = FastSAMPrompt(IMAGE_PATH, everything_results, device=DEVICE)

# everything prompt
ann = prompt_process.everything_prompt()

# bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# text prompt
ann = prompt_process.text_prompt(text='a photo of a dog')

# point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
ann = prompt_process.point_prompt(points=[[620, 360]], pointlabel=[1])

prompt_process.plot(annotations=ann,output_path='./output/dog.jpg',)
python test.py 

4 总结

在FastSAM模型中,作者重新考虑了segment of anything task和相应模型结构的选择,并提出了一个比SAM-ViT-H (32×32)运行速度快50倍的替代解决方案。实验结果表明,FastSAM可以很好地解决多个下游任务。尽管如此,FastSAM仍有几个弱点可以加以改进,比如评分机制和实例面具生成范式。这些问题都留待进一步研究。

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

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

相关文章

科技云报道:云计算下半场,公有云市场生变,私有云风景独好

科技云报道原创。 大数据、云计算、人工智能,组成了恢弘的万亿级科技市场。这三个领域,无论远观近观,都如此性感和魅力,让一代又一代创业者为之杀伐攻略。 然而高手过招往往一瞬之间便已胜负知晓,云计算市场的巨幕甫…

Threejs学习05——球缓冲几何体背景贴图和环境贴图

实现随机多个三角形随机位置随机颜色展示效果 这是一个非常简单基础的threejs的学习应用!本节主要学习的是球面缓冲几何体的贴图部分,这里有环境贴图以及背景贴图,这样可以有一种身临其境的效果!这里环境贴图用的是一个.hdr的文件…

opencv 进阶16-基于FAST特征和BRIEF描述符的ORB(图像匹配)

在计算机视觉领域,从图像中提取和匹配特征的能力对于对象识别、图像拼接和相机定位等任务至关重要。实现这一目标的一种流行方法是 ORB(Oriented FAST and Rotated Brief)特征检测器和描述符。ORB 由 Ethan Rublee 等人开发,结合了…

IDEA中导入多module的Maven项目无法识别module的解决办法

首先举个栗子 这是正常的多module工程(spring cloud项目) 正常工程.png 这是导入出现问题的多module工程 导入出现问题的工程.png 原因: 出现该问题,是由于打开工程的时候IDEA只编译了最外层的pom.xml文件,而内部的…

【分享】华为设备登录安全配置案例

微思网络www.xmws.cn,2002年成立,专业IT认证培训21年,面向全国招生! 微 信 号 咨 询: xmws-IT 华为HCIA试听课程:超级实用,华为VRP系统文件详解【视频教学】华为VRP系统文件详解 华为HCIA试听课…

机器学习在大数据分析中的应用

文章目录 机器学习在大数据分析中的原理机器学习在大数据分析中的应用示例预测销售趋势客户细分和个性化营销 机器学习在大数据分析中的前景和挑战前景挑战 总结 🎉欢迎来到AIGC人工智能专栏~探索机器学习在大数据分析中的应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

Android SDK 上手指南||第四章 应用程序结构

第四章 应用程序结构 本教程将主要以探索与了解为主要目的,但后续的系列文章则将进一步带大家深入学习如何创建用户界面、响应用户交互操作以及利用Java编排应用逻辑。我们将专注于大家刚刚开始接触Android开发时最常遇到的项目内容,但也会同时涉及一部…

SpringBoot内嵌Tomcat连接池分析

文章目录 1 Tomcat连接池1.1 简介1.2 架构图1.2.1 JDK线程池架构图1.2.2 Tomcat线程架构 1.3 核心参数1.3.1 AcceptCount1.3.2 MaxConnections1.3.3 MinSpareThread/MaxThread1.3.4 MaxKeepAliveRequests1.3.5 ConnectionTimeout1.3.6 KeepAliveTimeout 1.4 核心内部线程1.4.1 …

shell脚本免交互

一.Here Document免交互 1.免交互概述 使用I/O重定向的方式将命令列表提供给交互式程序 是一种标准输入&#xff0c;只能接收正确的指令或命令 2.格式&#xff1a; 命令 <<标记 ....... 内容 #标记之间是传入内容 ....... 标记 注意事项 标记可以使用任意的合法…

“深度学习”学习日记:Tensorflow实现VGG每一个卷积层的可视化

2023.8.19 深度学习的卷积对于初学者是非常抽象&#xff0c;当时在入门学习的时候直接劝退一大班人&#xff0c;还好我坚持了下来。可视化时用到的图片&#xff08;我们学校的一角&#xff01;&#xff01;&#xff01;&#xff09;以下展示了一个卷积和一次Relu的变化 作者使…

2023国赛数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 最短时…

网络安全—黑客—自学笔记

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全…

Mac Flutter web环境搭建

获取 Flutter SDK 下载以下安装包来获取最新的 stable Flutter SDK将文件解压到目标路径, 比如: cd ~/development $ unzip ~/Downloads/flutter_macos_3.13.0-stable.zip 配置 flutter 的 PATH 环境变量&#xff1a; export PATH"$PATH:pwd/flutter/bin" // 这个命…

无类别域间路由(Classless Inter-Domain Routing, CIDR):理解IP网络和子网划分(传统的IP地址类ABCDE:分类网络)

文章目录 无类别域间路由&#xff08;CIDR&#xff09;&#xff1a;理解IP网络和子网划分引言传统的IP地址类关于“IP地址的浪费” IP地址与CIDRIP地址概述网络号与主机号CIDR记法&#xff08;网络 网络地址/子网掩码&#xff09;网络和广播地址 CIDR的优势减少路由表项缓解IP…

Android 面试之Glide做了哪些优化?

前言 Glide可以说是最常用的图片加载框架了&#xff0c;Glide链式调用使用方便&#xff0c;性能上也可以满足大多数场景的使用&#xff0c;Glide源码与原理也是面试中的常客。 但是Glide的源码内容比较多&#xff0c;想要学习它的源码往往千头万绪&#xff0c;一时抓不住重点.…

0101读写分离测试-jdbc-shardingsphere-中间件

文章目录 1 前言2、创建SpringBoot程序2.1、创建项目2.2、添加依赖2.3、生成实体类、service与Mapper1.5、配置读写分离 2、测试2.1、读写分离测试2.2、事务测试2.3、负载均衡测试 结语 1 前言 shardingshpere-jdbc定位为轻量级 Java 框架&#xff0c;在 Java 的 JDBC 层提供的…

文心一言 VS 讯飞星火 VS chatgpt (79)-- 算法导论7.4 4题

四、请用go语言&#xff0c;证明:RANDOMIZED-QUICKSORT 期望运行时间是 Ω(nlgn)。 文心一言&#xff1a; 首先&#xff0c;为了证明RANDOMIZED-QUICKSORT的期望运行时间是Ω(nlg n)&#xff0c;我们需要证明在最坏的情况下&#xff0c;该算法的运行时间是O(nlg n)。然后&…

elelementui组件

一、按钮 1、按钮样式 使用type、plain、round和circle属性来定义 Button 的样式。 2、主要代码 <el-row><el-button>默认按钮</el-button><el-button type"primary">主要按钮</el-button><el-button type"success">…

antd5源码调试环境启动(MacOS)

将源码下载至本地 这里antd5 版本是5.8.3 $ git clone gitgithub.com:ant-design/ant-design.git $ cd ant-design $ npm install $ npm start前提&#xff1a;安装python3、node版本18.14.0(这是本人当前下载的版本&#xff09; python3安装教程可参考&#xff1a;https://…

06-微信小程序-注册程序-场景值

06-微信小程序-注册程序 文章目录 注册小程序参数 Object object案例代码 场景值场景值作用场景值列表案例代码 注册小程序 每个小程序都需要在 app.js 中调用 App 方法注册小程序实例&#xff0c;绑定生命周期回调函数、错误监听和页面不存在监听函数等。 详细的参数含义和使…