深度学习:1_常用的数据增强 Data Augmentation

本文详细介绍了深度学习中常见的数据增强方法,包括翻转、随机裁剪、色彩抖动等,通过实例展示了如何使用Python实现这些增强技术,以提高模型的泛化能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深度学习中,通常需要对数据进行增强处理 Data Augmentaion,再训练数据。常用的数据增强方法有

1、翻转变换 flip(左右/上下)

2、随机修剪 random crop

3、色彩抖动 color jittering

4、平移变换 shift

5、尺度变换 scale

6、对比度变换 contrast

7、噪声扰动 noise

8、旋转变换/反射变换 Rotation/reflection

9、缩放 resize

 

python代码:

2、随机裁剪

# 随机裁剪图片
image = Image.open('./test.jpg')

img_width = image.size[0]
img_height = image.size[1]

if img_width < self.crop_window_size[0] or img_height < self.crop_window_size[1]:
   print("The crop window size is invalid")
   return
                
width_duration = img_width - self.crop_window_size[0]     # 宽度的范围
height_duration = img_height - self.crop_window_size[1]   # 高度的范围
width_start = np.random.randint(low=0, high=width_duration, size=1)[0]
height_start = np.random.randint(low=0, high=height_duration, size=1)[0]
crop_regin = (width_start, height_start, width_start +       
              self.crop_window_size[0],height_start + self.crop_window_size[1])

img_crop = image.crop(crop_regin)    # 随机裁剪后的图像

8、反转 

img_rotate = img.transpose(Image.FLIP_LEFT_RIGHT)

9、缩放

img_resize = image.resize(self.crop_window_size)

 

