SAM3模型简介
SAM3(Segment Anything Model 3)是Meta推出的第三代通用图像分割模型,具备零样本迁移能力,支持多模态输入(如图像、文本提示)。相比前代,SAM3在精度、速度和交互方式上均有显著提升,适用于复杂场景分割任务。
通过以上步骤可快速体验SAM3的核心功能,更多高级用法参考官方文档和开源社区示例。
SAM3模型来了,手把手带你运行SAM3模型代码,SAM3模型初探!
Meta 终于把 SAM3 开源了! 虽然论文和模型架构早就放出来了,但权重一直锁着,直到前两天才真正公开。 我第一时间冲去跑通,效果真的逆天——纯文本提示就能精准分割多个同类目标,还带 ID 和置信度,完爆 SAM2 的点+框交互方式。
先直接上干货,下方是原始图像:

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

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

这才是真正的“语义理解+分割”啊! 支持文本、参考图像、视频追踪等多模态提示,潜力巨大。
下面我把整个 Windows 本地跑通过程手把手写成最详细图文教程,包含我踩过的所有坑 + 解决方案,跟着做,100%能跑起来。
环境要求(必须满足)
- NVIDIA 独显(AMD/核显无解)
- CUDA ≥ 12.6(强烈建议更新到最新显卡驱动)
- 已安装 Conda(Miniconda 或 Anaconda 都行)
环境准备
环境配置与模型准备
安装或升级 Ultralytics 至 8.3.237 及以上版本:
pip install -U ultralytics
下载 SAM 3 模型权重文件 sam3.pt:
wget https://modelscope.cn/models/facebook/sam3/resolve/master/sam3.pt
下载文本编码依赖文件(仅文本提示需要):
wget https://gitcode.com/cl/CLIP4Clip/raw/modules/bpe_simple_vocab_16e6.txt.gz
概念分割(文本提示)
使用 SAM3SemanticPredictor 进行文本提示分割:
from ultralytics.models.sam import SAM3SemanticPredictor
# 1. 初始化预测器(配置参数可按需调整)
overrides = dict(
conf=0.25, # 置信度阈值,默认0.25
task="segment", # 任务类型:分割
mode="predict", # 运行模式:预测
model="sam3.pt", # 模型权重路径(相对/绝对路径)
half=True, # 启用FP16精度,提升推理速度(需GPU支持)
)
predictor = SAM3SemanticPredictor(
overrides=overrides,
bpe_path="path/to/bpe_simple_vocab_16e6.txt.gz" # 文本编码依赖文件路径
)
# 2. 设置待分割图像(一次设置可多次查询)
predictor.set_image("path/to/image.jpg") # 替换为实际图像路径
# 3. 执行分割(支持多文本提示、描述性短语)
# 示例1:多概念同时分割
results = predictor(text=["person", "bus", "glasses"], save=True) # save=True 保存结果
# 示例2:带描述的短语提示
results = predictor(text=["person with red cloth", "person with blue cloth"], save=True)
# 示例3:单个概念分割
results = predictor(text=["a penguin"], save=True)
视觉提示(单对象分割)
使用基础 SAM 接口进行点/框提示分割:
from ultralytics import SAM
model = SAM("sam3.pt")
results = model.predict(
source="image.jpg",
points=[[400, 370], [900, 370]],
labels=[1, 1]
)
results[0].show()
视频对象跟踪
通过帧间一致性实现视频跟踪:
from ultralytics import SAM
model = SAM("sam3.pt")
results = model.track(
source="video.mp4",
points=[500, 300],
labels=[1],
persist=True # 启用跨帧跟踪
)
高级参数说明
conf:调整置信度阈值过滤低质量分割half:启用 FP16 加速推理(需 GPU)persist:视频跟踪时保持对象 ID 一致save:自动保存可视化结果到runs/目录
完整文档参考 Ultralytics 官方说明:SAM 3 文档
以下是关于如何使用 SAM(Segment Anything Model)3 模型进行单对象分割的详细指南。SAM 3 支持与 SAM 2 兼容的视觉提示方式(如点、框、掩码),用于分割图像中的单个对象实例。我将以结构清晰的方式逐步解释操作流程,确保内容真实可靠。
步骤 1:环境准备
首先,确保您的 Python 环境已安装必要的库:
- 安装
ultralytics库:这是运行 SAM 模型的基础。pip install ultralytics - 下载模型权重文件:例如
sam3.pt,您可以从官方资源或相关博客获取(参考用户提供的链接)。
步骤 2:加载模型
在 Python 脚本中导入库并加载模型:
from ultralytics import SAM
# 加载预训练模型(假设模型文件 sam3.pt 位于当前目录)
model = SAM("sam3.pt")
步骤 3:使用视觉提示进行单对象分割
SAM 3 支持点提示、多点提示和框选提示。以下是具体示例:
示例 1:单点提示(分割指定坐标的对象)
- 功能:通过一个点(前景点)分割图像中的单个对象。
- 代码:
# 指定图像路径、点坐标(格式:[x, y])和标签(labels=[1] 表示前景) results = model.predict(source="path/to/image.jpg", points=[900, 370], labels=[1]) # 显示分割结果 results[0].show() - 说明:
points参数是一个坐标列表,labels=[1]表示该点是前景(对象)。结果将分割出该点所在的对象。
示例 2:多点提示(多个点辅助定位)
- 功能:使用多个点(均视为前景)更精确地定位单个对象。
- 代码:
# 指定多个点坐标(每个点格式:[x, y]),labels 全设为 1(前景) results = model.predict(source="path/to/image.jpg", points=[[400, 370], [900, 370]], labels=[1, 1]) # 显示结果(同上) results[0].show() - 说明:多个点帮助模型更好地识别对象边界。
示例 3:框选提示(分割 bounding box 内的对象)
- 功能:通过一个边界框(bbox)分割框内的单个对象。
- 代码:
# 指定 bbox 坐标(格式:[x_min, y_min, x_max, y_max]) results = model.predict(source="path/to/image.jpg", bboxes=[100, 150, 300, 400]) # 显示结果 results[0].show() - 说明:
bboxes参数定义了一个矩形区域,模型将分割该区域内的主要对象。
步骤 4:运行项目并下载源码
- 运行代码:将上述代码保存为 Python 脚本(如
sam_demo.py),确保图像路径和模型文件正确,然后运行:python sam_demo.py 汇总 from ultralytics import SAM # 加载模型 model = SAM("sam3.pt") # 示例1:单点提示(分割指定坐标的对象,labels=[1]表示前景) results = model.predict(source="path/to/image.jpg", points=[900, 370], labels=[1]) results[0].show() # 显示结果 # 示例2:多点提示(多个点辅助定位单个对象) results = model.predict(source="path/to/image.jpg", points=[[400, 370], [900, 370]], labels=[1, 1]) # 示例3:框选提示(分割 bounding box 内的单个对象) results = model.predict(source="path/to/image.jpg", bboxes=[100, 150, 300, 400]) results[0].show() - 下载源码:用户提供的博客链接(如原文)可能包含完整源码和项目文件。建议访问该链接获取详细信息(注意遵守版权协议)。
注意事项
- 模型文件:
sam3.pt需要预先下载并放置在工作目录中。 - 图像路径:替换
"path/to/image.jpg"为您的实际图像路径。 - 版权提示:参考用户提供的博客原文(如链接)时,请尊重原创内容。
通过以上步骤,您可以轻松实现 SAM 3 的单对象分割功能。
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_b或vit_l等轻量版模型。 - 分割不准确:增加更多交互提示点或调整提示文本的粒度。
完整步骤(已亲测 4090 + Win11 完美运行)
- 创建并激活环境
conda create -n sam3 python=3.12 -y
conda activate sam3
- 安装 PyTorch(必须这个版本,官方指定)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
- 下载源码(推荐直接下载 zip,避免 git 克隆不稳定)
GitHub 地址:https://github.com/facebookresearch/sam3
下载 ZIP → 解压 → 打开文件夹

