CoreNet 中的 RangeAugment:基于范围学习的在线数据增强完整实战指南
发布时间:2026/10/2 13:33:26来源:尧图网络
深度学习计算机视觉NLP多模态模型训练大模型【免费下载链接】corenetCoreNet: A library for training deep neural networks项目地址https://gitcode.com/GitHub_Trending/co/corenet点击查看免费下载RangeAugment 是 CoreNet 内置的一种自动化数据增强方法其核心思想是让每个增强算子亮度、对比度、噪声学会模型专属、任务专属的幅度范围而非依赖人工调参或昂贵的搜索。本文以 projects/range_augment/README.md 为骨架结合 corenet/modeling/neural_augmentor 的源码实现与五类任务的配置文件系统讲解 RangeAugment 的原理、代码结构、损失函数与配置写法并给出图像分类、语义分割、目标检测、CLIP 对比学习与知识蒸馏五类任务的完整训练、评估与演示命令帮助你在自己的数据集上直接复现和迁移这一技术。一、RangeAugment 是什么RangeAugment论文标题RangeAugment: Efficient Online Augmentation with Range LearningarXiv:2212.10553是一种自动数据增强方法。与以往自动增强方法如通过强化学习或可微搜索寻找最优策略不同RangeAugment 的核心思想是将数据增强的幅度magnitude范围设计为可学习的参数在学习过程中模型会针对当前模型和当前任务自动调整每个增强算子的幅度范围整个过程是**在线online**的即在训练的同时进行无需额外的搜索阶段或昂贵的离线评估。在 CoreNet 代码库中RangeAugment 被命名为Neural Augmentor简称 NA实现位于 corenet/modeling/neural_augmentor 目录这一点在 projects/range_augment/README.md 中有明确说明。支持的任务矩阵仓库为 RangeAugment 提供了完整的训练、评估代码、预训练模型与配置文件覆盖五大类任务任务数据集说明文档图像分类ImageNetREADME-classification.md语义分割ADE20k、PASCAL VOCREADME-segmentation.md目标检测MS-COCOREADME-object-detection.md对比学习图像-文本对自定义图像-文本对数据集README-clip.md知识蒸馏ImageNetREADME-distillation.md所有任务对应的 YAML 配置集中在 projects/range_augment 下按classification/、segmentation/、detection/、clip/、distillation/分目录组织可直接作为新实验的起点。二、源码级解读Neural Augmentor 的实现2.1 目录结构与类层次从源码结构看Neural Augmentor 由两部分组成增强器增广模块corenet/modeling/neural_augmentor/neural_aug.py负责定义可学习的增强算子与参数采样器与算子corenet/modeling/neural_augmentor/utils/neural_aug_utils.py提供参数采样器FixedSampler、UniformSampler、参数约束Clip以及亮度/对比度/噪声的具体计算函数。neural_aug.py中定义了三层结构nn.Module └── BaseNeuralAugmentor # 基类参数管理、训练入口、通用逻辑 ├── BasicNeuralAugmentor # modebasic学习固定幅值每个通道一组参数 └── DistributionNeuralAugmentor # modedistribution学习幅度范围分布采样模块的构建入口是文件末尾的build_neural_augmentor(opts)函数见 neural_aug.py根据model.learn_augmentation.mode的值返回DistributionNeuralAugmentor、BasicNeuralAugmentor或返回None表示不启用增强学习。2.2 两种可配置模式Basic 模式BasicNeuralAugmentor为每个增强算子学习一组固定的幅值参数per-channel形状为[1, 3, 1, 1]同一个 batch 内所有图像共享同一参数。具体初始化见_build_aug_fns亮度/对比度FixedSampler(value1.0, Clip(0.1, 10.0))噪声FixedSampler(value0.0, Clip(0.0, 1.0))。Distribution 模式DistributionNeuralAugmentor为每个算子学习幅度范围的上下界训练时从[low, high]均匀分布中采样实际幅度从而覆盖更丰富的增强强度见_build_aug_fns_with_uniform_dist亮度/对比度UniformSampler(low0.5, high1.5)其中下界经Clip(0.1, 0.9)约束、上界经Clip(1.1, 10.0)约束噪声UniformSampler(low0.0, high0.1)下界经Clip(0.0, 0.00005)、上界经Clip(0.0001, 1.0)约束。2.3 可学习的增强算子BaseNeuralAugmentor内置三种增强算子各自对应一个可学习参数并可通过命令行开关独立启用算子参数代码实现亮度 Brightness--model.learn-augmentation.brightnessrandom_brightnessx x * magnitude对比度 Contrast--model.learn-augmentation.contrastrandom_contrast按通道均值与幅值加权噪声 Noise--model.learn-augmentation.noiserandom_noise叠加方差为variance的高斯噪声这三个函数位于 neural_aug_utils.py。值得注意的实现细节对比度公式为(1 - magnitude) * per_channel_mean x * magnitude即围绕通道均值缩放采样器通过Clip模块约束参数范围Clip支持软裁剪sigmoid 映射到[min_val, max_val]可保持梯度可微与硬裁剪clamp_两种方式见 neural_aug_utils.py。2.4 训练时的前向流程BaseNeuralAugmentor.forwardneural_aug.py在训练时执行如下流程随机打乱增强算子的执行顺序对每个算子随机选取 batch 中50%的样本batch_size // 2进行增强将增强后的样本写回原张量最后将像素值clip到[0, 1]区间。这种每步只增强一半样本的设计既保持了数据多样性又让增强损失有稳定的参照原始图与增强图同时存在便于计算感知距离损失。2.5 关键命令行参数BaseNeuralAugmentor.add_argumentsneural_aug.py定义了以下参数均可通过 CLI 或 YAML 中的model.learn_augmentation段设置参数取值默认含义--model.learn-augmentation.modebasic/distributionNone增强学习模式None表示不启用--model.learn-augmentation.brightness布尔False学习亮度幅度--model.learn-augmentation.contrast布尔False学习对比度幅度--model.learn-augmentation.noise布尔False学习噪声方差--model.learn-augmentation.lr-multiplier浮点1.0增强参数的学习率倍率其中lr_multiplier会通过get_trainable_parameters作用到增强参数上neural_aug.py便于独立调节增强参数的学习速度。三、增强损失Neural Augmentation LossRangeAugment 的关键设计之一是用损失函数驱动幅度学习而不是手工设定增强多强。该损失实现在 corenet/loss_fn/neural_augmentation.py以neural_augmentation名称注册进LOSS_REGISTRY可作为复合损失的一个子项参与训练。3.1 PSNR 感知指标与 MSE 换算目前支持的感知指标为psnr见__supported_metrics [psnr]。损失的目标是让原图与增强图之间的 MSE逐步逼近一个目标 MSE。源码通过以下公式把 PSNR 换算为 MSEPSNR 20 * log10(255) - 10 * log10(MSE)在_forward_psnr中首先计算逐样本的 MSE像素缩放至 0–255 后求平方误差均值再用Smooth L1约束预测 MSE 与目标 MSE 的距离最后乘以alpha权重neural_augmentation.py。3.2 课程学习Curriculum Learningtarget_value可以是一个标量也可以是一个[start, end]二元组。当传入二元组时模块会启用课程学习目标 MSE 从start对应的值平滑过渡到end对应的值过渡曲线由curriculum_method决定支持lineartorch.linspace与cosine余弦插值两种方式见 neural_augmentation.py。课程周期取scheduler.max_epochsepoch 制或scheduler.max_iterations迭代制。这种课程机制的含义是训练初期允许较强、较明显的增强对应较低 PSNR随着训练推进逐步收窄增强幅度对应较高 PSNR让模型先见大场面再精细化。3.3 损失参数总览NeuralAugmentation.add_argumentsneural_augmentation.py定义的参数参数默认含义--loss.neural-augmentation.perceptual-metricpsnr感知指标目前仅支持psnr--loss.neural-augmentation.target-value[40, 20]目标 PSNR标量或起止二元组用于课程学习--loss.neural-augmentation.curriculum-methodcosine课程曲线linear或cosine--loss.neural-augmentation.alpha100.0损失缩放系数PSNR 模式下会被除以650250–255 像素下最大 MSE另外该损失在验证/评估阶段不参与计算forward直接返回 0neural_augmentation.py保证推理行为不受影响。四、配置文件实战解读RangeAugment 的配置通过model.learn_augmentation与loss两个配置段接入训练。下面以 classification/resnet_50.yaml 为例展开。4.1 增强学习配置段model: learn_augmentation: brightness: true contrast: true noise: true mode: distributionmode: distribution对应DistributionNeuralAugmentor学习每个算子的幅度范围三个算子全部启用训练时按 2.4 节流程在线执行。4.2 复合损失配置段loss: category: composite_loss composite_loss: - loss_category: classification loss_weight: 1.0 classification: name: cross_entropy cross_entropy: label_smoothing: 0.1 - loss_category: neural_augmentation loss_weight: 1.0 neural_augmentation: perceptual_metric: psnr target_value: [ 40, 5 ] curriculum_method: cosine分类任务使用带 0.1 标签平滑的交叉熵loss_weight1.0增强损失以neural_augmentation类别并入复合损失loss_weight1.0。target_value: [40, 5]表示 PSNR 目标从 40 平滑过渡到 5对应从弱到强的增强幅度课程。不同模型配置的课程目标不同例如 classification/mobilenet_v2.yaml 使用target_value: [40, 30]而 ResNet-50 使用[40, 5]说明课程范围本身也是模型相关的超参数可在实验中按需调整。4.3 配套训练设置同一配置中还包含与 RangeAugment 配套的训练技巧训练时长ResNet-50 训练 600 epochscheduler.max_epochs: 600MobileNetv2 为 300 epochResNet-50 使用余弦调度max_lr: 0.5min_lr: 2.e-45000 步 warmupBatch 规模train_batch_size0: 128注释明确有效 batch 为 1024128 × 8 GPUs基础增强random_resized_crop、random_horizontal_flip部分大模型配置还启用mixupalpha0.2与cutmixalpha1.0EMAema.enable: true, momentum: 0.0005论文建议 MobileViT 使用 EMA 权重做评测可变 batch 采样器sampler.name: variable_batch_sampler支持多尺度训练crop 尺寸 128–320。五、实战一ImageNet 图像分类5.1 训练论文研究中的各分类骨干网络含移动端与非移动端的单节点8 张 A100 GPU训练命令如下来源 README-classification.mdexport CFG_FILEPATH_TO_MODEL_CONFIGURATION_FILE corenet-train --common.config-file $CFG_FILE --common.results-loc classification_results模型配置文件位于 classification 目录覆盖 EfficientNet-B0~B3、MobileNetv1/v2/v3、MobileViTv1、RegNetY-16GF、ResNet-50/101、SE-ResNet-50、Swin-Transformer-Tiny/Small 等 14 个模型。注意训练前务必修改配置中的数据集路径dataset.root_train/dataset.root_val默认指向/mnt/imagenet/training与/mnt/imagenet/validation。5.2 评估export CFG_FILEPATH_TO_MODEL_CONFIGURATION_FILE export MODEL_WEIGHTSPATH_TO_MODEL_WEIGHTS_FILE export DATASET_PATHPATH_TO_DATASET CUDA_VISIBLE_DEVICES0 corenet-eval --common.config-file $CFG_FILE --common.results-loc classification_results --model.classification.pretrained $MODEL_WEIGHTS --common.override-kwargs dataset.root_val$DATASET_PATH5.3 ImageNet 结果模型Top-1配置MobileNetv1-1.073.8mobilenet_v1.yamlMobileNetv2-1.073.0mobilenet_v2.yamlMobileNetv3-Large75.1mobilenet_v3.yamlMobileViTv1-Small78.2mobilevit_v1.yamlEfficientNet-B077.3efficientnet_b0.yamlEfficientNet-B179.5efficientnet_b1.yamlEfficientNet-B281.3efficientnet_b2.yamlEfficientNet-B381.9efficientnet_b3.yamlResNet-5080.2resnet_50.yamlResNet-10181.9resnet_101.yamlSwinTransformer-Tiny81.1swin_transformer_tiny.yamlSwinTransformer-Small82.8swin_transformer_small.yaml原 README 提示MobileViT 按论文建议使用 EMA 权重评测其余模型使用最佳 checkpoint。各模型的预训练权重与训练日志链接见原文档表格此处不再列出外部地址。六、实战二语义分割DeepLabv36.1 训练单节点1 张 A100 GPU即可训练带 DeepLabv3 分割头的移动端与非移动端骨干来源 README-segmentation.mdexport CFG_FILEPATH_TO_MODEL_CONFIGURATION_FILE corenet-train --common.config-file $CFG_FILE --common.results-loc segmentation_results配置位于 segmentation/ade20k 与 segmentation/pascal_voc 两个目录同样需要先修改数据集路径。6.2 评估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_WEIGHTS6.3 ADE20k 结果mIoU骨干mIoU配置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.4 PASCAL VOC 2012 结果mIoU骨干mIoU配置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.yaml6.5 单图 Demoexport 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若在 CPU 上运行请追加--common.override-kwargs common.mixed_precisionfalse关闭混合精度。七、实战三目标检测与实例分割Mask R-CNN7.1 训练单节点8 张 A100 GPU训练 Mask R-CNN来源 README-object-detection.mdexport CFG_FILEPATH_TO_MODEL_CONFIGURATION_FILE corenet-train --common.config-file $CFG_FILE --common.results-loc detection_results配置位于 detection 目录覆盖 MobileNetv1/v2/v3、MobileViT、EfficientNet-B3、ResNet-50/101 等骨干。7.2 评估export CFG_FILEPATH_TO_MODEL_CONFIGURATION_FILE export MODEL_WEIGHTSPATH_TO_MODEL_WEIGHTS_FILE export DATASET_PATHPATH_TO_DATASET CUDA_VISIBLE_DEVICES0 corenet-eval-det --common.config-file $CFG_FILE \ --common.results-loc seg_results \ --model.detection.pretrained $MODEL_WEIGHTS --evaluation.detection.resize-input-images \ --evaluation.detection.mode validation_set \ --common.override-kwargs dataset.root_val$DATASET_PATH7.3 MS-COCO 结果骨干BBox mAPSeg mAP配置MobileNetv1-1.039.435.6maskrcnn_mobilenet_v1.yamlMobileNetv2-1.038.434.7maskrcnn_mobilenet_v2.yamlMobileNetv3-Large35.632.5maskrcnn_mobilenet_v3.yamlMobileViT-Small42.037.7maskrcnn_mobilevit.yamlEfficientNet-B344.539.5maskrcnn_efficientnet_b3.yamlResNet-5044.039.5maskrcnn_resnet_50.yamlResNet-10146.141.1maskrcnn_resnet_101.yaml7.4 单图 Demoexport IMG_PATHhttp://farm2.staticflickr.com/1173/678795137_bb1a91f659_z.jpg export CFG_FILEprojects/range_augment/detection/maskrcnn_resnet_50.yaml export MODEL_WEIGHTShttps://docs-assets.developer.apple.com/ml-research/models/cvnets-v2/examples/range_augment/detection/maskrcnn_resnet_50.pt corenet-eval-det --common.config-file $CFG_FILE \ --common.results-loc results \ --model.detection.pretrained $MODEL_WEIGHTS \ --model.detection.n-classes 81 \ --evaluation.detection.resize-input-images \ --evaluation.detection.mode single_image \ --evaluation.detection.path ${IMG_PATH} \ --model.detection.mask-rcnn.box-score-thresh 0.7提示可通过--model.detection.mask-rcnn.box-score-thresh调节边界框置信度阈值以控制可视化时显示的框与掩码数量CPU 运行同样需追加--common.override-kwargs common.mixed_precisionfalse。八、实战四CLIP 对比学习图像-文本对8.1 数据集准备CLIP 训练使用图像-文本对tar 格式数据集数据集的构造与使用说明见 img_text_tar_dataset.py 文件内文档来源 README-clip.md。8.2 多节点分布式训练CLIP 使用仓库自定义的 ViT 实现可配合多尺度可变 batch 采样器。CLIP 模型在多节点、每节点多 GPU上训练具体 GPU/节点数量见配置文件的注释。单节点训练命令模板如下export CFG_FILEPATH_TO_MODEL_CONFIGURATION_FILE export RANKNODE_ID * NUM_GPUS_PER_NODE # 例如 Node-0: RANK0; Node-1: RANK8; Node-2: RANK16 export WORLD_SIZENUM_NODES * NUM_GPUS_PER_NODE # 例如 32 节点 × 8 GPU 256 corenet-train --common.config-file $CFG_FILE --common.results-loc results_clip --ddp.rank $RANK --ddp.world-size $WORLD_SIZE --ddp.dist-url tcp://IP_OF_NODE0:FREEPORT注意RANK与WORLD_SIZE由节点编号、每节点 GPU 数相乘得到dist-url指向 0 号节点的空闲端口。8.3 零样本评估ImageNetViT-B 图像骨干的 CLIP 模型可在 224×224 分辨率下评估export CONFIG_FILEprojects/range_augment/clip/clip_vit_base.yaml export MODEL_WEIGHTShttps://docs-assets.developer.apple.com/ml-research/models/cvnets-v2/examples/range_augment/clip/clip_vit_base_16.pt export DATASET_PATH/mnt/vision_datasets/imagenet/validation/ # 改为你的 ImageNet 验证集路径 CUDA_VISIBLE_DEVICES0 corenet-eval --common.config-file $CONFIG_FILE --model.multi-modal-image-text.pretrained $MODEL_WEIGHTS --common.override-kwargs dataset.multi_modal_img_text.zero_shot_img_cls_dataset_nameimagenet dataset.root_val$DATASET_PATH8.4 零样本 Top-1 结果多分辨率模型160192224256288配置CLIP w/ ViT-B/1669.2671.0771.8472.3472.82clip_vit_base.yamlCLIP w/ ViT-H/1676.1377.3577.9278.4178.56clip_vit_huge.yaml原 README 注明CLIP 模型的 EMA 与最佳 checkpoint 表现相近此处报告的是最佳 checkpoint 的结果。8.5 ImageNet 微调CLIP 微调配置位于 clip_finetune_imagenet训练与评估命令与图像分类任务一致参见 README-classification.md。官方在 ImageNet 上对 CLIP 的 ViT 骨干微调10 个 epoch的结果模型Top-1 224x224配置ViT-B/1684.31clip_finetune_imagenet/clip_vit_base.yamlViT-H/1686.90clip_finetune_imagenet/clip_vit_huge.yaml九、实战五知识蒸馏仓库使用RangeAugment 训练的 ResNet-101 作为教师对四个移动端模型做知识蒸馏来源 README-distillation.md。蒸馏配置位于 distillation 目录训练与评估流程同样遵循 ImageNet 分类任务的命令见 README-classification.md。9.1 ImageNet 蒸馏结果学生模型Top-1ERMTop-1蒸馏配置MobileNetv173.875.2teacher_resnet101_student_mobilenet_v1.yamlMobileNetv273.073.4teacher_resnet101_student_mobilenet_v2.yamlMobileNetv375.176.0teacher_resnet101_student_mobilenet_v3.yamlMobileViT78.279.4teacher_resnet101_student_mobilevit.yaml说明ERM经验风险最小化一列来自 README-classification.md 的基线结果MobileViT 按论文建议使用 EMA checkpoint 评测。可以看到蒸馏在四个移动模型上均带来 Top-1 提升其中 MobileNetv1 提升 1.4 个百分点。十、总结与扩展阅读RangeAugment 在 CoreNet 中的落地路径可以概括为一条清晰的链路配置接入在model.learn_augmentation段声明启用哪些算子与模式basic/distribution在线增强DistributionNeuralAugmentor或BasicNeuralAugmentor在训练前向中实时生成增强图像损失驱动NeuralAugmentation损失以 PSNR 感知指标、配合余弦/线性课程学习持续把增强幅度推向模型恰好能适应的水平跨任务复用由于增强器与损失都以通用模块形式注册LOSS_REGISTRY、build_neural_augmentor分类、分割、检测、对比学习、蒸馏任务只需在 YAML 中配置即可复用同一套机制。如果你想深入源码建议从 corenet/modeling/neural_augmentor/neural_aug.py增强器实现、neural_aug_utils.py采样器与算子、neural_augmentation.py损失与课程学习三个文件入手测试用例可参考 tests/loss_fns/test_neural_aug.py 与 tests/loss_fns/test_neural_aug_compatibility.py它们能帮助你验证增强损失与复合损失组合的正确性。引用如果 RangeAugment 对你的研究或工程有帮助原 README 建议引用以下文献article{mehta2022rangeaugment, title{RangeAugment: Efficient Online Augmentation with Range Learning}, author {Mehta, Sachin and Naderiparizi, Saeid and Faghri, Fartash and Horton, Maxwell and Chen, Lailin and Farhadi, Ali and Tuzel, Oncel and Rastegari, Mohammad}, journal{arXiv preprint arXiv:2212.10553}, year{2022}, } inproceedings{mehta2022cvnets, author {Mehta, Sachin and Abdolhosseini, Farzad and Rastegari, Mohammad}, title {CVNets: High Performance Library for Computer Vision}, year {2022}, booktitle {Proceedings of the 30th ACM International Conference on Multimedia}, series {MM 22} }赞分享深度学习计算机视觉NLP多模态模型训练大模型【免费下载链接】corenetCoreNet: A library for training deep neural networks项目地址https://gitcode.com/GitHub_Trending/co/corenet点击查看免费下载相关推荐Betago围棋AI深度学习实战基于Keras的完整指南Betago围棋AI深度学习实战基于Keras的完整指南 Betago围棋AI是一个开源项目由Max Pumperla开发旨在让开发者和研究者能够深入了解人工智能深度学习游戏开发深度学习中的对比学习数据增强库基于ivy的实现深度学习中的对比学习数据增强库基于ivy的实现 引言 在深度学习领域数据增强Data Augmentation是提升模型泛化能力的关键技术之一尤其在对人工智能机器学习开发工具PaddleSpeech 基于 Tiny 数据集的 DeepSpeech2 离线/在线 ASR 完整实战指南PaddleSpeech 基于 Tiny 数据集的 DeepSpeech2 离线/在线 ASR 完整实战指南 本篇指南以 PaddleSpeech 仓库中的 e人工智能语音音频上一篇AirportBrcmFixup常见问题排查从驱动加载失败到5Ghz信号丢失的解决方案下一篇AI代理安全标准使用Agent Governance Toolkit遵循行业标准创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网