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_b或vit_l等轻量版模型。 - 分割不准确:增加更多交互提示点或调整提示文本的粒度。
通过以上步骤可快速体验SAM3的核心功能,更多高级用法参考官方文档和开源社区示例。
SAM3模型来了,手把手带你运行SAM3模型代码,SAM3模型初探!
Meta 终于把 SAM3 开源了! 虽然论文和模型架构早就放出来了,但权重一直锁着,直到前两天才真正公开。 我第一时间冲去跑通,效果真的逆天——纯文本提示就能精准分割多个同类目标,还带 ID 和置信度,完爆 SAM2 的点+框交互方式。
先直接上干货,下方是原始图像:
输入提示词 "shoe",结果:
再换提示词 "child",结果:
这才是真正的“语义理解+分割”啊! 支持文本、参考图像、视频追踪等多模态提示,潜力巨大。
下面我把整个 Windows 本地跑通过程手把手写成最详细图文教程,包含我踩过的所有坑 + 解决方案,跟着做,100%能跑起来。
环境要求(必须满足)
- NVIDIA 独显(AMD/核显无解)
- CUDA ≥ 12.6(强烈建议更新到最新显卡驱动)
- 已安装 Conda(Miniconda 或 Anaconda 都行)
完整步骤(已亲测 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 → 改成 Falsecheckpoint_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,完整官方权重)