- 进入项目目录,安装核心依赖
cd path\to\sam3-main
pip install -e .
- 安装示例所需额外包
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
要成功运行 SAM 3 模型,您需要手动下载核心文件,包括模型权重和文本编码依赖文件。以下是详细的步骤指南,确保结构清晰且信息可靠。请按照顺序操作:
步骤 1: 下载模型权重文件
模型权重文件是运行 SAM 3 的核心组件,必须下载并正确放置。
- 下载链接: 访问阿里云 ModelScope 模型库的官方链接:
https://modelscope.cn/models/facebook/sam3/resolve/master/sam3.pt - 放置位置:
下载完成后,将文件sam3.pt放置在您的工作目录中(例如项目根目录)。如果您在代码中调用模型时指定路径,请确保使用绝对路径指向该文件。
步骤 2: 下载文本编码依赖文件(仅用于文本提示)
如果您的应用涉及文本提示功能,还需要下载 BPE 词汇文件以支持文本编码处理。
- 下载链接: 访问 GitCode 资源库的官方链接:
https://gitcode.net/cl/CLIP4Clip/-/blob/master/modules/bpe_simple_vocab_16e6.txt.gz - 放置位置:
下载文件bpe_simple_vocab_16e6.txt.gz后,解压它(使用工具如 gzip 或 Python 的 gzip 模块),并将解压后的文本文件(例如bpe_simple_vocab_16e6.txt)放在与模型权重相同的目录或指定路径中。
注意事项
- 路径指定: 在代码中调用 SAM 3 时,如果文件未放在默认工作目录,请通过参数明确指定权重文件和文本依赖文件的绝对路径。
- 验证下载: 下载后,检查文件大小和完整性(例如
sam3.pt约为几百 MB,bpe_simple_vocab_16e6.txt.gz解压后约为几 MB),以确保文件未损坏。 - 版权提示: 以上信息基于公开技术博客(如 优快云 博主“vb200811”的原创文章)整理,遵循 CC 4.0 BY-SA 版权协议。建议在使用时遵守原始来源的版权要求。
完成这些步骤后,您应该能正常运行 SAM 3 模型。
4544



被折叠的 条评论
为什么被折叠?



