☰
PaddleLabel 语义分割标注指南:多边形与掩膜两种标注流程、数据集格式规范及 PaddleSeg 训练衔接
2026/9/25 5:41:42 网站建设 项目流程
  • 人工智能
  • 计算机视觉
  • 预训练

【免费下载链接】PaddleSeg

Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleSeg
点击查看免费下载

语义分割标注是构建分割训练数据集的起点,本文基于 PaddleSeg 仓库内置的 PaddleLabel 语义分割标注文档,系统讲解 PaddleLabel 支持的多边形标注与掩膜标注两种任务模式:从数据集目录结构与labels.txt/xx_list.txt文件规范、项目创建与数据导入,到界面标注实操、数据划分与导出,最后延伸到如何将标注结果直接对接 PaddleSeg 完成训练、评估与预测。读完本文,你可以独立搭建一套"标注 → 导出 → 训练"的完整语义分割工作流。

语义分割标注任务概览

PaddleLabel 的图像分割标注功能支持语义分割与实例分割两类任务(本仓库对应文档见 semantic_segmentation.md),其中语义分割支持两种标注形态:

  • 多边形(Polygon)标注:沿目标物体轮廓打点,形成闭合多边形来包围目标;
  • 掩膜(Mask)标注:使用笔刷在目标内部涂抹,直接以像素级掩膜刻画目标区域。

两种形态在标注界面上的操作方式不同,且不可混用,需要在创建项目时就确定采用哪一种。它们的差异同样体现在导出数据上:多边形格式导出为 COCO JSON,掩膜格式导出为JPEGImages/Annotations目录加标签文件列表的目录结构。

数据结构与数据集组织

掩膜格式

掩膜格式的语义分割数据集按"图像文件夹 + 标注文件夹"组织,待标注图片必须放在JPEGImages文件夹下,创建项目填写数据地址时,数据集路径填写JPEGImages的上层目录(即Dataset Path),这一点与其他任务不同,创建时需特别注意。

标注完成后导出示例格式如下:

Dataset Path ├── Annotations │ ├── A0001.png │ ├── B0001.png │ ├── H0002.png │ └── ... ├── JPEGImages │ ├── A0001.jpg │ ├── B0001.png │ ├── H0002.bmp │ └── ... ├── labels.txt ├── test_list.txt ├── train_list.txt └── val_list.txt # labels.txt background - optic_disk - 128 0 0 // for pesudo color mask, color for each label must be specified

关键约定:

  • 所有位于/Dataset Path/JPEGImages/下的图像都会被导入(无论是否有对应标签),所有位于/Dataset Path/Annotations/下的图片都会被作为标签导入,PaddleLabel 通过文件夹位置区分图像与标签;
  • 图像与标签通过去掉扩展名后的同名进行匹配,同一图像只能对应一个标签文件(例如image.png与image.webp同时匹配image.png标签会导入失败);
  • labels.txt中第一个标签固定被视为背景类并分配编号 0;
  • 标签图像通常为 PNG:灰度掩膜中像素灰度值对应标签编号;伪彩色掩膜中像素颜色与labels.txt中指定的颜色匹配。若掩膜中存在未在labels.txt中声明的标签,导入将失败;
  • 导出时labels.txt第一行固定是背景类;灰度标签导出为单通道图像(灰度值即类别),伪彩色标签导出为三通道图像(像素颜色即类别)。

labels.txt 标签文件规范

labels.txt是掩膜类数据集的核心标签声明文件(详细规范见 dataset_file_structure.md),每行一个标签,|表示分隔符,默认为空格,支持以下行格式:

字段数量含义
1标签名
2标签名 | 标签编号
3标签名 | 标签编号 | 十六进制颜色或常用颜色名称或灰度值
5标签名 | 标签编号 | 红色 | 绿色 | 蓝色

其他语法:

  • //之后的内容作为标签注释,导入时忽略;
  • -占位符:需要指定标签颜色但不想指定标签编号时,在编号位置写-(PaddleLabel 会自动按导入顺序编号)。

示例:

dog monkey 4 mouse - #0000ff // mouse's id will be 5 cat 10 yellow zibra 11 blue // some common colors are supported snake 12 255 0 0 // rgb color

导入过程中 PaddleLabel 会先按labels.txt创建标签,编号从0开始递增;导出时也会自动生成该文件。

多边形格式(COCO)

多边形格式的项目只需在创建时填入待标注图片所在目录。标注完成后导出示例格式如下:

Dataset Path ├── image │ ├── 0001.jpg │ ├── 0002.jpg │ ├── 0003.jpg │ └── ... ├── train.json ├── val.json └── test.json

COCO JSON 的标准结构如下:

