前言
曾在游戏世界挥洒创意,也曾在前端和后端的浪潮间穿梭,如今,而立的我仰望AI的璀璨星空,心潮澎湃,步履不停!愿你我皆乘风破浪,逐梦星辰!
数据增广中的mixup(Mixup Augmentation)
简单的来说,Mixup 是一种 数据增强(Data Augmentation) 技术,通过线性插值混合两张图片及其标签,使模型学习到更平滑的决策边界,提高泛化能力。
1. 具体流程
- 随机选取两张图片 x1,x2 及其标签 y1,y2。
- 使用 Mixup 公式计算新的图像和标签: x′=λx1+(1−λ)x, y′=λy1+(1−λ)y, 其中,λ是从 Beta 分布中采样的权重: λ∼Beta(α,α)
- 通常 α\alphaα 设为 0.2 ~ 0.4。
2. 示例(输入 & 输出)
输入
两张 32×32 的图片(假设是 CIFAR-10 数据集),分别属于「猫(类别 3)」和「狗(类别 5)」。
- x1x_1x1:猫图片
- y1=[0,0,0,1,0,0,0,0,0,0]
- x2x_2x2:狗图片
- y2=[0,0,0,0,0,1,0,0,0,0]
- 设 λ=0.7
Mixup 计算
1. 计算新的图片
x′=0.7×x1+0.3×x2
新图片 x′ 是70% 猫 + 30% 狗 的混合图像。
2. 计算新的标签
y′=0.7×y1+0.3×y2,y′=[0,0,0,0.7,0,0.3,0,0,0,0]
新的标签表示「70% 猫 + 30% 狗」。
输出
-
- 新的混合图片(视觉上类似半透明的猫+狗)。
- 新的标签:猫 70%,狗 30%(软标签)。
3. Mixup 的 Python 代码
import numpy as np
import torchdef mixup_data(x1, y1, x2, y2, alpha=0.4):"""Mixup 数据增强"""lam = np.random.beta(alpha, alpha) # 采样 λx_mixed = lam * x1 + (1 - lam) * x2y_mixed = lam * y1 + (1 - lam) * y2return x_mixed, y_mixed# 假设 x1, x2 是两张图片(PyTorch Tensor),y1, y2 是 one-hot 标签
x1 = torch.rand(3, 32, 32) # 假设 RGB 图片
x2 = torch.rand(3, 32, 32)
y1 = torch.tensor([0, 0, 0, 1, 0, 0, 0, 0, 0, 0]) # 类别 3(猫)
y2 = torch.tensor([0, 0, 0, 0, 0, 1, 0, 0, 0, 0]) # 类别 5(狗)x_mixed, y_mixed = mixup_data(x1, y1, x2, y2)print(y_mixed)