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

超全超详细使用SAM进行高效图像分割标注(GPU加速推理)

一、前言

👉 在计算机视觉任务中,图像分割 是重要的基础工作,但人工标注往往耗时耗力。Meta推出的 SAM(Segment Anything Model),大幅提升了分割效率和精度,让标注工作更加轻松。本篇博客将详细介绍如何安装、配置并使用 SAM 进行辅助标注,力求做到保姆级细致讲解。

💡 SAM(Segment Anything Model) 是一款通用分割模型,具备以下特点:

  • 高效分割: 基于点、框等提示快速生成分割结果。
  • 通用性强: 支持多种图像类型(如自然图像、医疗图像等)。
  • 易用性: 开源实现,兼容PyTorch等主流框架。

二、安装与环境配置

1、源码下载

方法一:从官网直接下载(推荐)

  1. 打开 ISAT_with_segment_anything 的 GitHub 官方页面。

  2. 点击页面上的 “Code” 按钮,选择 “Download ZIP” 直接下载。

在这里插入图片描述

  1. 下载完后,建议将压缩包解压到 D 盘或 E 盘等非系统盘并重命名为 sam,以免因系统权限问题引发错误。

在这里插入图片描述

方法二:通过 Git 克隆源码(适合有一定基础的用户)

  1. 打开终端或命令提示符,输入以下命令:

    git clone https://github.com/facebookresearch/ISAT_with_segment_anything.git
    
  2. 为方便管理,可将克隆的文件夹重命名为 sam

    mv ISAT_with_segment_anything sam
    
  3. 使用以下命令切换到 sam 文件夹:

    cd sam
    

2、环境配置

2.1 创建sam环境

conda create -n sanm python=3.8 # 创建python版本3.8名为sam的conda环境
conda activate sam # 激活创建的sam环境

2.2 配置Pytorch环境

YOLOv5可以在GPUCPU环境下运行,但推荐在GPU上运行以加快训练速度。

检查NVIDIA GPU及其CUDA支持情况

nvidia-smi是NVIDIA驱动自带的命令行工具,可以查看显卡的CUDA支持情况和驱动信息。打开命令提示符(或CMD),输入:

nvidia-smi

如果系统输出了显卡信息,并显示CUDA版本(例如CUDA Version: 12.7),则表明显卡支持CUDA同时支持GPU,否则不支持GPU

在这里插入图片描述

方式一:使用Conda安装(推荐)

  1. 打开 Previous PyTorch Versions | PyTorch 官网,选择<= CUDA Version 的Conda命令并复制(若不支持GPU则选择 CPU 的Conda命令)。

    在这里插入图片描述

  2. 在终端中执行对应的安装命令,以安装PyTorch和CUDA / CPU支持。

  3. 安装完成后,可以在终端中输入conda list pytorch检查安装情况:(本教程仅展示CUDA版本的安装结果)

在这里插入图片描述

  • pytorch 2.3.0:这是安装的PyTorch版本,适用于Python 3.8,并支持CUDA 12.1和cuDNN 8。
  • pytorch-cuda 12.1:这是安装的CUDA支持包,指明CUDA版本为12.1。
  • pytorch-mutex 1.0:这是一个互斥包,用来确保在同一环境中只启用一种加速方式(如CUDA),避免安装冲突。

方式二:使用Pip安装

  1. 打开 Previous PyTorch Versions | PyTorch 官网,选择<= CUDA Version 的Pip命令并复制(若不支持GPU则选择 CPU 的Pip命令)。

在这里插入图片描述

  1. 在终端中执行对应的安装命令,以安装PyTorch和CUDA / CPU支持。

  2. 安装完成后,可以在终端中输入pip list检查安装情况。

