使用 Label Studio+SAM 对图像进行自动分割、打标

阿里云教程3周前发布
10 0 0

翻译自:“Getting Started Using Segment Anything with Label Studio”

原文链接:
https://labelstud.io/blog/get-started-using-segment-anything/

从2023年年中开始,Label Studio 社区推出了新的机器学习后端,为 Label Studio 带来了 Meta 的分段任意模型 (SAM) 的强劲功能。社区贡献的功能使得将 Segment Anything 作为服务运行成为可能,为注释者提供了快速创建图像标签蒙版的工具,从而腾出时间来致力于更具挑战性的注释任务。

在工作流程中测试和使用 SAM 的社区成员提供了大量反馈后,我们进行了多项更新,以提高模型的可靠性和用户体验。我们很高兴地宣布发布机器学习后端的更新,我们称之为 Advanced Segment Anything。

这些改善包括:

  • 改善了对基于 CPU 的推理的支持。
  • 在不同模型实现之间切换的选项,包括 MobileSAM 和基于 ONNX 的模型。
  • 更加简化的标签界面。
  • 能够连接到 Label Studio 的本地云存储。
  • 基于 Docker 的快速入门构建。
  • 修复了多个错误以提高模型的可靠性。

如果您渴望开始,请前往Label Studio 机器学习后端存储库并尝试一下。如果您想了解有关 SAM 及其与 Label Studio 的配合的更多信息,请继续阅读!

查看实际的分段操作

什么是分段任意模型?

Segment Anything 是 Meta AI 研究团队开发的一个模型,“只需单击一下即可‘剪切’任何图像中的任何对象。” SAM 最引人注目的功能之一是它“是一个快速的分割系统,可以对不熟悉的对象和图像进行零样本泛化,无需额外的训练。”

从更高的层面来说,这意味着 SAM 对于对象是什么有一个更通用的概念,使其能够识别和分割图像中的对象,即使它之前在训练中从未遇到过这些对象。这种零样本泛化与强劲的关键点和边界框提示相结合,使 SAM 成为预注释新图像分割数据集的理想工具。

Segment Anything ML 后端提供什么?

Label Studio 的 Segment Anything 后端在SAM 的预测功能和 Label Studio 的标签界面之间架起了一座桥梁。后端包含示例源代码,其中使用 Label Studio ML 后端接口封装了各种 SAM 实现。该存储库还包括一个用于构建可轻松部署的后端实例的示例 Dockerfile 和一个用于协助您运行后端服务的 Docker Compose 文件。

该模型的可用架构包括:

  • 原始 SAM 模型超级适合需要最佳精度并有 GPU 硬件支持的环境。
  • Mobile SAM,一种轻量级模型,适用于资源受限的系统,但牺牲了准确性。
  • ONNX SAM,SAM 的更快实现,缺点是一些参数(如图像大小)需要在编译时编码到模型中。

SAM ML 后端支持关键点和边界框提示。SAM 可以合并负关键点和正关键点,以交互方式提高分割精度。

安装 SAM ML 后端

SAM ML 后端旨在让您快速启动并运行模型。它提供了一个演示环境,可以作为将模型投入到您的环境中的生产的起点。它有一些限制,包括将模型权重直接构建到容器中以及依赖云本地存储进行图像托管。

先决条件

对于此示例,我们提议使用 Docker 来托管 SAM ML 后端和 Label Studio。Docker 使您可以在没有任何其他系统要求的情况下安装软件,并有助于使安装和维护过程更加易于管理。对于台式机或笔记本电脑使用,获取 Docker 的最快方法是安装适用于 Mac 和 Windows 操作系统的官方 Docker Desktop 客户端,或使用适用于 Linux 系统的官方包管理器安装 Docker。

分段任意模型是一个大型、复杂的基础模型,最适合在 GPU 上运行。由于许多人会在笔记本电脑或台式电脑等商用硬件上测试该软件,因此默认情况下,该模型附带启用了 Mobile SAM 的功能。后端将自动检测您是否有可用的 GPU,并使用最适合您的系统的硬件。

