CVAT Serverless算法接入:自定义模型部署与推理调用指南
2026/9/10 10:32:59 网站建设 项目流程

CVAT Serverless算法接入:自定义模型部署与推理调用指南

【免费下载链接】cvatComputer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise products, as well as labeling services, for image, video, and 3D annotation with AI-assisted labeling, quality assurance, team collaboration, analytics, and developer APIs.项目地址: https://gitcode.com/GitHub_Trending/cvat/cvat

想把自己的检测模型接入CVAT标注平台,让标注人员直接在界面上跑自动标注,CVAT的Serverless模块就是干这件事的:它把模型封装成Nuclio函数(一种轻量级serverless计算框架),用Docker独立部署,前端通过统一接口调用。部署完成后,模型会出现在"Automatic Annotation"面板里,框选区域一键出推理结果。前置条件:仓库已克隆到本地,装好Docker与nuctl命令行工具。

核心概念速览

Nuclio函数运行时

Serverless底层依赖Nuclio:每个模型是一个独立函数,跑在各自容器里、装各自的依赖。正因如此,serverless/目录下的PyTorch、ONNX、OpenVINO、TensorFlow模型才能共存互不干扰。

function.yaml模型声明文件

每个函数目录下有一份function.yaml,声明模型名、角色(detector/interactor/tracker,即检测器/交互器/跟踪器)和支持的标签列表。CVAT靠它渲染UI模型列表并做标签映射,是前端与模型之间的"合同"。

LambdaManager前端管理器

前端所有模型操作收敛在LambdaManager类里:list查列表、run提交推理、call取结果、listen轮询进度。它是前端与模型服务的边界,写自定义集成时读这一个文件就够。

部署成功后,模型列表与自动标注入口就出现在这样的面板里。

拉起Serverless容器

叠加serverless编排文件

在仓库根目录执行下面命令,除了启动nuclio运行时容器,还给后端加了CVAT_SERVERLESS=1环境变量来开放模型API:

# 从仓库根目录执行 docker compose -f docker-compose.yml \ -f components/serverless/docker-compose.serverless.yml up -d

components/serverless/docker-compose.serverless.yml中的关键项:

参数作用默认值
nuclio imageNuclio控制台版本quay.io/nuclio/dashboard:1.16.3-amd64
CVAT_SERVERLESS开关,开启后端模型API1
NUCLIO_DASHBOARD_DEFAULT_FUNCTION_MOUNT_MODE模型代码装载方式volume

声明并部署模型函数

编写function.yaml声明标签

以YOLOv7 ONNX为例。文件核心是metadata.annotations块:CVAT据此识别名字、角色与标签规格;spec块声明运行时与入口:

metadata: name: onnx-wongkinyiu-yolov7 # 唯一名称 namespace: cvat annotations: name: YOLO v7 # 显示名 type: detector # detector / interactor / tracker spec: | [ { "id": 0, "name": "person", "type": "rectangle" } ] # 其余标签见完整示例 spec: runtime: 'python:3.10' handler: main:handler # 入口函数 build: image: cvat.onnx.wongkinyiu.yolov7

build块用directives安装依赖并下载模型文件,完整写法见 serverless/onnx/WongKinYiu/yolov7/nuclio/。

选择部署脚本执行nuctl

部署脚本会遍历function.yaml(CPU版)或function-gpu.yaml(GPU版),逐个nuctl deploy,并自动注入CVAT_FUNCTIONS_REDIS_HOST/PORT环境变量连上CVAT的Redis任务队列,不用手写命令:

  • CPU环境:bash [serverless/deploy_cpu.sh](https://link.gitcode.com/i/192bd332576a5628250146e8e30b2012) serverless/onnx
  • GPU环境:bash [serverless/deploy_gpu.sh](https://link.gitcode.com/i/6b0d49e842bc463f2d86c6e934d5a0ed) serverless/onnx

第一个参数是函数目录,省略则部署脚本能扫到的全部函数。跑完执行nuctl get function --platform local,顺手确认所有函数都是READY状态,部署就搞定了。

触发一次完整推理

编写推理处理入口

每个函数在main.py里实现两个函数:init_context在加载时执行一次,负责装载模型;handler处理每张图像。以YOLOv7为例,核心逻辑是:

def init_context(context): # 读function.yaml中的标签、加载模型并缓存 ... def handler(context, event): data = event.body image = Image.open(io.BytesIO(base64.b64decode(data["image"]))) results = context.user_data.model.infer(image, float(data.get("threshold", 0.5))) return context.Response(body=json.dumps(results), content_type="application/json", status_code=200)

对齐推理结果字段

返回JSON是数组,每个元素对应一个检测目标,前端直接用它生成标注:

字段作用易错点
type形状类型rectangle / polygon / mask等
points坐标数组矩形为[x1,y1,x2,y2],图像像素坐标,左上角原点
label类别名必须与spec中的标签名一致
confidence置信度字符串格式

走查前端调用链路

轮询间隔、结果后处理的完整实现见 cvat-core/src/lambda-manager.ts。

排障与调优

UI里看不到模型现象:部署后模型列表为空。根因:函数未READY,或metadata的namespace没写cvat。解法:nuctl get function --platform local核对状态,并检查function.yaml的namespace字段。

标签不映射、框位置错乱现象:推理出的label显示unknown或框整体偏移。根因:返回的label与spec中标签名不一致,或points不是像素坐标。解法:逐字段比对spec,确认坐标为图像像素(左上角原点)。

推理超时现象:请求长时间无响应后报504。根因:CPU部署推理慢,或function.yaml的eventTimeout过短。解法:改用GPU部署脚本,并调大eventTimeout。

调优建议:

  • 高分辨率视频的检测模型尽量走GPU环境部署
  • 大图上传场景调大触发器的maxRequestBodySize(示例默认32MB)
  • OpenVINO模型用 serverless/openvino/base/ 构建基础镜像,多函数复用

延伸与参考

  • Serverless组件说明:components/serverless/README.md
  • YOLOv7完整示例(含GPU配置):serverless/onnx/WongKinYiu/yolov7/nuclio/
  • 预置模型清单:README.md
  • 前端模型管理源码:cvat-core/src/lambda-manager.ts

下一步建议:模型接入后,可以试试interactor类模型(如SAM)实现交互式分割,或用SDK的auto_annotation模块以脚本方式批量驱动推理。

【免费下载链接】cvatComputer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise products, as well as labeling services, for image, video, and 3D annotation with AI-assisted labeling, quality assurance, team collaboration, analytics, and developer APIs.项目地址: https://gitcode.com/GitHub_Trending/cvat/cvat

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询