从0到1全流程使用 segment-anything

这篇博客详细介绍了如何从0开始,使用 Anaconda 安装并配置 segment-anything 的环境,包括安装 Anaconda、创建虚拟环境、匹配 pytorch 和 CUDA 版本、下载源码、安装依赖以及测试代码运行。同时,提到了关键步骤如修改 Anaconda 路径、设置 C++ 开发环境和使用 Visual Studio,确保项目能顺利运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从0到1全流程使用 segment-anything

一、安装 anaconda

一、下载 anaconda

在这里插入图片描述

二、以管理员身份运行安装

1、勾选 Just Me

在这里插入图片描述

2、统一安装路径(后续 python 等包也安装至此目录)

在这里插入图片描述

3、勾选 add to path

在这里插入图片描述

然后安装即可。

三、修改 Anaconda 默认路径及默认缓存路径

Anaconda 默认下载的包、缓存路径为 C 盘,为了防止 C 盘内存大小被占用,可以将路径进行修改。

1、在 C:\Users\用户名 目录下,找到 .condarc 文件

在这里插入图片描述

若没有此文件,请先打开 Anaconda Navigator,启动后再关闭,再查看是否存在 .condarc 文件

在这里插入图片描述

2、修改 .condarc,修改默认路径

添加 envs_dirs 和 pkgs_dirs ,指定到想要存放的路径

在这里插入图片描述

3、打开 Anaconda Prompt,验证修改路径是否成功

若打开 Anaconda Prompt 后,出现 .condarc 打不开的报错问题,则请先删除 .condarc 文件,再次打开 Anaconda Navigator,然后再次修改 .condarc。

输入 conda info 命令,可以看到,package cache 和 envs directories 的首个路径就是我们设置的路径,则说明修改成功。

在这里插入图片描述

之后下载的安装包,则会安装到这里指定的路径下。

4、设置路径的权限,防止无权限安装、访问等

对于指定的 envs 文件夹 和 pkgs 文件夹设置用户完全访问、控制权限。

在这里插入图片描述

在这里插入图片描述

二、搭建虚拟环境

一、打开 Anaconda Prompt

在这里插入图片描述

二、输入 conda create -n seganything python=3.8

在这里插入图片描述

输入 y 确认:

在这里插入图片描述

segment anything 的 python 要求在 3.8及以上

在这里插入图片描述

三、安装对应 pytorch、torchvision 版本,与 CUDA 匹配

1、打开控制台,查看自己电脑 CUDA 版本

输入 nvidia-smi,可以看到 CUDA Version 为 12.4

在这里插入图片描述

那么安装的 pytorch 版本支持的 CUDA 版本就不能超过 12.4

2、pytorch 官网查找适合版本

需要注意的是 pytorch、CUDA、python、Anaconda 的四个版本都要在相互支持的范围内,且满足 segment anything 的要求:

即:

1、segment anything 要求 python >= 3.8 且 pytorch >= 1.7 且 torchvision >= 0.8

2、通过 create 命令创建虚拟环境时,设置的 python 为 3.8

3、pytorch 也有对 python、cuda 支持的对应版本要求

在这里插入图片描述

这里在 pytorch 官网可以点击 install previous versions of Pytorch 查找之前的版本,也可以在当前页面选择对应的版本,复制 Run this Command 对应的命令。

执行命令前,需要在 Anaconda Prompt 中先激活环境:

conda activate seganything

在这里插入图片描述

然后执行安装 pytorch 命令 这里选择执行安装最新版本(Stable 2.2.1):

conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

在这里插入图片描述

pytorch 等包 体积较大,耐心等待安装完成。

在这里插入图片描述

3、conda list 和 pip list
  • conda list命令除了得到当前虚拟环境下的所有已安装的包,还会显示关联环境下的已安装的包;
  • pip list命令只显示当前虚拟环境下的所有已安装的包;当关联环境下有某个包,再用conda命令在其他虚拟环境下下载该包时,就会直接关联,无需下载;
  • pip list命令得到的结果是conda list得到的结果的子集;

在这里插入图片描述

在这里插入图片描述

三、下载 segment-anything 源码

在这里插入图片描述

打开 cmd 控制台,在相应目录执行 git clone 即可。

在这里插入图片描述

四、为项目源码安装依赖库

1、在下载后的源码目录下框下 输入 cmd,打开 cmd 窗口

在这里插入图片描述

2、在项目源码目录下激活虚拟环境

conda activate seganything

在这里插入图片描述

3、执行 python setup.py install 来安装依赖库

也可以执行github 该源码库的命令:pip install -e .

在这里插入图片描述

这里使用 python setup.py install

在这里插入图片描述

