SAM2(Segment Anything Model 2)新一代分割一切大模型实战总结

news2024/11/15 2:17:26

Segment Anything Model 2(SAM 2)作为Meta公司发布的Segment Anything Model(SAM)的升级版本,在图像和视频分割领域展现出了显著的优点和特性。
在这里插入图片描述

论文连接:https://arxiv.org/pdf/2408.00714

Demo: https://sam2.metademolab.com
Code: https://github.com/facebookresearch/segment-anything-2
Website: https://ai.meta.com/sam2

优点

  1. 分割精度提升

    • 相比原始的SAM模型,SAM 2在分割精度上有所提高,能够更准确地识别并分割图像和视频中的对象。
  2. 处理速度加快

    • SAM 2的处理速度提高了大约六倍,能够更快地生成分割掩模,适用于需要快速响应的应用场景。
  3. 支持视频分割

    • 除了图像分割之外,SAM 2还支持视频中的对象分割,为视频处理和分析提供了强大的工具。
  4. 实时处理能力

    • SAM 2非常适合于需要实时处理的应用场景,如增强现实(AR)和虚拟现实(VR)应用,能够实时分割用户周围的环境。
  5. Zero-Shot泛化能力

    • SAM 2具有良好的zero-shot迁移能力,可以在未见过的数据上工作而不需要额外的训练,这使得它能够在多种不同的视觉域中应用。
  6. 广泛的训练数据

    • SAM 2的训练数据集包含了1100万张图像和110亿个掩码,这种广泛的训练数据使得SAM 2成为训练新图像分割任务的强大起点。

特性

  1. 可提示的模型架构

    • SAM 2可以根据不同的提示(如点、框、甚至是文本)来生成分割结果,这种灵活性使得用户可以根据需要轻松定义目标对象。
  2. 编码器-解码器架构

    • SAM 2很可能继续使用了编码器-解码器架构,其中编码器负责提取特征,解码器则用于生成分割掩模。
  3. 高效网络设计

    • 为提高处理速度,SAM 2可能采用了优化过的网络结构或计算效率更高的组件。
  4. 适应性强的分割头

    • 模型包含了一个高度灵活的分割头,能够根据不同的提示生成相应的掩模,从而适应不同的分割任务。
  5. 多模态输入支持

    • 除了传统的图像输入外,SAM 2还支持视频帧序列作为输入,以实现视频分割。
  6. 记忆注意模块

    • SAM 2配备了一个记忆注意模块,关注目标对象之前的记忆,存储关于对象和之前交互的信息,这允许它在整个视频中生成mask预测,并根据之前观察到的帧中存储的对象记忆上下文有效地纠正这些预测。
  7. PVS任务支持

    • 在视频的任何一帧上向模型提供提示(如正/负单击、边界框或mask),模型可以传播这些提示以获得整个视频中的对象mask。
  8. 开源与社区支持

    • Meta公司以宽松的Apache 2.0许可证共享了SAM 2的代码和模型权重,促进了社区的研究和应用。

SAM 2以其高精度、高速度、广泛的支持能力以及强大的zero-shot泛化能力,在图像和视频分割领域展现出了显著的优势和广泛的应用前景。

实战

实现SAM推理有两种方法,一种是直接使用官方的SAM2模型,另一种使用Ultralytics 。

基于官方模型的SAM2实战

GitHub链接:

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

使用前需要先安装 SAM 2。代码需要python>=3.10,以及torch>=2.3.1和。请按照此处的torchvision>=0.18.1说明安装 PyTorch 和 TorchVision 依赖项。您可以使用以下方式在 GPU 机器上安装 SAM 2:

git clone https://github.com/facebookresearch/segment-anything-2.git
cd segment-anything-2; pip install -e .

然后,下载模型:
sam2_hiera_tiny.pt:

https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt

sam2_hiera_small.pt:

https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt

sam2_hiera_base_plus.pt:

https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt

sam2_hiera_large.pt:

https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt

测试图片