请参阅官方Docker 文档和Docker Compose 文档,了解如何为来宾容器启用 GPU 直通。

您的系统至少应有 16 GB 可用 RAM,其中至少 8 GB 分配给 Docker 运行时。

克隆存储库

安装 Docker 和 Git 后,下一步是将 Label Studio ML Backend git 存储库克隆到您的系统中。

git clone https://github.com/HumanSignal/label-studio-ml-backend.git

然后,切换到 SAM 工作目录。

cd label-studio-ml-backend/label_studio_ml/examples/segment_anything_model

构建 Docker 镜像

您目前可以为您的系统构建 SAM ML 后端。

docker build . -t sam:latest

构建模型需要长达 20 分钟或更长时间,具体取决于您的互联网连接速度。此构建过程将 SAM 模型权重嵌入到文件大小为 2.4G 的 Docker 映像中。最佳实践是将模型权重与模型运行时分开存储以供生产使用,以允许更新和检查点。

验证模型是否已构建并可供使用。

docker image list

Docker 应输出可用映像的列表,其中包含类似于以下内容的条目:

REPOSITORY         TAG              IMAGE ID       CREATED         SIZE
sam                latest           f69344cb96a5   5 minutes ago   4.61GB

使用 SAM ML 后端

构建图像后,就可以使用 Label Studio 构建图像分割项目了。

安装Label Studio

第一,您需要安装 Label Studio。对于此示例,SAM ML 后端依赖于启用本地存储服务。要在打开此功能的情况下启动 Label Studio 实例,请输入以下命令:

docker run -it -p 8080:8080 
    -v $(pwd)/mydata:/label-studio/data 
    --env LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true 
    --env LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/label-studio/data/images 
    heartexlabs/label-studio:latest

此命令告知 Docker 启动 Label Studio,使其可在http://localhost:8080上查看,将数据库和任务文件存储在本地硬盘上,并启用本地文件服务。Label Studio 启动后,您可以使用浏览器导航至http://localhost:8080,您将在其中看到 Label Studio 登录屏幕。

设置项目

选择“注册”选项卡,然后创建一个新的 Label Studio 用户帐户。

使用 Label Studio+SAM 对图像进行自动分割、打标

Label Studio“注册”界面

第一次登录时,负鼠海蒂(Label Studio的吉祥物)会向您打招呼,要求您创建一个新项目。选择“创建项目”

使用 Label Studio+SAM 对图像进行自动分割、打标

“海蒂在这里没有看到任何项目”

在“创建项目”对话框中,您将看到三个选项卡。在第一个选项卡中,输入项目名称(例如“Segment Anything”),然后选择“标签设置”。您将看到一系列预先配置的标签模板,但我们将为该项目导入自定义模板。选择“自定义模板”选项。

使用 Label Studio+SAM 对图像进行自动分割、打标

标签设置界面

您将看到一个模板编辑界面。选择“代码”,然后将以下配置粘贴到文本字段中(确保替换所有预先存在的代码)。

<View>
  <Image name="image" value="$image" zoom="true"/>
  <Header value="Brush Labels"/>
  <BrushLabels name="tag" toName="image">
  	<Label value="Dog" background="#FF0000"/>
  	<Label value="Possum" background="#0d14d3"/>
  </BrushLabels>
  <Header value="Keypoint Labels"/>
  <KeyPointLabels name="tag2" toName="image" smart="true">
    <Label value="Dog" smart="true" background="#000000" showInline="true"/>
    <Label value="Possum" smart="true" background="#000000" showInline="true"/>
  </KeyPointLabels>
  <Header value="Rectangle Labels"/>
  <RectangleLabels name="tag3" toName="image" smart="true">
    <Label value="Dog" background="#000000" showInline="true"/>
    <Label value="Possum" background="#000000" showInline="true"/>
  </RectangleLabels>
