SAM2本地部署教程

1.安装anaconda及配置python环境

        在官网Download Anaconda Distribution | Anaconda下载anaconda 2.6.3版本(强烈建议装在除C盘以外的盘),然后配置环境变量:此电脑-属性-高级系统设置-环境变量。详细python环境配置可参考:

史上最全最详细的Anaconda安装教程-优快云博客

 

2.安装pycharm用于调试代码

        同样在官网下载:感谢您下载 PyCharm Community Edition!,推荐安装社区版。

 

3.安装cuda和cuDNN

        sam2模型的部署和训练需要gpu加速,推荐下载cuda11.8版本,设定安装位置,并下载深度神经网络库 (cuDNN) 。cuda安装完成后将cuDNN覆盖在cuda根目录。

        官网cuda11.8可能会打不开网页,cuDNN下载需要注册账号。文章末尾提供下载地址。

 

        完成安装后可以在python输入以下指令判断是否能使用gpu加速。

import torch

print(torch.cuda.is_available())

        或者检查环境变量中是否有CUDA_PATH。

 

4.新建和激活虚拟环境:

        为防止anaconda将虚拟环境新建在c盘默认盘,可以在C:\user\username中找到.condarc文件,用记事本打开,添加如下语句:

envs_dirs:
  - F:\Anaconda\envs

        在anaconda prompt面板输入以下指令,环境可以使用其他命名,自己认识就行。

conda create -n sam2
conda activate sam2 

        确保环境配置为sam2虚拟环境。(左边括号里的base变为sam2)。

        同时,pytcharm中的编译器也需要修改,随便新建一个python文件,选择设置-项目名-python解释器-添加解释器-添加本地解释器-系统解释器-找到创建的虚拟环境的地址中的python.exe确定并应用。

 

5.为了加快包的下载速度,可为conda和pip的下载渠道设置成清华源

        此时虚拟环境中是没有任何包的,需要借助pip和conda工具进行下载安装。 

        conda下载渠道改为清华源:在C:\user\username文件夹修改.condarc文件:

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

        pip需要修改pip.int文件,请输入以下指令:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

        接下来的包的安装请在anaconda prompt中的sam2虚拟环境中完成,避免包被安装在默认盘c盘。例如:

 

6.安装pytorch

        pytorch是深度学习框架,需要下载与cuda11.8适配的gpu版本。

        在anaconda prompt输入一下指令:

pip install torch==2.6.0+cu118 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

        由于在官网下载,速度可能会非常慢,而国内源下载并没有gpu版本的pytorch,所以可能要下很久。

 

8.下载segment-anything-2-main项目文件和模型

        源码地址:

https://github.com/facebookresearch/segment-anything-2

        考虑到国内可能登不上github,可直接在文章末尾链接下载。

        该项目文件夹中,sam2文件夹为核心代码,notebooks中包含官方演示代码,setup.py用于搭建sam2环境。

        下载之后记住项目的路径,后续代码的运行、脚本编写、模型训练都可以在此处进行。

        官方提供了4种大小的SAM2模型,下载地址如下:

https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt
https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt
https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt
https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt

        可以在项目文件夹新建weights文件夹用于保存模型文件,后续的代码中输入路径进行模型调用。

 

9.安装其他sam2支持包。

        输入以下指令将anaconda prompt路径修改到sam2文件的地址:

cd /d F:\project\segment-anything-2-main

        再输入以下指令以调用setup.py文件以配置sam2环境并安装相关包:

pip install -e .

        继续修改地址以找到requirements.txt文件以继续安装其他包:

cd /d F:\project\segment-anything-2-main\sav_dataset

pip install -r requirements.txt

        如果运行时发现缺少hydra包可以尝试:

pip install hydra-core --upgrade

        后续如果仍然不能运行,比如在代码import部分报错,请使用pip单独安装缺漏的包。

 

10.在项目文件夹新建python文件,使用pycharm打开并输入以下代码测试能否运行:

import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "True"

import torch
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor

np.random.seed(3)

