随机擦除

wen IT资讯 23

本文目录导读:

随机擦除

  1. 核心作用
  2. 实现步骤(简版)
  3. 代码示例(PyTorch-like 伪代码)
  4. 与其他数据增强的区别
  5. 应用场景
  6. 注意事项
  7. 扩展变体

随机擦除(Random Erasing) 是一种数据增强方法,主要用于计算机视觉任务(如图像分类、目标检测、行人重识别等),它的核心思想是在训练过程中,随机选择图像中的一个矩形区域,并将该区域的像素值替换为随机值(如噪声、均值或固定值),从而迫使模型不过度依赖图像的局部特征,提升模型的泛化能力和鲁棒性。

核心作用

  1. 防止过拟合:通过模拟遮挡、噪声等真实场景,让模型学习到更全局的特征,而非死记硬背某些局部纹理。
  2. 提升鲁棒性:使模型对遮挡、缺失部分信息的情况更具适应性(行人被栏杆遮挡时仍能识别)。
  3. 降低区域相关性:鼓励模型同时利用图像中多个区域的信息,而非仅依赖少数判别性强的区域。

实现步骤(简版)

  1. 输入图像,随机决定是否执行擦除(通常以概率 ( p ) 决定,如 ( p=0.5 ))。
  2. 若执行,随机选择一个矩形区域:
    • 区域面积占图像总面积的比例在 ( [s_l, s_h] ) 之间(如 ( [0.02, 0.4] ))。
    • 区域的宽高比在 ( [r_1, r_2] ) 之间(如 ( [0.3, 3] ))。
  3. 将该区域内的所有像素替换为随机值(如均匀分布噪声或 ImageNet 均值)。

代码示例(PyTorch-like 伪代码)

import random
import torch
def random_erasing(img, probability=0.5, sl=0.02, sh=0.4, r1=0.3):
    """
    img: Tensor (C, H, W)
    """
    if random.random() > probability:
        return img
    C, H, W = img.shape
    area = H * W
    for _ in range(100):  # 尝试最多100次
        target_area = random.uniform(sl, sh) * area
        aspect_ratio = random.uniform(r1, 1/r1)  # 保持宽高比在范围内
        h = int(round((target_area * aspect_ratio) ** 0.5))
        w = int(round((target_area / aspect_ratio) ** 0.5))
        if h < H and w < W:
            x1 = random.randint(0, H - h)
            y1 = random.randint(0, W - w)
            # 用随机值填充(也可用均值)
            img[:, x1:x1+h, y1:y1+w] = torch.rand(C, h, w) * 255
            break
    return img

与其他数据增强的区别

  • 与 Cutout 对比:Cutout 通常用零值或固定颜色填充,而随机擦除用随机噪声填充,更接近真实遮挡(如树叶、污点)。
  • 与 Random Crop 对比:Random Crop 是裁剪保留区域,随机擦除是替换局部区域。

应用场景

  • 行人重识别:模拟行人被部分遮挡(如背包、人群)。
  • 目标检测:让模型学会通过可见部分推测被遮目标。
  • 图像分类:提升模型对局部噪声或缺失的容忍度。

注意事项

  • 过度使用可能导致训练困难(模型难以收敛),建议概率 ( p=0.3-0.5 ),擦除面积比例不宜过大。
  • 对小目标(如微小的物体)效果可能不佳,因为擦除后可能完全覆盖目标。

扩展变体

  • Random Erasing with Mean:用数据集的像素均值填充,更接近背景。
  • GridErase:网格化擦除(类似 Dropout 的 2D 版本)。
  • DeletePatch:仅擦除特定区域(如高频区域)以迫使模型学习低频特征。

如果需要更具体的实现(如针对特定框架或任务),可以进一步说明!

上一篇几何变换

下一篇Cutout遮挡

抱歉,评论功能暂时关闭!