超全超详细使用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.rhkb.cn/news/472945.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE 重要的API阅读

JavaEE API阅读 目的是为了应对学校考试&#xff0c;主要关注的是类的继承关系、抛出错误的类型、包名、包结构等等知识。此帖用于记录。 PageContext抽象类 包名及继承关系 继承自JspContext类。PageContext 实例提供对与某个 JSP 页⾯关联的所有名称空间的访问&#xff0…

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

Python爬虫----python爬虫基础

一、python爬虫基础-爬虫简介 1、现实生活中实际爬虫有哪些&#xff1f; 2、什么是网络爬虫&#xff1f; 3、什么是通用爬虫和聚焦爬虫&#xff1f; 4、为什么要用python写爬虫程序 5、环境和工具 二、python爬虫基础-http协议和chrome抓包工具 1、什么是http和https协议…

Python学习笔记(2)正则表达式

正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 在 Python 中&#xff0c;使用 re 模块提供的函数来处理正则表达式&#xff0c;允许你在字符串中进行模式匹配、搜索和替换操作。 1 正则表达式 正则表达式(Regular Expressi…

整数唯一分解定理

整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是由德国数学家高斯在其著作《算术研究》中首次提出的。本文回顾整数唯一分解定理以及对应的几个重要结论。 一、整数唯一分解定理 整数唯一分解定理&#xff0c;也称为算术基本定理&#xff0c;是数论中的一个重…

小版本大不同 | Navicat 17 新增 TiDB 功能

近日&#xff0c;Navicat 17 迎来了小版本更新。此次版本新增了对 PingCap 公司的 TiDB 开源分布式关系型数据库的支持&#xff0c;进一步拓展了 Navicat 的兼容边界。即日起&#xff0c;Navicat 17 所有用户可免费升级至最新版本&#xff0c;通过 Navicat 工具实现 TiDB 数据库…

【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)

#IEEE出版|EI稳定检索#主讲嘉宾阵容强大&#xff01;多位外籍专家出席报告 2024健康大数据与智能医疗国际会议&#xff08;ICHIH 2024&#xff09;2024 International Conference on Health Big Data and Intelligent Healthcare 会议简介 2024健康大数据与智能医疗国际会议…

ADS项目笔记 1. 低噪声放大器LNA天线一体化设计

在传统射频结构的设计中&#xff0c;天线模块和有源电路部分相互分离&#xff0c;两者之间通过 50 Ω 传输线级联&#xff0c;这种设计需要在有源电路和天线之间建立无源网络&#xff0c;包括天线模块的输入匹配网络以及有源电路的匹配网络。这些无源网络不仅增加了系统的插入损…

客厅打苍蝇fly测试总结1116

项目介绍:本项目是关系食品安全重大项目&#xff0c;针对屋子里有苍蝇的问题&#xff0c;通过分析苍蝇特性及对场景分类&#xff0c;设计测试用例16条&#xff0c;有效击杀苍蝇17头&#xff0c;房间里面已经看不到苍蝇的活动痕迹。比较传统蚊拍击打容易在物体表面形成难看且赃的…

物理hack

声明 声明 文章只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致力于网络安全领域&#xff0c;目前作为一名学习者&#xff0c;很荣…

go 集成swagger 在线接口文档

安装swaggo go install github.com/swaggo/swag/cmd/swaglatest 编写swag import ("github.com/gin-gonic/gin""goWeb/internal/service""goWeb/model/response" )// UserRouter 路由 func UserRouter(ctx *gin.RouterGroup) {ctx.GET("/…

学习threejs,使用第一视角控制器FirstPersonControls控制相机

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️第一视角控制器FirstPerson…

基于Java Web 的家乡特色菜推荐系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

HMI FUXA测试

Foxa官网 foxa tutorialhttps://github.com/frangoteam/FUXA/wiki/Getting-Started 1 概述 FUXA是基于Web的&#xff0c;过程&#xff08;SCADA、HMI、看板等&#xff09;可视化软件。可创建现代的过程可视化&#xff0c;使用独立的设计器&#xff0c;显示机器和实时数据。 …

数据分析-Excel基础操作

目录 周报讲解 基础概念 理解数据 筛选excel表 数据透视表 插入数据透视表 新建字段 切片器&#xff08;筛选&#xff09; 数据透视图 Excel常用函数 sum&#xff08;求和&#xff09; 1-8月GMV 1月和8月GMV sumif&#xff08;条件求和&#xff09; sumifs 日G…

git创建远程仓库,以gitee码云为例GitHub同理

git远程Remote服务端仓库构建的视频教程在这 Git建立服务端Remote远程仓库&#xff0c;gitee码云例&#xff0c;Github_哔哩哔哩_bilibili 1、登gitee码云/Github 登录 - Gitee.com https://github.com/ &#xff08;没账号的注册一下就行&#xff09; 点击如下图位置的创…

【Android、IOS、Flutter、鸿蒙、ReactNative 】启动页

Android 设置启动页 自定义 splash.xml 通过themes.xml配置启动页背景图 IOS 设置启动页 LaunchScreen.storyboard 设置为启动页 storyboard页面绘制 Assets.xcassets 目录下导入图片 AppLogo Flutter 设置启动页 Flutter Android 设置启动页 自定义 launch_background.xm…

深入理解Flutter生命周期函数之StatefulWidget(一)

目录 前言 1.为什么需要生命周期函数 2.开发过程中常用的生命周期函数 1.initState() 2.didChangeDependencies() 3.build() 4.didUpdateWidget() 5.setState() 6.deactivate() 7.dispose() 3.Flutter生命周期总结 1.调用顺序 2.函数调用时机以及主要作用 4.生…

MacOS下,如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能

MacOS下&#xff0c;如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能 在Mac上的Safari浏览器中&#xff0c;可以通过实况文本功能来实现图片中的文本翻译。关闭步骤具体步骤如下&#xff1a; 在浏览器地址栏&#xff0c;鼠标右击翻译按钮&#xff0c;然后点击“首选…

IDC 报告:百度智能云 VectorDB 优势数量 TOP 1

近日&#xff0c;IDC 发布了《RAG 与向量数据库市场前景预测》报告&#xff0c;深入剖析了检索增强生成&#xff08;RAG&#xff09;技术和向量数据库市场的发展趋势。报告不仅绘制了 RAG 技术的发展蓝图&#xff0c;还评估了市场上的主要厂商。在这一评估中&#xff0c;百度智…