NEW暗黑模式现已上线 🌓 Label Studio 1.18.0 版本发布

开始使用Label Studio的Segment Anything功能

宣布Segment Anything Label Studio后端更新!

今年早些时候,Label Studio社区推出了一个新的机器学习后端,将Meta的Segment Anything Model(SAM)的强大功能引入Label Studio。这个由社区贡献的功能使得将Segment Anything作为服务运行成为可能,为标注人员提供了一个快速创建图像标签掩码的工具,从而节省他们的时间以专注于更具挑战性的标注任务。

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

这些改进包括:

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

如果您迫不及待想要开始使用,请前往Label Studio机器学习后端仓库进行尝试。若想了解更多关于SAM及其与Label Studio协作的信息,请继续阅读!

什么是Segment Anything模型?

Segment Anything是由Meta AI研究团队开发的一个模型,"只需点击一次,就能从任何图像中'切出'任何物体"。SAM最引人注目的特性之一是它"是一个可提示的分割系统,能够零样本泛化到陌生物体和图像,无需额外训练"。

从更高层次来看,这意味着SAM对物体具有更广义的认知概念,使其能够识别并分割图像中的物体,即使这些物体在训练过程中从未出现过。这种零样本泛化能力,结合强大的关键点和边界框提示功能,使SAM成为预标注新图像分割数据集的理想工具。

您可以在官方SAM网站上了解更多关于该模型的信息。

Segment Anything ML后端提供什么功能?

Label Studio的Segment Anything后端在SAM的预测能力与Label Studio的标注界面之间架起了一座桥梁。该后端附带的示例源代码将多种SAM实现封装到Label Studio ML后端接口中。代码库还包含一个示例Dockerfile,用于构建易于部署的后端实例,以及一个Docker Compose文件来帮助您运行后端服务。

模型可用的架构包括:

  • 原始SAM模型,适用于需要最高精度且配备GPU硬件支持的环境。
  • Mobile SAM,一种轻量级模型,适合资源受限的系统,但会牺牲一定的准确性。
  • ONNX SAM,这是SAM的一个更快实现版本,缺点是某些参数(如图像尺寸)需要在编译时编码到模型中。

SAM机器学习后端同时支持关键点和边界框提示。SAM能够融合正负关键点,以交互方式提升分割精度。

安装SAM机器学习后端

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

先决条件

对于此示例,我们建议使用Docker来托管SAM ML后端和Label Studio。Docker使您无需其他系统要求即可安装软件,并有助于使安装和维护过程更易于管理。对于桌面或笔记本电脑使用,获取Docker的最快方式是通过安装适用于Mac和Windows操作系统的官方Docker Desktop客户端,或使用Linux系统的官方包管理器安装Docker。

Segment Anything模型是一个庞大而复杂的基础模型,在GPU上运行效果最佳。由于许多人会在笔记本电脑或台式机等普通硬件上测试该软件,默认情况下,该模型启用了Mobile SAM。后端会自动检测您是否拥有可用GPU,并为您的系统选择最合适的硬件。

请查阅官方Docker文档Docker Compose文档以了解如何为您的客户容器启用GPU透传功能。

系统至少需要16 GB可用内存,其中至少8 GB需分配给Docker运行时环境。

您的系统上还必须安装Git才能下载Label Studio ML Backend仓库。

克隆代码仓库

安装完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模型权重嵌入到Docker镜像中,文件大小为2.4G。最佳实践是将模型权重与模型运行时分开存储,以便在生产环境中进行更新和检查点操作。

验证模型已构建完成并准备就绪。

docker image list

Docker 应输出一个可用的镜像列表,其中包含类似以下的条目:

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

使用SAM机器学习后端

镜像构建完成后,是时候使用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的"注册"界面

首次登录时,您会看到Heidi the Opossum欢迎界面,提示您创建一个新项目。请选择"创建项目"

"海蒂在这里看不到任何项目"

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

标注设置界面

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

<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安装的额外信息。首先需要获取访问Label Studio的API令牌。该令牌用于从Label Studio实例下载图像到SAM ML后端。您可以通过点击界面右上角的用户设置图标,然后选择"账户与设置"来找到该令牌。

账户与设置

从本屏幕复制访问令牌并做好记录。配置 SAM ML 后端时将需要用到它。

