ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CVAT Skeleton 标注完全指南:从骨架配置器到姿态估计数据集

CVAT Skeleton 标注完全指南:从骨架配置器到姿态估计数据集 CVAT Skeleton 标注完全指南从骨架配置器到姿态估计数据集【免费下载链接】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/cvatSkeleton骨架是 CVAT 中用于标注具有固定结构复杂对象的核心标注类型典型场景包括人体姿态估计human pose estimation与人脸关键点facial landmarks。本文以官方手册 skeletons.md 为主体结合前端配置器与后端数据模型源码系统讲解骨架的创建、配置、手动/自动标注、画布与侧边栏编辑以及 CVAT 与 COCO Keypoints 两种导出格式帮助你从零搭建并完成一个可投入模型训练的姿态估计标注流程。Skeleton 是什么Skeleton是用于标注结构一致复杂对象的标注模板。一个 Skeleton 由若干**点points也称 elements 元素构成点之间可以被边edges**连接。骨架中的每个点都是一个独立对象拥有自己的标签名、颜色、遮挡occlusion、可见性visibility等属性。正因如此Skeleton 特别适合以下任务人体姿态估计人体关节点人脸关键点眼睛、鼻子、嘴角等任何结构固定、元素可枚举的对象Skeleton 可以导出为两种格式CVAT for image即 CVAT 原生格式中的 image 变体COCO Keypoints注意在一个没有标签label-less的项目中无法通过导入数据集的方式导入 Skeleton 的标签必须在导入前手动定义标签。数据模型视角Skeleton 的底层实现理解底层模型有助于把握为什么 Skeleton 点只能存在于父骨架内这一约束。在 cvat/apps/engine/models.py 中Label模型通过parent外键related_namesublabels自关联has_parent_label()用于判断一个标签是否为某个父标签的子标签Skeleton模型通过root OneToOneField(Label)指向骨架的根标签并用svg TextField保存骨架的 SVG 结构描述。也就是说骨架的每个点本质上是挂在根标签下的一个子标签sublabel整个骨架的拓扑结构点坐标与边连接以 SVG 文本形式持久化。前端配置器 cvat-ui/src/components/labels-editor/skeleton-configurator.tsx 在提交时生成SkeletonConfiguration对象{ type: skeleton, svg, sublabels }其中svg是点circle与边line的 SVG 片段sublabels是每个点对应的子标签定义has_parent: true。在数据集导入导出侧cvat/apps/dataset_manager/formats/cvat.py 将skeleton列为受支持形状之一序列化时通过open_skeleton/close_skeleton包裹整组元素且只有当父形状类型为skeleton时才将子元素解析为其组成点——这从实现上印证了一个 Skeleton 点只能存在于其父 Skeleton 之内的规则。手动创建 Skeleton 任务要使用骨架标注首先需要在创建任务时配置一个Skeleton标签。在 创建标注任务 的窗口中点击Setup skeleton按钮手动搭建骨架或点击From model按钮从模型导入骨架标签见下文从模型添加 Skeleton 标签。Skeleton 配置器ConfiguratorConfigurator是用于搭建骨架的专用工具界面由 8 个编号元素组成其功能如下表编号名称说明1上传背景图Upload background image可选上传一张背景图片便于在其上绘制骨架。2添加点Add point在**绘图区8**中添加 Skeleton 点。3点击拖动Click and drag在**绘图区8**中移动点的位置。4添加边Add edge在**绘图区8**中添加边连接已添加的点2。5删除点Remove point删除点先点击该工具再点击绘图区8中的任意点2即可删除。6下载骨架Download skeleton以.SVG格式下载已绘制的骨架。7上传骨架Upload skeleton以.SVG格式上传骨架。8绘图区Drawing area用于绘制骨架的画布。这些工具在前端源码中有完全对应的实现SkeletonConfigurator组件的activeTool状态取值正是point | join | delete | drag见 skeleton-configurator.tsx分别对应添加点、连接边、删除、拖动四种模式。此外还注册了CANCEL_SKELETON_EDGE快捷键Esc用于中断一条尚未绘制完成的边——在配置器中按Esc即可取消当前正在连接的边。补充说明几点实现细节帮助你更高效地使用配置器背景图仅接受 JPEG/PNG 格式源码中accept.jpg,.jpeg,.png且校验 MIME 类型为image/jpeg/image/png骨架 SVG 上传时会解析其desc />打开的设置菜单与创建任务时添加常规标签和属性的界面类似要点一个Skeleton 点只能存在于其父 Skeleton 之内不能脱离骨架独立存在属性可以单独添加给每一个点即每个点子标签拥有独立的属性集而不仅是骨架整体每个点本质上是一个类型为points、has_parent: true的子标签因此它可以拥有独立的颜色与属性定义。注意无法修改已有任务/项目的骨架配置。如果需要复用可以从标签配置器的Raw标签页复制/粘贴骨架配置复制其 JSON 定义即可应用到新任务。手动添加 Skeleton 标签的完整步骤打开Configurator可选上传背景图片在 Label name标签名字段中输入标签名称可选添加属性。注意属性可以只添加到单个点详见配置 Skeleton 点使用Add point在绘图区中添加点使用Add edge在点之间添加边上传数据文件点击Submit Open提交配置并直接创建、打开任务Submit Continue提交当前配置继续创建下一个任务。另外在任务创建页的标签形状设置中skeleton标签的Label shape标签形状字段是禁用的——骨架的形状由配置器内的 SVG 拓扑决定无法在任务创建后更改。从模型添加 Skeleton 标签除了手动搭建CVAT 还支持从预训练模型直接挑选骨架标签打开Basic configurator基础配置器在Constructor标签页点击From model在Select a model to pick labels下拉框中选择Human pose estimation人体姿态估计模型或列表中的其他可用模型点击要使用的模型标签。被选中的标签会变为灰色。可选如需调整标签在标签内点击Update attributes更新属性图标会打开 Skeleton 配置器你可以在其中配置骨架点。注意任务/项目创建后无法再调整标签。点击Done所选标签会出现在标签窗口中上传数据点击Submit Open创建并打开任务Submit Continue提交配置并继续创建下一个任务。使用 Skeleton 进行标注打开 job任务作业在工具面板Controls sidebar选择Draw new skeleton绘制新骨架选择Track轨迹模式带跟踪或Shape形状模式不带跟踪。关于两种模式的完整差异可参考 Shape mode 基础 与 Track mode 基础在图像上绘制骨架依次点击对应关键点位置绘制完成后即生成一个骨架对象。使用 Skeleton 自动标注打开 job在工具面板选择AI ToolsDetectors检测器从下拉列表中选择模型。列表顶部会显示骨架名称下方列出需要匹配的点可选点击Bin垃圾桶图标可移除任意已映射的条目移除整个骨架连同其所有点移除两个映射骨架中的某些点。点击Annotate标注执行自动标注。在画布上编辑 Skeleton绘制完成的骨架被一个包围盒bounding box所包裹你可以像操作普通矩形一样对骨架整体进行拖拽、缩放、旋转当你移动某个点时包围盒会自动调整但不会影响其他点的位置此外快捷键可以同时作用于骨架整体及其元素作用于整个骨架将鼠标悬停在包围盒上然后按下快捷键。适用于 lock锁定、occluded遮挡、pinned固定、keyframe关键帧、outside出界等快捷键其中 outside 仅适用于骨架轨迹。作用于单个骨架点将鼠标悬停在该点上然后按下快捷键。可用快捷键与骨架整体相同并且outside 也可应用于单个骨架形状元素。在侧边栏编辑 Skeleton侧边栏提供了另一种设置骨架属性与属性的方式操作方式与 CVAT 其他对象类型类似但有一个特殊之处侧边栏中增加了一个可折叠的骨架部件列表区段用于查看骨架的全部组成点。骨架点可以拥有Outside出界、Occluded遮挡和Hidden隐藏三种属性其中Outside与Hidden都会使骨架点不可见但含义完全不同Outside出界属于标注内容的一部分。当对象的一部分超出画面边界时使用。该属性会随标注数据一起保存并在骨架轨迹的关键帧插值中生效Hidden隐藏仅为了方便标注者查看而隐藏该点不会在不同会话之间保存属于纯展示层面的便利功能Occluded遮挡点仍然可见通常表示该点仍在画面中只是被其他对象遮挡。该属性会被记录便于区分被遮挡但存在与真的出界两种情况。Skeleton 的导出与导入CVAT 原生格式在 cvat/apps/dataset_manager/formats/cvat.py 中骨架以skeleton标签整体写出其子元素点、边作为骨架的内部元素序列化导入时解析器会先判断父形状类型是否为skeleton再决定子元素归属。因此骨架的拓扑结构在 CVAT 格式中可以被无损还原。COCO Keypoints 格式COCO Keypoints 专为人姿态估计任务设计用于在人体图像上定位身体关节点keypoints。其支持情况详见 format-coco-keypoints.md支持的标注类型Skeletons属性支持存储在标注的自定义attributes字段中轨迹支持通过自定义属性track_id导出的文件为.zip压缩包结构如下├── images/ │ └── subset_name/ │ ├── image_name1.ext │ ├── image_name2.ext │ └── ... └── annotations/ ├── person_keypoints_subset_name.json └── ...导入时接受单个解压后的.json文件或上述结构可无 images 目录的.zip压缩包。后端实现位于 cvat/apps/dataset_manager/formats/coco.py导出通过coco_person_keypoints数据集格式完成_export_keypoints导入则在解析后应用RemoveBboxAnnotations变换——因为骨架检测模型输出的包围盒携带的是骨架标签直接导入会导致标签无效因此导入时会移除这些 bbox 标注该限制在源码注释中明确说明Boxes would have invalid (skeleton) labels, so remove them。要点速览Skeleton 父标签 若干子标签点 SVG 拓扑边连接点可独立命名、设色、挂属性骨架配置必须在任务/项目创建前完成创建后不可修改但可从 Raw 标签页复制配置复用属性可精细到单个点点具有 Outside / Occluded / Hidden 三种特殊属性语义各不相同标注时可在 Track带插值轨迹与 Shape静态形状之间选择自动标注通过 AI Tools Detectors 实现画布编辑支持整体包围盒变换与逐点微调快捷键可分别作用于骨架整体或单个点数据导出优先使用 CVAT 原生格式与 COCO Keypoints 格式COCO 导入时会自动丢弃无效的 bbox 标注。【免费下载链接】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),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进