本文目录导读:

随机擦除(Random Erasing) 是一种数据增强方法,主要用于计算机视觉任务(如图像分类、目标检测、行人重识别等),它的核心思想是在训练过程中,随机选择图像中的一个矩形区域,并将该区域的像素值替换为随机值(如噪声、均值或固定值),从而迫使模型不过度依赖图像的局部特征,提升模型的泛化能力和鲁棒性。
核心作用
- 防止过拟合:通过模拟遮挡、噪声等真实场景,让模型学习到更全局的特征,而非死记硬背某些局部纹理。
- 提升鲁棒性:使模型对遮挡、缺失部分信息的情况更具适应性(行人被栏杆遮挡时仍能识别)。
- 降低区域相关性:鼓励模型同时利用图像中多个区域的信息,而非仅依赖少数判别性强的区域。
实现步骤(简版)
- 输入图像,随机决定是否执行擦除(通常以概率 ( p ) 决定,如 ( p=0.5 ))。
- 若执行,随机选择一个矩形区域:
- 区域面积占图像总面积的比例在 ( [s_l, s_h] ) 之间(如 ( [0.02, 0.4] ))。
- 区域的宽高比在 ( [r_1, r_2] ) 之间(如 ( [0.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:仅擦除特定区域(如高频区域)以迫使模型学习低频特征。
如果需要更具体的实现(如针对特定框架或任务),可以进一步说明!