深度学习 ----- 数据预处理

常用的高级数据预处理的方法总结

🧠 一、图像数据高级预处理方法汇总表

方法原理常用参数适用场景
图像增强(Augmentation)改变图像外观/几何结构,提升泛化能力翻转、旋转、缩放、色调扰动等分类、检测、分割等
Mixup / CutMix合成新图像/标签组合,提升鲁棒性alpha(混合程度)小数据集、过拟合任务
标准化(Normalization)均值为0,方差为1,提升训练稳定性mean、std图像分类、迁移学习等
图像去噪去除无效噪声滤波核大小等医学图像、工业图像等
图像压缩与分辨率调整减小内存/提高兼容性尺寸参数超大图像、模型输入要求
自动增强(AutoAugment / RandAugment)使用搜索或随机策略自动增强policy、N、M 等高精度需求任务


 Cutout:

  • 原理:随机在图像上遮盖一个固定大小的矩形区域(置为 0 或均值),迫使模型关注非遮盖区域。
  • 作用
    • 模拟遮挡,增强鲁棒性。
    • 防止模型过度依赖局部特征(如 CIFAR-10 的物体纹理)。
  • 参数
    • size:遮盖区域大小(像素)。
    • p:应用概率。
  • 代码
  • class Cutout:
        def __init__(self, size, p=0.5):
            self.size = size
            self.p = p
        def __call__(self, img):
            if torch.rand(1) > self.p:
                return img
            h, w = img.shape[1:]
            cx = torch.randint(0, w, (1,))
            cy = torch.randint(0, h, (1,))
            x1 = torch.clamp(cx - self.size // 2, 0, w)
            x2 = torch.clamp(cx + self.size // 2, 0, w)
            y1 = torch.clamp(cy - self.size // 2, 0, h)
            y2 = torch.clamp(cy + self.size // 2, 0, h)
            img[:, y1:y2, x1:x2] = 0
            return img

1. 图像增强(Image Augmentation) 

 原理:

通过对图像进行旋转、翻转、裁剪、亮度调整等,模拟更多样本,增强模型泛化能力。

 PyTorch 示例代码:

import torchvision.transforms as transforms

transform = transforms.Compose([
    transforms.RandomHorizontalFlip(p=0.5),       # 水平翻转概率为0.5
    transforms.RandomRotation(degrees=15),        # 旋转±15度
    transforms.ColorJitter(brightness=0.2, contrast=0.2),  # 颜色扰动
    transforms.RandomResizedCrop(224, scale=(0.8, 1.0)),   # 随机裁剪并调整大小
    transforms.ToTensor(),
])

 参数说明:

  • p: 操作发生的概率

  • degrees: 最大旋转角度

  • scale: 随机裁剪区域占比范围

  • brightness, contrast: 颜色变化范围,数值越大变化越强烈

 适用场景:

  • 数据少或容易过拟合的任务

  • 对图像形态鲁棒性的模型训练(如 ResNet)

调试技巧:

  • 增强过强可能破坏语义,建议先可视化

  • 可以用 torchvision.transforms.RandomApply() 组合增强策略


 2. Mixup / CutMix

 原理:

  • Mixup:将两张图像按比例混合,标签也按比例混合。

  • CutMix:将一部分图像区域替换为另一张图像,标签按区域面积加权混合。

 Mixup 示例代码:

def mixup_data(x, y, alpha=1.0):
    lam = np.random.beta(alpha, alpha)
    index = torch.randperm(x.size(0))
    mixed_x = lam * x + (1 - lam) * x[index, :]
    y_a, y_b = y, y[index]
    return mixed_x, y_a, y_b, lam

 参数说明:

  • alpha: 控制 Beta 分布的参数,值越大混合越均匀

 适用场景:

  • 小数据集或模型容易过拟合

  • 强化模型对边界样本的泛化能力

 调试技巧:

  • 可视化混合结果确认是否失真

  • 训练时需改动 loss 计算:loss = lam * loss_a + (1 - lam) * loss_b


 3. 标准化(Normalization)

 原理:

将图像像素值转化为均值为0、方差为1的分布,加速收敛,提升稳定性。

 示例代码(适配 ImageNet 预训练):

normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                 std=[0.229, 0.224, 0.225])

 参数说明:

  • mean, std: 每通道的均值和标准差,通常根据数据集统计或跟预训练模型一致

 适用场景:

  • 任何图像任务,尤其是使用预训练模型时

 调试技巧:

  • 若训练模型从零开始,可以自己计算均值和标准差

  • 可用 transforms.ToPILImage() 逆变换还原图像


 4. 自动增强(AutoAugment / RandAugment)

 原理:

使用搜索算法(AutoAugment)或随机采样策略(RandAugment)自动生成增强策略。

 示例代码(RandAugment):

from torchvision.transforms import RandAugment

transform = transforms.Compose([
    RandAugment(num_ops=2, magnitude=9),
    transforms.ToTensor(),
])

 参数说明:

  • num_ops: 应用的随机操作数量

  • magnitude: 操作强度,0~10之间

 适用场景:

  • 高精度任务,如 ImageNet、医学图像

  • 自动寻找最优增强组合

 调试技巧:

  • 在大模型上训练更有效

  • 可以将 RandAugment 作为子模块嵌入到主 pipeline 中调试效果


 5. 图像去噪

 原理:

利用滤波技术去除图像中不必要的噪声,保留结构信息。

 示例代码(OpenCV):

import cv2
denoised = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)

 参数说明:

  • h: 强度参数,控制去噪程度

  • templateWindowSize: 模板窗口大小

  • searchWindowSize: 搜索窗口大小

适用场景:

  • 噪声严重的数据,如医学图像、红外图像

 调试技巧:

  • 与 CLAHE(自适应直方图均衡)结合效果更佳

  • 需注意保持边缘清晰,避免信息损失


 6. 图像尺寸调整(Resize + Padding)

 原理:

统一图像尺寸以适配模型,避免不同大小导致 shape 错误。

 示例代码:

transform = transforms.Compose([
    transforms.Resize((256, 256)),       # 固定缩放
    transforms.CenterCrop(224),          # 居中裁剪
    transforms.ToTensor()
])

参数说明:

  • Resize: 指定输出尺寸,元组表示高宽

  • Crop: 中心或随机裁剪

 适用场景:

  • 输入大小必须一致的 CNN 模型

  • 多种原始尺寸图像混合训练时

 调试技巧:

  • 保持长宽比时可用 transforms.Resize(256) + transforms.CenterCrop(224)

  • 如果要求输入为正方形,可配合 ZeroPadding


 总结:推荐组合模板(分类任务)

transform = transforms.Compose([
    transforms.RandomResizedCrop(224, scale=(0.8, 1.0)),
    transforms.RandomHorizontalFlip(),
    transforms.ColorJitter(0.4, 0.4, 0.4, 0.1),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225]),
])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值