尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CoreNet 实战:用 RangeAugment 可学习数据增强训练 DeepLabv3 语义分割模型(ADE20k 与 PASCAL VOC)

CoreNet 实战:用 RangeAugment 可学习数据增强训练 DeepLabv3 语义分割模型(ADE20k 与 PASCAL VOC) 深度学习计算机视觉NLP多模态模型训练大模型【免费下载链接】corenetCoreNet: A library for training deep neural networks项目地址https://gitcode.com/GitHub_Trending/co/corenet点击查看免费下载本文是 CoreNet 仓库中 RangeAugment 分割任务指南 的深度展开聚焦如何以 RangeAugment 作为在线可学习增强器搭配 DeepLabv3 分割头在 ADE20k 与 PASCAL VOC 两个数据集上训练与评估语义分割模型。读完本文你将掌握完整的单卡训练命令、验证集评估命令、单图 Demo 推理命令并理解增强参数是如何被学习出来的源码在corenet/modeling/neural_augmentor以及配套 YAML 配置中每个关键项的实际含义。1. 任务背景分割任务 RangeAugmentRangeAugment论文编号 arXiv:2212.10553是一种高效的在线自动增强方法其核心思想是为每个模型、每个任务学习每种增强操作的幅度范围而不是像传统 AutoAugment 那样在庞大的策略空间中搜索离散策略。在 RangeAugment 项目主页 中同一套方法被用于五类任务ImageNet 图像分类、ADE20k/PASCAL VOC 语义分割、MS-COCO 目标检测、图文对比学习CLIP以及 ImageNet 蒸馏。一个重要提示来自项目 README在 CoreNet 代码库中RangeAugment 被称为Neural AugmentorNA对应目录为 corenet/modeling/neural_augmentor。阅读源码与配置时请记住这一命名对应关系。本文所对应的分割实验配置全部位于 projects/range_augment/segmentation 下分为ade20k/与pascal_voc/两个子目录覆盖从移动端骨干MobileNetv1/v2/v3、MobileViTv1到非移动端骨干EfficientNet-B3、ResNet-50/101共 7 种 DeepLabv3 组合。2. RangeAugment 在 CoreNet 中的实现原理在进入训练命令之前先理解可学习增强在源码中如何落地这有助于你解释实验结果与调参。2.1 增强器模型Neural Augmentor核心实现位于 corenet/modeling/neural_augmentor/neural_aug.pyBaseNeuralAugmentor基类负责参数注册与统一前向逻辑。它维护三种可学习的增强函数brightness亮度、contrast对比度、noise噪声并提供get_trainable_parameters返回可学习参数及对应的lr_multiplier配置项model.learn_augmentation.lr_multiplier默认 1.0。BasicNeuralAugmentor对应mode: basic学习固定的增强幅度FixedSampler同一参数作用于整个 batch 的所有样本。DistributionNeuralAugmentor对应mode: distribution学习一个均匀分布的上下界范围UniformSampler每个样本从该范围内采样具体幅度——这正是 RangeAugment学习幅度范围的精髓。分割实验默认使用此模式。build_neural_augmentor根据model.learn_augmentation.mode分发构造未设置时返回None即不做可学习增强。从前向逻辑BaseNeuralAugmentor.forward可以看到具体的运行时行为每个 batch 中随机选取约 50% 的样本应用增强、每次迭代随机打乱增强顺序、每个样本的幅度从学习到的分布中采样最后将输出裁剪到[0, 1]区间。采样器与裁剪函数的实现位于 corenet/modeling/neural_augmentor/utils/neural_aug_utils.pyUniformSampler内部以nn.Parameter形式持有_low与_high经Clip函数映射后作为分布边界random_brightness是x * magnituderandom_contrast按每通道均值混合random_noise叠加高斯噪声。分割配置中三个开关brightness/contrast/noise: true即对应这三种操作。2.2 增强损失如何驱动学习过程可学习增强参数需要有监督信号来优化。CoreNet 在 corenet/loss_fn/neural_augmentation.py 中实现了NeuralAugmentation损失注册名为neural_augmentation它比较原图与增强后图像的相似度感知指标perceptual_metric目前支持psnr并以 smooth L1 损失把二者的 MSE 拉向一个目标值target_value: [40, 20]目标 PSNR 从 40 逐步降低到 20即增强强度随训练从弱到强PSNR 会被换算成目标 MSEPSNR 20log10(255) - 10log10(MSE)。curriculum_method: cosine目标值按余弦课程曲线变化也可选linear两者实现于同文件的cosine_curriculum/linear_curriculum。alpha默认 100损失缩放系数当指标为 PSNR 时除以 65025最大可能 MSE。该损失与分割的交叉熵损失一起挂载在composite_loss下见下一节配置从而让增强幅度范围与分割任务本身联合优化。3. 训练 DeepLabv3 分割模型单卡 A100原文档给出的训练入口非常简单单节点、单张 A100 GPU即可训练移动端/非移动端骨干 DeepLabv3 分割头的分割模型export CFG_FILEPATH_TO_MODEL_CONFIGURATION_FILE corenet-train --common.config-file $CFG_FILE --common.results-loc segmentation_results其中corenet-train是安装后生成的命令行入口由 corenet/cli/entrypoints.py 映射到corenet.cli.main_train:main_worker--common.config-file指向模型配置文件见下文列表--common.results-loc指定日志与检查点输出目录--common.override-kwargs可用于临时覆盖 YAML 中的任意键值无需改动配置文件。配置文件位置即CFG_FILE的可选值原文档提示按需选择ADE20k见 projects/range_augment/segmentation/ade20k包含deeplabv3_mobilenet_v1/v2/v3.yaml、deeplabv3_mobilevit.yaml、deeplabv3_efficientnet_b3.yaml、deeplabv3_resnet_50/resnet_101.yamlPASCAL VOC见 projects/range_augment/segmentation/pascal_voc包含除 MobileViT 外的 6 个配置deeplabv3_mobilenet_v1/v2/v3.yaml、deeplabv3_efficientnet_b3.yaml、deeplabv3_resnet_50/resnet_101.yaml。注意请务必修改配置文件中的数据集路径。训练与验证数据集的根目录分别由dataset.root_train与dataset.root_val指定仓库中的默认值是示例机器上的绝对路径如 ADE20k 的/mnt/vision_datasets/ADEChallengeData2016/、PASCAL 的/mnt/vision_datasets/pascal_voc/VOCdevkit/直接运行会失败需改为你本机的数据集位置。3.1 配置逐项解读以 ADE20k ResNet-50 为例以 projects/range_augment/segmentation/ade20k/deeplabv3_resnet_50.yaml 为例逐段解读关键配置common: run_label: train accum_freq: 1 # 梯度累积步数1 表示不累积 log_freq: 200 # 每 200 步打印一次日志 auto_resume: false # 是否自动从断点恢复 mixed_precision: true # 开启混合精度训练A100 上显著提速 dataset: root_train: /mnt/vision_datasets/ADEChallengeData2016/ root_val: /mnt/vision_datasets/ADEChallengeData2016/ name: ade20k category: segmentation train_batch_size0: 16 # 有效 batch 为 1616 × 1 GPU val_batch_size0: 4 eval_batch_size0: 1 # 推理时固定为 1见第 4 节 workers: 8数据增强部分训练时的几何/尺寸增强与可学习的 RangeAugment 增强是两套互补机制image_augmentation: random_crop: enable: true seg_class_max_ratio: 0.75 # 裁切窗口内允许的最大前景类占比 pad_if_needed: true mask_fill: 0 # 裁剪不足时 mask 填充值ADE20k 背景索引为 0 random_horizontal_flip: enable: true resize: enable: true size: [512, 512] interpolation: bicubic random_short_size_resize: enable: true interpolation: bicubic short_side_min: 256 # 短边随机缩放范围下界 short_side_max: 768 # 短边随机缩放范围上界 max_img_dim: 1024 # 长边上限 sampler: name: batch_sampler bs: crop_size_width: 512 crop_size_height: 512损失部分采用composite_loss组合两个子损失——分割交叉熵与可学习增强损失。交叉熵设置了ignore_index: -1ADE20k 中 -1 为忽略类与aux_weight: 0.4DeepLabv3 辅助头损失权重增强损失采用上文所述的 PSNR 课程机制loss: category: composite_loss composite_loss: - loss_category: segmentation loss_weight: 1.0 segmentation: name: cross_entropy cross_entropy: ignore_index: -1 aux_weight: 0.4 - loss_category: neural_augmentation loss_weight: 1.0 neural_augmentation: perceptual_metric: psnr target_value: [ 40, 20 ] # 目标 PSNR 从 40 降到 20 curriculum_method: cosine优化器与调度器SGDmomentum 0.9、weight_decay 1e-4、BN 与 bias 不衰减 余弦退火共 50 个 epoch学习率从 0.02 衰减到 1e-4optim: name: sgd weight_decay: 1.e-4 no_decay_bn_filter_bias: true sgd: momentum: 0.9 scheduler: name: cosine is_iteration_based: false max_epochs: 50 cosine: max_lr: 0.02 min_lr: 0.0001模型部分分割头为encoder_decoderdeeplabv3output_stride: 8ASPP 空洞率[12, 24, 36]骨干为 ImageNet 预训练的 ResNet-50pretrained字段指向公开预训练权重。可学习增强使用distribution模式同时学习 brightness/contrast/noise 三个操作model: segmentation: name: encoder_decoder n_classes: 150 # ADE20k 为 150 类PASCAL VOC 配置中为 21 类 seg_head: deeplabv3 output_stride: 8 use_aux_head: true deeplabv3: aspp_dropout: 0.1 aspp_sep_conv: false aspp_out_channels: 512 aspp_rates: [ 12, 24, 36 ] classification: name: resnet n_classes: 1000 pretrained: https://docs-assets.developer.apple.com/... # 骨干预训练权重 resnet: depth: 50 learn_augmentation: brightness: true contrast: true noise: true mode: distribution ema: enable: true momentum: 0.0001 stats: val: [ loss, iou ] train: [ loss ] checkpoint_metric: iou # 以验证集 mIoU 作为选点标准 checkpoint_metric_max: true # mIoU 越大越好对比 PASCAL VOC 版本配置两个数据集的关键差异一目了然n_classes150 vs 21、ignore_index-1 vs 255、mask_fill0 vs 255、训练 batch 规模16 vs 32以及 PASCAL 额外启用pascal.use_coco_data使用 COCO 预处理数据做增强。移动端骨干配置如 deeplabv3_mobilevit.yaml则额外开启了model.activation_checkpointing: true以降低显存占用并搭配swish激活与较大的accum_freq: 2。4. 在验证集上评估分割模型训练完成后用独立的评估入口corenet-eval-seg在验证集上计算定量指标export CFG_FILEPATH_TO_MODEL_CONFIGURATION_FILE export MODEL_WEIGHTSPATH_TO_MODEL_WEIGHTS_FILE CUDA_VISIBLE_DEVICES0 corenet-eval-seg --common.config-file $CFG_FILE --common.results-loc seg_results --model.segmentation.pretrained $MODEL_WEIGHTS要点说明corenet-eval-seg由 corenet/cli/entrypoints.py 映射到corenet.cli.main_eval:main_worker_segmentation进而调用 corenet/engine/eval_segmentation.py 中的main_segmentation_evaluationL511-L575。与分类任务不同分割评估走独立流程因为输入图像尺寸不一、不能做破坏质量的固定缩放。--model.segmentation.pretrained用于加载训练好的权重文件MODEL_WEIGHTS。评估时的固定流程配置文件末尾注释明确列出① 记录原始输入尺寸作为元数据 → ② 保持宽高比缩放图像 → ③ 前向预测 → ④ 将预测 mask 缩放回原始尺寸 → ⑤ 计算指标。因此评估阶段强制 batch size 为 1源码中setattr(opts, dataset.val_batch_size0, 1)。指标由evaluation.segmentation.mode: validation_set触发最终输出基于混淆矩阵ConfusionMatrix计算的全局准确率、各类别 IoU 与 mean IoU相关计算见 corenet/metrics/confusion_mat.py。5. ADE20k 数据集结果下表为原文档给出的、在 ADE20k 验证集上的模型结果表中数值为 mean IoU各配置均随附预训练权重与训练日志可配合 projects/range_augment/segmentation/ade20k 下的配置复现BackbonemIoU配置文件MobileNetv1-1.039.4deeplabv3_mobilenet_v1.yamlMobileNetv2-1.038.6deeplabv3_mobilenet_v2.yamlMobileNetv3-Large38.9deeplabv3_mobilenet_v3.yamlMobileViTv1-Small38.5deeplabv3_mobilevit.yamlEfficientNet-B343.9deeplabv3_efficientnet_b3.yamlResNet-5044.0deeplabv3_resnet_50.yamlResNet-10146.5deeplabv3_resnet_101.yaml6. PASCAL VOC 2012 数据集结果同样来自原文档的 PASCAL VOC 2012 验证集结果mean IoU配置位于 projects/range_augment/segmentation/pascal_vocBackbonemIoU配置文件MobileNetv1-1.077.2deeplabv3_mobilenet_v1.yamlMobileNetv2-1.076.7deeplabv3_mobilenet_v2.yamlMobileNetv3-Large77.0deeplabv3_mobilenet_v3.yamlEfficientNet-B382.0deeplabv3_efficientnet_b3.yamlResNet-5081.2deeplabv3_resnet_50.yamlResNet-10184.0deeplabv3_resnet_101.yaml需要说明原文档的结果表中同时提供了每个模型的预训练权重与训练日志下载链接托管在外部资源服务器上。因本文不引入外部链接这里仅保留配置文件的仓库内相对路径如需权重与日志请直接查阅原文档 README-segmentation.md 的结果表。7. Demo对单张图片做分割推理并可视化原文档还给出了一个可直接跑通的单图推理 Demo用 ResNet-50 DeepLabv3PASCAL VOC 配置对任意图片预测分割 mask并生成彩色可视化export IMG_PATHhttp://farm2.staticflickr.com/1173/678795137_bb1a91f659_z.jpg export CFG_FILEprojects/range_augment/segmentation/pascal_voc/deeplabv3_resnet_50.yaml export MODEL_WEIGHTShttps://docs-assets.developer.apple.com/ml-research/models/cvnets-v2/examples/range_augment/segmentation/pascal_voc/deeplabv3_resnet_50.pt corenet-eval-seg --common.config-file $CFG_FILE \ --common.results-loc results \ --model.segmentation.pretrained $MODEL_WEIGHTS \ --evaluation.segmentation.mode single_image \ --evaluation.segmentation.path ${IMG_PATH} \ --evaluation.segmentation.apply-color-map \ --evaluation.segmentation.save-overlay-rgb-pred命令中各个--evaluation.segmentation.*参数的源码依据位于 corenet/engine/eval_segmentation.pymode支持三种取值main_segmentation_evaluation中分发single_image单图、image_folder批量推理文件夹内所有图片适合测试集、validation_set带标签验证集计算定量指标。path参数分别对应单图路径或文件夹路径且支持 URL内部通过get_local_path下载。apply-color-map启用后预测 mask 会被转换为彩色表示并保存到results/run_label/predictions_cmap/目录对应apply_color_map_to_segmentation_masks。save-overlay-rgb-pred在原图上按evaluation.segmentation.overlay_mask_weight指定的透明度叠加预测 mask输出到predictions_overlay/同时保存原始 RGB 图到rgb_images/。若需要无彩色 mask 的二进制结果可开启evaluation.segmentation.save_masks保存到predictions_no_cmap/。运行环境提示原文档明确标注如果在 CPU 上运行请关闭混合精度在命令末尾追加--common.override-kwargs common.mixed_precisionfalsemixed_precision的默认开启状态见各配置文件的common.mixed_precision: true评估流程中通过autocast_fn控制corenet/engine/utils.py。8. 结语与延伸通过本文你应该已经掌握在 CoreNet 中用一条corenet-train命令启动 RangeAugment DeepLabv3 的分割训练、用corenet-eval-seg做验证集评估与单图 Demo 推理并能读懂配置中可学习增强Neural Augmentor PSNR 课程损失是如何与分割任务联合优化的。同一套 RangeAugment 代码与参数机制同样适用于分类、检测、CLIP 与蒸馏任务对应指南位于 projects/range_augment 目录下可作为进一步实验的起点。赞分享深度学习计算机视觉NLP多模态模型训练大模型【免费下载链接】corenetCoreNet: A library for training deep neural networks项目地址https://gitcode.com/GitHub_Trending/co/corenet点击查看免费下载相关推荐基于 PyTorch 的 DeepLabV3 语义分割实战从 PASCAL VOC 数据准备到单/多 GPU 训练、验证与预测基于 PyTorch 的 DeepLabV3 语义分割实战从 PASCAL VOC 数据准备到单/多 GPU 训练、验证与预测 导读 本文以 pytorch_示例工程使用 TensorFlow DeepLab 在 PASCAL VOC 2012 上完成语义分割全流程实战数据转换、训练、评估、可视化使用 TensorFlow DeepLab 在 PASCAL VOC 2012 上完成语义分割全流程实战数据转换、训练、评估、可视化 本指南以仓库内 pas人工智能深度学习计算机视觉NLP语音CoreNet 中 MobileNetV2 的 ImageNet 分类与 ADE20K 语义分割实战指南CoreNet 中 MobileNetV2 的 ImageNet 分类与 ADE20K 语义分割实战指南 本篇指南围绕 CoreNet 仓库中 projects深度学习计算机视觉NLP多模态模型训练大模型上一篇go-cursor-help完全指南解决Cursor免费试用限制终极方案下一篇2025最值得收藏的AI学习宝库500机器学习/深度学习/计算机视觉/NLP项目实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表