告别手动标注时代 | SAM 助力 Label-Studio 形成 SOTA 级半自动标注工具

简介: 告别手动标注时代 | SAM 助力 Label-Studio 形成 SOTA 级半自动标注工具

导读

本文将介绍结合 Label-StudioSAM (Segment Anything) 提供一个半自动化标注方案,帮助大家充分提高数据标注的效率。

  • Point2Labl:用户只需要在物体的区域内点一个点就能得到物体的掩码和边界框标注。


image.png


  • Bbox2Label:用户只需要标注物体的边界框就能生成物体的掩码。


image.png

其中:

  • SAM (Segment Anything) 是 Meta AI 推出的分割一切的模型。
  • Label Studio 是一款优秀的标注软件,覆盖图像分类、目标检测、分割等领域数据集标注的功能。

本文将使用喵喵数据集的图片作为示例,演示半自动化标注过程。


环境配置

首先,我们可以创建一个虚拟环境,然后安装 PyTorch 和 SAM。

  1. 创建虚拟环境:
conda create -n rtmdet-sam python=3.9 -y
conda activate rtmdet-sam
  1. 克隆 OpenMMLab PlayGround
git clone https://github.com/open-mmlab/playground


  1. 安装 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
  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


  1. 安装 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

启动服务

启动 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 返回外接多边形的标注

a736b9b44c68c78c79586ab3ca87f169.png

此时,SAM 后端推理服务已经启动,后续在 Label-Studio Web 系统中配置 http://localhost:8003 后端推理服务即可。

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

# 如果使用的推理后端是SAM的 vit-h, 由于模型加载时间长,需要设置以下环境变量。
# export ML_TIMEOUT_SETUP=40
label-studio start

8309187c98b65872c85b1c1e85aa6a44.png

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


e12909196b832d6647a6d8d4ba6a3f3e.png


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


b91849a5f1de554bca486a5d591b56b5.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

4e4fcb60ac9c20b305a8eb1e33ada257.png

480d17ad4e858ab92f7881ba330153c2.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 两个类别,如果社区用户想增加更多的类别需要分别在 KeyPointLabels、BrushLabels、PolygonLabels、RectangleLabels 中添加对应的类别。


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

daf169c7529931d33eaf54beee48b93a.png

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


93f99119bbff20733faa7219c558386f.png


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


5534601f6e3618adf747540d23235976.png


开始半自动化标注


点击 Label 开始标注


b6abde6f3c60b5f00916098d64a1590a.png


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


b5c32a82ba7f42979230fcf780f0dc88.png


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


06498fe55afa7b00486755b8a4c7fe8e.gif


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


65b2e1a75341674e3fe630ba19419fb2.gif


我们 submit 完毕所有图片后,点击 exprot 导出 COCO 格式的数据集,就能把标注好的数据集的压缩包导出来了。

注意:此处导出的只有边界框的标注,如果想要导出实例分割的标注,需要在启动 SAM 后端服务时设置 out_poly=True。


fb61f6895734ba20bc115004658490bc.png


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


55d6ef8fc7a005970494ea4cfd14bda4.png


到此半自动化标注就完成了, 通过 Label-Studio 的半自动化标注功能,可以让用户在标注过程中,通过点击一下鼠标,就可以完成目标的分割和检测,大大提高了标注效率。部分代码借鉴自 label-studio-ml-backend ID 为 253 的 Pull Request,感谢作者的贡献。


