- 人工智能
- 计算机视觉
- 预训练
【免费下载链接】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.
导读
本文围绕 PaddleSeg 仓库中收录的 PaddleLabel 项目(contrib/PaddleLabel),系统讲解这一飞桨(PaddlePaddle)配套标注工具的核心能力与完整使用链路:从安装启动、样例项目快速体验,到图像分类、目标检测、语义/实例分割、交互式分割的标注实操与数据集格式规范,再到将标注结果直接用于 PaddleSeg(以及 PaddleClas、PaddleDetection、PaddleX)训练预测的全流程。读完本文,你将能够独立搭建标注环境、按规范组织并导出数据集,并基于导出结果完成一次完整的自定义图像分割模型训练与推理。
一、PaddleLabel 是什么
PaddleLabel 是基于飞桨 PaddlePaddle 各套件特性提供的配套数据标注工具,涵盖图像分类、目标检测、图像分割三类常见计算机视觉任务的标注能力,并同时支持手动标注与交互式(智能)标注两种模式。其设计目标非常明确:让用户方便快捷地标注自定义数据集,并将导出数据直接用于飞桨生态其他套件的训练与预测流程,从而打通"数据标注 → 模型训练 → 模型导出"的全流程。
从代码组织上看,PaddleLabel 的功能由三个仓库协作完成:
| 组成部分 | 职责 |
|---|---|
PaddleLabel(本项目,即contrib/PaddleLabel) | 后端实现,负责数据集导入/导出、项目与标签管理、标注数据持久化 |
| PaddleLabel-Frontend | 基于 React 和 Ant Design 构建的前端标注界面 |
| PaddleLabel-ML | 基于 PaddlePaddle 的自动/交互式机器学习辅助标注后端 |
在 PaddleLabel README 中官方将它的核心特性概括为四点:
- 简单:手动标注直观易操作,上手成本极低;
- 高效:支持交互式分割和预标注,标注精度及效率提升显著;
- 灵活:分类支持单分类和多分类,分割支持多边形、笔刷及交互式分割等多种方式,可按场景需求自由切换;
- 全流程:与其他飞桨套件密切配合,可完成数据标注、模型训练、模型导出等全流程操作。
版本演进上,README 记录了两次关键发布:2022-08-18 发布 0.1 版本(具备分类、检测、分割三大任务的基础标注能力);2022-11-30 发布 0.5 版本(全面升级三类任务的标注界面,新增 PPLCNet 分类预标注、PicoDet 检测预标注,优化语义/实例分割的实例区分与交互式分割的 localStorage 存储问题)。从仓库中EISeg/requirements-det.txt仅含paddlelabel_ml一项可以看出,PaddleLabel 的机器学习扩展正是与仓库内 EISeg 交互式分割能力同源配套的组件。
二、安装与启动
官方文档 安装指南 建议先创建独立的虚拟环境以避免环境冲突:
conda create -n paddlelabel python=3.10 conda activate paddlelabel随后可通过以下三种方式之一安装,其中 pip 安装最简单。
2.1 pip 安装(推荐)
pip install --upgrade paddlelabel看到类似Successfully installed paddlelabel-0.5.0的输出即安装成功。
2.2 下载最新开发版
PaddleLabel 团队会不定期通过 GitHub Action 构建反映最新代码的安装包(未经全面测试,可能修复了 PyPI 版本中的问题并带来性能提升)。步骤为:进入 Action 执行记录页,选择最新一次执行,下载名为PaddleLabel_built_package的产物,解压后执行:
pip install [解压出的.whl文件名,如 paddlelabel-0.2.0-py3-none-any.whl]2.3 源码安装
- 克隆后端代码(本项目);
- 克隆并构建前端,需先安装 Node.js 与 npm:
git clone https://github.com/PaddleCV-SIG/PaddleLabel-Frontend cd PaddleLabel-Frontend npm install --location=global yarn yarn npm run build- 将构建产物复制到后端静态目录:
cd ../PaddleLabel/ mkdir paddlelabel/static/ cp -r ../PaddleLabel-Frontend/dist/* paddlelabel/static/- 安装后端:
python setup.py install2.4 启动
安装完成后,终端直接执行:
paddlelabel # 启动 paddlelabel pdlabel # 缩写,与 paddlelabel 完全相同PaddleLabel 默认运行在http://127.0.0.1:17995上,并会自动在浏览器中打开网页(推荐使用 Chrome)。常用启动参数:
paddlelabel --port 8000 --lan # 指定端口并暴露到局域网--port/-p:指定服务端口;--lan/-l:将服务暴露到局域网,可实现"电脑上运行 PaddleLabel、平板上进行标注"的使用方式;在 docker 中运行时也必须添加该参数。
三、快速体验:内置样例项目
为了帮助用户快速上手,PaddleLabel 内置了示例项目。网页打开后,点击首页左上角"项目样例"即可进入样例选择界面,其中提供分类、检测、实例分割、语义分割四类样例项目卡片,点击卡片即进入对应样例项目的总览。
样例项目的总览界面上方提供了一系列数据集管理功能按钮:
- 项目设置:修改项目名称和描述;
- 划分数据集:对数据集进行训练/验证/测试子集的划分;
- 导入额外数据:向当前数据集导入更多数据;
- 导出数据集:将数据集中的图片和标注信息导出;
- 去标注:跳转到标注页面。
创建样例项目后,所有样例数据会被解压到~/.paddlelabel/sample文件夹(分类、检测、语义分割、实例分割各有对应的 sample 子目录),可以作为组织自己数据集的参考模板,详见 数据集文件结构说明。
四、数据集文件结构基础:labels.txt 与 xx_list.txt
在深入各任务的标注流程前,有必要先理解 PaddleLabel 的通用数据组织规范,这部分是 common.md 与 数据集文件结构说明 的核心内容。
4.1 无标注数据集
如果数据集不含任何标注,只需把所有图像文件放在一个文件夹下。PaddleLabel 会遍历文件夹(含所有子文件夹)中的所有文件,按文件扩展名判断类型并导入全部图像;所有隐藏文件(文件名以.开头)会被忽略。
⚠️ 注意:PaddleLabel 可能会修改数据集文件夹下的文件(例如"导入更多数据"时新文件会被移动到项目数据集文件夹,以避免复制数据集、节省磁盘空间)。目前它不会删除盘上任何内容,但强烈建议导入前复制一份数据集作为备份;使用过程中数据集根目录下会生成
paddlelabel.warning文件,请避免手动改动文件夹内文件。
4.2 labels.txt:标签定义文件
所有不使用 COCO 格式保存标注的项目都支持labels.txt,PaddleLabel 在导入时会在数据集路径下寻找该文件,每行列出一个标签:
# labels.txt Monkey Mouse标签名称支持任意字符串,但标签名可能被用作导出数据集的文件夹名,因此应避免操作系统不支持的字符;同时飞桨生态其他工具对标签名可能有进一步限制(例如 PaddleX 不支持中文字符作为标签名)。
labels.txt每行可携带比标签名更多的信息,目前支持 4 种格式(|表示分隔符,默认为空格):
| 字段长度 | 含义 |
|---|---|
| 1 | 标签名 |
| 2 | 标签名 | 标签编号 |
| 3 | 标签名 | 标签编号 | 十六进制颜色/常用颜色名称/灰度值 |
| 5 | 标签名 | 标签编号 | 红色 | 绿色 | 蓝色 |
其他语法规则:
//:其后内容作为标签注释;-:在标签编号位置写-表示想指定颜色但不指定编号。
示例:
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 开始递增;导出时也会生成该文件。语义/实例分割的掩膜导出中,labels.txt第一行固定为背景类,且每个标签必须指定颜色(如optic_disk - 128 0 0)。
4.3 xx_list.txt:数据集划分与匹配文件
xx_list.txt包括train_list.txt、val_list.txt、test_list.txt,位于数据集根目录。它们指定数据集的划分以及标签/标注文件与图像文件的匹配关系,每行以一条数据的相对路径开头,后跟表示类别的整数/字符串或标签文件的路径:
# train_list.txt(分类场景) image/9911.jpg 0 3 image/9932.jpg 4 image/9928.jpg Cat# train_list.txt(VOC 检测场景) JPEGImages/1.jpeg Annotations/1.xml JPEGImages/2.jpeg Annotations/2.xml JPEGImages/3.jpeg Annotations/3.xml关键规则:
- 大多数项目只用
xx_list.txt中的数据集划分信息(如单分类项目中这三个文件里的类别信息不会被导入); - 标签类别为整数时,PaddleLabel 会在
labels.txt中查找标签(id 从 0 开始);若想用数字作标签名,可把数字写入labels.txt并在 list 文件中给出 id,或加前缀如n10; - 三个文件在导出时都会生成(即使为空);为确保其他飞桨工具可读取,没有标注的数据不会包含在
xx_list.txt中。
4.4 COCO 格式的注意事项
所有使用 COCO 格式保存标注的项目不支持xx_list.txt与labels.txt,标注信息集中在train.json、val.json、test.json中。COCO 项目导入时会在数据集路径下寻找这三个 json 文件并解析训练/验证/测试数据,要求每个图像在三个 json 中只被定义一次,否则导入失败。PaddleLabel 在 COCO 的category中扩展了一个color字段(非官方标准,会随导入导出保留),用于类别颜色标注。
五、图像分类标注
PaddleLabel 支持单分类与多分类两种分类标注,详见 图像分类标注。
5.1 单分类(ImageNet 格式)
每条数据只有一个类别,数据集路径填写待标注图片所在文件夹的绝对路径。导出格式示例如下:
Dataset Path ├── Cat │ ├── cat-1.jpg │ ├── cat-2.png │ └── ... ├── Dog │ ├── dog-1.jpg │ └── ... ├── monkey.jpg ├── train_list.txt ├── val_list.txt ├── test_list.txt └── label.txt # labels.txt Monkey Mouse单分类中图像所在文件夹名称即视为其类别,因此上例中三张猫图、三张狗图会被自动分类,而monkey.jpg没有分类;若与文件夹同名的标签不存在,导入时会自动创建。为避免冲突,单分类项目只导入xx_list.txt的划分信息(类别信息不导入)。
5.2 多分类
一条数据可有多个类别,类别仅由xx_list.txt决定,不考虑文件夹名称。导出格式示例:
Dataset Path ├── image │ ├── 9911.jpg │ ├── 9932.jpg │ └── monkey.jpg ├── labels.txt ├── test_list.txt ├── train_list.txt └── val_list.txt # labels.txt cat dog yellow black # train_list.txt image/9911.jpg 0 3 image/9932.jpg 2 0 image/9928.jpg monkey5.3 创建项目与标注操作
创建项目时需填写:项目名称(必填)、数据集路径(必填,可直接复制粘贴本地文件夹绝对路径)、数据集描述(选填)、分类项目类型(必选,单分类/多分类)。标注界面分五个区域:上方为可切换标签页,下方为标注进度,左侧为图像显示区与工具栏,右侧为标签列表。标注步骤:
- 点击右侧"添加标签",填写信息创建标签;
- 选择当前图像对应的标签(多分类可多选),点击后自动保存;
- 点击左右按钮切换图像,重复操作直至标注完毕;
- 通过下方进度展示查看标注进度。
5.4 分类自动标注(预标注)
PaddleLabel 提供基于 PaddlePaddle 的分类自动标注能力,详细步骤见 图像分类自动标注。使用前提是安装 ML 扩展(pip install paddlelabel与pip install paddlelabel_ml,PaddlePaddle 版本要求>= 2.2.0),并分别启动前端与 ML 后端:
paddlelabel # 前端 paddlelabel_ml # 机器学习后端在"项目总览 → 自动推理设置"中配置:
- 机器学习后端网址(必填):ML 后端地址,默认为
http://127.0.0.1:1234; - 模型选择(必选):当前可选PPLCNetV2分类预训练模型;
- 使用预标注模型标签(必选):选"是"则接受模型推理标签(检测到新标签会自动加入标签列表);选"否"则需自行建立标签对应关系;
- 标签对应关系(非必填):当不使用模型标签时,左侧选择框为模型推理标签(支持模糊搜索),右侧为用户自定义标签,可建立一一对应。
进入标注页后点击"自动推理",预测结果即显示到标签列表中;若提示"未发现高置信度结果",可调低"推理阈值"后重试;对结果不满意可"清空标注"后手动添加标签。
六、目标检测标注
PaddleLabel 的目标检测标注支持PASCAL VOC、COCO、YOLO三种数据集格式,详见 目标检测标注。
6.1 PASCAL VOC
每张图像对应一个 xml 标注文件:
数据集路径 ├── Annotations │ ├── 0001.xml │ ├── 0002.xml │ └── ... ├── JPEGImages │ ├── 0001.jpg │ ├── 0002.jpg │ └── ... ├── labels.txt ├── test_list.txt ├── train_list.txt └── val_list.txtxml 结构为标准的<annotation>根节点,内含<folder>、<filename>、<size>(width/height/depth)以及每个<object>的<name>与<bndbox>(xmin/ymin/xmax/ymax)等字段。导入时 PaddleLabel 将数据集路径下所有.xml文件作为标签,并通过 xml 中的folder与filename节点定位对应图像:无folder节点时默认值为JPEGImages;folder内容为空则认为图像位于/数据集路径/filename;filename节点必须存在,否则导入失败。
6.2 COCO
整个数据集的标注集中在(一个或少数几个)json 文件中。PaddleLabel 支持的核心字段如下(未列出的字段不会在导入时保存或导出,如date_captured):
image{ "id": int, "width": int, "height": int, "file_name": str, } annotation{ "id": int, "image_id": int, "category_id": int, "area": float, "bbox": [x, y, width, height], } category{ "id": int, "name": str, "supercategory": str, "color": str // PaddleLabel 扩展字段,非 COCO 官方定义 }图片与标注记录的匹配规则:取image['file_name']中最后的文件名与盘上图片文件名做大小写敏感的比对。建议将所有图片放在同一文件夹下避免重名歧义;若file_name是完整路径或相对路径,PaddleLabel 会按/和\分割提取文件名,因此请避免在文件名中使用/和\。
6.3 YOLO
每张图像对应一个同名 txt 文件(仅扩展名不同):
数据集路径 ├── Annotations │ ├── 0001.txt │ ├── 0002.txt │ └── ... ├── JPEGImages │ ├── 0001.jpg │ ├── 0002.jpg │ └── ... ├── labels.txt ├── test_list.txt ├── train_list.txt └── val_list.txt# 0001.txt 0 0.4 0.5 0.7 0.8 # 标签id 框中心x/图像宽 框中心y/图像高 框宽/图像宽 框高/图像高 # 标签id从0开始YOLO 格式图像与标签完全靠文件名对应。若两张图仅扩展名不同(如cat.png与cat.jpeg),二者都会匹配cat.txt;为避免此情况,导入时 PaddleLabel 会将cat.png重命名为cat-1.png(这可能导致图像找不到对应标注文件,需查看运行命令行并调整文件名后重新导入)。无标注的图像可不提供标注文件或提供空文件,PaddleLabel 导出时不会为无标注图像生成空 YOLO 文件。
6.4 检测标注操作与自动标注
创建项目时填写项目名称、数据集路径(数据集根文件夹)、数据集描述(选填)与标签格式(选填,导入数据集的格式)。标注步骤:添加标签 → 选择标签 → 点击工具栏"矩形"在图上点击物体的左上角与右下角 → 可用"编辑"修改框的大小位置 → 切换图像重复操作。
注意:右侧标签栏有"标签列表"与"标注列表"两种,检测任务中标签列表对应类别,标注列表对应该类别的一个实例。
检测预标注的配置与分类类似(图像检测自动标注),可选模型为PicoDet,ML 后端地址默认http://127.0.0.1:1234,同样支持"使用预标注模型标签"与"标签对应关系"两个选项,以及推理阈值的调节。
七、语义分割与实例分割标注
分割任务是 PaddleLabel 与 PaddleSeg 衔接最紧密的环节,支持多边形与掩膜两种标注方式,详见 语义分割标注 与 实例分割标注。多边形与掩膜模式不可同时使用,须在创建项目时确定。
7.1 掩膜格式
语义分割掩膜项目有特殊要求:待标注图片需放在JPEGImages文件夹下,数据集路径填写JPEGImages的上层目录(其他任务直接填图片所在目录)。导出结构:
Dataset Path ├── Annotations │ ├── A0001.png │ ├── B0001.png │ └── ... ├── JPEGImages │ ├── A0001.jpg │ ├── B0001.png │ └── ... ├── 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实例分割掩膜项目则直接填写待标注图片所在文件夹路径,标注文件为tiff 二通道格式(PNG 变成 TIFF):第一个通道(下标 0)是类别标签,第二个通道(下标 1)是实例编号。
导入语义分割掩膜数据时,PaddleLabel 从labels.txt获取标签编号,第一个标签视为背景并赋编号 0;灰度标签按像素灰度值与标签编号匹配,伪彩色标签按像素颜色与labels.txt指定颜色匹配;若掩膜中存在无对应标签的标注,导入将失败。图像与标签的对应关系通过去掉扩展名后同名匹配确定(如image.png图像对应image.png标签;若多张图对应一个标签则导入失败)。导出时labels.txt第一行固定为背景类,灰度标签输出单通道图(灰度值=类别),伪彩色标签输出三通道图。
7.2 多边形格式
语义分割与实例分割的多边形格式完全相同,使用 COCO 格式保存,导出结构:
Dataset Path ├── image │ ├── 0001.jpg │ ├── 0002.jpg │ └── ... ├── train.json ├── val.json └── test.json其中annotation的segmentation字段为RLE or [polygon],并含area、bbox、iscrowd字段。注意导出时多边形格式只保存多边形,掩膜格式只保存掩膜(多边形会转换为掩膜保存),因此不建议混用两种标注形式。
7.3 标注操作
多边形标注:添加标签 → 选择标签 → 点击工具栏"多边形"沿物体轮廓逐点点击形成闭合多边形 → 可用"编辑"修改。
掩膜标注:添加标签 → 选择标签 → 点击工具栏"笔刷"(鼠标悬浮可调整笔刷大小)按住左键在物体内部绘制 → 可用"橡皮擦"删除。
两类任务的关键区别在于实例处理:
- 语义分割:每个类别只能创建一个实例;
- 实例分割:每个类别可创建多个实例,标注完成一个实例后,必须点击右上角"确定轮廓"进行实例确认,之后才能继续标注下一个实例(0.5 版本正是通过"确认轮廓"来区分实例的)。
八、交互式分割标注
交互式分割是 PaddleLabel 最具特色的能力,它基于EISeg后端实现(EISeg 本身也收录于本仓库的 EISeg 目录,是飞桨高效交互式分割标注工具,涵盖通用、人像、遥感、医疗、视频等方向的交互式分割模型),详细文档见 交互式分割标注。
8.1 安装与启动 ML 扩展
# pip 安装 pip install paddlelabel-ml # 或源码安装 git clone https://github.com/PaddleCV-SIG/PaddleLabel-ML cd PaddleLabel-ML python setup.py install安装后启动机器学习后端:
paddlelabel_ml # 启动 ML 后端8.2 智能标注操作
进入分割标注任务后:
- 点击右侧工具栏"智能标注"按钮,将 ML 后端的 URL 复制粘贴到 ML Backend 中,点击 Save;
- 在图像上点击:鼠标左键添加正样本点,右键添加负样本点;单个目标的交互式模式以鼠标中键确认,建议标注完每个目标后点击一次中键以获得更高精度的标注结果;
- 点击"确认轮廓"完成单个实例的生成。
注意事项:智能标注状态下左侧工具栏部分功能不可用,需再次点击"智能标注"暂时关闭;ML 后端默认自带一个通用交互式模型,如需领域专用模型,可在模型下载区下载,并在"智能标注"的 Model Path / Weight Path 中填入对应的*.pdmodel与*.pdiparams文件路径。
8.3 可用交互式模型一览
| 模型类型 | 适用场景 | 模型结构 | 模型下载 |
|---|---|---|---|
| 高精度模型 | 通用场景图像标注 | HRNet18_OCR64 | static_hrnet18_ocr64_cocolvis |
| 轻量化模型 | 通用场景图像标注 | HRNet18s_OCR48 | static_hrnet18s_ocr48_cocolvis |
| 高精度模型 | 通用图像标注场景 | EdgeFlow | static_edgeflow_cocolvis |
| 高精度模型 | 人像标注场景 | HRNet18_OCR64 | static_hrnet18_ocr64_human |
| 轻量化模型 | 人像标注场景 | HRNet18s_OCR48 | static_hrnet18s_ocr48_human |
| 轻量化模型 | 遥感建筑物标注场景 | HRNet18s_OCR48 | static_hrnet18_ocr48_rsbuilding_instance |
| 高精度模型 | X 光胸腔标注场景 | Resnet50_Deeplabv3+ | static_resnet50_deeplab_chest_xray |
| 轻量化模型 | 医疗肝脏标注场景 | HRNet18s_OCR48 | static_hrnet18s_ocr48_lits |
| 轻量化模型 | MRI 椎骨图像标注场景 | HRNet18s_OCR48 | static_hrnet18s_ocr48_MRSpineSeg |
| 轻量化模型 | 质检铝板瑕疵标注场景 | HRNet18s_OCR48 | static_hrnet18s_ocr48_aluminium |
九、全流程实战:PaddleLabel 标注 + PaddleSeg 训练
这是 PaddleSeg 训练教程 的完整实战路径:PaddleLabel 标注数据 + PaddleSeg 训练预测 = 快速完成一次图像分割任务。类似的流程也适用于 PaddleClas 训练教程(花朵分类 + ShuffleNetV2_x0_25)与 PaddleX 训练教程(图像分类 + MobileNetV3_ssld)。
9.1 数据准备
先用 PaddleLabel 对自制数据集进行标注,再使用"划分数据集"功能划分训练/验证/测试子集,最后导出数据集。将导出内容统一放入dog_seg_dataset文件夹,目录结构为:
├── dog_seg_dataset │ ├── Annotations │ ├── JPEGImages │ ├── labels.txt │ ├── test_list.txt │ ├── train_list.txt │ └── val_list.txt这一结构与 数据集文件结构说明 中语义分割掩膜格式的规范完全一致,train_list.txt、val_list.txt每行形如JPEGImages/xxx.jpg Annotations/xxx.png,可直接被 PaddleSeg 的自定义数据集读取。
9.2 安装依赖
# GPU 机器(CUDA9/CUDA10) pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple # CPU 机器 # pip install paddlepaddle git clone https://gitee.com/paddlepaddle/PaddleSeg.git cd PaddleSeg pip install -r requirements.txt python setup.py install把数据集放入 PaddleSeg 的 data 目录:
cd ./PaddleSeg/data/ mkdir dog_seg_dataset cd ../../ cp -r ./dog_seg_dataset/* ./PaddleSeg/data/dog_seg_dataset9.3 修改配置文件(mynet.yml 逐项解析)
以 FCN 模型为例,改完配置文件后放到configs目录下重命名为mynet.yml:
batch_size: 4 # 迭代一次送入网络的图片数量 iters: 10000 # 模型迭代次数 train_dataset: type: Dataset # 数据集格式,自定义数据集用 Dataset dataset_root: ../data/dog_seg_dataset # 训练数据集存放的目录 train_path: ../data/dog_seg_dataset/train_list.txt num_classes: 2 # 像素类别数(背景也算为一类) transforms: # 数据变换与数据增强 - type: ResizeStepScaling # 按某比例缩放图像,以 scale_step_size 为步长 min_scale_factor: 0.5 max_scale_factor: 2.0 scale_step_size: 0.25 - type: RandomPaddingCrop # 随机裁剪图像与标注 crop_size: [512, 512] - type: RandomHorizontalFlip # 以一定概率水平翻转 - type: RandomDistort # 图像像素扰动 brightness_range: 0.4 contrast_range: 0.4 saturation_range: 0.4 - type: Normalize # 图像标准化 mode: train # 训练模式 val_dataset: type: Dataset dataset_root: ../data/dog_seg_dataset val_path: ../data/dog_seg_dataset/val_list.txt transforms: - type: Normalize mode: val # 验证模式 num_classes: 2 optimizer: # 优化器设置 type: sgd # 随机梯度下降 momentum: 0.9 # 动量 weight_decay: 0.0005 # 权值衰减,防止过拟合 lr_scheduler: # 学习率策略 type: PolynomialDecay # 多项式衰减,共支持 12 种策略 learning_rate: 0.01 power: 0.9 end_lr: 0 loss: # 损失函数设置 types: - type: CrossEntropyLoss # 交叉熵损失 coef: [1] # 多种损失时按 coef 指定配比 model: # 语义分割模型 type: FCN backbone: # 骨干网络 type: HRNet_W48 pretrained: https://bj.bcebos.com/paddleseg/dygraph/hrnet_w48_ssld.tar.gz # 预训练模型 num_classes: 2 pretrained: Null backbone_indices: [-1]从源码层面可以印证这些配置的真实含义:
type: Dataset对应 paddleseg/datasets/dataset.py 中的Dataset(paddle.io.Dataset)类,其构造函数要求num_classes(须大于 1)、训练模式下必须提供存在的train_path、验证模式下必须提供存在的val_path(见 dataset.py);type: FCN对应 paddleseg/models/fcn.py 中通过@manager.MODELS.add_component注册的FCN(nn.Layer)类,支持pretrained权重加载与backbone_indices指定输出层索引;CrossEntropyLoss、PolynomialDecay等组件均由 paddleseg/cvlibs/builder.py 依据配置文件中的type字段动态构建。
9.4 训练、评估与预测
export CUDA_VISIBLE_DEVICES=0 # 边训练边验证(--do_eval),每 100 个 iters 保存一次模型(--save_interval) python PaddleSeg/train.py \ --config PaddleSeg/configs/mynet.yml \ --do_eval \ --use_vdl \ --save_interval 100 \ --save_dir PaddleSeg/output评估(默认使用训练中保存的模型权重):
python PaddleSeg/val.py \ --config PaddleSeg/configs/mynet.yml \ --model_path PaddleSeg/output/best_model/model.pdparams预测:
# image_path 指定预测图片,save_dir 指定结果保存目录 python PaddleSeg/predict.py \ --config PaddleSeg/configs/mynet.yml \ --model_path PaddleSeg/output/best_model/model.pdparams \ --image_path PaddleSeg/data/dog_seg_dataset/JPEGImages/e619b17a9c1b9f085dc2712eb603171f.jpeg \ --save_dir PaddleSeg/output/result对应到本仓库,PaddleSeg 的训练/评估/预测入口分别为 tools/train.py、tools/val.py、tools/predict.py,模型导出可用 tools/export.py,这与教程中使用的 CLI 参数(--config、--model_path、--image_path、--save_dir等)完全一致。至此,从 PaddleLabel 标注到 PaddleSeg 训练预测的闭环即告完成。
十、开发者视角:PaddleLabel 后端架构
对希望参与开发或二次集成的读者,开发者指南 提供了后端实现的关键信息:
- 技术栈:围绕connexion(spec-first 路由框架,先写 OpenAPI spec,由 connexion 负责路由与参数完整性校验)构建;配合SQLAlchemy(ORM)、marshmallow(序列化)、Flask(Web 框架)。数据库默认 SQLite,基于 SQLAlchemy 可方便切换 PostgreSQL;项目规划上解耦 SQLAlchemy/marshmallow 与 Flask,因此约定避免使用 Flask 专属函数(如用
pplabel.api.util.abort而非flask.abort)。 - 项目结构:核心代码位于
pplabel包下,分为api/(controller 处理 API 调用、model 为 SQLAlchemy 模型、schema 为 marshmallow 序列化 schema)、task/(各类标注任务的导入/导出实现,如 classification/detection/segmentation,以及io/文件格式 IO)、openapi.yml(API 规范)等;测试位于test/(test_task.py)。 - 请求处理流程:connexion 按 OpenAPI spec 校验参数并路由 → 检查 header 中的
request_id(用于防止同一操作重复执行)→ 路径参数传入 handler、请求体经 connexion 读取 → marshmallow 反序列化并校验 → pre/post 触发器(如拒绝在项目下创建重名标签)→ 数据持久化 → 返回。 - 命名规范:后端 Python 变量/表列为 snake_case,表名为单数 camelCase;API 端点为小写复数;前端为 camelCase。
- 响应码约定:200 OK、201 创建成功、400 约束校验失败、401 未授权、404 未找到、409 唯一约束冲突。
此外,文档还提示了一个易混淆点:内部label.id从 1 开始,但为兼容其他飞桨工具,labels.txt与xx_list.txt中的标签编号从 0 开始——这与前面"导入时标签编号从 0 递增"的规则相互印证。
十一、总结
PaddleLabel 将"手动标注 + 智能预标注"两种模式、分类/检测/分割三类任务、多格式(ImageNet、VOC、COCO、YOLO、掩膜 PNG/TIFF)数据集导入导出统一到一个工具中,并且与飞桨生态紧密衔接。通过本仓库 contrib/PaddleLabel 下的系列文档(安装、快速开始、分类标注、检测标注、语义分割标注、实例分割标注、交互式分割标注 及 PaddleSeg 训练教程),用户可以快速完成"数据标注 → 数据划分导出 → 模型训练 → 评估预测"的全流程;开发者也可以基于其后端架构指南扩展新的标注任务类型。对于正在使用 PaddleSeg 构建自定义分割模型的团队,PaddleLabel 提供了一条开箱即用的数据生产链路。
- 人工智能
- 计算机视觉
- 预训练
【免费下载链接】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.
相关推荐
PaddleLabel 标注到 PaddleSeg 训练:图像分割数据准备、配置与全流程实战指南
PaddleLabel 标注到 PaddleSeg 训练:图像分割数据准备、配置与全流程实战指南 本文基于 PaddleSeg 仓库中 contrib/Padd
人工智能计算机视觉预训练PaddleLabel 标注 + PaddleDetection 训练:道路标志检测数据集全流程实战
PaddleLabel 标注 + PaddleDetection 训练:道路标志检测数据集全流程实战 导读 本文给出「数据标注 → 模型训练 → 评估预测」的一
人工智能计算机视觉预训练PaddleLabel 到 PaddleClas 花朵分类全流程实战:标注、数据划分、训练与预测
PaddleLabel 到 PaddleClas 花朵分类全流程实战:标注、数据划分、训练与预测 从 PaddleLabel 标注自制花朵数据集,到使用 Pad
人工智能计算机视觉预训练
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考