复制访问令牌

您还需要获取主机电脑的本地IP地址。可以通过多种方式查找。在Mac和Windows系统上,最简单的方法是在系统设置中查看IP地址。您也可以使用命令行中的网络命令如ip aifconfig来查找本地IP地址。了解实际地址非常重要,因为Label Studio和Label Studio ML后端将localhost视为容器本地地址,而非容器主机的地址。因此,使用localhost名称会导致意外和错误的行为。

使用ifconfig命令发现IP地址的示例输出

启动SAM机器学习后端

项目设置完成后,且已获取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/0
 ✔ Container 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实例,选择菜单中的"Projects"(项目),然后点击"Segment Anything"(或您为项目设置的任何名称)。接着选择"Settings"(设置)并进入"Machine Learning"(机器学习)选项。

机器学习设置界面

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

连接Segment Anything机器学习后端

选择“保存”,然后在导航器中选择项目名称(在“项目”之后,本例中为“项目 / Segment Anything”)以返回任务界面。

导入图片

选择“前往导入”并导入您的第一个项目图像。选择“上传文件”并选择您想使用的任何图片。在本示例中,我们将使用一张狗的图片和一张负鼠的图片,但您可以使用任何您想要的图像。

数据导入界面

图片导入完成后,就可以开始标注了!选择“标注所有任务”开始吧!

Label Studio 任务界面

使用关键点标注

选择“标注所有任务”后,您将进入任务标注界面。界面左上角会显示您的图像标注任务。其下方将呈现三行标注工具:首行用于笔刷标注,第二行用于关键点标注,第三行用于边界框标注。图像右侧可见工具栏,底部则设有导航按钮组。请通过导航按钮确保"自动标注"功能处于开启状态,同时取消图像顶部"自动接受标注建议"的勾选。

标注界面概览

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

选择智能关键点工具

现在在第二行选择您想要的标签(专业提示:使用与该标签关联的快捷键来选择您想要的标签,在本例中为`3`)。当标签高亮显示时,在图像任意位置点击放置关键点,系统将自动触发SAM后端。根据您的硬件配置,模型可能需要几秒钟时间进行预测。

使用智能关键点选择对象遮罩

如果您对分割遮罩效果满意,请点击"自动标注"工具旁的勾选标记。若效果不理想,可重复以下流程:选择关键点工具并点击需要添加到标注的区域(此时使用快捷键会非常便捷,例如在本案例中,您可以按下数字3键选择"Dog"关键点标注,然后点击需要细化的区域)。

通过添加关键点优化选择

如果模型过度选择了某个区域,您可以通过按住“option”键并放置关键点来进行负向选择。这将创建一个负亲和力并移除标注中不需要的部分。当您对选择结果满意时,勾选确认标记,标注界面会将您的关键点选择合并为一个遮罩。请注意,模型还会为选择提供置信度评分,本例中为97%。

最终的图像标注

如果您对标注结果满意,请选择“提交”并自动进入下一个标注任务。

使用边界框进行标注

在下一个示例中,这次使用负鼠图像,首先选择适当的智能标注工具,本例中使用的是矩形边界框工具。

选择智能矩形工具

然后从第三行选择您想要应用的矩形标签,在本例中是"Possum"(对应的快捷键为"6")。在您感兴趣的主体周围拖动绘制一个矩形,SAM模型将基于该区域进行预测。

使用智能矩形工具进行对象遮罩

如果对所选区域满意,请勾选确认标记并提交标注。

提交最终标注

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

接下来是什么?

Label Studio在机器学习流程中扮演着关键角色,它提供了人机协作的标注界面,让人类能够指导数据标注这一关键步骤,同时结合机器学习系统来加速整个过程。您可以在Label Studio文档中了解如何将其集成到机器学习流程。查看GitHub仓库获取关于SAM ML后端完整文档。

标注项目完成后,您可以通过项目管理首页的"导出"界面导出标签。掩码和标注将以JSON目录形式导出,供您在机器学习和数据科学流程中使用。

Shivansh Sharma,一位活跃的Label Studio社区成员,开发了最初的SAM ML后端。如果您有想要分享的项目或希望与他人合作启动标注项目,加入Label Studio Slack社区,已有超过10,000名Label Studio用户注册分享见解并与同行交流。

标注愉快!