在这里插入图片描述

  • torch 2.3.0:核心库(版本2.3.0),用于构建和训练神经网络。
  • torchaudio 2.3.0:音频处理库(版本2.3.0),为音频数据的加载、预处理和增强提供了工具
  • torchvision 0.18.0:计算机视觉库(版本0.18.0),包含了常用的图像数据集、数据增强和预训练模型。
  1. 下载安装CUDA支持的torch + torchvision + torchaudio (仅GPU版本需要)。
    • 打开网址 https://download.pytorch.org/whl/torch_stable.html
    • 选择与上面对应版本的torch并下载至本地

在这里插入图片描述

cu121:表示此安装包支持 CUDA 12.1,也就是说,这个版本的 PyTorch 可以利用带有 CUDA 12.1 的 NVIDIA GPU 进行计算加速。
	
torch-2.3.0+cu121:说明这是 PyTorch 2.3.0 版本的安装包,并且这个版本支持 CUDA 12.1。在 PyTorch 中,不同 CUDA 版本对应不同的 GPU 支持,确保安装的 PyTorch 版本兼容设备的 CUDA 版本很重要。
	
cp38-cp38:表示该安装包是针对 Python 3.8(“cp38”代表 CPython 3.8)的版本。这里的 cp38-cp38 意味着此包适用于 Python 3.8 的 CPython 解释器(CPython 是 Python 的标准实现)。
	
win_amd64:表示该安装包适用于 Windows 操作系统,并支持 64位架构(AMD64)。如果您的系统是 Windows 64 位,这个包是兼容的。
  • 在终端中输入以下命令以安装指定的 .whl 文件(请将路径替换为您下载的 .whl 文件的实际保存位置)
  pip install D:\torch_gpu\torch-2.3.0+cu121-cp38-cp38-win_amd64.whl
  • torchvisiontorchaudio安装方式同理
  • 安装完毕后再次在终端中输入pip list检查安装情况,如果输出结果中显示类似以下内容,则表明安装成功

在这里插入图片描述

2.3 Pycharm中加载SAM环境

  1. 在Pycharm中打开sam项目
  2. 打开设置 - - > 项目: sam- - > python解释器 - - > 添加解释器 (Add Interpreter) - - > 添加本地解释器 (ADD Local Interpreter…)

在这里插入图片描述

  1. 选择Conda环境 - - > 浏览Anaconda目录下\Library\bin\conda.bat - - > 加载环境 - - > 使用现有环境 - - > 选择sam - - > 点击确定

在这里插入图片描述

2.4 安装SAM依赖项

  1. 打开Pycharm本地终端

在这里插入图片描述

  1. 使用以下命令安装其他依赖项:
pip install -r requirements.txt -i  https://pypi.tuna.tsinghua.edu.cn/simple
  1. 安装完毕后发现出现警告Package requirement 'opencv python headless' is not satisfied,直接点击Ignore requirements(忽略需求)即可,只要依赖包安装正确,就可以放心使用😊。

在这里插入图片描述

2.5 下载Segment anything预训练模型:

  • Pycharm本地终端输入如下命令运行 sam

    python main.py
    
  • 软件提供了便捷的 模型管理界面,可以通过以下路径打开:

    • [菜单栏] → [SAM] → [模型管理]
    • 你可以直接点击 download 从国内链接获取预训练模型文件,方便快捷。
    • 自动保存到以下目录 sam/ISAT/checkpoints

在这里插入图片描述

预训练模型权重对比
模型预训练模型权重内存大小
SAMsam_vit_h_4b8939.pth7305M2.6G
sam_vit_l_0b3195.pth5855M2.6G
sam_vit_b_01ec64.pth4149M375M
SAM-HQsam_hq_vit_h.pth7393M2.6G
sam_hq_vit_l.pth5939M1.3G
sam_hq_vit_b.pth4207M379M
sam_hq_vit_tiny.pth1463M43M
Mobile-SAMmobile_sam.pt1375M40M
Edge-SAMedge_sam.pth960M39M
edge_sam_3x.pth960M39M
SAM-Medsam-med2d_b.pth1500M2.4G
SAM2sam2_hiera_large.pt4000M900M
sam2_hiera_base_plus.pt4000M324M
sam2_hiera_small.pt3000M185M
sam2_hiera_tiny.pt2400M156M

