ARTICLE DETAIL

资讯详情

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

PaddleSeg 训练实战 FAQ 全解析:从预训练权重加载到数据增强、SOTA 与可视化排查

PaddleSeg 训练实战 FAQ 全解析:从预训练权重加载到数据增强、SOTA 与可视化排查 人工智能计算机视觉预训练【免费下载链接】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点击查看免费下载本文基于 docs/faq/faq/faq_cn.md 整理并深度扩充聚焦 PaddleSeg 模型训练过程中的 7 个高频问题本地预训练权重的加载方式、iters与epoch的换算关系、YAML 配置的继承与覆盖机制、数据增强的加载顺序及其引发的 DataLoader 错误、Cityscapes 上的 SOTA 复现、best_model的保存条件以及训练中断后 VisualDL 日志的可视化处理。读者将掌握一套可复现、可排错、可深入源码核对的 PaddleSeg 训练方法论并能在实际训练中直接对照使用。1. 如何从本地加载预训练模型的权重参数PaddleSeg 的模型推荐配置统一存放在configs目录下各模型文件夹的 YAML 文件中。以 ann_resnet50_os8_cityscapes_1024x512_80k.yml 为例其model段落完整展示了预训练权重的两种挂载位置model: type: ANN backbone: type: ResNet50_vd output_stride: 8 pretrained: https://bj.bcebos.com/paddleseg/dygraph/resnet50_vd_ssld_v2.tar.gz backbone_indices: [2, 3] key_value_channels: 256 inter_channels: 512 psp_size: [1, 3, 6, 8] enable_auxiliary_loss: True align_corners: False pretrained: null图中红色部分对应model.backbone.pretrained即骨干网络Backbone预训练参数文件的存放位置绿色部分对应model.pretrained即整个分割网络Segmentation Head 整体的预训练参数文件位置。两点关键注意事项骨干网络预训练权重该字段默认直接以 https 链接形式指向官方提供的下载地址。如果你在本地已有骨干网络的预训练参数请用绝对路径替换该 YAML 中backbone下的pretrained或者根据将要执行的train.py所在目录为该预训练参数的存放位置设置相对路径。分割网络预训练权重若本地已有整个分割网络的预训练参数同样用绝对路径或相对路径替换 YAML 中model下的pretrained。从源码结构看model.pretrained支持null表示不加载整体预训练权重如上例而backbone.pretrained则默认由官方 URL 提供训练时骨架网络会先加载 ImageNet 预训练参数再进入语义分割训练流程。两者的加载逻辑均由 paddleseg/cvlibs/config.py 解析配置后在模型构建阶段完成参数初始化。2. 为什么 PaddleSeg 不采用设置 epoch 的方式设置epoch的方式会受数据集大小的影响同一模型在不同规模数据集上达到同等收敛程度所需的 epoch 数并不一致。因此 PaddleSeg 统一按照iters迭代次数来设置训练进度。常见训练配置参数之间的关系如下数据集大小N批量大小batch_sizeGPU 数量num_gpus总迭代次数iters则有epoch (iters * batch_size * num_gpus) / N即一个 epoch 覆盖N个样本而每次迭代iter会消费batch_size * num_gpus个样本。在 cityscapes.yml 中可以看到基础配置直接以batch_size: 2、iters: 80000形式给出模型子配置如 ANN同样在_base_之上显式覆写这两个值全程不出现 epoch 概念。3. 数据增强配置的加载顺序是怎样的由于数据增强的配置需要在 YAML 文件中指定先介绍 PaddleSeg 配置文件的基本知识。Cityscapes 是图像分割领域最常使用的数据集之一其常用配置已经沉淀在_base_目录中。3.1_base_继承机制PaddleSeg 以_base_字段指定配置之间的继承关系_base_: ../_base_/cityscapes.yml _base_: ../_base_/cityscapes_1024x1024.yml从 paddleseg/cvlibs/config.py 的parse_from_yaml与merge_config_dicts实现可以看到_base_支持单个字符串或字符串列表解析时递归加载被继承的基础配置并以merge_config_dicts做字典合并——子类覆盖父类中的同名配置而_base_字段本身会被pop移除不会进入最终配置。配置继承遵循三条规则数据增强由transforms指定由上到下依次加载Compose 按列表顺序串行执行。子类覆盖父类中的同名配置深层键逐层合并同名键整体替换。命令行参数如--batch_size 4覆盖--config内部的同名配置如 YAML 中指定的batch_size: 8。第 3 条在 tools/train.py 中体现为Config构造时接收learning_rate、iters、batch_size、opts等参数通过 update_config_dict 覆写配置字典--opts还支持keyvalue形式如--opts batch_size1 test_config.scales0.75,1.0,1.25按点号路径更新任意嵌套键。3.2 transforms 的实际执行顺序以 cityscapes.yml 的训练集transforms为例标准顺序为train_dataset: type: Cityscapes dataset_root: data/cityscapes transforms: - type: ResizeStepScaling min_scale_factor: 0.5 max_scale_factor: 2.0 scale_step_size: 0.25 - type: RandomPaddingCrop crop_size: [1024, 512] - type: RandomHorizontalFlip - type: RandomDistort brightness_range: 0.4 contrast_range: 0.4 saturation_range: 0.4 - type: Normalize mode: train各增强算子均注册在 paddleseg/transforms/transforms.py通过manager.TRANSFORMS.add_component注册由Compose按列表顺序调用ResizeStepScaling按比例在min_scale_factor与max_scale_factor之间随机缩放步长为scale_step_sizeRandomPaddingCrop随机裁剪出crop_size大小的子图若目标尺寸大于原图则右下角补零填充RandomHorizontalFlip以默认prob0.5的概率水平翻转RandomDistort随机调整亮度、对比度、饱和度brightness_range等均为 0.4Normalize最后做均值/标准差归一化。通用原则凡是会改变图像尺寸的算子缩放、裁剪、旋转、翻转其顺序与搭配决定了后续算子能否拿到一致的输入尺寸因此应把尺寸变换类增强放在像素级增强如RandomDistort、Normalize之前并保证训练与验证流水线尺寸逻辑一致。4. 数据增强配置为何会引起 DataLoader reader thread 错误如果你使用的是形状各不一致的自定义数据集这很可能是由不得当的数据增强加载顺序引起的。结合 Q3 可知PaddleSeg 的数据增强配置是按顺序加载的。典型反例RandomRotation会改变图片大小旋转后以填充值补边实际输出尺寸发生变化如果在其他修正尺寸的增强配置如Crop、Resize之后设置它将导致后续批次图像的尺寸不一致从而引发 DataLoader reader thread 错误批量张量无法拼接。从源码实现看RandomRotationtransforms.py默认max_rotation15、im_padding_value127.5旋转后图像尺寸会随之变化而RandomPaddingCroptransforms.py则是输出尺寸固定为crop_size的关键算子。因此在开启训练之前请参照 Q3 仔细检查数据增强配置顺序确保所有尺寸敏感的算子RandomRotation、Resize、Crop处于正确次序并让最终输出的尺寸在所有样本上保持一致。5. 目前 PaddleSeg 在 Cityscapes 上的 SOTA 模型是什么PaddleSeg 在 Cityscapes 验证集上的 SOTA 模型可达到87% 的 mIoU相关实现位于 contrib/CityscapesSOTA/README.md。该实现基于 Hierarchical Multi-Scale Attention并做了三处针对性优化使用 dice loss 与 bootstrapped cross entropy loss 替代纯交叉熵损失每个 epoch 学习全部 fine 数据以及等量的 coarse 数据评估时使用等差尺度序列替代等比尺度序列。对应的训练与验证入口为 contrib/CityscapesSOTA/train.py、predict.py配置见 contrib/CityscapesSOTA/configs。若要在本地复现该 SOTA需先准备 Cityscapes 数据集leftImg8bit_trainvaltest、gtFine_trainvaltest与leftImg8bit_trainextra并通过tools/data/convert_cityscapes.py完成标签格式转换。需要说明的是87% 的 mIoU 是该项目在该数据集与对应实验设定下的公开结果实际指标会受数据划分、超参与硬件环境影响。6. 为什么训练过程中不保存 best_modelbest_model是在训练过程中通过验证对比得到的因此需要在训练前开启--do_eval选项。在 tools/train.py 中可以看到val_dataset builder.val_dataset if args.do_eval else None即只有传入--do_eval时才会构建验证数据集并周期性地在验证集上评测从而产出与保存best_model。若未开启该选项训练过程只按--save_interval默认 1000 iters保存普通 checkpointkeep_checkpoint_max默认保留 5 份。推荐的最小化训练命令示例python tools/train.py \ --config configs/ann/ann_resnet50_os8_cityscapes_1024x512_80k.yml \ --do_eval \ --save_interval 1000 \ --use_vdl其中--use_vdl用于同步记录训练/验证指标到 VisualDL供 Q7 所述的可视化流程使用。7. 恢复训练后为什么 VDL 仅可视化了后半部分如何可视化中断前的训练由于算力限制或各种不可抗力模型可能未能一次训练完毕。若中断后基于--resume_model恢复训练新的日志会从恢复点继续写入因此 VisualDL 中只能看到后半部分曲线。两种处理办法手动合并日志把第一次生成的日志与第二次生成的日志内容拷贝到一个新的二进制日志文件中再读取该合并文件即可看到完整曲线。PaddleSeg 官方在 FAQ 编写时尚未内置日志合并工具未来版本将支持多个日志合并。指定日志名续写在中断后继续训练的场景中调用 VisualDL 时指定日志文件名就可以直接在指定的日志文件中继续续写避免产生多个割裂的日志片段。实操建议中断前记录好首次训练的--save_dir与 VisualDL 日志路径恢复训练时保持--save_dir与 VDL 日志路径不变并配合--resume_model指定上一次的 checkpoint即可最大程度保证曲线连续性。若两次日志已割裂则采用拷贝合并到新二进制文件的方式做可视化。小结PaddleSeg 的训练体系围绕YAML 配置驱动展开预训练权重通过backbone.pretrained与model.pretrained两级字段挂载支持 URL、绝对路径、相对路径三种形式训练进度以iters计并以epoch (iters * batch_size * num_gpus) / N与数据集规模换算配置通过_base_继承并遵循子类覆盖父类、命令行覆盖 YAML的优先级数据增强由transforms列表自上而下串行执行尺寸敏感算子必须顺序正确否则会触发 DataLoader reader thread 错误best_model依赖--do_eval的验证流程训练中断后的 VDL 可视化可通过日志合并或指定日志名续写解决。以上所有结论均可在 paddleseg/cvlibs/config.py、tools/train.py、paddleseg/transforms/transforms.py 与 configs 下的实际配置文件中逐一核对读者可直接对照本文排查自身训练问题。赞分享人工智能计算机视觉预训练【免费下载链接】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 训练 FAQ 全解析预训练权重加载、iters 机制、数据增强顺序与 best_model 保存PaddleSeg 训练 FAQ 全解析预训练权重加载、iters 机制、数据增强顺序与 best_model 保存 本文围绕 PaddleSeg 官方 FA人工智能计算机视觉预训练XTuner 自定义预训练数据集实战从数据准备到增量预训练全流程指南XTuner 自定义预训练数据集实战从数据准备到增量预训练全流程指南 XTuner 支持使用自定义数据集对基座大语言模型进行增量预训练Incremental大模型模型微调RVC WebUI零基础教程10分钟语音数据训练专属AI变声模型的完整路线RVC WebUI零基础教程10分钟语音数据训练专属AI变声模型的完整路线 RVC WebUIRetrieval based Voice Conversio人工智能大模型预训练深度学习NLP计算机视觉多模态语音音频微调上一篇如何快速优化Windows 11免费开源工具的终极秘籍下一篇trackerslist 选表指南5 个文件配好 qBittorrent 公共 Tracker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表