news 2026/9/14 15:00:04

在 CVAT 中创建与导出分割掩码(Mask):背景类打孔、类颜色与多格式导出实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 CVAT 中创建与导出分割掩码(Mask):背景类打孔、类颜色与多格式导出实战指南

在 CVAT 中创建与导出分割掩码(Mask):背景类打孔、类颜色与多格式导出实战指南

【免费下载链接】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 标注界面中的掩码(Mask)生成与导出能力展开:介绍如何在多边形标注中借助"背景类"与 z 轴排序实现打孔效果,梳理 CVAT 支持掩码导出的六种数据集格式,并深入讲解类颜色(Class Colors)与背景类(Background Class)在导出掩码中的底层约定。读完本文,你将掌握"从多边形标注到语义/实例分割掩码"的完整工作流,并能结合仓库源码理解掩码导出的变换管线与配色机制。


背景类与"打孔":在多边形中切割透明孔洞

在 CVAT 编辑器中,目前并不支持在多边形内部直接切割出透明的孔洞。不过,借助一个巧妙的标注约定,你可以在导出的实例掩码(instance mask)与类掩码(class mask)中生成孔洞效果:

  1. 在任务中定义一个背景类(background class)
  2. 用背景类以"额外的形状"形式,把孔洞画在需要打孔的形状之上(即在 z 轴顺序上处于更高层级)。

标注窗口中的效果如下(图中的深色多边形即为使用背景类绘制的孔洞形状,覆盖在目标形状之上):

