当前位置: 首页 > news >正文

计算机视觉| 分割大模型Segment Anything(SAM)从0到1使用

安装anaconda

参考博文 最详细的Anaconda新手安装

pytorch 官网查找合适的版本

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

The code requires python>=3.8, as well as pytorch>=1.7 and torchvision>=0.8. Please follow the instructions here to install both PyTorch and TorchVision dependencies. Installing both PyTorch and TorchVision with CUDA support is strongly recommended.

在这里插入图片描述可以在pytorch官网选择对应的版本,复制run this command对应的命令。
或者查看之前的版本 以前版本如下-whl文件
执行命令前,需要在 Anaconda Prompt 中先激活环境:

conda activate 环境名

然后执行安装 pytorch 命令

选择合适的版本

  1. 根据你的 Python 版本和 CUDA 版本,选择相应的 .whl 文件。例如,我们使用的是 Python 3.11 和 CUDA 12.6,可以下载 torch-2.6.0+cu126-cp311-cp311-win_amd64.whl(Windows 系统)或 torch-2.6.0+cu126-cp311-cp311-linux_aarch64.whl(Linux 系统)。
  2. 同样,对于torchvision,根据Python版本和CUDA12.6,我们可以下载torchvision-0.21.0+cu126-cp311-cp311-win_amd64.whl(Windows 系统)或 torchvision-0.21.0+cu126-cp311-cp311-linux_x86_64.whl(Linux 系统)。
  3. 同样,对于torchaudio,根据Python版本和CUDA12.6,我们可以下载torchaudio-2.6.0+cu126-cp311-cp311-win_amd64.whl(Windows 系统)或 torchaudio-2.6.0+cu126-cp311-cp311-linux_x86_64.whl(Linux 系统)。

下载文件

点击链接下载 .whl 文件到本地。
我的python版本是3.11 ,在4090服务器上下载
所以我选择三个对应版本是

pytorch=2.1.0 torchvision=0.16.0 torchaudio=2.1.0 cp11

安装.whl文件

安装 .whl 文件:

下载完成后,打开命令提示符或终端,导航到 .whl 文件所在的目录,运行以下命令:

pip install <filename>.whl

将 替换为你下载的 .whl 文件的名称。例如:

pip install torch-2.6.0+cu126-cp311-cp311-win_amd64.whl

安装完成之后,检查一下本地是否能够使用PyTorch。我们通过在本地的Python文件中检查是否能够import torch来判断是否能够使用PyTorch

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

下载Segment-anything 源码

Segment Anything github网址
在这里插入图片描述
选择一个方式进行下载

使用HTTPS

打开控制台,输入

git clone https://github.com/facebookresearch/segment-anything.git

为项目源码安装依赖库

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

在这里插入图片描述

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

在这里插入图片描述

执行python setup.py install
git clone git@github.com:facebookresearch/segment-anything.git
cd segment-anything; pip install -e .
安装必须依赖
pip install opencv-python pycocotools matplotlib onnxruntime onnx

测试代码及其使用案例

下载model checkpoint

三个模型权重比较大,耐心下载
在这里插入图片描述
在源码根目录之下创建checkpoint文件夹,将下载好的模型文件放入文件
在这里插入图片描述

运行

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

在代码文件下创建一个stamps文件夹
在stamps下创建如下文件夹
在这里插入图片描述
在images文件夹下放入要测试的图片

运行代码

运行scripts文件夹下的amg.py文件
运行代码如下

python <当前文件地址>/amg.py --checkpoint <当前文件地址>/checkpoint/sam_vit_b_01ec64.pth --model-type vit_b  --input <当前文件地址>/stamps/images --output <当前文件地址>/stamps/masks

将<当前文件地址>里的内容换成自己的绝对地址

运行后的mask文件包下有除了overlay.png文件外的其他文件。
在这里插入图片描述
如果想要生成overlay这样的全景文件
在这里插入图片描述可在amg.py文件下添加如下代码

