news 2026/5/5 21:51:21

SAM3模型来了,手把手带你运行SAM3模型代码,SAM3模型初探!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SAM3模型来了,手把手带你运行SAM3模型代码,SAM3模型初探!

SAM3模型简介

SAM3(Segment Anything Model 3)是Meta推出的第三代通用图像分割模型,具备零样本迁移能力,支持多模态输入(如图像、文本提示)。相比前代,SAM3在精度、速度和交互方式上均有显著提升,适用于复杂场景分割任务。

环境准备

Python 3.8+和PyTorch 1.11+是基础依赖。安装SAM3的官方库及相关工具:

pip install segment-anything pip install opencv-python matplotlib

确保CUDA版本与PyTorch匹配以启用GPU加速。

模型下载与加载

SAM3提供预训练权重(默认基于ViT-H backbone)。通过官方仓库下载权重文件(如sam_vit_h_4b8939.pth),并加载模型:

from segment_anything import sam_model_registry model = sam_model_registry["vit_h"](checkpoint="path/to/sam_vit_h_4b8939.pth").to("cuda")

图像分割示例

使用OpenCV读取图像并生成分割掩码:

import cv2 import numpy as np from segment_anything import SamPredictor predictor = SamPredictor(model) image = cv2.imread("image.jpg") image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) predictor.set_image(image) # 通过点提示分割(前景点坐标) input_point = np.array([[x, y]]) # 替换为实际坐标 input_label = np.array([1]) # 1表示前景点 masks, scores, _ = predictor.predict(point_coords=input_point, point_labels=input_label)

多模态提示支持

SAM3支持文本提示分割,需结合CLIP等模型生成文本嵌入。示例代码需调用多模态接口:

text_prompt = "a red car" text_embedding = get_text_embedding(text_prompt) # 需自定义文本编码函数 masks = predictor.predict(text_embedding=text_embedding)

结果可视化

使用Matplotlib显示分割结果:

import matplotlib.pyplot as plt plt.imshow(image) plt.imshow(masks[0], alpha=0.5) # 叠加掩码 plt.scatter(input_point[:,0], input_point[:,1], c='r', marker='*') plt.show()

性能优化技巧

  • 批处理:对多张图像使用predictor.predict_batch提升效率。
  • 量化:加载量化模型减少显存占用:
    model = sam_model_registry["vit_h"](checkpoint="path/to/sam_vit_h_4b8939.pth", quant=True)
  • ONNX导出:转换为ONNX格式部署至边缘设备。

常见问题

  • 显存不足:尝试使用vit_bvit_l等轻量版模型。
  • 分割不准确:增加更多交互提示点或调整提示文本的粒度。

通过以上步骤可快速体验SAM3的核心功能,更多高级用法参考官方文档和开源社区示例。

SAM3模型来了,手把手带你运行SAM3模型代码,SAM3模型初探!

Meta 终于把 SAM3 开源了! 虽然论文和模型架构早就放出来了,但权重一直锁着,直到前两天才真正公开。 我第一时间冲去跑通,效果真的逆天——纯文本提示就能精准分割多个同类目标,还带 ID 和置信度,完爆 SAM2 的点+框交互方式。

先直接上干货,下方是原始图像:

输入提示词 "shoe",结果:

再换提示词 "child",结果:

这才是真正的“语义理解+分割”啊! 支持文本、参考图像、视频追踪等多模态提示,潜力巨大。

下面我把整个 Windows 本地跑通过程手把手写成最详细图文教程,包含我踩过的所有坑 + 解决方案,跟着做,100%能跑起来。

环境要求(必须满足)

  • NVIDIA 独显(AMD/核显无解)
  • CUDA ≥ 12.6(强烈建议更新到最新显卡驱动)
  • 已安装 Conda(Miniconda 或 Anaconda 都行)

完整步骤(已亲测 4090 + Win11 完美运行)

  1. 创建并激活环境
conda create -n sam3 python=3.12 -y conda activate sam3
  1. 安装 PyTorch(必须这个版本,官方指定)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
  1. 下载源码(推荐直接下载 zip,避免 git 克隆不稳定)

GitHub 地址:https://github.com/facebookresearch/sam3

下载 ZIP → 解压 → 打开文件夹

  1. 进入项目目录,安装核心依赖
cd path\to\sam3-main pip install -e .
  1. 安装示例所需额外包
pip install opencv-python matplotlib pandas tqdm