</View>

请注意,对于此示例,我们感兴趣的是用“狗”和“负鼠”标记图像。您可以随意将这些标签值替换为您感兴趣的任何应用程序以及任意数量的标签。

标签配置包括画笔、关键点和矩形标签的界面元素。关键点和矩形标签将向 SAM ML 后端发送推理请求。

输入代码时,您将看到一个示例标签界面。当您对界面感到满意时,选择“保存”。

使用 Label Studio+SAM 对图像进行自动分割、打标

最终的自定义标签界面

这将带您进入任务管理界面,您将在其中看到一个屏幕,提示您尚未导入任何数据。

使用 Label Studio+SAM 对图像进行自动分割、打标

您似乎尚未导入任何数据

在启动 ML 后端之前,您需要收集有关 Label Studio 安装的其他信息。您第一需要 API 令牌才能访问 Label Studio。将图像从 Label Studio 实例下载到 SAM ML 后端需要令牌。您可以通过选择界面右上角的用户设置图标,然后选择“帐户和设置”来找到令牌。

使用 Label Studio+SAM 对图像进行自动分割、打标

账户与设置

从此屏幕复制访问令牌并记下它。您将需要它来配置 SAM ML 后端。

使用 Label Studio+SAM 对图像进行自动分割、打标

复制访问令牌

您还需要主机的本地 IP 地址。您可以通过多种不同的方式找到它。在 Mac 和 Windows 系统上,最简单的方法是在系统设置中查找 IP 地址。您可以使用命令行中的网络命令(例如ip a或 )ifconfig来发现本地 IP 地址。了解实际地址超级重大,由于 Label Studio 和 Label Studio ML 后端将其视为localhost容器的本地地址,而不是容器主机的本地地址。因此,该localhost名称将导致意外且不正确的行为。

使用 Label Studio+SAM 对图像进行自动分割、打标

ifconfig用于发现您的 IP 地址的示例输出

启动 SAM ML 后端

项目设置完毕,并且有关 Label Studio 的主机和访问信息可用后,我们目前可以启动 SAM ML 后端。使用您喜爱的文本编辑器打开“docker-compose.yml”文件,并编辑以下行以包含您的 Label Studio 主机和 API 访问密钥。

# Add these variables if you want to access the images stored in Label Studio
      - LABEL_STUDIO_HOST=http://<YOUR_HOST_IP_ADDRESS_HERE>:8080
      - LABEL_STUDIO_ACCESS_TOKEN=<YOUR_ACCESS_TOKEN_HERE>

保存文件,并使用以下命令启动后端:

docker compose up

您应该看到类似以下内容的输出:

[+] Running 1/0Container server  Recreated                                                                                                          0.0s 
Attaching to server
server  | [2023-08-23 03:40:23,575] [DEBUG] [sam_predictor::__init__::33] Using device cpu
server  | [2023-08-23 03:40:23,689] [INFO] [sam_predictor::__init__::65] Using MobileSAM checkpoint /app/models/mobile_sam.pt

连接机器学习后端

返回浏览器和 Label Studio 实例,选择菜单“项目”和“分段任何内容”(或为项目设置的任何名称)。选择“设置”,然后选择“机器学习”。

使用 Label Studio+SAM 对图像进行自动分割、打标

机器学习设置界面

选择“添加模型”,然后填写“标题”和“URL”的详细信息。URL 将是您的本地 IP 地址和端口 9090。例如,“
http://192.168.50.212:9090 ”。将“用于交互式预注释”开关切换为打开,然后选择“验证并保存”。

使用 Label Studio+SAM 对图像进行自动分割、打标

连接 Segment Anything ML 后端

选择“保存”,然后在导航器中选择项目名称(就在“项目”之后,在本例中为“项目/分段任何内容”)以返回到任务界面。

导入图像

选择“转到导入”并导入您的第一个项目图像。选择“上传文件”并选择您要使用的任何图像。在此示例中,我们将使用狗的图像和负鼠的图像,但您应该使用任何您想要的图像。

