感谢大佬Coding茶水间的博客SAM3模型来了,手把手带你运行SAM3模型代码,SAM3模型初探!的指导
SAM3是2025年新发布的大模型,对配置要求较高,很多教程都提到了CUDA ≥ 12.6,但本人用组内的3090服务器(CUDA118)亲测可用,以下是本人的部署过程(踩坑指南),本人比较愚笨,只会用笨办法。
以下教程适合Linux,Win系统指路Coding茶水间大佬的文章。

1、SAM3源码与权重下载

SAM3的源码可在gitbub上下载,权重需要在Hugface上单独申请,但据说不太容易申请到,国内Modelscope上已经有大佬上传了权重,权重直接放在sam3路径下就可以。导入权重后需要按照第3章修改下配置。

2、环境搭建

环境搭建基本照抄官方教程
创建新的 Conda 环境:

1
2
3
conda create -n sam3 python=3.12
conda deactivate
conda activate sam3

安装支持 CUDA 的 PyTorch:

1
2
3
#这里需要结合您自身的cuda版本,我这里是3090显卡,cuda版本118,因此和官方教程上的不一样
pip install torch==2.6.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
#建议提前搞好镜像源,不然会很慢

克隆仓库并安装包:

1
2
3
git clone https://github.com/facebookresearch/sam3.git #这步建议直接在github上下载,直接git有点慢
cd sam3 # 如果是直接在git上下载解压的,那么路径就是sam3-main
pip install -e . # 这步一般没什么问题

3、跑个实例

修改配置
打开文件:sam3/model_builder.py

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

跑个实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 这里就是官网的案例,按自己的路径修改就可以,权重文件会自己读取


import torch
#################################### For Image ####################################
from PIL import Image
from sam3.model_builder import build_sam3_image_model
from sam3.model.sam3_image_processor import Sam3Processor
# Load the model
model = build_sam3_image_model()
processor = Sam3Processor(model)
# Load an image
image = Image.open("<YOUR_IMAGE_PATH.jpg>")
inference_state = processor.set_image(image)
# Prompt the model with text
output = processor.set_text_prompt(state=inference_state, prompt="<YOUR_TEXT_PROMPT>")

# Get the masks, bounding boxes, and scores
masks, boxes, scores = output["masks"], output["boxes"], output["scores"]

#################################### For Video ####################################

from sam3.model_builder import build_sam3_video_predictor

video_predictor = build_sam3_video_predictor()
video_path = "<YOUR_VIDEO_PATH>" # a JPEG folder or an MP4 video file
# Start a session
response = video_predictor.handle_request(
request=dict(
type="start_session",
resource_path=video_path,
)
)
response = video_predictor.handle_request(
request=dict(
type="add_prompt",
session_id=response["session_id"],
frame_index=0, # Arbitrary frame index
text="<YOUR_TEXT_PROMPT>",
)
)
output = response["outputs"]

4、最坑的一集

相信到这里您一定开跑了,然后报了一堆缺失库的错。我也很疑惑,我明明全程按照官方教程来的怎么还会报错,简直匪夷所思,而且前面安装过程也一直没出错,欢迎各位大佬指出我的漏洞。
接下来按照错误把缺失的包一个一个安装好就可以了,大概有五六七八个包。