common: run_label: "run_1" accum_freq: 1 accum_after_epoch: -1 log_freq: 200 auto_resume: true mixed_precision: true dataset: root_train: "/media/Datasets/VOCdevkit" root_val: "/media/Datasets/VOCdevkit" name: "pascal" category: "segmentation" train_batch_size0: 12 val_batch_size0: 12 eval_batch_size0: 1 workers: 12 persistent_workers: false pin_memory: false pascal: use_coco_data: true coco_root_dir: "/media/Datasets/coco_preprocess" image_augmentation: random_resize: enable: true min_size: 256 max_size: 1024 random_crop: enable: true mask_fill: 255 resize_if_needed: true random_horizontal_flip: enable: true sampler: name: "batch_sampler" bs: crop_size_width: 512 crop_size_height: 512 loss: category: "segmentation" ignore_idx: 255 segmentation: name: "cross_entropy" optim: name: "adamw" weight_decay: 0.01 no_decay_bn_filter_bias: false adamw: beta1: 0.9 beta2: 0.999 scheduler: name: "cosine" is_iteration_based: false max_epochs: 50 warmup_iterations: 500 warmup_init_lr: 0.00009 cosine: max_lr: 0.0009 # [2.7e-3 * N_GPUS^2 x (BATCH_SIZE_GPU0/ 32) * 0.02 ] # 0.02 comes from this fact 0.1 (ResNet SGD LR)/0.002 (MIT ADAMW LR) min_lr: 1.e-6 model: segmentation: name: "encoder_decoder" lr_multiplier: 10 seg_head: "deeplabv3" output_stride: 16 classifier_dropout: 0.1 activation: name: "relu" deeplabv3: aspp_dropout: 0.1 aspp_sep_conv: false aspp_out_channels: 256 aspp_rates: [6, 12, 18] classification: name: "mobilevit_v3" classifier_dropout: 0.1 mit: mode: "small_v3" ffn_dropout: 0.0 attn_dropout: 0.0 dropout: 0.1 number_heads: 4 no_fuse_local_global_features: false conv_kernel_size: 3 activation: name: "swish" pretrained: "results/mobilevitv3_small_e300_7930/run_1/checkpoint_ema_best.pt" normalization: name: "sync_batch_norm" momentum: 0.1 activation: name: "relu" inplace: false layer: global_pool: "mean" conv_init: "kaiming_normal" linear_init: "normal" conv_weight_std: false ema: enable: true momentum: 0.0005 ddp: enable: true rank: 0 world_size: -1 dist_port: 30786 stats: name: [ "loss", "iou"] checkpoint_metric: "iou" checkpoint_metric_max: true 帮我逐行详细解释这段代码
最新发布
03-08
<think>嗯,用户给了一个YAML配置文件,让我帮忙逐行详细解释。首先,我需要确认这个配置文件的结构和各个部分的作用。看起来这是一个用于图像分割任务的深度学习模型配置,可能基于PyTorch框架。用户可能是想了解每个参数的含义,或者是在调试模型时遇到问题需要理解配置选项。 首先,我会从最顶层的common部分开始分析。里面的参数比如run_label、accum_freq、auto_resume等,这些都是训练过程中的通用设置。需要解释清楚每个参数的作用,比如accum_freq可能是指梯度累积的频率,auto_resume是否自动恢复训练等。 接下来是dataset部分,这里涉及到数据集的路径、名称、批量大小等。用户可能需要注意路径是否正确,特别是root_train和root_val是否指向正确的VOC和COCO数据集位置。另外,数据增强部分如random_resize、random_crop等,这些对模型性能影响较大,需要详细说明每个增强的作用和参数意义。 然后是sampler部分,配置了批处理采样器,可能涉及裁剪尺寸。loss部分说明使用的是交叉熵损失,用于分割任务,需要解释ignore_idx的作用,比如忽略特定标签。 optim和scheduler部分涉及优化器和学习率调度。这里用了AdamW和余弦退火调度,需要解释weight_decay、beta参数,以及学习率的变化过程,特别是warmup阶段的作用。 model部分比较复杂,分为segmentation和classification,可能是一个编码器-解码器结构,使用MobileViT作为主干网络。需要解释各组件如ASPP、输出步长、丢弃率等参数对模型的影响。pretrained字段说明加载了预训练权重,这可能影响训练效果。 EMA和DDP部分涉及模型指数移动平均和分布式训练,需要解释EMA的作用以及分布式参数如dist_port的设置。 最后,stats部分监控损失和IoU,checkpoint_metric决定保存最佳模型的指标,这里用的是IoU最大化。 用户可能的深层需求是调整模型超参数或解决训练中的问题,比如过拟合、收敛慢等。因此,在解释时需要指出关键参数的影响,例如学习率设置、数据增强策略、正则化方法等。同时,提醒用户注意路径是否正确、参数是否适合他们的硬件环境(如batch_size和workers数量是否合适)。还要注意mixed_precision和sync_batch_norm对训练速度和效果的影响,以及EMA是否启用等高级功能。 需要确保解释清晰,分部分展开,避免技术术语过于晦涩,同时保持专业性。对于可能出错的点,如pretrained路径是否存在,数据集的配置是否正确,也需要提及,帮助用户排查问题。</think>这是一个典型的深度学习训练配置文件(YAML格式),主要用于图像分割任务。以下逐模块详细解释: I. **通用配置 (common)** ```yaml common: run_label: "run_1" # 实验运行的标识名称 accum_freq: 1 # 梯度累积频率(每1个batch更新) accum_after_epoch: -1 # 从第-1个epoch开始累积(即始终启用) log_freq: 200 # 每200个batch记录日志 auto_resume: true # 自动恢复最近一次训练 mixed_precision: true # 启用混合精度训练(FP16) ``` II. **数据集配置 (dataset)** ```yaml dataset: root_train: "/media/Datasets/VOCdevkit" # 训练集路径(PASCAL VOC) root_val: "/media/Datasets/VOCdevkit" # 验证集路径 name: "pascal" # 数据集名称 category: "segmentation" # 任务类型(图像分割) train_batch_size0: 12 # 训练batch size val_batch_size0: 12 # 验证batch size workers: 12 # 数据加载的线程数 pascal: use_coco_data: true # 是否融合COCO数据 coco_root_dir: "/media/Datasets/coco_preprocess" # COCO数据路径 ``` III. **数据增强 (image_augmentation)** ```yaml image_augmentation: random_resize: enable: true # 启用随机缩放(256-1024像素) min_size: 256 max_size: 1024 random_crop: enable: true # 随机裁剪为固定尺寸 mask_fill: 255 # 填充值(对应忽略标签) random_horizontal_flip: # 随机水平翻转 enable: true ``` IV. **模型架构 (model)** ```yaml model: segmentation: name: "encoder_decoder" # 编码器-解码器结构 seg_head: "deeplabv3" # 使用DeepLabV3+解码头 output_stride: 16 # 输出步长(下采样率) deeplabv3: aspp_rates: [6, 12, 18] # ASPP模块的空洞卷积率 classification: name: "mobilevit_v3" # 使用MobileViTv3作为编码器 pretrained: "results/..." # 预训练权重路径 ``` V. **优化配置 (optim & scheduler)** ```yaml optim: name: "adamw" # 使用AdamW优化器 weight_decay: 0.01 # 权重衰减系数 adamw: beta1: 0.9 # 一阶动量系数 beta2: 0.999 # 二阶动量系数 scheduler: name: "cosine" # 余弦退火学习率 max_epochs: 50 # 总训练轮数 warmup_iterations: 500 # 学习率预热步数 warmup_init_lr: 0.00009 # 初始学习率 cosine: max_lr: 0.0009 # 峰值学习率 min_lr: 1.e-6 # 最小学习率 ``` VI. **高级训练配置** ```yaml ema: enable: true # 启用指数移动平均 momentum: 0.0005 # EMA动量系数 ddp: enable: true # 启用分布式数据并行 dist_port: 30786 # 分布式通信端口 stats: checkpoint_metric: "iou" # 以IoU作为模型保存指标 ``` **关键参数说明:** 1. `mixed_precision: true` 可减少显存占用并加速训练 2. `output_stride: 16` 影响感受野大小,需要与ASPP的空洞率配合 3. `warmup_iterations` 能避免训练初期的不稳定 4. `sync_batch_norm` 在分布式训练中保持BN层同步 5. `pretrained` 参数表明使用了迁移学习策略 **注意事项:** - 需确保数据集路径正确(特别是COCO数据路径) - 实际batch size = `train_batch_size0` × GPU数量 - EMA参数`momentum`较小(0.0005)表示更保守的参数更新 - 使用`auto_resume`时需保证checkpoint保存路径正确
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值