使用 Label Studio+SAM 对图像进行自动分割、打标

导入数据界面

导入图像后,就可以开始添加标签了!选择“标记所有任务”即可开始!

使用 Label Studio+SAM 对图像进行自动分割、打标

Label Studio 任务界面

带有关键点的标签

选择“标记所有任务”后,您将看到任务标记界面。您将在界面的左上角看到图像标签任务。下面是三行标签。最上面一行用于画笔标记,第二行用于关键点标记,第三行用于边界框标记。在图像的右侧,您将看到一个工具栏。在底部,您会看到一些导航按钮。从导航按钮中,确保“自动注释”切换到打开位置,然后确保未选择图像顶部的“自动接受注释提议”。

使用 Label Studio+SAM 对图像进行自动分割、打标

标签界面概述

我们将从自动关键点标记开始。在右侧的工具栏中,选择紫色智能选择工具并单击它,直到选择三个紫色点(这将选择智能关键点工具)。

使用 Label Studio+SAM 对图像进行自动分割、打标

选择智能关键点工具

目前,在第二行中选择您想要的标签(专业提示,使用与标签关联的热键选择来选择您想要的标签,在本例中为“3”)。当标签突出显示时,选择图像中的任意位置以放置关键点并自动触发 SAM 后端。根据您的硬件,模型可能需要几秒钟的时间才能做出预测。

使用 Label Studio+SAM 对图像进行自动分割、打标

使用智能关键点选择对象蒙版

如果您对分割蒙版感到满意,请单击“自动注释”工具旁边的复选标记。如果不这样做,请选择关键点工具并单击要添加到注释的区域来重复此过程(这是使用热键派上用场的地方,因此在这种情况下,您可以按 3 选择 Dog 关键点注释然后单击您要细化的区域)。

使用 Label Studio+SAM 对图像进行自动分割、打标

使用附加关键点细化选择

如果模型过度选择了某个区域,您可以在删除关键点时按住“option”键来进行负选择。这将创建负关联并删除注释中不需要的部分。当您对选择感到满意时,请选中复选标记,标签界面会将您的关键点选择合并到一个蒙版中。请注意,该模型还给出了选择的置信度分数,在本例中为 97%。

使用 Label Studio+SAM 对图像进行自动分割、打标

最终图像标注

如果您对标签感到满意,请选择“提交”并自动前进到下一个标签任务。

带边界框的标签

在下一个示例中,这次是负鼠,第一选择适当的智能注释工具,在本例中为矩形边界框。

使用 Label Studio+SAM 对图像进行自动分割、打标

选择智能矩形工具

然后从第三行选择要应用的矩形标签,在本例中为“Possum”(带有关联的热键“6”)。在您感兴趣的主题周围拖动一个矩形,SAM 模型将根据该区域进行预测。

使用 Label Studio+SAM 对图像进行自动分割、打标

使用智能矩形工具的对象蒙版

如果您对所选区域感到满意,请选中复选标记并提交注释。

使用 Label Studio+SAM 对图像进行自动分割、打标

提交最终注释

假设您发现(如本例所示,置信度分数为 92%)区域被过度选择,您应该使用关键点工具来为您提供对区域细化的更多控制(通过亲和点和反亲和点)。选择。

下一步是什么?

Label Studio 在机器学习流程中发挥着关键作用,它为人类提供了一个界面来指导机器学习系统标记和注释数据的基本步骤,以加快这一过程。您可以在 Label Studio 文档中了解有关将 Label Studio 集成到机器学习管道中的更多信息。查看GitHub 存储库,获取有关 SAM ML 后端的完整文档。

标签项目完成后,您可以使用项目管理主页的“导出”界面导出标签。掩码和注释导出为 JSON 目录,以在 ML 和数据科学管道中使用。

© 版权声明

相关文章

暂无评论

none
暂无评论...