借助通用分割大模型!半自动化标注神器,Label-Studio X SAM(附源码)

本文来源编辑  小白学视觉  文仅分享,侵删

907be48c9f7aace3ebf6b95ebb456a32.gif

导读

数据标注是计算机视觉任务的开始,同时也是最费时费力的环节。今天文章介绍一种半自动化标注神器Label-Studio X SAM,相比传统方法,数据标注的效率得到极大的提升。

本文将介绍结合 Label-Studio 和 SAM (Segment Anything) 半自动化标注方案,Point2Lablel:用户只需要在物体的区域内点一个点就能得到物体的掩码和边界框标注,Bbox2Label:用户只需要标注物体的边界框就能生成物体的掩码,社区的用户可以借鉴此方法,提高数据标注的效率。

3e2b60fba6ac5a8380d0c0dff8436c05.gif

786b7308bc86aead0625a64c917f536d.gif

  • SAM (Segment Anything) 是 Meta AI 推出的分割一切的模型。

  • Label Studio 是一款优秀的标注软件,覆盖图像分类、目标检测、分割等领域数据集标注的功能。

本文将使用喵喵数据集的图片,进行半自动化标注。

环境配置

首先需要创建一个虚拟环境,然后安装 PyTorch 和 SAM。创建虚拟环境:

conda create -n rtmdet-sam python=3.9 -y
conda activate rtmdet-sam

克隆 OpenMMLab PlayGround

git clone https://github.com/open-mmlab/playground

安装 PyTorch

# Linux and Windows CUDA 11.3
pip install torch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu113/torch_stable.html


# Linux and Windows CPU only
pip install torch==1.10.1+cpu torchvision==0.11.2+cpu torchaudio==0.10.1 -f https://download.pytorch.org/whl/cpu/torch_stable.html

# OSX
pip install torch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1

安装 SAM 并下载预训练模型

cd path/to/playground/label_anything
pip install opencv-python pycocotools matplotlib onnxruntime onnx
pip install git+https://github.com/facebookresearch/segment-anything.git
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth

# 如果想要分割的效果好请使用 sam_vit_h_4b8939.pth 权重
# wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_l_0b3195.pth
# wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth

安装 Label-Studio 和 label-studio-ml-backend

# sudo apt install libpq-dev python3-dev # Note:如果使用 Label Studio 1.7.2 版本需要安装 `libpq-dev` 和 `python3-dev` 依赖。

# 安装 label-studio 需要一段时间,如果找不到版本请使用官方源
pip install label-studio==1.7.3
pip install label-studio-ml==1.0.9

启动服务

⚠label_anything 需要启用SAM后端推理后再启动网页服务才可配置模型(一共需要两步启动)

1.启动 SAM 后端推理服务:

cd path/to/playground/label_anything

label-studio-ml start sam --port 8003 --with \
sam_config=vit_b \
sam_checkpoint_file=./sam_vit_b_01ec64.pth \
out_mask=True \
out_bbox=True \
device=cuda:0 \
# device=cuda:0 为使用 GPU 推理,如果使用 cpu 推理,将 cuda:0 替换为 cpu
# out_poly=True 返回外接多边形的标注
b43709a7aaa2e22a687d3ead2236b7b4.png
image

此时,SAM 后端推理服务已经启动,后续在 Label-Studio Web 系统中配置 http://localhost:8003 后端推理服务即可。以上的终端窗口需要保持打开状态。

2.现在启动 Label-Studio 网页服务:

⚠(如不使用vit-h的SAM后端请跳过此步)使用的推理后端是SAM的 vit-h, 由于模型加载时间长,导致连接后端超时,需要设置以下环境变量。

具体可根据下载的SAM的权值名称判断,比如sam_vit_h_4b8939.pth 为 vit-h,sam_vit_b_01ec64.pth为 vit-b。

# Linux需要使用以下指令
export ML_TIMEOUT_SETUP=40
# Windows要使用以下指令
set ML_TIMEOUT_SETUP=40

启动 Label-Studio 网页服务:

label-studio start
110d5ba90a2ecc1b1424ba299ef59cfa.png

打开浏览器访问 http://localhost:8080/ 即可看到 Label-Studio 的界面。

a33344286a3796dd3e1578f1bc413a3b.png

我们注册一个用户,然后创建一个 OpenMMLabPlayGround 项目。

61b708f558c80cd79589033c4146dbc5.png

我们通过下面的方式下载好示例的喵喵图片,点击 Data Import 导入需要标注的猫图片,点击 Save 创建 Project。

cd path/to/playground/label_anything
mkdir data && cd data

wget https://download.openmmlab.com/mmyolo/data/cat_dataset.zip && unzip cat_dataset.zip
16e1630cd2e6ba6b2095d05861624b19.png 6264d471b55e415da6461d65903eba89.png

在 Settings/Labeling Interface 中配置 Label-Studio 关键点和 Mask 标注。