三、如何使用SAM进行辅助标注?

1、打开SAM软件

  1. 方法一(推荐):Pycharm本地终端输入如下命令运行 sam
    python main.py
    
  2. 方法二:直接运行main.py

2、选择预训练模型

  • 软件提供了便捷的 模型管理界面,可以通过以下路径打开:
    • [菜单栏] → [SAM] → [模型管理]
  • 在模型列表中,模型名称前出现 对勾√ 标志,表示该模型已被选定并正在使用

在这里插入图片描述

3、标注流程

  1. 打开图片(文件夹),可以通过以下路径打开:
    • [菜单栏] → [文件] → [图片文件夹]
  2. 修改 JSON 保存路径,可以通过以下路径修改:
    • [菜单栏] → [文件] → [标签文件夹]

在这里插入图片描述

  1. 添加新类别,可以通过以下路径打开:

    • [菜单栏] → [文件] → [设置]
      在这里插入图片描述
  2. 点击Segment anything图标

在这里插入图片描述

  1. 左侧选择标签以后,点击标注对象,然后点击 E 保存标注

在这里插入图片描述

4、快捷方法

  1. 开启自动保存,可以通过以下路径打开:
    • [菜单栏] → [编辑] → [自动保存]

在这里插入图片描述

  1. 使用快捷键,可以通过以下路径查看:
    • [菜单栏] → [帮助] → [快捷键]

在这里插入图片描述


四、SAM 生成的 JSON 格式文件详解

sam 的标注结果以 JSON 文件格式保存,包含了标注图像的相关元数据以及每个标注区域的详细信息。以下是 JSON 文件的主要结构及其说明:

{
    "info": {
        "description": "ISAT",
        "folder": "C:/Users/Natsu/Desktop/apple/img",
        "name": "apple_9.jpg",
        "width": 500,
        "height": 750,
        "depth": 3,
        "note": ""
    },
    "objects": [
        {
            "category": "apple",
            "group": 1,
            "segmentation": [
                [
                    185.0,
                    241.0
                ],
                [
                    146.0,
                    251.0
                ],
                [
                    122.0,
                    264.0
                ],
                [
                    94.0,
                    286.0
                ],
                [
                    55.0,
                    328.0
                ],
                [
                    30.0,
                    370.0
                ],
                [
                    15.0,
                    404.0
                ],
                [
                    8.0,
                    429.0
                ],
                [
                    4.0,
                    454.0
                ],
                [
                    3.0,
                    471.0
                ],
                [
                    5.0,
                    494.0
                ],
                [
                    11.0,
                    502.0
                ],
                [
                    41.0,
                    514.0
                ],
                [
                    59.0,
                    517.0
                ],
                [
                    91.0,
                    534.0
                ],
                [
                    107.0,
                    539.0
                ],
                [
                    123.0,
                    547.0
                ],
                [
                    142.0,
                    552.0
                ],
                [
                    151.0,
                    560.0
                ],
                [
                    179.0,
                    575.0
                ],
                [
                    209.0,
                    596.0
                ],
                [
                    220.0,
                    601.0
                ],
                [
                    228.0,
                    609.0
                ],
                [
                    238.0,
                    613.0
                ],
                [
                    247.0,
                    612.0
                ],
                [
                    295.0,
                    596.0
                ],
                [
                    329.0,
                    578.0
                ],
                [
                    365.0,
                    552.0
                ],
                [
                    394.0,
                    523.0
                ],
                [
                    412.0,
                    495.0
                ],
                [
                    424.0,
                    456.0
                ],
                [
                    428.0,
                    429.0
                ],
                [
                    428.0,
                    402.0
                ],
                [
                    421.0,
                    369.0
                ],
                [
                    411.0,
                    346.0
                ],
                [
                    390.0,
                    315.0
                ],
                [
                    371.0,
                    300.0
                ],
                [
                    330.0,
                    284.0
                ],
                [
                    327.0,
                    278.0
                ],
                [
                    319.0,
                    272.0
                ],
                [
                    257.0,
                    245.0
                ],
                [
                    230.0,
                    240.0
                ]
            ],
            "area": 113431.5,
            "layer": 1.0,
            "bbox": [
                2.500862813412503,
                239.41731436741662,
                428.5,
                613.4969418673368
            ],
            "iscrowd": false,
            "note": ""
        }
    ]
}