目录
相关文章
|
7月前
|
机器学习/深度学习 人工智能 数据可视化
【好物分享】onnx-modifier:可视化操作助力模型更改,让你不再为更改模型烦恼!
【好物分享】onnx-modifier:可视化操作助力模型更改,让你不再为更改模型烦恼!
1142 0
【好物分享】onnx-modifier:可视化操作助力模型更改,让你不再为更改模型烦恼!
|
7月前
|
存储 计算机视觉 开发者
【mobileSam】使用大模型推理赋能标注工作,让标注工作不再困难
【mobileSam】使用大模型推理赋能标注工作,让标注工作不再困难
356 1
|
7月前
|
并行计算 Linux 计算机视觉
还在手工标注数据集?快来试一试自动化多模型标注大模型-gui交互式标注(部署运行教程-高效生产力)
还在手工标注数据集?快来试一试自动化多模型标注大模型-gui交互式标注(部署运行教程-高效生产力)
|
机器学习/深度学习 人工智能 自然语言处理
一文尽览 | 开放世界目标检测的近期工作及简析!(基于Captioning/CLIP/伪标签/Prompt)(上)
人类通过自然监督,即探索视觉世界和倾听他人描述情况,学会了毫不费力地识别和定位物体。我们人类对视觉模式的终身学习,并将其与口语词汇联系起来,从而形成了丰富的视觉和语义词汇,不仅可以用于检测物体,还可以用于其他任务,如描述物体和推理其属性和可见性。人类的这种学习模式为我们实现开放世界的目标检测提供了一个可以学习的角度。
一文尽览 | 开放世界目标检测的近期工作及简析!(基于Captioning/CLIP/伪标签/Prompt)(上)
|
6天前
|
机器学习/深度学习 人工智能 文字识别
Kimi 上线视觉思考模型,K1 系列强化学习模型正式开放,无需借助外部 OCR 处理图像与文本进行思考并回答
k1视觉思考模型是kimi推出的k1系列强化学习AI模型,具备端到端图像理解和思维链技术,能够在数学、物理、化学等领域表现优异。本文详细介绍了k1视觉思考模型的功能、技术原理、使用方法及其在多个应用场景中的表现。
129 68
Kimi 上线视觉思考模型,K1 系列强化学习模型正式开放,无需借助外部 OCR 处理图像与文本进行思考并回答
|
2月前
|
XML 机器学习/深度学习 数据可视化
目标检测笔记(六):如何通过界面化操作YOLOv5完成数据集的自动标注
这篇文章介绍了如何通过界面化操作YOLOv5来完成数据集的自动标注,包括修改源码、自动标注的前期准备、开始自动标注、可视化标注效果以及将XML文件转换为YOLO训练所需的TXT格式。
92 1
目标检测笔记(六):如何通过界面化操作YOLOv5完成数据集的自动标注
|
2月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
148 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
3月前
Meta浙大校友让评估模型自学成才,数据全合成无需人工标注,训练Llama 3 70B超过405B
【9月更文挑战第21天】近日,一篇名为《Self-Taught Evaluators》的论文引起了广泛关注。该论文由Meta与浙江大学校友合作完成,提出一种创新的模型评估方法,通过让评估模型自学习训练,无需依赖昂贵且易过时的人工标注数据。此方法利用合成数据,通过迭代生成对比模型输出并训练基于大型语言模型的评估器,从而实现自我迭代改进。研究结果显示,在不使用任何标注偏好数据的情况下,这种方法显著提升了评估模型的性能,甚至超越了一些现有模型。尽管如此,该方法在实际应用中仍需进一步验证。论文地址:https://arxiv.org/abs/2408.02666
77 4
|
4月前
|
人工智能 文字识别 算法
打造全场景、跨领域、多模态的AI工作流 | 开源图像标注工具 X-AnyLabeling v2.4.0 正式发布!
X-AnyLabeling是一款强大的辅助标注工具,集成了AI推理引擎和丰富功能,为图像数据工程师提供一站式解决方案。它支持图像和视频文件的自动标注,提供了包括矩形框、多边形在内的七种标注样式,适应多样化的训练场景需求。X-AnyLabeling内置了多种SOTA级AI模型,如YOLO、SAM系列等,并支持GPU加速和多种数据集格式的导入导出,确保高效的数据处理。此外,它还具备良好的跨平台兼容性,可在多种操作系统上运行,并提供详尽的帮助文档和社区支持,帮助用户轻松上手并解决使用过程中遇到的问题。
379 2
打造全场景、跨领域、多模态的AI工作流 | 开源图像标注工具 X-AnyLabeling v2.4.0 正式发布!
|
4月前
|
人工智能 数据可视化 数据处理
推荐2款免费开源的标注工具,支持大模型对话标注
【LabelLLM】一款开源免费的大模型对话标注平台,专为优化大型语言模型的数据标注过程设计。支持灵活配置与多模态数据(音频、图像、视频),具备全面任务管理和AI辅助标注功能,大幅提升标注效率与准确性。了解更多请前往https://github.com/opendatalab/LabelLLM 【LabelU】一款轻量级开源标注工具,支持图像、视频、音频的高效标注。特色功能包括多功能图像处理、视频和音频分析等,简易灵活,支持多种数据格式输出。了解更多请前往https://github.com/opendatalab/labelU
677 11