mixup是2018年发表在ICLR上的一种数据增强方法,核心思想是从每个batch中随机选择两张图像,并以一定比例混合生成新的图像。需要注意的是,全部训练过程都只采用混合的新图像训练,原始图像不参与训练过程。

mixup: Beyond Empirical Risk Minimization

paper: https://arxiv.org/pdf/1710.09412

code: https://github.com/facebookresearch/mixup-cifar10


mixup的图像混合生成方式比较简单,如下公式所示:

(x_iy_i)与(x_jy_j)是同一个batch中随机选择的两个样本及对应标签,\lambda为从beta分布中随机采样的数,\lambda \in [0, 1]\lambda随机生成的Python代码如下:

lam = numpy.random.beta(alpha, alpha)

实现代码比较简单,如下:

alpha = 1.0  # 默认设置为1
criterion = nn.CrossEntropyLoss()
for (inputs, labels) in train_loader:
    lam = np.random.beta(alpha, alpha)
    index = torch.randperm(inputs.size(0))
    images_a, images_b = inputs, inputs[index]
    labels_a, labels_b = labels, labels[index]
    mixed_images = lam * images_a + (1 - lam) * images_b
    outputs = model(mixed_images)
    _, preds = torch.max(outputs, 1)
    loss = lam * criterion(outputs, labels_a) + (1 - lam) * criterion(outputs, labels_b)

看看在图像上执行mixup是什么效果,代码如下:

import cv2
import numpy as np

img1 = cv2.imread('cat.png')
img1 = cv2.resize(img1, (224, 224))

img2 = cv2.imread('dog.png')
img2 = cv2.resize(img2, (224, 224))

alpha = 1.0
lam = np.random.beta(alpha, alpha)
mixed_img = lam * img1 + (1 - lam) * img2

cv2.imwrite('mixup.png', mixed_img)

原图如下:

                                       

mixup随机生成两次,效果如下:

                                      ​ 


公平起见,训练时采用了和ResNet-50相同的配置,没有加大训练epochs,结果见下表。

MethodCIFAR-10CIFAR-100
ResNet-5096.76/96.82/96.81/96.79
96.72/96.69/96.60/96.82
(96.75)
83.80/83.66/84.19/83.26
83.89/83.90/83.57/83.69
(83.74)
ResNet-50+mixup96.56/96.61/96.35/96.49
96.67/96.56/96.31/96.39
(96.49)
82.48/82.55/82.77/82.06
82.50/82.35/82.23/82.40
(82.42)

从上表中的结果来看,在CIFAR10和CIFAR100两个数据集上使用mixup的效果都比较差,相比于ResNet-50无法提高识别精度。分析原因主要可能有两点:(1)mixup由于采用的都是合成图像训练,需要更多的epochs才能取得较好的效果;(2)论文中的baseline指标都比较低,因此看起来是有提升的,而这里的baseline是基于ImageNet预训练过的,这也是我们通常会用到的方式,因此相比之下这些增强方法的效果就很有限了。

采用作者提供的代码,在CIFAR10上基于mixup训练ResNet-50模型,测试精度为95.91。


数据增强实测之cutout_一个菜鸟的奋斗-CSDN博客

数据增强实测之Random Erasing_一个菜鸟的奋斗-CSDN博客

数据增强实测之RICAP_一个菜鸟的奋斗-CSDN博客

数据增强实测之GridMask_一个菜鸟的奋斗-CSDN博客

数据增强实测之Hide-and-Seek_一个菜鸟的奋斗-CSDN博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