Paddle 实现Cutout数据增强操作

本文介绍了Cutout,一种在深度学习中用于图像数据增强的方法,它通过对输入图像生成固定大小的矩形区域进行填充为零,增强模型对噪声的鲁棒性。文章详细展示了如何在训练流程中应用Cutout,并提到了可调整的参数cutout_size。
摘要由CSDN通过智能技术生成

Cutout 可以理解为 Dropout 的一种扩展操作,不同的是 Dropout 是对图像经过网络后生成的特征进行遮挡,而 Cutout 是直接对输入的图像进行遮挡,它在图像上生成一个大小为 cutout_size 的矩形区域,并将该区域内的像素值置零,相对于Dropout对噪声的鲁棒性更好。
新建如下类:

class Cutout(object):
    def __init__(self, cutout_size=16):
        self.cutout_size = cutout_size

    def __call__(self, img):
        h, w = img.shape[-2:]
        mask = np.ones((h, w), np.float32)

        y = np.random.randint(h)
        x = np.random.randint(w)

        y1 = np.clip(y - self.cutout_size // 2, 0, h)
        y2 = np.clip(y + self.cutout_size // 2, 0, h)
        x1 = np.clip(x - self.cutout_size // 2, 0, w)
        x2 = np.clip(x + self.cutout_size // 2, 0, w)

        mask[y1:y2, x1:x2] = 0.0
        img = img.astype(np.float32)

        img *= mask
        return img

加入train的数据增强中:

  # 定义训练集的数据增强流程
  self.train_transforms = transforms.Compose([
      transforms.Resize((224, 224)),
      transforms.RandomHorizontalFlip(),  # 随机水平翻转
      transforms.ColorJitter(0.4, 0.4, 0.4),  # 颜色抖动
      transforms.BrightnessTransform(0.4),  # 光照增强
      Cutout(cutout_size=16),
      transforms.ToTensor(),
      transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
  ])

在实际使用中,可以根据需求调整 cutout_size 的大小。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值