SAM3本地windows部署,SAM3部署常见问题解决,NVIDIA GeForce RTX 5060 Ti with CUDA capability sm_120 is not compatibl
·
**
环境要求
**
- NVIDIA 独显(AMD/核显无解)
- CUDA ≥ 12.6(强烈建议更新到最新显卡驱动,作者是12.8,可用)
- 已安装 Conda(Anaconda )
- python指定的是3.12,但作者的是3.10,一样可以用
conda create -n sam3 python=3.12 -y
conda activate sam3
# 安装CUDA12.6,官方指定,但是作者的RTX 5060 Ti会报错不兼容,因为这个GPU比较新
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
但是作者的RTX 5060 Ti会报错不兼容,因为这个GPU比较新,下面命令可安装CUDA12.8,可解决标题的不兼容问题
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu128
# 以下是作者的环境
# PyTorch版本:2.9.1+cu128
#CUDA可用:True
#CUDA编译版本:12.8
#GPU名称:NVIDIA GeForce RTX 5060 Ti
下载源码,也可以直接clone,老实的小伙子访问不了github的话去了解一下“魔法”或者“梯子”
进入项目目录,安装核心依赖
cd path\to\sam3-main
pip install -e .
安装完毕之后还是会少了很多包,一个一个点击pip安装就行,但是有一个例外
Windows 下缺少 triton 包,无法直接点击安装,执行下面命令就可解决
pip install triton-windows==3.3.0.post19
上面超链接文章提供了检查点下载,但是是去bilibili感觉会很麻烦,这边我提供了魔塔modelscope的下载链接,我觉得很方便直接下载,也不需要懒人兄弟人去动脑子
直接执行下面代码就可以下载
pip install modelscope
# 下载到当前目录, ./总知道吧,也可以修改的,就是在./后面接上文件夹名,或者直接替换为绝对路径
modelscope download --model Fingsinz/sam3 sam.pt --local_dir ./
# 如果不想下载到当前目录,可指定 ./weights文件中
modelscope download --model Fingsinz/sam3 sam.pt --local_dir ./weights
下面是作者的代码,可视化是自己实现的,可以删除,只需要修改对应的文件路径就行了
import cv2
import numpy as np
import matplotlib.pyplot as plt
import torch
from sam3.model.sam3_image_processor import Sam3Processor
from torchvision import transforms
from PIL import Image
import sys
import os
# 添加项目根目录到Python路径
sys.path.append(r"C:\Users\HYKG03\PycharmProjects\ultralytics\sam3Dir")
# 导入SAM3模型构建函数
from sam3.model_builder import build_sam3_image_model
def visualize_results(image, masks, boxes, scores, threshold=0.5):
"""
可视化SAM3模型的分割结果
Args:
image: 原始PIL图像
masks: 模型输出的掩码,形状为 [N, H, W],N为检测到的实例数
boxes: 模型输出的边界框,形状为 [N, 4],格式为 [x1, y1, x2, y2]
scores: 模型输出的置信度分数,形状为 [N]
threshold: 置信度阈值,只可视化分数大于该值的结果
"""
# 将PIL图像转换为numpy数组
image_np = np.array(image)
# 创建可视化图像副本
visualization = image_np.copy()
# 获取图像尺寸
height, width = image_np.shape[:2]
# 定义颜色列表,用于区分不同实例
# 注意:对于图像操作使用0-255范围,对于matplotlib操作使用0-1范围
colors_255 = [
(255, 0, 0), # 红色
(0, 255, 0), # 绿色
(0, 0, 255), # 蓝色
(255, 255, 0), # 黄色
(255, 0, 255), # 紫色
(0, 255, 255), # 青色
(128, 0, 0), # 深红色
(0, 128, 0), # 深绿色
(0, 0, 128), # 深蓝色
(128, 128, 0) # 深黄色
]
# 转换为matplotlib使用的0-1范围颜色
colors_1 = [(r / 255, g / 255, b / 255) for r, g, b in colors_255]
# 1. 首先创建图形和轴(关键修复:避免自动创建默认图形)
fig, ax = plt.subplots(figsize=(12, 8))
# 遍历所有检测结果
for i in range(len(scores)):
if scores[i] < threshold:
continue
# 获取当前实例的掩码、边界框和分数
mask = masks[i]
box = boxes[i]
score = scores[i]
# 选择颜色
color_255 = colors_255[i % len(colors_255)]
color_1 = colors_1[i % len(colors_1)]
# 将掩码转换为numpy数组并缩放到图像尺寸
mask_np = mask.squeeze().cpu().numpy()
# 确保掩码是2D的
if mask_np.ndim == 3:
mask_np = mask_np[0]
# 将掩码应用到可视化图像上(半透明叠加)
mask_3d = np.stack([mask_np] * 3, axis=-1)
visualization = visualization * (1 - mask_3d * 0.5) + np.array(color_255) * (mask_3d * 0.5)
visualization = visualization.astype(np.uint8)
# 绘制边界框 - 使用ax而不是plt.gca()
x1, y1, x2, y2 = box.cpu().numpy().astype(int)
ax.add_patch(plt.Rectangle((x1, y1), x2 - x1, y2 - y1,
fill=False, edgecolor=color_1, linewidth=2))
# 绘制置信度分数 - 使用ax而不是plt
ax.text(x1, y1 - 10, f"Score: {score:.3f}",
color=color_1, fontsize=10, fontweight='bold')
# 显示可视化结果 - 使用ax而不是plt
ax.imshow(visualization)
ax.axis('off')
ax.set_title('SAM 3 Segmentation Results')
plt.tight_layout()
plt.show()
# =================================主要代码就是下面,可视化可要可不要====================
# 加载模型,只需要修改checkpoint_path为你的sam.pt权重文件路径
model = build_sam3_image_model(
bpe_path=f"./sam3/assets/bpe_simple_vocab_16e6.txt.gz",
checkpoint_path=r'C:\Users\HYKG03\PycharmProjects\ultralytics\weights\sam3.pt',
device="cuda"
)
processor = Sam3Processor(model)
# 加载图像
image = Image.open(r"C:\Users\HYKG03\Desktop\tif2.jpeg")
inference_state = processor.set_image(image)
# 使用文本prompt提示模型
output = processor.set_text_prompt(state=inference_state, prompt="tin-roofed house")
# 获取掩码、边界框和分数
masks, boxes, scores = output["masks"], output["boxes"], output["scores"]
# 可视化结果(阈值设为0.3,可根据需要调整)
visualize_results(image, masks, boxes, scores, threshold=0.3)
有一个pkg_resources导包警告,不影响执行我没就没管,最后,给张结果图吧,分割效果还是很不错的
**
弄了一天多,有帮助的话点个赞呗收藏一下呗哈哈哈哈哈哈哈
**

更多推荐



所有评论(0)