CVAT 从零部署到导出 COCO 数据集:一条街的标注实操路线
【免费下载链接】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(Computer Vision Annotation Tool)是一个开源的计算机视觉标注平台:你把一批图片或视频丢进去,用矩形框、多边形、掩码、关键点把它们标出来,再导出成 COCO、YOLO 这类模型能直接吃的格式。它适合两类人:想训练自己的检测/分割模型却没有现成数据的开发者,以及需要管理多人标注进度的小团队。
本文走一条具体的路线:手上有一堆街景图片,目标是给每张图里的车、人、公交车画上框,最后导出 COCO 格式的 JSON 交给训练脚本。全文每一步都能照着复现。
先用 10 分钟把 CVAT 跑起来
标注开始前,先解决"在哪标"的问题。CVAT 用 Docker Compose 编排整套服务(后端、前端、Redis、数据库、任务队列),不需要手动装 Python 环境和依赖。
要求机器上有 Docker 和 Docker Compose,内存至少 8GB(推荐 16GB+),磁盘预留 50GB 以上——数据集和标注文件都存在容器挂载的卷里。浏览器建议用 Chrome 或 Edge 这类 Chromium 内核的,Safari 不支持。
三条命令:
git clone https://gitcode.com/GitHub_Trending/cvat/cvat cd cvat docker compose up -d首次启动要拉镜像,几分钟后打开http://localhost:8080,用下面这条命令建一个管理员账号:
docker exec -it cvat_server bash -ic 'python3 ~/manage.py createsuperuser'创建完用户名、邮箱、密码后登录。首屏顶部一排导航:Projects、Tasks、Jobs、Cloud Storages、Models。别急着点,先把第一个任务建出来。
创建任务:上传街景图片并定义 person、bus、car 三个标签
在 Tasks 页面点 New task,给任务起个名字,然后在 "Select files" 区域把图片拖进去——支持直接传文件夹里的多张图,也支持压缩包(zip 里的图片会自动展开),仓库的测试素材里有现成的示例图可以参考 tests/mounted_file_share/images/。上传这一步还会问你把数据存到本地的哪类文件卷,默认选第一项即可。
定义标签是这一步的重点。CVAT 的标签体系叫 "label + attributes":每个 label 对应模型里的一个类别,attributes 是附加属性(比如"是否被遮挡""置信度")。我们的数据集只需要三个 label:person、bus、car,形状类型默认 Rectangle shape。如果之后要做姿态估计,还可以用 "Setup skeleton" 给某个 label 配一套骨骼关键点。
任务创建后,页面下方会出现 Jobs 区块。CVAT 把每个任务自动切成若干 Job(默认按帧数拆分),每个 Job 有独立的 Assignee(负责人)、Stage(annotation/validation)和 State。单人干活时不用管它,后面讲团队时会回来用。
画出第一批框:矩形框工具与快捷键
点进任意一个 Job,就进入了标注界面。左侧工具栏从上到下依次是选择、平移、矩形框、椭圆、多边形、掩码画刷、关键点、折线等工具,顶部是帧播放控制条。
标注一辆车的操作:选矩形工具(快捷键R),在车上拖出一个框,松开后右侧 Objects 列表会多出一行,把它的 label 从默认改成 car。给行人画框同理,label 选 person。几个日常快捷键:
N/P:下一帧 / 上一帧(视频任务里就是逐帧跳)Ctrl+Z/Ctrl+Y:撤销 / 重做Ctrl+S:保存——CVAT 会自动保存,但手动保存一次更安心1~9:选中当前第 N 个对象,配合Delete移除
画错了不要怕,框选中后可以直接拖角点调整,也可以拖动整体平移。标完一帧按N进下一帧。100 张左右的静态图任务,纯手动画框大约每人半小时到一小时,取决于每张图里目标的数量。
让模型先画,人只修正:接入 YOLO 做自动标注
手工画几百张图会很累,CVAT 的设计是让模型先出一版"草稿",人只做审核。仓库的 serverless/ 目录里带了一批现成模型函数(YOLO v7、Faster RCNN、RetinaNet、SAM、人体姿态估计等),通过 Nuclio 的 Serverless 框架部署。
启用方式是在启动时多加一份 compose 文件:
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d再用nuctl把需要的模型函数部署上去(比如 YOLO 检测器)。之后在标注界面左侧找到 AI Tools 面板,选 Detectors,模型下拉里选 YOLO v3,在 "Setup mapping" 里把模型输出的类别映射到 CVAT 的 label(例如模型的person→ CVAT 的person),设好阈值(默认 0.95 附近,目标偏多可以调低),点 Annotate。
几秒后画面里会铺满模型画的框,右侧对象列表同步更新。你只需要逐框检查:框偏了拉一下角点,误检的删掉,漏检的自己补一个。通常修正量只有模型输出量的两三成,这比纯手工快得多。
导出 COCO 格式:把标注变成能喂给训练脚本的文件
标注完成、Job 状态置为完成后,回到任务详情页的 Actions 菜单选 Export annotation,格式下拉里选 COCO [json](CVAT 总共支持 COCO、YOLO、PASCAL VOC、KITTI、MOT 等 20 多种格式,格式定义在 cvat/apps/dataset_manager/formats/)。浏览器会开始下载一个 zip,解压后得到annotations/instance_annotations.json加上对应的图片目录,instance_annotations.json里的 images、annotations、categories 三段就是标准 COCO 结构,可以直接被 MMDetection、Detectron2、Ultralytics 这类训练框架读取。
如果下游要的是 YOLO 的labels/*.txt,换一下导出格式就行;要训练分割模型,则建议在任务里就把形状类型设成 Polygon 或直接用掩码画刷,导出时选 COCO 分割对应的格式。这一步做完,"图片 → 数据集"的闭环就通了。
场景分叉:视频、3D 点云和多人团队
上面的路线是按"静态图片 + 单人"走的。换一种数据形态,工作流会有明显区别。
视频任务:创建任务时上传 mp4 而不是图片,CVAT 会抽帧。视频标注的关键不是逐帧画,而是在关键帧上画框,把同一目标设为 Track,然后让插值(Interpolation)自动补出中间帧,再用跟踪器(如 TransT)把目标跨帧粘起来。N/P键在视频里就是逐帧移动,配合播放键可以边看边修正。
3D 点云:仓库支持 KITTI/LiDAR 点云,创建 3D 任务后界面变成多视角投影:主视图是点云,下方同步 Top、Side、Front 三个正交视角,用 cuboid(三维立方体框)而不是二维矩形来标目标,适合自动驾驶场景。
多人协作:前面提到的 Job 列表在这里派上用场。把同一个任务拆出的多个 Job 分别 Assignee 给不同标注员,Stage 设成 annotation;再复制一份 Job 给审核人、Stage 设 validation,形成"标完 → 审"的两段流水线。组织层面可以建 Organization、邀请成员、分配角色,还能用 Comments 和 Issue Tracker 在具体的框上留讨论。质量要求更高时,可以开 Consensus(同一份数据多人独立标、按策略合并)或用 Ground Truth / Honeypot 校验集检查标注员的一致性。
当它没起来、画不对、导出为空
浏览器打开 localhost:8080 一直转圈。先用docker compose ps看各容器是否都 Up,UI 起来之前后端还在初始化是正常现象,首次冷启动可能要几分钟;确认 8080 端口没被本机其他服务占用,冲突时在 docker-compose.yml 里改端口映射。
模型下拉里看不到 YOLO 等选项。说明 Serverless 组件没启或模型函数没部署。按上一节加-f components/serverless/docker-compose.serverless.yml重启,并用nuctl部署对应函数;只跑docker compose up -d默认是不含模型的。
导出的 COCO JSON 里 annotations 是空的。三个常见原因:Job 还没完成或状态不对;导出前没保存标注(回标注页按一次Ctrl+S);label 映射时把模型类别映射到了空值。逐个排除一遍基本都能定位。
标注保存后刷新页面框不见了。先确认右侧对象列表是否还有数据,再看是不是被 Filter 过滤掉了(顶部 Info/Filter 里可以按 label、shape 类型筛选显示)。
下一步
到这里,你已经走完了"部署 CVAT → 建任务 → 人工加自动标注 → 导出 COCO"的完整链路,手里有了一个能直接训练的数据集。建议的下一步:把pip install cvat-sdk装上,用 Python 脚本批量建任务、拉取导出的数据集(参考 cvat-sdk/examples/ 里的现成脚本),把整条标注流水线接进你的训练流程。
【免费下载链接】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),仅供参考