<View>
  <Image name="image" value="$image" zoom="true"/>
  <KeyPointLabels name="KeyPointLabels" toName="image">
    <Label value="cat" smart="true" background="#e51515" showInline="true"/>
    <Label value="person" smart="true" background="#412cdd" showInline="true"/>
  </KeyPointLabels>
  <RectangleLabels name="RectangleLabels" toName="image">
   <Label value="cat" background="#FF0000"/>
   <Label value="person" background="#0d14d3"/>
  </RectangleLabels>
  <PolygonLabels name="PolygonLabels" toName="image">
   <Label value="cat" background="#FF0000"/>
   <Label value="person" background="#0d14d3"/>
  </PolygonLabels>
  <BrushLabels name="BrushLabels" toName="image">
   <Label value="cat" background="#FF0000"/>
   <Label value="person" background="#0d14d3"/>
  </BrushLabels>
</View>

在上述 XML 中我们对标注进行了配置,其中 KeyPointLabels 为关键点标注,BrushLabels 为 Mask 标注,PolygonLabels 为外接多边形标注,RectangleLabels 为矩形标注。

本实例使用 cat 和 person 两个类别,如果社区用户想增加更多的类别需要分别在 KeyPointLabelsBrushLabelsPolygonLabelsRectangleLabels 中添加对应的类别。

然后将上述 XML 复制添加到 Label-Studio,然后点击 Save。

305ac52fad47b645d92dba6256d431b7.png
image

然后在设置中点击 Add Model 添加 OpenMMLabPlayGround 后端推理服务,设置好 SAM 后端推理服务的 URL,并打开 Use for interactive preannotations 并点击 Validate and Save

⚠如果你在这一步无法顺利执行,可能由于模型加载时间长,导致连接后端超时,请重新执行第二步中已经跳过的部分,重启SAM后端推理服务。

d46318bfc3c376c422b69a29fdecb68a.png
image

看到如下 Connected 就说明后端推理服务添加成功。

6a5cd1b5780bccb5d2bdc12bb5b2690a.png
image

开始半自动化标注

点击 Label 开始标注

ba4be1252a639f15cdb73ee8c5e5da1d.png
image

需要打开 Auto-Annotation 的开关,并建议勾选 Auto accept annotation suggestions,并点击右侧 Smart 工具,切换到 Point 后,选择下方需要标注的物体标签,这里选择 cat。如果是 BBox 作为提示词请将 Smart 工具切换到 Rectangle。

be86d088b28f1060d32af8223bfda37a.png
image

Point2Label:由下面的 gif 的动图可以看出,只需要在物体上点一个点,SAM 算法就能将整个物体分割和检测出来。

4a2cd434aac797d34397372e4b2f62bc.gif
SAM8

Bbox2Label: 由下面的 gif 的动图可以看出,只需要标注一个边界框,SAM 算法就能将整个物体分割和检测出来。

edd3d29716e26b50ac76a9286abc862c.gif
SAM10

我们 submit 完毕所有图片后,点击 exprot 导出 COCO 格式的数据集,就能把标注好的数据集的压缩包导出来了。注意:此处导出的只有边界框的标注,如果想要导出实例分割的标注,需要在启动 SAM 后端服务时设置 out_poly=True

b945df3ff7aaa8d2027efa037c497a57.png
image

用 vscode 打开解压后的文件夹,可以看到标注好的数据集,包含了图片和 json 格式的标注文件。

2bdd824110708d73c86c55e84ca7351d.png

到此半自动化标注就完成了, 通过 Label-Studio 的半自动化标注功能,可以让用户在标注过程中,通过点击一下鼠标,就可以完成目标的分割和检测,大大提高了标注效率。

来源:

[1]https://github.com/open-mmlab/playground/blob/main/label_anything/readme_zh.md

[2] 部分代码借鉴自 label-studio-ml-backend ID 为 253 的 Pull Request,感谢作者的贡献。

关注公众号【机器学习与AI生成创作】,更多精彩等你来读

深入浅出stable diffusion:AI作画技术背后的潜在扩散模型论文解读

深入浅出ControlNet,一种可控生成的AIGC绘画生成算法! 

经典GAN不得不读:StyleGAN

c3afee9001539a1da236ea043dd4438a.png 戳我,查看GAN的系列专辑~!

一顿午饭外卖,成为CV视觉的前沿弄潮儿!

最新最全100篇汇总!生成扩散模型Diffusion Models

ECCV2022 | 生成对抗网络GAN部分论文汇总

CVPR 2022 | 25+方向、最新50篇GAN论文

 ICCV 2021 | 35个主题GAN论文汇总

超110篇!CVPR 2021最全GAN论文梳理

超100篇!CVPR 2020最全GAN论文梳理

拆解组新的GAN:解耦表征MixNMatch

StarGAN第2版:多域多样性图像生成

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 |《计算机视觉中的数学方法》分享

《基于深度学习的表面缺陷检测方法综述》

《零样本图像分类综述: 十年进展》

《基于深度神经网络的少样本学习综述》

《礼记·学记》有云:独学而无友,则孤陋而寡闻

b1318f22af63d6b326be443c9ff4bbb0.jpeg

点击 一顿午饭外卖,成为CV视觉的前沿弄潮儿!,领取优惠券,加入 AI生成创作与计算机视觉 知识星球!

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值