import torch
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor

checkpoint = "./checkpoints/sam2_hiera_large.pt"
model_cfg = "sam2_hiera_l.yaml"
predictor = SAM2ImagePredictor(build_sam2(model_cfg, checkpoint))

with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
    predictor.set_image(<your_image>)
    masks, _, _ = predictor.predict(<input_prompts>)

测试视频

import torch
from sam2.build_sam import build_sam2_video_predictor

checkpoint = "./checkpoints/sam2_hiera_large.pt"
model_cfg = "sam2_hiera_l.yaml"
predictor = build_sam2_video_predictor(model_cfg, checkpoint)

with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
    state = predictor.init_state(<your_video>)

    # add new prompts and instantly get the output on the same frame
    frame_idx, object_ids, masks = predictor.add_new_points_or_box(state, <your_prompts>):

    # propagate the prompts to get masklets throughout the video
    for frame_idx, object_ids, masks in predictor.propagate_in_video(state):
        ...

方法二:基于ultralytics包的封装来调用

安装必要的包。安装ultralytics并确保其版本>=8.2.70,torch版本也需>=2.0或直接使用最新版本

pip install -U ultralytics    

下载分割模型。链接如下:

SAM 2 tiny链接:

https://github.com/ultralytics/assets/releases/download/v8.2.0/sam2_t.pt

SAM 2 small:

https://github.com/ultralytics/assets/releases/download/v8.2.0/sam2_s.pt

SAM 2 base

https://github.com/ultralytics/assets/releases/download/v8.2.0/sam2_b.pt

SAM 2 large

https://github.com/ultralytics/assets/releases/download/v8.2.0/sam2_l.pt

全局分割

from ultralytics import ASSETS, SAM
# Load a model
model = SAM("sam2_s.pt")
# Display model information (optional)
model.info()
# Segment image or video
results = model('car.jpg') # 图片推理
# Display results
for result in results:    
	result.show()

指定点或者矩形区域推理图片

from ultralytics import SAM

# Load a model
model = SAM("sam2_b.pt")

# Display model information (optional)
model.info()

# Segment with bounding box prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# Segment with point prompt
results = model("path/to/image.jpg", points=[150, 150], labels=[1])

for result in results:    
	result.show()

视频推理

from ultralytics import SAM

# Load a model
model = SAM("sam2_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/video.mp4")

SAM 2 与 YOLOv8 的比较

在这里,我们将 Meta 的最小 SAM 2 模型 SAM2-t 与 Ultralytics 的最小分割模型 YOLOv8n-seg 进行比较:

在这里插入图片描述
这种比较显示了模型大小和速度之间的数量级差异。虽然 SAM 具有自动分割的独特能力,但它并不是 YOLOv8 分割模型的直接竞争对手,因为 YOLOv8 模型的体积更小、速度更快、效率更高。

自动标注:高效的数据集创建

自动标注是SAM 2的一个强大功能,它使用户能够利用预训练模型快速且准确地生成分割数据集。这一功能在无需大量手动工作的情况下创建大型、高质量数据集时尤其有用。

使用SAM 2自动标注您的数据集,代码如下:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam2_b.pt")
参数类型描述默认值
datastr包含待标注图像的文件夹的路径。
det_modelstr, optional预训练的YOLO检测模型。默认为’yolov8x.pt’。‘yolov8x.pt’
sam_modelstr, optional预训练的SAM 2分割模型。默认为’sam2_b.pt’。‘sam2_b.pt’
devicestr, optional运行模型的设备。默认为空字符串(如果有的话,则为CPU或GPU)。
output_dirstr, None, optional保存标注结果的目录。默认为与’data’同目录下的’labels’文件夹。None

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

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

相关文章

9月6号作业

1&#xff1a;.h文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QWidget> #include<QIcon> //图标类 #include<QLabel> //标签类 #include<QMovie> //动图类 #include<QLineEdit> //行编辑器类 …

黑马点评8——好友关注-SortedSet

