一、前言
👉 在计算机视觉任务中,图像分割 是重要的基础工作,但人工标注往往耗时耗力。Meta推出的 SAM(Segment Anything Model),大幅提升了分割效率和精度,让标注工作更加轻松。本篇博客将详细介绍如何安装、配置并使用 SAM
进行辅助标注,力求做到保姆级细致讲解。
💡 SAM(Segment Anything Model) 是一款通用分割模型,具备以下特点:
- 高效分割: 基于点、框等提示快速生成分割结果。
- 通用性强: 支持多种图像类型(如自然图像、医疗图像等)。
- 易用性: 开源实现,兼容PyTorch等主流框架。
二、安装与环境配置
1、源码下载
方法一:从官网直接下载(推荐)
-
打开 ISAT_with_segment_anything 的 GitHub 官方页面。
-
点击页面上的 “Code” 按钮,选择 “Download ZIP” 直接下载。
- 下载完后,建议将压缩包解压到 D 盘或 E 盘等非系统盘并重命名为
sam
,以免因系统权限问题引发错误。
方法二:通过 Git 克隆源码(适合有一定基础的用户)
-
打开终端或命令提示符,输入以下命令:
git clone https://github.com/facebookresearch/ISAT_with_segment_anything.git
-
为方便管理,可将克隆的文件夹重命名为
sam
:mv ISAT_with_segment_anything sam
-
使用以下命令切换到
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可以在GPU或CPU环境下运行,但推荐在GPU上运行以加快训练速度。
检查NVIDIA GPU及其CUDA支持情况
nvidia-smi
是NVIDIA驱动自带的命令行工具,可以查看显卡的CUDA支持情况和驱动信息。打开命令提示符(或CMD),输入:
nvidia-smi
如果系统输出了显卡信息,并显示CUDA版本(例如CUDA Version: 12.7),则表明显卡支持CUDA同时支持GPU,否则不支持GPU 。
方式一:使用Conda安装(推荐)
-
打开 Previous PyTorch Versions | PyTorch 官网,选择<= CUDA Version 的Conda命令并复制(若不支持GPU则选择 CPU 的Conda命令)。
-
在终端中执行对应的安装命令,以安装PyTorch和CUDA / CPU支持。
-
安装完成后,可以在终端中输入
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安装
- 打开 Previous PyTorch Versions | PyTorch 官网,选择<= CUDA Version 的Pip命令并复制(若不支持GPU则选择 CPU 的Pip命令)。
-
在终端中执行对应的安装命令,以安装PyTorch和CUDA / CPU支持。
-
安装完成后,可以在终端中输入
pip list
检查安装情况。
torch 2.3.0
:核心库(版本2.3.0),用于构建和训练神经网络。torchaudio 2.3.0
:音频处理库(版本2.3.0),为音频数据的加载、预处理和增强提供了工具torchvision 0.18.0
:计算机视觉库(版本0.18.0),包含了常用的图像数据集、数据增强和预训练模型。
- 下载安装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
torchvision
与torchaudio
安装方式同理- 安装完毕后再次在终端中输入
pip list
检查安装情况,如果输出结果中显示类似以下内容,则表明安装成功
2.3 Pycharm中加载SAM环境
- 在Pycharm中打开sam项目
- 打开设置 - - > 项目: sam- - > python解释器 - - > 添加解释器 (Add Interpreter) - - > 添加本地解释器 (ADD Local Interpreter…)
- 选择Conda环境 - - > 浏览Anaconda目录下\Library\bin\conda.bat - - > 加载环境 - - > 使用现有环境 - - > 选择sam - - > 点击确定
2.4 安装SAM依赖项
- 打开Pycharm本地终端
- 使用以下命令安装其他依赖项:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- 安装完毕后发现出现警告
Package requirement 'opencv python headless' is not satisfied
,直接点击Ignore requirements
(忽略需求)即可,只要依赖包安装正确,就可以放心使用😊。
2.5 下载Segment anything预训练模型:
-
Pycharm本地终端输入如下命令运行
sam
:python main.py
-
软件提供了便捷的 模型管理界面,可以通过以下路径打开:
- [菜单栏] → [SAM] → [模型管理]
- 你可以直接点击 download 从国内链接获取预训练模型文件,方便快捷。
- 自动保存到以下目录
sam/ISAT/checkpoints
预训练模型权重对比
模型 | 预训练模型权重 | 内存 | 大小 |
---|---|---|---|
SAM | sam_vit_h_4b8939.pth | 7305M | 2.6G |
sam_vit_l_0b3195.pth | 5855M | 2.6G | |
sam_vit_b_01ec64.pth | 4149M | 375M | |
SAM-HQ | sam_hq_vit_h.pth | 7393M | 2.6G |
sam_hq_vit_l.pth | 5939M | 1.3G | |
sam_hq_vit_b.pth | 4207M | 379M | |
sam_hq_vit_tiny.pth | 1463M | 43M | |
Mobile-SAM | mobile_sam.pt | 1375M | 40M |
Edge-SAM | edge_sam.pth | 960M | 39M |
edge_sam_3x.pth | 960M | 39M | |
SAM-Med | sam-med2d_b.pth | 1500M | 2.4G |
SAM2 | sam2_hiera_large.pt | 4000M | 900M |
sam2_hiera_base_plus.pt | 4000M | 324M | |
sam2_hiera_small.pt | 3000M | 185M | |
sam2_hiera_tiny.pt | 2400M | 156M |
三、如何使用SAM进行辅助标注?
1、打开SAM
软件
- 方法一(推荐):Pycharm本地终端输入如下命令运行
sam
:python main.py
- 方法二:直接运行
main.py
2、选择预训练模型
- 软件提供了便捷的 模型管理界面,可以通过以下路径打开:
- [菜单栏] → [SAM] → [模型管理]
- 在模型列表中,模型名称前出现 对勾√ 标志,表示该模型已被选定并正在使用
3、标注流程
- 打开图片(文件夹),可以通过以下路径打开:
- [菜单栏] → [文件] → [图片文件夹]
- 修改
JSON
保存路径,可以通过以下路径修改:- [菜单栏] → [文件] → [标签文件夹]
-
添加新类别,可以通过以下路径打开:
- [菜单栏] → [文件] → [设置]
- [菜单栏] → [文件] → [设置]
-
点击
Segment anything
图标
- 左侧选择标签以后,点击标注对象,然后点击
E
保存标注
4、快捷方法
- 开启自动保存,可以通过以下路径打开:
- [菜单栏] → [编辑] → [自动保存]
- 使用快捷键,可以通过以下路径查看:
- [菜单栏] → [帮助] → [快捷键]
四、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
:备注信息,默认空字符串。