拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PaddleSeg 自定义数据集准备与配置实战:目录结构、文件列表生成与 Dataset 配置详解

PaddleSeg 自定义数据集准备与配置实战:目录结构、文件列表生成与 Dataset 配置详解 人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-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 自定义数据集使用指南完整覆盖从原始图片/标注整理、自动划分生成train.txt/val.txt/test.txt文件列表到在训练配置文件中声明自定义数据集的全部流程。读完本文你将掌握 PaddleSeg 自定义数据集的标准目录规范、两个文件列表生成脚本split_dataset_list.py与create_dataset_list.py的全部参数含义与使用场景并能独立编写一份可直接用于训练的train_dataset/val_datasetYAML 配置同时理解底层 Dataset 数据集类 的读取原理与常见报错规避方法。1. 自定义数据集的标准目录结构使用自定义数据集训练的第一步是按照 PaddleSeg 约定组织目录结构。官方文档建议将数据集划分为如下形式custom_dataset | |--images | |--image1.jpg | |--image2.jpg | |--... | |--labels | |--label1.jpg | |--label2.png | |--... | |--train.txt | |--val.txt | |--test.txt其中images/存放原始图像labels/存放与之一一对应的标注图分割任务中通常为单通道灰度 PNG像素值即类别编号根目录下三个 txt 文件分别描述训练、验证、测试三个子集的样本清单。train.txt、val.txt的内容格式如下每一行由「图像相对路径 分隔符 标注相对路径」构成images/image1.jpg labels/label1.png images/image2.jpg labels/label2.png ...这两类 txt 文件正是 PaddleSeg 的 dataset 父类 Dataset 读取数据的依据所有内置数据集类Cityscapes、VOC、ADE20K 等都继承自该类自定义数据集同样通过它加载。也就是说只要把数据整理成上述结构并生成对应的 txt 文件列表PaddleSeg 就能以统一的方式完成训练、验证与预测的数据加载。2. 方式一自动化划分数据集split_dataset_list.py如果你的原始数据尚未按上述结构划分只有零散的原图和标注图没有训练/验证/测试子集推荐使用split_dataset_list.py脚本一键完成「随机打乱 按比例切分 生成 txt」。2.1 前置目录整理首先将自定义数据集摆放成如下结构目录名、文件名均可自定义./dataset/ # 数据集根目录 |--images # 原图目录 | |--xxx1.jpg (xx1.png) | |--... | └--... | |--annotations # 标注图目录 | |--xxx1.png | |--... | └--...2.2 命令格式与参数说明python tools/data/split_dataset_list.py dataset_root images_dir_name labels_dir_name ${FLAGS}位置参数说明dataset_root数据集根目录images_dir_name原图目录名labels_dir_name标注图目录名。可选 FLAGS 说明如下表与当前仓库 split_dataset_list.py 中argparse实际注册的参数对照| FLAG | 含义 | 默认值 | 参数数目 | | - | - | - | - | |--split| 数据集切分比例训练/验证/测试 |0.7 0.3 0| 3 | |--separator| 文件列表分隔符 | 空格 | 1 | |--format| 图片和标签集的数据格式 |jpg png| 2 | |--postfix| 按文件主名无扩展名是否包含指定后缀对图片和标签集进行筛选 | 2 个空字符 | 2 |需要说明的是文档中的参数表还列有--label_class标注类别默认__background__ __foreground__当前仓库源码中实际注册的 flag 为--split、--separator、--format、--postfix四个类别数量在训练配置中以num_classes指定见第 4 节。从源码实现generate_list可以看到几个关键约束与行为--split三个比例之和必须为 1且每个取值须在 0~1 之间否则脚本抛出ValueError若第三个比例设为 0则不生成test.txt的样本内容文件仍会创建脚本通过glob匹配目录、子目录乃至三级子目录下的文件get_files因此原图/标注可以放在多级子目录中切分前会对原图与标注采用相同随机种子同步打乱保存np.random.get_state()后分别 shuffle保证原图与标注的配对关系不被破坏写入 txt 时会把dataset_root前缀从路径中剥离只保留相对路径。2.3 使用示例以 6:2:2 的比例切分、图片格式 jpg、标注格式 png 为例python tools/data/split_dataset_list.py dataset_root images annotations --split 0.6 0.2 0.2 --format jpg png2.4 数量匹配要求重要约束生成文件列表必须满足以下条件之一原图与标注图片数量一致一一配对只有原图没有标注图片如纯测试场景。若数据集缺少标注图片将生成不含分隔符和标注图片路径的文件列表每行只有图像路径。源码中当原图与标注数量不一致时会直接抛出Exceptionsplit_dataset_list.py提示检查数据集。运行后将在数据集根目录下生成train.txt、val.txt、test.txt以及labels.txt后者用于记录类别名称列表。3. 方式二已有划分好的数据集仅生成文件列表create_dataset_list.py如果你的数据集已经按 train/val/test 划分好了目录例如遵循images/train、annotations/train这种二级目录结构则无需再做随机切分直接执行create_dataset_list.py生成文件列表即可。3.1 基本用法指定分隔符与格式# 生成文件列表其分隔符为空格图片和标签集的数据格式都为 png python tools/data/create_dataset_list.py your/dataset/dir --separator --format png png3.2 指定文件夹与二级目录名# 生成文件列表其图片和标签集的文件夹名为 img 和 gt # 训练和验证集的文件夹名为 training 和 validation不生成测试集列表 python tools/data/create_dataset_list.py your/dataset/dir \ --folder img gt --second_folder training validation该脚本支持的参数见 create_dataset_list.pydataset_root位置参数必须指定的数据集目录--type数据集类型custom默认或cityscapes。选择cityscapes时会自动套用 Cityscapes 专用配置_leftImg8bit与_gtFine_labelTrainIds后缀、leftImg8bit/gtFine目录、png 格式自定义数据集无需指定--type--folder原图与标注文件夹名默认images annotations--second_folder二级目录训练/验证/测试子集名默认train val test可只写training validation以跳过测试集--separator文件列表分隔符默认空格--format图片与标签格式默认jpg png--postfix文件名后缀过滤默认空。运行后在数据集根目录下生成train.txt、val.txt、test.txt和labels.txt。PaddleSeg 正是通过读取这些文本文件来定位图像路径的。3.3 标签编码约定关于标注图的像素值有一条必须遵守的约定官方文档明确说明标注类别编号从 0、1 开始连续取值不能跳跃例如只有类别 0 和类别 1不应出现 3 而缺失 2如果有需要忽略的像素如边缘、未知区域将其标为255这与 Dataset 类的ignore_index255默认值一致见下节。4. 在训练配置中声明自定义数据集数据文件准备好后即可在训练配置文件中声明数据集。划分好的训练数据集可按如下方式配置验证数据集同理将mode改为valtrain_dataset: type: Dataset dataset_root: the-relative-path-to-your-data num_classes: 2 transforms: - type: ResizeStepScaling min_scale_factor: 0.5 max_scale_factor: 2.0 scale_step_size: 0.25 - type: RandomPaddingCrop crop_size: [512, 512] - type: RandomHorizontalFlip - type: Normalize mode: train4.1 关键字段说明type: Dataset使用 PaddleSeg 通用的自定义数据集类即 dataset.py 中注册的Dataset。当mode为train时PaddleSeg 会自动定位根目录下的train.txt为val/test时对应val.txt/test.txt。dataset_root填写数据根目录相对路径或绝对路径均可相对路径基于配置文件位置解析。num_classes类别总数不含忽略像素 255源码中要求num_classes 1否则抛出ValueErrordataset.py。mode必须是train、val、test三者之一否则直接报错dataset.py。transforms数据预处理与增强流水线由 Compose 按顺序串行执行。4.2 transforms 各算子源码级解读均见 paddleseg/transforms/transforms.pyResizeStepScalingtransforms.py在min_scale_factor与max_scale_factor之间按scale_step_size步长随机取缩放系数对图像与标注做等比缩放。默认值分别为 0.75、1.25、0.25要求最小值不大于最大值否则抛ValueError。文档示例用 0.5~2.0、步长 0.25覆盖更大的尺度扰动范围。RandomPaddingCroptransforms.py随机裁剪crop_size大小的子图若原图小于裁剪尺寸则在右下方向做 padding 补齐——原图 padding 值为 127.5标注图 padding 值为 255即 ignore_index不参与 loss 计算从而避免裁剪边界被误当成某个类别。另有category_max_ratio单类别最大占比与loop_times最大尝试次数默认 10等进阶参数。RandomHorizontalFliptransforms.py以概率prob默认 0.5水平翻转并且会同步翻转标注图通过gt_fields机制保证图像与标签增强一致。Normalizetransforms.py按 mean/std 对图像归一化默认(0.5,)、(0.5,)长度需为 1 或 3分别对应灰度图与三通道图。实际训练时val_dataset通常不包含随机增强算子只做 Resize/Normalize以保证评估结果稳定。5. 底层原理Dataset 类如何读取自定义数据理解 paddleseg/datasets/dataset.py 的读取逻辑有助于排查「文件列表格式错误」等常见问题。其核心流程如下构造阶段__init__根据mode选择对应的train_path/val_path/test_path三者任一缺失或路径不存在都会报错逐行读取 txtline.strip().split(separator)得到[图像路径, 标注路径]train/val 模式下每行必须恰好有 2 列否则抛出File list format incorrect!test 模式允许只有 1 列无标注用于纯推理场景将文件内记录的相对路径与dataset_root拼接为完整路径dataset.py。取样本阶段__getitem__返回图像、标签并把label加入gt_fields列表使图像与标签执行同步增强val 模式下若标签是二维数组会补成[1, H, W]。需要边缘监督edgeTrue时还会调用mask_to_binary_edge生成边缘 mask供带边缘损失的模型使用。因此只要你的 txt 文件满足「两列、以空格分隔、路径基于 dataset_root 可解析」自定义数据集就能无缝接入 PaddleSeg 的 训练入口 tools/train.py、验证与预测全流程。6. 常见问题与注意事项速查图片与标注数量不一致split_dataset_list.py会直接报错请检查images与annotations目录是否存在多余文件或子目录未被 glob 匹配到。文件列表行数不足两列训练/验证时必须每行包含图像与标注两列且分隔符要与生成 txt 时使用的--separator一致默认空格测试列表可仅含图像路径。类别编号跳跃标注像素值必须从 0 开始连续编号需要忽略的区域统一标记为 255。--split之和必须为 1例如0.7 0.3 0或0.6 0.2 0.2否则脚本抛ValueError。--postfix过滤适合同一目录下混有_leftImg8bit、_gtFine等命名变体文件的场景普通自定义数据保持默认空即可。目录与文件名自由split_dataset_list.py与create_dataset_list.py均支持自定义文件夹名images/annotations、img/gt、train/val/test等只需保证参数与目录结构一致。按照上述流程完成「目录整理 → 生成 txt → 编写 YAML 配置」三步后即可直接使用python tools/train.py --config your_config.yml启动自定义数据集的训练。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-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 准备自定义数据集目录结构、文件列表生成与训练配置全指南使用 PaddleSeg 准备自定义数据集目录结构、文件列表生成与训练配置全指南 本文是一份面向 PaddleSeg 用户的完整自定义数据集准备指南覆盖从数人工智能计算机视觉预训练PaddleSeg 自定义数据集准备全指南目录划分、文件列表生成与训练配置PaddleSeg 自定义数据集准备全指南目录划分、文件列表生成与训练配置 本指南面向需要在 PaddleSeg 中使用自建图像分割数据集进行训练的开发者完人工智能计算机视觉预训练配置管理详解fuels-ts配置文件结构与自定义选项配置管理详解fuels ts配置文件结构与自定义选项 概述 Fuel Network 是一个专为区块链应用设计的高性能Layer 2解决方案而 fuels区块链Web3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表