文章目录 关注和取关共同关注Feed流实现方案分析推送到粉丝收件箱Feed流基于推模式实现关注推送功能 滚动分页查询收件箱的思路实现滚动分页查询 关注和取关 所以关注和取关就是简单的插入和删除数据库。 Overridepublic Result isFollow(Long followUserId) {// 1. 获取登录用…

J.U.C Review - Stream并行计算原理源码分析

文章目录 Java 8 Stream简介Stream单线程串行计算Stream多线程并行计算源码分析Stream并行计算原理Stream并行计算的性能提升 Java 8 Stream简介 自Java 8推出以来&#xff0c;开发者可以使用Stream接口和lambda表达式实现流式计算。这种编程风格不仅简化了对集合操作的代码&a…

无线信道中ph和ph^2的场景

使用 p h ph ph的情况&#xff1a; Rayleigh 分布的随机变量可以通过两个独立且相同分布的零均值、高斯分布的随机变量表示。设两个高斯随机变量为 X ∼ N ( 0 , σ 2 ) X \sim \mathcal{N}(0, \sigma^2) X∼N(0,σ2)和 Y ∼ N ( 0 , σ 2 ) Y \sim \mathcal{N}(0, \sigma^2)…

枚举: C++和Python实现鸡兔同笼问题

作者制作不易&#xff0c;关注、点赞、收藏一下吧&#xff01; 目录 1.Python实现 2.C实现 1.Python实现 首先&#xff0c;我们需要输入头和脚的数量: head int(input("请输入头的数量: ")) feet int(input("请输入脚的数量: ")) input() 实现输入…

优质的产业园都在怎么做运营?

产业园区作为区域经济发展的重要载体&#xff0c;其运营模式和管理水平直接影响着产业集聚的成效和区域经济的竞争力。在一线城市与新一线城市中&#xff0c;已经涌现出了一批以高效运营、创新服务为特色的优质产业园&#xff0c;今天&#xff0c;我们就城市标杆产业园的案例和…

10款古方突破1800亿元,康缘药业发力,市场迎井喷式增长……

在政策东风与市场需求的双重驱动下&#xff0c;中药创新领域正迎来前所未有的发展机遇。特别是古代经典名方制剂的研发与注册&#xff0c;正以前所未有的速度推进&#xff0c;不仅激发了行业的活力&#xff0c;也为患者带来了更多治疗选择。本文将深入探讨这一领域的最新动态&a…

828华为云征文|Flexus云服务器X实例快速部署在线测评平台,适用各种信息学教学

文章目录 如何选配Flexus云服务器X实例服务器HydroOJHOJ 服务器资源的选取基础配置实例规格镜像、存储、网络弹性公网IP云服务器名称 部署HydroOJ1.设置安全组、开放端口2.部署HydroOJ回到控制中心&#xff0c;远程登录 部署HOJ安装docker# 安装docker-compose部署HOJ 本篇幅为…

Vatee万腾平台:赋能企业,共筑智慧经济新高地

在智慧经济时代的大潮中&#xff0c;企业如何把握机遇&#xff0c;实现转型升级&#xff0c;成为行业内的佼佼者&#xff1f;Vatee万腾平台以其卓越的技术实力、前瞻性的战略眼光和全方位的服务体系&#xff0c;正逐步成为企业数字化转型的坚实后盾&#xff0c;赋能企业&#x…

Day-06-QFileDialog文件操作

一、实现打开文件选择对话框 1、程序演示 2、相关代码 void Widget::on_QFileDialog_clicked() {QString fileName QFileDialog::getOpenFileName(this, tr("Open File"),"D:/QT project/", /*注意修改自己的文件打开地址*/tr("Text (*.txt *.d…

又一个新的开源AI项目!!【送源码】

好家伙&#xff0c;国内大模型发展太猛了&#xff01; 旗舰端侧模型面壁「小刚炮」系列进化为全新 MiniCPM 3.0 基座模型&#xff0c;再次以小博大&#xff0c;以 4B 参数&#xff0c;带来超越 GPT-3.5 的性能&#xff0c;强得不像端侧模型。 并且&#xff0c;量化后仅 2GB 内…

【Hadoop|HDFS篇】HDFS的读写流程

1. HDFS的写流程 1.1 剖析文件的写入 副本存储节点的选择问题&#xff1a; 第一个副本在Client所在的节点上&#xff0c;如果客户端在集群外&#xff0c;随机选一个。第二个副本在另一个机架的随机一个节点上。第三个副本在第二个副本所在的机架的随机节点上。 2. HDFS的写流…

Redis 集群:如何实现数据的高效分片与负载均衡

Redis 集群&#xff1a;如何实现数据的高效分片与负载均衡 一 . 基本概念二 . 数据分片算法2.1 哈希求余算法2.2 一致性哈希算法2.3 哈希槽分区算法核心思路Redis 集群中最多只能有 16384 个分片吗 ?为什么一定要是 16384 个槽位 ? 三 . 基于 docker 进行集群的搭建3.1 创建目…

《MaPLe: Multi-modal Prompt Learning》中文校对版

系列论文研读目录 文章目录 系列论文研读目录题目&#xff1a;《Maple&#xff1a;多模态提示学习》摘要1.简介2.相关工作视觉语言模型&#xff1a;提示学习&#xff1a;视觉语言模型中的提示学习&#xff1a; 3.方法3.1.回看CLIP编码图像&#xff1a;编码文本&#xff1a;Zero…

【vue、UI】使用 Vue2 和 Element UI 封装 CSV 文件上传组件,实现csv回显

文章目录 前言组件功能概述实现效果组件模板结构组件的核心逻辑1.数据属性定义2.方法拆解3.CSV 文件解析方法4. 错误处理方法 组件样式完整组件代码总结待优化的地方 前言 在 Vue2 项目中&#xff0c;我们经常需要封装一些可重用的组件来提升开发效率。本文将介绍如何使用 Vue…

Linux工程管理文件Makefile-入门篇

1.Makefile简介 Makefile是在Linux环境下 C/C 程序开发必须要掌握的一个工程管理文件。当你使用make命令去编译一个工程项目时&#xff0c;make工具会首先到这个项目的根目录下去寻找Makefile文件&#xff0c;然后才能根据这个文件去编译程序。那Makefile在编译过程中到底起了…

T7:咖啡豆识别

T7&#xff1a;咖啡豆识别 **一、前期工作**1.设置GPU,导入库2.导入数据3.查看数据 **二、数据预处理**1.加载数据2.可视化数据3.配置数据集 **三、构建CNN网络模型**1、手动搭建2、直接调用官方模型 **四、编译模型****五、训练模型****六、模型评估****七、预测**八、暂时总结…

Spring-容器:IOC-基于注解管理Bean

目录 一、基于注解管理Bean&#xff08;重点&#xff09;1.1、概述1.2、开启组件扫描1.2.1、指定要排除的组件1.2.2、仅扫描指定组件 1.3、使用注解定义Bean1.4、使用Autowired注入1.4.1、属性注入1.4.2、set注入1.4.3、构造方法注入1.4.4、形参注入1.4.5、无注解注入1.4.6、联…

自幂数判断c++

题目描述 样例输入 3 152 111 153样例输出 F F T 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; long long m,a; int main(){cin>>m;for(int i1;i<m;i){cin>>a;long long ta,n[10],cc0,s0;while(t!0){//求位数与拆位n[cc]t%10;tt/…

报错:Reached the max session limit(DM8 达梦数据库)

报错:Reached the max session limit - - DM8 达梦数据库 1 环境介绍2 数据库启动SYSTEM IS READY后面日志3 数据库刚启动日志4 达梦数据库学习使用列表 1 环境介绍 某项目无法连接数据库,报错:超过最大会话数限制 , 检查 dmdba ulimit -a openfiles 已改检查 dm.ini 其中 MAX…