Interactive semi-automatic annotation tool for image segmentation based on SAM(segment anything model).
Project description
ISAT_with_segment_anything
一款基于SAM的交互式半自动图像分割标注工具
集成segment anything,实现图片分割快速标注。
演示视频:bilibili
Demo Video:youtube
特点
- 支持基于SAM的交互式半自动标注。
- 支持手动标注多边形。
- 支持连点绘制,连点模式下每隔0.15s添加一个点,便于绘制曲线。
- 支持标注二次修改。
- 支持重叠目标调整遮挡关系。
- 支持标注结果预览。
- 单独线程进行sam encoder计算,降低切换图片的卡顿感。
- 支持基于bounding box的自动分割。
- 支持导出COCO,YOLO,LABELME,VOC等图像分割数据格式;也支持导出VOC目标检测格式数据(xml)。
- 更多功能详见功能说明。
安装
1. 源码运行
(1) 创建虚拟环境
conda create -n isat_env python=3.8
conda activate isat_env
(2) 获取ISAT_with_segment_anything源码并安装依赖
git clone https://github.com/yatengLG/ISAT_with_segment_anything.git
cd ISAT_with_segment_anything
pip install -r requirements.txt
windows系统下,通过pip安装的pytorch默认是cpu版本,gpu版本的pytorch需去pytorch官网手段安装。
(3) 下载Segment anything预训练模型
软件提供了模型管理界面。通过[菜单栏]-[SAM]-[模型管理]打开界面(现已添加模型国内下载链接,点击下载按钮可直接进行下载)。
当前支持的模型有SAM系列,sam-hq系列,MobileSAM系列,EdgeSAM系列等。
系列 | 预训练模型 | 显存占用 | 文件大小 |
---|---|---|---|
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 |
(4) 运行软件
python main.py
2. pip安装
版本略低于源码
(1) 创建虚拟环境
conda create -n isat_env python=3.8
conda activate isat_env
(2) pip安装ISAT_with_segment_anything
windows系统下,通过pip安装的pytorch默认是cpu版本,gpu版本的pytorch需去pytorch官网手段安装。
pip install isat-sam
(3) 运行软件
isat-sam
3. windows下exe运行
(1) 下载打包好的exe文件
打包的exe版本严重落后于git源码,建议运行源码或pip安装
需下载三个.zip文件,总体大小2.7G,解压缩后4.9G。
打开ISAT_with_segment_anything文件夹,双击main.exe运行。
下载链接 | |
---|---|
百度网盘 | 链接:https://pan.baidu.com/s/1vD19PzvIT1QAJrAkSVFfhg 提取码:ISAT |
(2) 下载Segment anything预训练模型
打包后的软件,附带了sam_hq_vit_tiny.pth模型,便于直接使用。 ( 近期有朋友反馈,sam_hq_vit_tiny.pth无法在CPU环境下运行,这是由于sam-hq模型权重保存的问题。请下载mobile-sam.pt权重后选择mobile-sam模型 )
如需使用精度更高的模型,请自行下载,并放置于ISAT/segment_any下(打包的exe为旧版本,还未更新)。
下载地址同上下载预训练模型
使用
软件具体功能可查看:功能说明
1.标注
1. 软件左侧选择类别(工具栏-文件-设置中,进行类别添加或修改)
2. 开始标注
2.1 半自动标注
点击工具栏[Segment anything]开始半自动标注(快捷键Q)
通过鼠标左键(或右键)提示感兴趣区域(或不感兴趣区域),调整目标分割掩码。
2.2 手动标注
点击工具栏[绘制多边形]开始手动标注(快捷键C)
通过鼠标左键添加多边形顶点。
鼠标左键按下并拖动,持续添加顶点,时间间隔0.15s。
2.3 退上一个状态
工具栏点击工具栏[回退]按钮(快捷键Z),回退到标注的上一个状态。
半自动标注时,删除上一个添加的点提示;手动标注时,删除上一个添加的顶点。
3. 点击工具栏[标注完成]按钮,完成标注(快捷键E)。
4. 点击工具栏[保存]按钮(快捷键S),写入json文件。
2.修改
1. 多边形修改
拖拽多边形顶点,修改多边形形状。
拖拽多边形,调整多边形位置。
2. 类别修改
选定目标,点击工具栏[编辑]按钮(快捷键E),在跳出的编辑框中修改类别或添加信息。
3. 遮挡修改
对于存在重叠部分的目标,选定目标多边形后,点击工具栏[置顶](快捷键T)或[置底](快捷键B)按钮,调整目标遮挡关系。
4. 删除目标
选定目标,点击工具栏[删除]按钮(快捷键DEL),删除选定目标。
3.查看
1. 结果预览
点击工具栏[位图]按钮(快捷键SPACE),预览标注结果。
点击时,以 ‘标注-语义-实例’ 的顺序进行切换。
2. 窗口调整
点击工具栏[放大],[缩小],[适应窗口](快捷键F)调整图片大小。
3. 显示/隐藏目标
点击工具栏[显示/隐藏]按钮(快捷键V),显示或隐藏当前已标注目标。
也可以在右侧标注栏中,通过勾选框显示/隐藏单个目标。
4. 背景清晰度调整(仅半自动标注时)
半自动标注时,会调暗背景,凸显mask。
通过工具栏[mask alpha]数值条,调整背景与mask混合比例。
4.数据转换
本软件用json文件保存标注结果。 使用时,可以手动解析json文件,或转换为其他数据格式。
软件内置了转换工具
1. ISAT转VOC
转换ISAT格式json为png单通道图片。语义分割中,像素值为类别index;实例分割中,像素值为实例id(软件中的group id)。
2. ISAT转COCO
转换ISAT格式json为COCO格式json。(转换后,会丢失图层信息,如最终使用coco格式,标注时尽可能避免目标重叠)
3. ISAT转LABELME
转换ISAT格式json为labelme格式json。(转换后,会丢失图层信息)
4. COCO转ISAT
转换COCO格式json为ISAT格式json。
Star History
核心贡献者
... | ||
yatengLG | Alias-z | ... |
引用
@misc{ISAT with segment anything,
title={{ISAT with segment anything}: Image segmentation annotation tool with segment anything},
url={https://github.com/yatengLG/ISAT_with_segment_anything},
note={Open source software available from https://github.com/yatengLG/ISAT_with_segment_anything},
author={yatengLG, Alias-z and horffmanwang},
year={2023},
}
更新日志
[0.0.1]
- 发布测试版,版本号0.0.1
-
更新下载功能(后续需优化下载链接)
-
支持多选多边形,现在可以批量删除了
按下Ctrl点击多边形;按下Ctrl点击右侧标注栏;按下Shift点击右侧标注栏;点击右侧标注栏,Ctrl+A全选。
-
添加转换脚本 - utils目录下
现支持 ISAT <-> COCO, ISAT <-> YOLO, ISAT -> XML(目标检测)
-
添加了对segment-anything-fast的支持
现支持SAM系列模型,sam-hq以及mobile-sam等后续更新
sam-fast要求torch版本不低于2.1.1;低于版本要求时,默认导入sam
sam_vit_h_4b8939.pth encode计算时间缩短大概4倍,显存占用缩小到5.6G
sam | sam-fast | |
---|---|---|
0 | 0.698307991027832 | 0.19336390495300293 |
1 | 0.7048919200897217 | 0.21175742149353027 |
2 | 0.766636848449707 | 0.2573261260986328 |
3 | 0.8198366165161133 | 0.22284531593322754 |
-
添加了饱和度调整
通过拖动工具栏中的饱和度调整条,对图片进行饱和度调整。(只与显示有关,不影响sam)
-
添加track模式
在"自动auto"和"手动manual"模式外,为组模式中添加了"跟踪track"模式。该模式下,使用[TAB]或者[`]切换目标时,组id会显示为设置为当前多边形的组id。
[0.0.2]
-
添加了模型管理界面
现在可以方便的管理与使用模型了。
由于sam-hq以及mobile-sam的权重链接,需要科学上网才可以访问。这两类模型下载时会经常失败 有推荐的比较好用的大文件托管服务,可以联系我
-
整合了数据转换界面并提供了新功能
- COCO <-> ISAT
- YOLO <-> ISAT
- LABELME <-> ISAT
- ISAT -> VOC(png单通道图)
- ISAT -> VOC for object detection(xml目标检测)
-
添加了linux系统对segment-anything-fast的支持
该功能可以保持sam分割效果的情况下,减少显存占用并提升分割速度。(目前只对sam系列模型有效)
由于windows下需需torch版本为2.2.0+dev且需要安装较多其他依赖,因而暂时关闭了windows系统下对该功能的支持。
-
修复了遗留bug
- 修复了转VOC后第一行一直为0的问题
- 轮廓保存模式中-只保存最大轮廓现在严格保存面积最大的轮廓(之前使用顶点数量进行粗估计)
-
添加了对EdgeSAM的支持。
-
修复转coco后,类别ID从0开始的问题。(现在第一类的类别id为1)
-
修复sam标注过程中,切换图片文件夹后,闪退的问题
-
添加了模型国内下载链接
-
减少模型显存占用
使用bfloat16模型后,显存需求降低,特征计算时间略微增加,最终分割效果无显著变化。
checkpoint | mem(float) | mem(bfloat16) | cost(float) | cost(bfloat16) |
---|---|---|---|---|
edge_sam.pth | 360M | 304M | 0.0212 | 0.0239 |
edge_sam_3x.pth | 360M | 304M | 0.0212 | 0.0239 |
mobile_sam.pt | 534M | 390M | 0.0200 | 0.0206 |
sam_hq_vit_tiny.pth | 598M | 392M | 0.0196 | 0.0210 |
sam_hq_vit_b.pth | 3304M | 1762M | 0.1496 | 0.1676 |
sam_hq_vit_l.pth | 5016M | 2634M | 0.3766 | 0.4854 |
sam_hq_vit_h.pth | 6464M | 3378M | 0.6764 | 0.9282 |
sam_vit_b_01ec64.pth | 3302M | 1760M | 0.1539 | 0.1696 |
sam_vit_l_0b3195.pth | 5016M | 2634M | 0.3776 | 0.4833 |
sam_vit_h_4b8939.pth | 6462M | 3378M | 0.6863 | 0.9288 |
0.0.3
- 更新了项目结构
- 填加了sam_med2d模型,实现对医疗数据更好的分割效果
0.0.4
- 更新了基于bounding box的自动分割功能
基于标注完成的VOC格式目标检测数据,使用标注框进行sam框提示,自动分割图像并存储为ISAT格式json。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.