def show_mask(mask, ax, random_color=False, borders = True):
    if random_color:
        color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
    else:
        color = np.array([30/255, 144/255, 255/255, 0.6])
    h, w = mask.shape[-2:]
    mask = mask.astype(np.uint8)
    mask_image =  mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
    if borders:
        import cv2
        contours, _ = cv2.findContours(mask,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
        # Try to smooth contours
        contours = [cv2.approxPolyDP(contour, epsilon=0.01, closed=True) for contour in contours]
        mask_image = cv2.drawContours(mask_image, contours, -1, (1, 1, 1, 0.5), thickness=2)
    ax.imshow(mask_image)

def show_points(coords, labels, ax, marker_size=375):
    pos_points = coords[labels==1]
    neg_points = coords[labels==0]
    ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white', linewidth=1.25)
    ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white', linewidth=1.25)

def show_box(box, ax):
    x0, y0 = box[0], box[1]
    w, h = box[2] - box[0], box[3] - box[1]
    ax.add_patch(plt.Rectangle((x0, y0), w, h, edgecolor='green', facecolor=(0, 0, 0, 0), lw=2))

def show_masks(image, masks, scores, point_coords=None, box_coords=None, input_labels=None, borders=True):
    for i, (mask, score) in enumerate(zip(masks, scores)):
        plt.figure(figsize=(10, 10))
        plt.imshow(image)
        show_mask(mask, plt.gca(), borders=borders)
        if point_coords is not None:
            assert input_labels is not None
            show_points(point_coords, input_labels, plt.gca())
        if box_coords is not None:
            # boxes
            show_box(box_coords, plt.gca())
        if len(scores) > 1:
            plt.title(f"Mask {i+1}, Score: {score:.3f}", fontsize=18)
        plt.axis('off')
        plt.show()


if __name__ == "__main__":
    device = torch.device("cuda")
    image = Image.open(r"notebooks\images\truck.jpg")
    image = np.array(image.convert("RGB"))
    sam2_checkpoint = r"checkpoints\sam2.1_hiera_large.pt"
    model_cfg = r"configs\sam2.1\sam2.1_hiera_l.yaml"
    sam2_model = build_sam2(model_cfg, sam2_checkpoint, device=device)
    predictor = SAM2ImagePredictor(sam2_model)
    predictor.set_image(image)
    input_point = np.array([[500, 375]])#通过一个像素点快速选中需要识别的区域
    input_label = np.array([1])

    masks, scores, logits = predictor.predict(
        point_coords=input_point,
        point_labels=input_label,
        multimask_output=True,
    )

    sorted_ind = np.argsort(scores)[::-1]
    masks = masks[sorted_ind]
    scores = scores[sorted_ind]
    logits = logits[sorted_ind]

    show_masks(image, masks, scores, point_coords=input_point, input_labels=input_label, borders=True)

        运行后生成三张图片。

        第一张结果为:

        模型部署完成。

 

        资源下载:

通过网盘分享的文件:cuda+cudnn+sam2
链接: https://pan.baidu.com/s/1PiLfswMyJIHPAvjjeZsXjQ?pwd=fbqj 提取码: fbqj

 

### SAM2 部署所需硬件要求 对于SAM2(假设指的是Segment Anything Model 2或类似的高级视觉模型)的部署,具体的硬件需求取决于应用的具体情况以及期望的性能水平。通常情况下,这类先进的机器学习模型对计算资源有较高要求。 #### 处理器(CPU/GPU) - **CPU**: 虽然理论上可以在仅配备多核高性能CPU的环境中运行,但这不是推荐的方式。因为复杂的推理过程可能会非常耗时。 - **GPU**: 推荐使用NVIDIA GPU,特别是那些支持CUDA和Tensor Cores技术的产品,比如Tesla V100、A100 或者消费级的RTX系列显卡。这能显著加速模型推断速度[^1]。 #### 内存(RAM/VRAM) - **RAM**: 至少需要32GB以上的系统内存来处理较大的输入数据集并保持系统的流畅度。 - **VRAM**: 如果采用GPU加速,则至少需8GB VRAM;对于更复杂的应用场景建议配置更高容量如16GB甚至更多。 #### 存储空间 - 模型文件本身可能占用数GB的空间,并且还需要额外的工作目录用于缓存中间结果和其他临时文件。因此应该预留足够的SSD存储空间以确保快速读写访问。 #### 网络带宽 如果涉及到云端部署或者分布式训练环境的话,稳定高速互联网连接也是必不可少的一部分,以便能够及时上传下载必要的资料。 ```bash # 示例命令行检查当前Linux服务器上的硬件信息 lscpu # 查看CPU详情 nvidia-smi # 显示已安装NVIDIA驱动程序版本及GPU状态 free -h # 展示物理内存大小 df -H / # 获取根分区剩余磁盘空间 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值