跳转至

ML Backend

ML Backend 是半自动标注背后的服务:当标注员请求预标注时,它对未标注任务预测框、掩码或 标签,并把结果作为可编辑的预测写入工作台。人们随后审核、修正,而不必从零画每个标签——这是 工厂飞轮中"机器先做、人工复核"的环节。

它实现标准的 Label Studio ML Backend 协议,可直接接入内嵌的 Label Studio;同一套推理也 服务于 CVAT 预标注与模型试跑。

它是什么、不是什么

  • 它是与模型无关的路由层,不是某个固定模型。每次请求加载项目所选模型版本,并按族系路由:
/predict
   ├── CNN(检测 / 分割 / 分类)──► ONNX Runtime / Triton
   └── LLM / VLM(视觉语言或文本)──► 兼容 vLLM 的 OpenAI 端点
  • 镜像不内置任何权重。所有模型都在平台的 S3 兼容存储中,按需加载进有界的内存缓存,因此 一个共享服务即可服务你上传的每个模型版本;空闲内存很小,未用模型会被自动淘汰。
  • 它是标注工作台的后端,不是生产服务路径——已批准模型的现场推理走模型页的 KServe 部署。

端点

端点 用途
GET /health 健康探测(控制台可达性检查要求状态为 UP)
GET /setup 模型信息、支持的标签与版本
POST /predict 用于预填标注的批量预测
POST /train 可选的交互式训练触发
POST /try/predict 用图片试跑使用的单图预测(框 / top-5 / 耗时)
SAM 分割路由 在 CVAT 视频编辑器中用已上传的 sam 模型做点击分割

注册后端

  1. 在 ML Backend 页用名称和 URL 注册服务。
  2. 使用平台安装时提供的集群内共享服务地址。不要自造主机名或使用外部/宿主地址:工作台 Pod 运行在集群内,无法解析宿主域名,且共享服务出于设计默认没有外部 Ingress。
  3. 控制台执行真实的 GET /health 探测;可达即显示健康。

常规流程不需要每模型一个后端:保留共享服务,在每个标注项目头部选择具体模型版本即可。只有 在需要高级隔离时,才需要独立专用后端——可从已注册模型通过自定义后端部署(按模型创建独立 Kubernetes Deployment + Service)。

为项目选择预标注模型

在标注项目头部(Label Studio 与 CVAT 均可)选择预标注的模型与版本。该选择保存在项目上,并 应用于批量与单图预标注:

  • 仅列出带权重的检测/分割模型(SAM 在视频编辑器中单独出现)。
  • 未选模型时,半自动按钮禁用并显示说明提示——不存在静默的内置兜底。
  • 你刚训练好的模型可立即选择,因此每轮迭代都能更好地预标下一批。

请求会分批以满足服务超时;预测按输入顺序返回并自动映射回图片。

模型支持

  • 检测:RT-DETR 等单阶段检测器(PyTorch 或 ONNX);无法直接加载的旧版检测权重经其 ONNX 产物提供服务。
  • 分割:SAM 系列模型用于点击分割(上传任务类型为 sam 的版本;权重需保留官方 SAM 兼容 文件名)。
  • 分类:PyTorch/ONNX 分类器,输出 top-5。
  • VLM/LLM:经 vLLM 路线使用 Qwen-VL / Florence-2 类模型做标签/框建议与文本标注。
  • 检测器自身可能带默认置信度阈值;项目配置的阈值会透传进去,因此请在项目侧调节,而不要以为 后置过滤会生效。

常见问题

后端显示不可达 / 不健康?

核对注册 URL 是否为安装指南给出的集群内共享服务地址。浏览器/宿主 URL 在工作台 Pod 内会 DNS 失败;旧安装遗留的旧命名空间地址在迁移后也已失效。GET /health 必须返回 UP。

预标注为空或标签对不上?

所选模型类别必须与项目标签 schema 一致,且该版本必须有权重。弱模型或低于阈值的低置信预测 会被有意不插入——降低阈值或选择更强/新训练的模型。

新选的模型似乎没生效?

服务按需加载权重并按产物缓存。把权重重传到同一存储键后,需重启/滚动后端以丢弃缓存副本; 更推荐上传新版本/新键。

大图缓存在哪里?

下载的图片使用带 LRU 上限的专用暂存目录(与权重目录分离);权重与媒体互不污染,服务会记录 淘汰事件与每次 predict 调用。

下一步

  • 在工作台中使用:标注。
  • 训练模型后把它回流为预标注器:训练。
  • 对版本做一次性检查:模型 → 用图片试跑。