{ "info": info, "images": [image], "annotations": [annotation], "licenses": [license], "categories": [category], } image{ "id": int, "width": int, "height": int, "file_name": str, "license": int, "flickr_url": str, "coco_url": str, "date_captured": datetime, } annotation{ "id": int, "image_id": int, "category_id": int, "segmentation": RLE or [polygon], "area": float, "bbox": [x,y,width,height], "iscrowd": 0 or 1, } category{ "id": int, "name": str, "supercategory": str, "color": str // this feature is specific to PP Label. It's not in the coco spec. }

注意事项:

  • 使用 COCO 格式的项目不支持xx_list.txt与labels.txt,数据集划分信息直接写在train.json、val.json、test.json三个文件中;
  • category中的color字段是 PaddleLabel 特有的扩展(不在标准 COCO 规范中),导出时会保存、导入时会使用;
  • 导入时每个图像在三个 json 中只能被定义一次,且建议将所有图像放在同一文件夹下以避免file_name重名导致匹配冲突;
  • 导出时即使数据全部分到同一子集,三个 json 文件也都会生成。

创建语义分割标注项目

浏览器打开 PaddleLabel 后,通过"创建项目"下的语义分割卡片创建新的图像分割标注项目(若已创建,可通过"我的项目"找到对应项目并点击"标注"继续标注)。项目创建选项卡需填写:

选项必填说明
项目名称是该分类标注项目的名称
数据地址是掩膜格式:填JPEGImages的上层目录Dataset Path;多边形格式:填待标注图片所在目录
数据集描述否数据集描述文字
标注类型是选择多边形标注任务或掩膜标注任务

数据导入

创建项目时填写的数据地址即数据集文件夹路径。为了让 PaddleLabel 正确识别和处理数据集,请按照上文 数据结构与数据集组织 组织数据;xx_list.txt的详细组织方式参考 数据集文件结构说明。

关于xx_list.txt,还需了解以下几点:

  • train_list.txt、val_list.txt、test_list.txt需放在数据集根目录(与labels.txt同层),每行以一条数据的相对数据集根目录的路径开头,后接类别整数/字符串或标签文件路径;
  • 掩膜格式下典型的行内容为JPEGImages/1.jpeg Annotations/1.png形式;
  • 大多数项目只使用xx_list.txt中的数据集划分信息,行内类别信息不一定被考虑;
  • 导出时三个文件都会生成(即使为空),但没有标注注释的数据不会写入xx_list.txt,以确保 Paddle 生态其他工具可以正常读取。

此外 PaddleLabel 内置了参考数据集,语义分割样例位于~/.paddlelabel/sample/semantic_seg,可以对照该结构组织自己的数据。创建样例项目时数据会解压到~/.paddlelabel/sample文件夹。

数据标注实操

创建并进入项目后即进入标注界面。PaddleLabel 界面分为五个区域:上方为可切换的标签页,下方为标注进度展示,左侧为图像显示区域与工具栏,右侧为标签列表(用于添加标签和标注)。

多边形标注流程

  1. 点击右侧"添加标签",填写信息并创建标签;
  2. 选中一个标签,点击左侧工具栏的"多边形",在图像上沿目标物体轮廓依次点击,形成包围物体的闭合多边形;
  3. 需要修改时点击左侧工具栏的"编辑"调整多边形顶点;
  4. 点击左右按钮切换图像,重复上述操作直至全部数据标注完毕;
  5. 通过下方进度展示查看标注进度。

掩膜标注流程

  1. 点击右侧"添加标签",填写信息并创建标签;
  2. 选中一个标签,点击左侧工具栏的"笔刷"(鼠标悬浮可调整笔刷大小),在图像上按住鼠标左键涂抹目标物体内部;
  3. 需要删除掩膜时点击左侧工具栏的"橡皮擦"进行修改;
  4. 点击左右按钮切换图像,重复上述操作直至全部数据标注完毕;
  5. 通过下方进度展示查看标注进度。

关键概念与注意事项

  • PaddleLabel 右侧标签栏区分**标签(Label)与标注(Annotation)**两类对象:在图像分割中,标签对应"类别",标注对应"该类别的一个实例";
  • 语义分割中每一个类别只能创建一个实例,这与实例分割(同一类别可有多个实例)不同;
  • 多边形模式和掩膜模式不可同时使用,创建项目时就必须确定格式;导出时多边形格式只保存多边形、掩膜格式只保存掩膜(多边形会转换为掩膜保存),因此不建议混用两种标注形式。

完成标注:数据划分与导出

完成数据标注后,PaddleLabel 提供便捷的数据划分功能,用于与 Paddle 其他工具套件(如 PaddleSeg、PaddleDetection)快速衔接。点击右侧工具栏的"项目总览"按钮进入项目总览界面,可查看数据与标注状态,并通过上方快捷按钮执行操作:

  • 划分数据集:点击"划分数据集"按钮,弹出划分比例设置,分别填入训练集、验证集、测试集占比,点击确定完成划分;
  • 导出数据集:点击"导出数据集",输入导出目标文件夹路径并确认,即可将标注完成的数据导出到指定路径。

交互式分割标注(ML 扩展)

PaddleLabel 内置基于 PaddlePaddle 的机器学习标注能力,可加载交互式分割模型实现"点击正/负样本点 → 自动生成分割轮廓"的智能标注,后端基于 EISeg 实现。使用方法与模型下载说明详见 交互式分割标注,核心流程为:

  1. 安装 ML 扩展(pip install paddlelabel-ml)并启动paddlelabel_ml后端;
  2. 在分割任务中点击"智能标注",将 ML 后端 URL 填入 ML Backend 并保存;
  3. 图像上左键添加正样本点、右键添加负样本点,点击"确认轮廓"生成单个目标。

与 PaddleSeg 的衔接:从标注数据到模型训练

语义分割标注的核心目的是产出可供 PaddleSeg 直接训练的数据集,这也是 PdLabel_PdSeg.md 描述的标准工作流:PaddleLabel 标注数据 + PaddleSeg 训练预测 = 快速完成一次图像分割任务。

数据集结构与 PaddleSeg 的对接验证

PaddleLabel 导出的掩膜数据集结构与 PaddleSeg 内置数据集约定完全一致。以仓库内置的视盘分割数据集为例,其读取逻辑位于 optic_disc_seg.py:该数据集类根据mode读取根目录下的train_list.txt、val_list.txt或test_list.txt(见 optic_disc_seg.py#L79-L84),并规定文件列表每行必须为image_name label_name两列格式(optic_disc_seg.py#L86-L98)。这正是 PaddleLabel 掩膜格式导出后的xx_list.txt行结构——JPEGImages/xxx.jpg Annotations/xxx.png。

同时,PaddleLabel 的通用自定义数据集入口Dataset类位于 dataset.py,训练配置中通过type: Dataset配合dataset_root、train_path、val_path、num_classes字段即可直接加载 PaddleLabel 导出的数据。

训练配置示例

以仓库 quick_start/pp_liteseg_optic_disc_512x512_1k.yml 为参考,自定义数据集的配置骨架如下:

batch_size: 4 iters: 1000 train_dataset: type: Dataset # 自定义数据集使用通用 Dataset 类型 dataset_root: data/optic_disc_seg # 数据集根目录(JPEGImages 的上层) train_path: data/optic_disc_seg/train_list.txt num_classes: 2 # 类别数(背景也计为一类,与 labels.txt 中背景+1 个前景一致) transforms: - type: Resize target_size: [512, 512] - type: RandomHorizontalFlip - type: Normalize mode: train val_dataset: type: Dataset dataset_root: data/optic_disc_seg val_path: data/optic_disc_seg/val_list.txt transforms: - type: Normalize mode: val num_classes: 2 optimizer: type: SGD momentum: 0.9 weight_decay: 4.0e-5 lr_scheduler: type: PolynomialDecay learning_rate: 0.01 end_lr: 0 power: 0.9 loss: types: - type: CrossEntropyLoss coef: [1] model: type: PP_LiteSeg_Tiny num_classes: 2

其中num_classes必须与labels.txt声明的类别数一致(背景默认算作一类,编号 0),这一点与 PaddleLabel 导出时"labels.txt第一行固定为背景类"的约定完全对应。

训练、评估与预测

将 PaddleLabel 导出的dog_seg_dataset(含Annotations、JPEGImages、labels.txt及三个*_list.txt)放入data/目录后,依次执行:

# 训练(--do_eval 边训练边验证,--save_interval 控制保存间隔) python tools/train.py \ --config configs/mynet.yml \ --do_eval \ --use_vdl \ --save_interval 100 \ --save_dir output # 评估(默认使用训练中保存的 model_final.pdparams,也可指定 best_model) python tools/val.py \ --config configs/mynet.yml \ --model_path output/best_model/model.pdparams # 预测 python tools/predict.py \ --config configs/mynet.yml \ --model_path output/best_model/model.pdparams \ --image_path data/dog_seg_dataset/JPEGImages/xxx.jpg \ --save_dir output/result

常见问题小结

  • 创建掩膜项目时数据地址填错:掩膜格式必须填JPEGImages的上层目录Dataset Path,而不是JPEGImages本身或图片目录;
  • 图像与标签对应关系出错:确保同组图像与标签去掉扩展名后同名,且没有多张图像对应同一标签名;
  • 掩膜颜色/灰度无法匹配:确保labels.txt中的颜色声明与掩膜像素一致(伪彩色掩膜必须为每个标签指定颜色,如optic_disk - 128 0 0),掩膜中不能出现未声明标签;
  • 两种标注形态混用:多边形与掩膜在创建项目后不可切换,导出时也只保留所选形态,请按需提前确定;
  • 导入前备份数据:PaddleLabel 在导入更多数据时可能移动文件到项目数据集文件夹(避免复制以节省磁盘),并在数据集根目录生成paddlelabel.warning文件,建议导入前复制原始数据集作为备份。

至此,从创建语义分割标注项目、组织数据集、执行多边形/掩膜标注,到划分导出并衔接 PaddleSeg 完成训练的全流程已经打通,你可以基于这套流程快速构建自己的语义分割数据集与模型。

  • 人工智能
  • 计算机视觉
  • 预训练

【免费下载链接】PaddleSeg

Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleSeg
点击查看免费下载

相关推荐

上一篇:终极指南:ArchiSteamFarm如何与Steam API交互实现高效游戏卡片 Farming
下一篇:AndroidVideoCache终极安全漏洞解析:2025年CVE漏洞修复完整指南

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

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

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

立即咨询