绘制时请牢记使用z 轴排序快捷键来调整形状的层级:

  • [(左方括号):将选中形状的 z 轴层级下移
  • +=(加号/等号):将选中形状的 z 轴层级上移

z 轴顺序在 CVAT 前端由独立的图层状态管理。从源码可以看到,zLayer维护着min/max/cur三个关键状态(annotation-reducer.ts),而 switchZLayer 动作 负责在用户按下快捷键时切换当前层级。这一机制确保了"孔洞形状"始终绘制在目标形状之上。

按上述方式标注并导出后,得到的效果如下:类掩码(左)与实例掩码(右)中均出现了正确的孔洞:

注意:当前版本中,内部形状(孔洞)无法拥有独立的实例编号。导出的处理逻辑会先将内部形状合并到面积最大的外部形状中,再用背景类形状将其覆盖为"孔"。也就是说,孔洞只是视觉与像素意义上的空洞,并不会作为独立实例出现在实例掩码中。


可导出掩码的数据集格式

CVAT 提供多种支持掩码导出的数据集格式,覆盖语义分割、实例分割、文本检测与跟踪等常见场景:

格式说明
Segmentation Mask基于 PASCAL VOC 分割格式的自定义掩码格式,同时产出类掩码与实例掩码(即本文后续重点讲解的格式)
CamVid面向自动驾驶街景分割的经典格式
MOTS多目标跟踪与分割格式,掩码按帧导出
ICDAR面向文本检测/分割任务的格式
COCO以 RLE 编码导出实例掩码,详见 COCO 格式指南
DatumaroDatumaro 通用数据格式,掩码以 PNG 或 RLE 形式存储

各格式的完整导出/导入说明可参见对应文档:Segmentation Mask、CamVid、MOTS、ICDAR、Datumaro。

Segmentation Mask格式导出的掩码示例如下——左侧为合并后的类掩码,右侧为合并后的实例掩码:

在掩码导出时,有两个重要行为需要留意:

  • 矩形框(boxes)与多边形(polygons)都会被转换为掩码,因此即使你的任务中只画了矩形框或多边形,也能得到完整的掩码结果;
  • 被分组的对象被视为单个实例,会合并导出为一张掩码,其标签(label)与属性(attributes)取自组内面积最大的对象

掩码导出的底层变换管线(源码级解析)

掩码导出并非简单的"形状转图片",在 mask.py 中可以看到一条完整的 Datumaro 变换管线:

dataset.transform(RotatedBoxesToPolygons) # 旋转框转为多边形 dataset.transform("polygons_to_masks") # 多边形转为掩码 dataset.transform("boxes_to_masks") # 矩形框转为掩码 dataset.transform(EllipsesToMasks) # 椭圆转为掩码 dataset.transform("merge_instance_segments")# 合并同一实例的片段 dataset.export( temp_dir, "voc_segmentation", save_media=save_images, apply_colormap=True, # 应用类颜色映射 label_map=make_colormap(instance_data), # 依据标签颜色构建色表 )

关键点解读:

  • merge_instance_segments变换负责把属于同一实例(含分组对象)的多个掩码片段合并为一张掩码,这正是"组内对象导出为单一实例"以及"内部形状被并入最大形状"这一行为的实现来源。该变换同样出现在 camvid.py、mots.py、icdar.py 等掩码类格式的导出器中;
  • make_colormap决定像素颜色(见 utils.py):它遍历任务的全部标签,并为每个标签建立label -> [RGB 颜色, [], []]的映射;值得注意的是,如果任务中没有名为background的标签,会自动在色表最前面插入{"name": "background", "color": "#000000"},这也是"默认背景为黑色"这一约定的代码根源;
  • EllipsesToMasks(transformations.py)使用 OpenCV 的cv2.ellipse把椭圆栅格化为 RLE 掩码,并在转换时保留z_ordergroup等元数据,保证打孔与分组语义不丢失。

Segmentation Mask格式导出的产物是一个 ZIP 压缩包,其标准目录结构如下(详细说明见 format-smask.md):

taskname.zip/ ├── labelmap.txt # 可选,非 PASCAL VOC 标签时必需 ├── ImageSets/ │ └── Segmentation/ │ └── default.txt # 不含扩展名的图片名列表 ├── SegmentationClass/ # 合并后的类掩码 │ ├── image1.png │ └── image2.png └── SegmentationObject/ # 合并后的实例掩码 ├── image1.png └── image2.png

掩码是 1 通道或 3 通道的 PNG 图片,每个像素的颜色对应一个标签;颜色依据 PASCAL VOC 的色板算法生成,默认用(0, 0, 0)表示背景。


类颜色(Class Colors):掩码配色的来源

所有标签都关联着一个颜色值,这个颜色就是生成掩码时该标签类别的像素颜色。你可以在**任务标签属性(Task Label Properties)**中通过取色器直接修改标签颜色:

标签颜色同时也会显示在标注窗口右侧的标签面板中,在那里你可以显示或隐藏特定标签(面板上只显示当前任务中已存在的标签):

从源码角度看,标签颜色在导出时被make_colormap读取(标签的color字段以十六进制字符串存储,如#ff0000,通过hex2rgb转为 RGB 元组),随后作为voc_segmentation导出的label_map传入,最终决定每个标签在掩码 PNG 中的像素颜色。标签的默认配色则由 predefined_colors.txt 与 utils.py 中的哈希算法共同决定。


背景类(Background Class)的三种定义方式

在导出掩码时,"背景"这一概念有三种等价定义方式,优先级从高到低:

  1. 默认隐式添加的类:即使任务中没有任何背景类定义,导出色表中也会自动插入一个纯黑色的背景类(RGB0, 0, 0)。如前文所述,这一行为由 make_colormap 中的if "background" not in label_names: labels.insert(0, ...)保证;
  2. 名为background的标签类:可以为其指定任意颜色,且名称匹配大小写不敏感(如BackgroundBACKGROUND均可识别)。该名称具有最高优先级——只要存在名为background的标签,导出色表就会直接采用它的颜色作为背景色;
  3. 任意黑色类:任何颜色为纯黑(RGB0, 0, 0)的标签类,在掩码中同样会被视为背景。

修改背景色的方法:默认情况下导出掩码的背景为黑色。如果你希望背景呈现其他颜色,只需将任务中background标签的颜色改为目标颜色即可(例如改为(0, 128, 0)绿色),导出时色表便会以该颜色作为背景像素值。


小结:一套完整的掩码标注与导出工作流

综合以上内容,在 CVAT 中从多边形标注到高质量分割掩码的完整路径为:

  1. 建任务:定义目标标签,并视需要添加background标签用于打孔(名称大小写不敏感,颜色可自定义);
  2. 标注:用多边形/矩形/椭圆绘制目标形状,用[+/=调整 z 轴顺序,把背景类形状叠放在需要打孔的位置上方;需要合并为同一实例的对象使用分组功能;
  3. 调色:在任务标签属性中为每个标签指定掩码颜色,确保类掩码的可辨识度;
  4. 导出:选择Segmentation MaskCamVidMOTSICDARCOCODatumaro格式导出,得到带孔洞、带类色的类掩码与实例掩码。

理解 mask.py 的变换管线、make_colormap 的配色约定,以及 format-smask.md 的 ZIP 结构规范,能帮助你在实际项目中精准控制掩码导出的每一个细节——无论是孔洞、实例合并还是背景色定制。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 14:59:35

Meta Flipper 源码解读:移动端跨平台调试平台架构与插件机制

前阵子做移动端中间件改造,我把 Meta Flipper 的源码从桌面端到移动端反复读了几遍。读完之后最大的感受是:市面上把它当成一个“抓包工具”的用法,多少有点浪费。Meta Flipper 本质上是一套移动端跨平台调试平台,核心是一套定义清…

作者头像 李华
网站建设 2026/9/14 14:59:16

电影推荐系统实战:从MovieLens数据清洗到LightFM在线推理

简介:这是一套面向人工智能与前端开发初学者的电影推荐系统实战项目,聚焦机器学习在个性化推荐场景中的落地应用,涵盖数据预处理、协同过滤、矩阵分解及JavaScript驱动的前后端交互全流程。资源包共2000个文件,主体为1895张电影海…

作者头像 李华
网站建设 2026/9/14 14:54:54

M16工业连接器选型与安装避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 14:53:54

Automatisch 接入 Google Drive:从零创建 OAuth 凭据到完成连接配置

Automatisch 接入 Google Drive:从零创建 OAuth 凭据到完成连接配置 【免费下载链接】automatisch The open source Zapier alternative. Build workflow automation without spending time and money. 项目地址: https://gitcode.com/GitHub_Trending/au/automat…

作者头像 李华