1. 顶层字段结构

{
    "info": { ... },
    "objects": [ ... ]
}
  • info:存储与图像相关的元数据信息,例如图像路径、尺寸等。
  • objects:存储图像中每个标注对象的详细信息,以数组形式存在,每个对象是一个字典。

2. info 字段解析

"info": {
    "description": "ISAT",
    "folder": "C:/Users/Natsu/Desktop/apple/img",
    "name": "apple_9.jpg",
    "width": 500,
    "height": 750,
    "depth": 3,
    "note": ""
}
  • description:任务描述,通常表示工具或项目名称(例如 “ISAT”)。
  • folder:图像所在文件夹的路径。
  • name:图像文件名。
  • width:图像宽度(像素)。
  • height:图像高度(像素)。
  • depth:图像深度(通常为 3,表示 RGB 图像)。
  • note:可附加的备注信息,默认为空字符串。

3. objects 字段解析

objects 是一个数组,每个元素代表一个标注对象,包含以下字段:

"objects": [
    {
        "category": "apple",
        "group": 1,
        "segmentation": [ ... ],
        "area": 113431.5,
        "layer": 1.0,
        "bbox": [ ... ],
        "iscrowd": false,
        "note": ""
    }
]
字段说明:
  • category:标注对象的类别名称(如 "apple")。
  • group:分组编号,用于标识同一类别的不同实例。
  • segmentation:对象轮廓的坐标点数组,每组坐标 [x, y] 表示一个点。
    • 示例:
      "segmentation": [
          [185.0, 241.0],
          [146.0, 251.0],
          ...
      ]
      
  • area:标注对象的像素面积,用于描述区域大小。
  • layer:图层信息,通常为浮点数,表示对象所在图层。
  • bbox:对象的边界框,格式为 [x_min, y_min, x_max, y_max],表示对象的包围矩形。
    • 示例:
      "bbox": [2.5, 239.4, 428.5, 613.5]
      
  • iscrowd:布尔值,表示对象是否为密集型区域(false 表示非密集型)。
  • note:备注信息,默认空字符串。


http://www.kler.cn/a/397073.html

相关文章:

  • Vuex vs Pinia:新一代Vue状态管理方案对比
  • 大数据实验9:Spark安装和编程实践
  • Redis在高性能缓存中的应用
  • 坚果云·无法连接服务器(无法同步)
  • 03-axios常用的请求方法、axios错误处理
  • JDBC-Mysql 时区问题详解
  • golang中的init函数
  • 1 图的搜索 奇偶剪枝
  • 解锁 AI 力量:为直播未来注入磅礴能量,开启新时代篇章
  • SpringCloud篇(服务拆分 / 远程调用 - 入门案例)
  • 鸿蒙自定义UI组件导出使用
  • EXCEL 或 WPS 列下划线转驼峰
  • Dubbo RPC线程模型
  • ADS项目笔记 1. 低噪声放大器LNA天线一体化设计
  • 基于Python爬虫大屏可视化的热门旅游景点数据分析系统
  • 高斯混合模型回归(Gaussian Mixture Model Regression,GMM回归)
  • c语言学习19参数传递
  • WebChromeClient 方法分类及其功能
  • Python习题 250:删除空文件夹
  • dpdk tm eth event驱动协同完成收发包流程
  • [C++] 智能指针
  • Java爬虫(Jsoup)详解
  • [产品管理-82]:《产品经理从入门到精通》产品经理的基本思维与核心思想
  • 探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力
  • react 中 useMemo Hook 作用
  • 记录no.28