4、安装必须依赖

在这里插入图片描述

1、安装 Visual Studio,准备 C++ 开发环境

pycocotools 依赖于 C++ 开发环境组件,因此需要提前安装 Visual Studio。

在这里插入图片描述

安装完成后,要确保勾选了 使用 C++ 的桌面开发,没有勾选则勾选后安装即可。

在这里插入图片描述

2、执行 pip 安装命令,安装依赖

执行此命令,采用国内镜像源,加快下载:

pip install opencv-python pycocotools matplotlib onnxruntime onnx -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

至此,所有的基础环境配置、依赖等都已经完成了,可以进行运行、测试、编写代码了。

在这里插入图片描述

五、测试代码撰写及使用案例

1、下载 model checkpoint

三个模型比较大,耐心下载。

在这里插入图片描述

可以使用开源的 XDown 加速下载:

在这里插入图片描述

在源码根目录下新建 checkpoints 文件夹,将下载好的模型文件放入其中。

在这里插入图片描述
在这里插入图片描述

2、编码

1、添加测试文件夹和图片数据

通过 vscode 打开根目录,打开项目,在根目录下新建 demotest 文件夹,demotest 文件夹下添加一个 building1.jpg、dog1.jpg,用于测试。

根目录下新建 demotest.py,用于写测试代码。

在这里插入图片描述

2、设置 vscode 的 python 环境

当 vscode 提示代码中 Import “” could not be resolved 时,应该是 vscode 没有设置为正确的编译环境

在这里插入图片描述

在 vscode 中通过 ctrl + shift + p 快捷命令打开搜索框,在搜索框中输入 Python Selecet Interpreter ,在 Select Interpreter 弹窗中选择当前 seganything 虚拟环境对应的 Python 版本,比如这里的 Python 3.8.18

在这里插入图片描述

3、写代码

测试的代码如下:

'''
Description: 
Author: tianyw
Date: 2024-03-01 14:06:05
LastEditTime: 2024-03-01 15:46:54
LastEditors: tianyw
'''
# 导入必要的包
import os
import sys
import time
import argparse

import cv2
import numpy as np
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from PIL import Image

# 导入 segment_anything 包
from segment_anything import SamPredictor, sam_model_registry
from segment_anything import SamAutomaticMaskGenerator, sam_model_registry
from segment_anything import sam_model_registry

# 输入必要的参数
# E:\1Study\01AI\01segment\segment-anything\codes\segment-anything
# 模型路径
model_path = r'.\checkpoints\sam_vit_h_4b8939.pth'
# 输入的图片路径
image_path = r'.\demotest\dog1.jpg' # dog1 building1
# 输出的图片路径
output_folder = r'.\demotest\building_prompt_results'

# 确保输出文件夹存在
os.makedirs(output_folder,exist_ok=True)

# 加载模型
sam = sam_model_registry["vit_h"](checkpoint=model_path)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
sam = sam.to(device)

# 输出模型加载完成的 current 时间
current_time1 = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print("Model loaded done",current_time1)
print("---------------------------------------------")

# 加载图片
image = cv2.imread(image_path)
# 输出图片加载完成的 current 时间
current_time2 = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print("Image loaded done",current_time2)
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")

# 这里是预测 不用提示词 进行全图分割
mask_generator = SamAutomaticMaskGenerator(sam)
masks = mask_generator.generate(image)

# 使用提示词,进行局部分割
# predictor = SamPredictor(sam)
# predictor.set_image(image)
# masks,scores,logits = predictor.predict(point_coords=None,point_labels=None,box=None,mask_input=None,multimask_output=True,return_logits=True)


# 输出预测完成的 current 时间
current_time3 = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print("Predict loaded done",current_time3)
print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")

def show_anns(anns):
    if len(anns) == 0:
        return
    sorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True)
    ax = plt.gca()
    ax.set_autoscale_on(False)

    img = np.ones((sorted_anns[0]['segmentation'].shape[0], sorted_anns[0]['segmentation'].shape[1], 4))
    img[:,:,3] = 0
    for ann in sorted_anns:
        m = ann['segmentation']
        color_mask = np.concatenate([np.random.random(3), [0.35]])
        img[m] = color_mask
    ax.imshow(img)
    
# 展示预测结果 img 和 mask
plt.figure(figsize=(20,20))
plt.imshow(image)
show_anns(masks)
plt.axis('off')
plt.show() 


3、运行与查看

8G GPU显存可以运行 2k分辨率的图像的推理、分割,分辨率更高会更吃显存。

在这里插入图片描述

运行结果:

在这里插入图片描述

至此就实现了 segment-anything 的完整使用介绍了。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碳学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值