数据增强之mixup算法详解

论文地址:mixup: BEYOND EMPIRICAL RISK MINIMIZATION
(一)、什么是数据增强?
(1). 数据增强主要指在计算机视觉领域中对图像进行数据增强,从而弥补训练图像数据集不足,达到对训练数据扩充的目的。
(2). 数据增强是一种数据扩充方法,可分为同类增强(如:翻转、旋转、缩放、移位、模糊等)和混类增强(如mixup)两种方式。

(二)、同类数据增强方式主要有哪些?
(1). 翻转Flip
可分为水平翻转,垂直翻转

(2). 旋转Rotation

(3). 缩放Scale(向外缩放,向内缩放)
向外缩放时,最终图像尺寸将大于原始图像尺寸,大多数图像框架从新图像中剪切出一个部分,其大小等于原始图像。而向内缩放,因为它会缩小图像大小,迫使我们对超出边界的内容做出假设。

(4). 随机裁剪(Random Crop)
与缩放不同,随机裁剪只是从原始图像中随机抽样一个部分,然后我们将此部分的大小调整为原始图像大小。

(5). 移位(Translation)
移位只涉及沿X或Y方向(或两者)移动图像。这种增强方法非常有用,因为大多数对象几乎可以位于图像的任何位置,移位时我们需要对边界作出假设。

(6). 模糊(Gaussian Noise)
当您的神经网络试图学习可能无用的高频特征(大量出现的特征)时,通常会发生过拟合。具有零均值的高斯噪声基本上在所有频率中具有数据点,从而有效地扭曲高频特征。但是这也意味着较低频率的数据(通常是您的预期数据)也会失真,但您的神经网络可以学会超越它。添加适量的噪声可以增强网络学习能力。

(三)、mixup混类数据增强方式
(1). mixup介绍
mixup是一种运用在计算机视觉中的对图像进行混类增强的算法,它可以将不同类之间的图像进行混合,从而扩充训练数据集。

(2). mixup原理
假设 b a t c h x 1 batch_{x1} batchx1是一个 b a t c h batch batch样本, b a t c h y 1 batch_{y1} batchy1是该 b a t c h batch batch样本对应的标签; b a t c h x 2 batch_{x2} batchx2是另一个 b a t c h batch batch样本, b a t c h y 2 batch_{y2} batchy2是该 b a t c h batch batch样本对应的标签, λ \lambda λ是由参数为 α \alpha α β \beta β的贝塔分布计算出来的混合系数,由此我们可以得到mixup原理公式为: λ = B e t a ( α , β ) (3.1) {\lambda=Beta(\alpha,\beta)\tag{3.1}} λ=Beta(α,β)(3.1) m i x e d _

  • 43
    点赞
  • 226
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
Mixup是一种常用的数据增强方法,其基本思想是将两张不同的图片按照一定比例混合在一起,生成一张新的图片。这个过程中,我们需要同时对两张图片进行标签的混合,以保证模型在训练过程中对新生成的图片有足够的鲁棒性。 具体地,假设我们有两张图片$X_1$和$X_2$,对应的标签为$y_1$和$y_2$,mixup的过程如下: 1. 随机生成一个$\lambda$,满足$0 \leq \lambda \leq 1$。 2. 生成新的图片$X' = \lambda X_1 + (1 - \lambda)X_2$。 3. 生成新的标签$y' = \lambda y_1 + (1 - \lambda)y_2$。 在实际的代码实现中,我们可以将两张图片混合在一起,然后使用交叉熵损失函数计算模型的损失值。 下面是一个使用mixup进行数据增强的示例代码,其中我们使用了PyTorch深度学习框架: ``` import torch import random def mixup_data(x, y, alpha=1.0): """ 对输入的数据进行mixup操作 x: 输入的图片数据 y: 输入的图片标签 alpha: mixup操作的超参数,默认为1.0 """ # 随机生成一个比例参数 lam = torch.tensor(random.random(), dtype=torch.float32) # 将数据扩充为相同的形状 batch_size = x.size()[0] index = torch.randperm(batch_size) mixed_x = lam * x + (1 - lam) * x[index, :] # 将标签也进行混合 y_a, y_b = y, y[index] mixed_y = lam * y_a + (1 - lam) * y_b return mixed_x, mixed_y # 使用示例 img1 = torch.randn(1, 3, 224, 224) img2 = torch.randn(1, 3, 224, 224) label1 = torch.tensor([1]) label2 = torch.tensor([2]) mixed_img, mixed_label = mixup_data(torch.cat([img1, img2], dim=0), torch.cat([label1, label2], dim=0)) ``` 在这个示例代码中,我们首先随机生成了一个比例参数$\lambda$,然后将两张图片按照比例混合在一起,同时将标签也按照比例进行混合,最终得到了新的数据和标签。需要注意的是,这个过程中,我们需要将两张图片的大小扩充为相同的形状,以便进行混合操作。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值