Label Studio 集成 Grounding DINO 与 SAM:基于文本提示的零样本目标检测与图像分割 📅 发布时间:2026/9/11 21:12:21 👁 浏览次数: Label Studio 集成 Grounding DINO 与 SAM基于文本提示的零样本目标检测与图像分割【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio本文介绍如何将 Grounding DINO 与 Segment Anything ModelSAM组合的 ML 后端接入 Label Studio实现输入一句文本提示text prompt即可零样本检测图像中的任意目标并获得分割掩码的标注工作流。读完本文你将掌握从 Docker 启动 ML 后端、配置标注界面、连接模型、启用 Auto-annotation 交互式预标注到调优阈值与使用批量提示的完整实战方案。集成能做什么Grounding DINO 是一个开源的开放集目标检测模型SAMSegment Anything Model是 Meta 提出的通用分割模型。把两者组合成 Label Studio 的 ML 后端后可以在标注界面中获得三项核心能力文本提示驱动的零样本检测直接在标注界面输入描述性文本如cats、house模型无需任何微调即可定位图像中对应的目标并给出边界框开箱即用的 SOTA 效果针对检测任意类别目标的场景预训练模型即可获得当前领先的检测结果无需为每个新类别收集训练数据仅凭文本提示获得分割掩码在 Grounding DINO 检测结果的基础上由 SAM 生成像素级分割掩码检测结果与分割结果同时呈现给标注员。这一组合尤其适合数据探索阶段的快速预标注、长尾类别冷启动以及先粗筛后精修的标注流水线。前置准备开始之前需要先完成两件事安装 Label Studio ML 后端本教程使用的grounding_sam示例位于label-studio-ml-backend仓库的label_studio_ml/examples/grounding_sam目录下需要先按 ML 后端仓库的快速入门指引完成安装。ML 后端的本质是一个基于 uWSGI 与 supervisord 的独立 Web 服务Label Studio 通过 HTTP 请求与之通信参见 ML 集成总览准备 Docker 环境ML 后端示例通过 Docker Compose 运行需要确保本机已安装 Docker。关于 ML 后端与 Label Studio 的协作流程ML 集成总览 中给出了明确链路用户打开任务 → Label Studio 向后端发送请求 → 后端返回预测 → 预测加载到标注界面展示给标注员。本教程即建立在这一机制之上。快速启动接入 Grounding DINO SAM第 1 步配置docker-compose.yml在grounding_sam示例目录中编辑docker-compose.yml添加以下两个环境变量LABEL_STUDIO_HOSTLabel Studio 实例的访问端点必须以http://开头LABEL_STUDIO_ACCESS_TOKENLabel Studio 的 API 访问令牌可在登录 Label Studio 后进入Account Settings页面获取即 用户账户与访问令牌 中所述的 Access token。示例取值LABEL_STUDIO_HOSThttp://123.456.7.8:8080 LABEL_STUDIO_ACCESS_TOKENyour-api-key第 2 步启动后端在示例目录下执行docker compose up启动完成后用docker ps查看后端的 IP 与端口。连接 Label Studio 项目时使用该 URL通常为http://localhost:9090。注意如果 Label Studio 本身也运行在 Docker 容器中localhost指向的是容器自身而非宿主机此时应改用http://host.docker.internal:9090或宿主机内网 IP详见 ML 集成总览 中的说明。第 3 步创建项目并编辑标注配置创建项目后将标注配置Labeling Config设置为下方示例。配置中包含一个提示词输入框、一组RectangleLabels矩形框标签和一组BrushLabels笔刷分割标签。需要特别注意所有矩形标注必须放在RectangleLabels标签下所有对应的笔刷标注必须放在BrushLabels标签下且两组的标签值要保持一致这样检测框与分割掩码才能映射到同一批类别。View Image nameimage value$image/ Style .lsf-main-content.lsf-requesting .prompt::before { content: loading...; color: #808080; } /Style View classNameprompt TextArea nameprompt toNameimage editabletrue rows2 maxSubmissions1 showSubmitButtontrue/ /View RectangleLabels namelabel toNameimage Label valuecats backgroundyellow/ Label valuehouse backgroundblue/ /RectangleLabels BrushLabels namelabel2 toNameimage Label valuecats backgroundyellow/ Label valuehouse backgroundblue/ /BrushLabels /View配置要点说明TextArea是提示词输入控件rows2控制输入框高度maxSubmissions1限制单任务最多提交一次提示showSubmitButtontrue显示提交按钮toNameimage将提示关联到图像RectangleLabels用于生成边界框是 RectangleLabels 标签 的标准用法每个Label的value即检测类别名BrushLabels用于生成笔刷分割掩码对应 BrushLabels 标签 的图像分割语义内嵌Style的作用是在模型推理期间于提示框旁显示loading...状态提示标注员等待后端返回。第 4 步连接模型到项目进入项目设置中的Model页面点击Connect Model填入后端 URL即第 2 步获得的地址如http://localhost:9090。根据 ML 集成总览 的说明连接时还可以配置名称、认证方式、附加参数并建议开启Interactive preannotations选项以支持交互式预标注——这正是本教程 Auto-annotation 工作流所依赖的能力。第 5 步在标注界面中使用提示词打开项目中的一个图像任务在标注界面底部启用Auto-annotation自动标注在提示词输入框中输入目标描述如cats点击Add等待后端返回预测即可看到 Grounding DINO 绘制的边界框以及 SAM 生成的分割掩码。启用 Auto-annotation 后标注界面会显示智能工具Smart tools其行为会随上下文动态变化标注员绘制的矩形或笔刷区域会作为上下文发送给 ML 后端后端基于提示词与交互返回预测实现模型先画、人工精修的交互式标注参见 ML 集成总览 中 Smart tools 一节。使用 GPU 加速为保证最佳体验官方建议使用 GPU 运行推理。在docker-compose.yml中追加以下配置即可将 NVIDIA GPU 暴露给容器environment: - NVIDIA_VISIBLE_DEVICESall deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]该配置通过 NVIDIA 容器运行时将全部 GPU 设备注入容器NVIDIA_VISIBLE_DEVICESall并声明至少保留 1 张 GPUcapabilities: [gpu]。请确保宿主机已安装 NVIDIA 驱动与 NVIDIA Container Toolkit否则该配置不会生效。启用 GroundingSAM文本驱动的自动掩码生成将 Grounding DINO 与 SAM 组合即 GroundingSAM可以让模型在文本提示的驱动下自动生成分割掩码预测。启用方式非常简单在启动前设置环境变量USE_SAMtrue即可。CPU 环境下的注意事项警告无 GPU 时运行 GroundingSAM 可能非常缓慢官方不推荐这样做。如果必须在纯 CPU 机器上运行且遇到推理缓慢或在标注界面看不到预测结果可以依次尝试以下措施增大 Docker 容器的内存配额例如在docker-compose.yml中设置memory: 16G提高 Label Studio 实例的预测超时时间设置环境变量ML_TIMEOUT_PREDICT100改用轻量级替代模型MobileSAM。使用 MobileSAM 轻量化替代如果希望使用更高效的 SAM 版本MobileSAM专为移动端与低算力场景优化的轻量分割模型设置USE_MOBILE_SAMtrue即可。关于超时配置的原理Label Studio 对 ML 后端的不同请求类型都有默认超时其中预测请求的超时由环境变量ML_TIMEOUT_PREDICT控制默认值 100 秒单位为秒。在 CPU 推理场景下单张图像的推理耗时可能接近甚至超过该阈值从而出现看不到预测结果的现象——这正是文档建议调大该值的根本原因。相关的超时变量如ML_TIMEOUT_HEALTH、ML_TIMEOUT_SETUP、ML_TIMEOUT_TRAIN等在 故障排查ML 后端 中有完整列表均可通过环境变量按需调整。批量输入Data Manager 中的批量文本提示注意批量输入目前属于实验性功能仅支持feature/dino-support分支。批量输入允许在 Data Manager 中一次性对多个选中任务下发同一提示词步骤如下克隆包含实验性批量功能的 Label Studio 特性分支git clone -b feature/dino-support https://github.com/HumanSignal/label-studio.git使用docker compose up运行该分支重复快速启动中的第 25 步注意使用新克隆分支的访问令牌与主机 IP该分支同样支持 GroundingSAM进入项目 Data Manager勾选需要标注的任务选择Actions Add Text Prompt for GroundingDINO输入要获取预测的提示词并点击Submit。提示词与标签值的映射技巧如果提示词与标注配置中的标签值不一致可以使用下划线语法将输出映射到指定标签值。例如标注配置中只有cats这个标签但你想选中所有棕色猫并仍然归类为cats则提示词写为brown cat_cats——下划线后的部分cats作为预测结果的标签值下划线前的brown cat作为实际的检测目标描述。其他环境变量与阈值调优BOX_THRESHOLD与TEXT_THRESHOLDGrounding DINO 的推理质量由两个关键阈值控制BOX_THRESHOLD边界框置信度阈值用于过滤低置信度的检测框TEXT_THRESHOLD文本-区域匹配置信度阈值用于过滤文本与图像区域匹配度不足的候选。两者取值均在 0 到 1 之间可通过修改示例目录 Dockerfile 中的对应值进行实验调整。其默认值定义在label-studio-ml-backend仓库的dino.py中。经验上阈值越低召回越高可能出现更多误检阈值越高精度越高可能漏检建议根据数据集的难度与噪声水平反复实验。SAM 模型检查点如果希望加载自己目录下保存的 SAM 模型权重可以使用 Dockerfile 中展示的SAM_CHECKPOINT与MOBILESAM_CHECKPOINT环境变量分别指定标准 SAM 与 MobileSAM 的权重文件路径从而在不改动代码的情况下替换分割模型。底层原理理解预测链路与交互式预标注一次预测请求的完整链路结合 ML 集成总览 与 编写自己的 ML 后端 两篇文档可以梳理出该工作流的底层机制标注员在界面提交提示词Label Studio 调用 ML 后端的predict(tasks, context)方法后端的 Grounding DINO 以提示词为文本条件执行开放集检测得到边界框集合若启用 SAM后端进一步对每个检测框区域运行 SAM得到分割掩码后端按 Label Studio 预测格式返回结果矩形结果使用type: rectanglelabels、from_name指向标注配置中的label掩码结果使用type: brushlabels、from_name指向label2并携带score置信度字段预测格式细节参见 预标注格式预测加载回标注界面作为可接受、可拒绝、可编辑的预标注展示。这也解释了为何标注配置中RectangleLabels的name必须为label、BrushLabels的name必须为label2——ML 后端返回结果的from_name字段必须与标注配置中的name严格一致否则预测无法正确绑定到对应区域类型。交互式预标注与 Smart tools本工作流属于典型的交互式预标注Interactive pre-annotationsAuto-annotation 启用后标注员在图像上绘制的矩形、笔刷等区域会通过context参数传给后端后端结合提示词返回建议标注。Smart tools 目前支持 Rectangle、Ellipse、Polygon、KeyPoint、Brush 等标签类型并可通过smarttrue或smartOnlytrue在标注配置中显式开启详见 ML 集成总览。故障排查速查根据 故障排查ML 后端 与本文前述内容常见问题可按以下顺序排查现象排查方向后端在 Model 页面显示Disconnected执行curl -X GET http://localhost:9090/health检查健康状态确认requirements.txt依赖完整推理慢、无预测返回确认是否使用 GPU检查容器内存配额调大ML_TIMEOUT_PREDICT预测结果错乱或缺失核对标注配置所有矩形标签置于RectangleLabels、笔刷标签置于BrushLabels且name与后端返回的from_name一致检测结果过多误检/漏检调整BOX_THRESHOLD与TEXT_THRESHOLD01 之间延伸阅读若只需检测框、不需要 SAM 分割可参考同目录下的 Grounding DINO 单独集成教程其标注配置只需RectangleLabels而无需BrushLabels若想直接使用 SAM 的人工点击交互分割非文本驱动参见 Segment Anything Model 集成教程想基于本示例改造自己的模型阅读 编写自己的 ML 后端 了解predict()方法、项目结构与预测格式约束ML 后端的连接字段说明、Smart tools 与批量获取预测的 API 方式见 ML 集成总览。【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考