重大坑位一:Windows 下缺少 triton 包

直接运行会报 No module named 'triton' 官方 triton 不支持 Windows,但社区大佬已编译好替代版:

pip install triton-windows==3.3.0.post19

装完这步基本解决 90% 人的卡死问题

重大坑位二:权重无法下载(最致命)

SAM3 权重放在 Hugging Face,需要申请访问权限。 我申请了 → 被拒了 很多人也一样被拒,目前 Meta 不知道按什么标准批。

好在社区已经有人放出了直链,我下载好了: 文件:sam3.pt 大小约 3.2GB

把 sam3.pt 复制到项目根目录(和 sam3 文件夹同级)

然后修改源码,让它加载本地权重(否则默认去 HF 下载,会一直网络错误)

打开文件:sam3/model_builder.py

找到以下两处(Ctrl+F 搜索关键字):

load_from_hf = True → 改成 False
checkpoint_path = None → 改成 "sam3.pt"

改完保存。

最终测试代码

新建 main.py 文件,粘贴以下代码:

import torch import matplotlib.pyplot as plt from PIL import Image from sam3.model_builder import build_sam3_image_model from sam3.model.sam3_image_processor import Sam3Processor from sam3.visualization_utils import plot_results # 加载模型(会自动读取本地 sam3.pt) model = build_sam3_image_model() processor = Sam3Processor(model) # 加载测试图片 image = Image.open("assets/images/test_image.jpg") # 设置图像(这一步会做全图编码) inference_state = processor.set_image(image) # 文本提示分割(换成你想要的词) inference_state = processor.set_text_prompt(state=inference_state, prompt="child") # 或者分割鞋子:prompt="shoe" # 或者试试:prompt="foot" / "sock" / "person" / "hat" 都好使 # 可视化结果(我修复了官方 plot_results 没 plt.show() 的 bug) plot_results(image, inference_state) plt.show() # 加上这句才能弹出图片

运行 python main.py

第一次运行会稍微慢一点(加载模型),之后就很快了。

至此,SAM3 就在你本地完美跑起来了! 后续我还会继续出:

  • 参考图像分割
  • 视频目标追踪
  • 结合 CLIP 做更复杂提示
  • 自定义数据集微调等进阶玩法

系列都会持续更新,建议关注 + 收藏,随时来看最新进展~

最后:关于权重文件 sam3.pt

我这里已经下载好了(3.2GB,完整官方权重)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 10:42:20

VBA 64位API声明语句第017讲

跟我学VBA,我这里专注VBA, 授人以渔。我98年开始,从源码接触VBA已经20余年了,随着年龄的增长,越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友,都来学习VBA,利用VBA,起码可以提高…

作者头像 李华
网站建设 2026/4/25 12:08:24

ue metahuman 绑定头发

目录 🧩 先确认你买的是什么类型 ✅ 正确绑定方法(UE 官方方式) 第一步:打开 MetaHuman 角色蓝图 第二步:找到头部 Skeletal Mesh 第三步:添加 Groom 组件 第四步:指定头发资产 第五步&a…

作者头像 李华
网站建设 2026/4/24 9:03:41

RecyclerView 多类型布局方案

@[TOC]目录 1. 基础实现方案 1.1 重写 getItemViewType() class MultiTypeAdapter(private val items: List<ListItem>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {companion object {const val TYPE_HEADER = 0const val TYPE_TEXT = 1const val TY…

作者头像 李华
网站建设 2026/5/4 22:15:22

鸿蒙应用如何集成第三方 SDK?真实项目中的完整实践

摘要 在实际的鸿蒙应用开发中&#xff0c;很少有项目是完全“从零开始”的。无论是统计埋点、支付登录、音视频处理&#xff0c;还是 AI 能力接入&#xff0c;都会或多或少依赖第三方 SDK。但很多同学在第一次接触鸿蒙时&#xff0c;会发现一个问题&#xff1a;Android 那一套…

作者头像 李华
网站建设 2026/5/2 19:53:51

如何打开2个notepad++

方法一&#xff1a;最简单直接的方法&#xff08;临时使用&#xff09; 这是最常用的方式&#xff0c;通过运行第二个程序实例来实现。 在你的桌面、开始菜单或任务栏上&#xff0c;找到 Notepad 的快捷方式图标。 直接再点击一次​ Notepad 图标。 或者&#xff0c;在第一个…

作者头像 李华