# 手动生成 Overlay 文件
def create_mask_overlay(image_path, masks, output_path='overlay.png', alpha=0.5):"""生成原始图像 + 掩模叠加的可视化结果Args:image_path: 原始图像路径masks: SAM 输出的掩模列表(每个掩模是二进制 0/1 数组)output_path: 叠加图保存路径alpha: 掩模透明度 (0-1)"""# 读取原始图像image = cv2.imread(image_path)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # 转为 RGB# 初始化叠加层(全黑)overlay = np.zeros_like(image)# 将所有掩模合并(逻辑或操作)for mask in masks:mask = mask.astype(np.uint8) * 255  # 0/1 → 0/255colored_mask = cv2.applyColorMap(mask, cv2.COLORMAP_JET)  # 伪彩色overlay = cv2.bitwise_or(overlay, colored_mask)# 叠加掩模和原始图像result = cv2.addWeighted(image, 1, overlay, alpha, 0)# 保存结果cv2.imwrite(output_path, cv2.cvtColor(result, cv2.COLOR_RGB2BGR))

在amg.py的main函数下添加如下代码

        if output_mode == "binary_mask":os.makedirs(save_base, exist_ok=False)write_masks_to_folder(masks, save_base)# ourselfbinary_masks = [m['segmentation'] for m in masks]overlay_path = os.path.join(save_base, f"{base}_overlay.png")create_mask_overlay(t, binary_masks, output_path=overlay_path, alpha=0.5)else:save_file = save_base + ".json"with open(save_file, "w") as f:json.dump(masks, f)

在这里插入图片描述大功告成!!!恭喜

http://www.lryc.cn/news/571316.html

相关文章:

  • Muon:神经网络隐藏层的革命性优化器
  • 从零到一:C语言基础入门学习路线与核心知识点全解析
  • 香橙派3B学习笔记12:C语言操作GPIO_<wiringPi.h>_点灯通用输入输出
  • FPGA 44 ,SDC 时序约束标准( 深度解析 SDC 标准 )
  • 期末作业swing水果店管理系统
  • 二分算法深度解析
  • 简说 python
  • C++ vector(2)
  • 【编译工具】CodeRider 2.0:驭码 CodeRider 2.0 全流程智能研发协作平台深度技术测评报告
  • Java在IDEA中终端窗口输出正常,但打包成JAR后中文乱码问题
  • 『大模型笔记』第3篇:多长的 Prompt 会阻塞其他请求?优化策略解析
  • Java线程池全面解析:原理、实现与最佳实践
  • Socket 编程 UDP
  • 【Linux】UDP与TCP协议
  • Kubernetes RDMA 概述与实战(大模型场景)
  • UE5 游戏模板 —— Puzzle 拼图游戏
  • 【配置教程】新版OpenCV+Android Studio环境配置(4.11测试通过)
  • 在线教学课程视频AI智能大纲代码与演示
  • 【Docker安装PostgreSQL】psql:致命错误: 用户 Password 认证失败
  • 在 MongoDB 中复制一个 collection(集合)
  • 以下是系统化的 Python基础学习框架,分为4个核心阶段,结合理论与实践,适合零基础快速入门并建立扎实的编程基础:
  • 【WPF】WPF ComboBox 数据驱动不刷新?SelectedItem 与 SelectedIndex 解析!
  • 什么是数据仓库的ETL
  • TortoiseSVN迁移到本地git
  • Tomcat 核心配置解析:4 大文件、乱码处理、端口与 Manager 配置
  • 企业ERP致胜秘籍:从流程革新到智能决策
  • 关系数据库-数据库事务处理与ACID原则
  • Android 开发问题:CardView 的阴影效果会受到父容器的裁切
  • STM32 实现解析自定义协议
  • HTTP 请求中的 `Content-Type` 类型详解及前后端示例(Vue + Spring Boot)