数据增强

图像增广

大规模数据集是成功应用深度神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。例如,我们可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度、色彩等因素来降低模型对色彩的敏感度。可以说,在当年AlexNet的成功中,图像增广技术功不可没。

常用的图像增广方法

翻转和裁剪

左右翻转图像通常不改变物体的类别。它是最早也是最广泛使用的一种图像增广方法。上下翻转不如左右翻转通用。但是至少对于样例图像,上下翻转不会造成识别障碍。随机裁剪出一块面积为原面积10%100%10\% \sim 100\%的区域,且该区域的宽和高之比随机取自0.520.5 \sim 2,然后再将该区域的宽和高分别缩放到200像素。

左右翻转

上下翻转


变化颜色

​ 另一类增广方法是变化颜色。我们可以从4个方面改变图像的颜色:亮度(brightness)、对比度(contrast)、饱和度(saturation)和色调(hue)。在下面的例子里,我们将图像的亮度随机变化为原图亮度的50%50\%(10.51-0.5)150%\sim 150\%(1+0.51+0.5)。

亮度变化

​ 我们也可以随机变化图像的色调。

​ 我们也可以随机变化图像的对比度。

​ 我们也可以同时设置如何随机变化图像的亮度(brightness)、对比度(contrast)、饱和度(saturation)和色调(hue)。


叠加多个图像增广方法

​ 实际应用中我们会将多个图像增广方法叠加使用。我们可以通过Compose实例将上面定义的多个图像增广方法叠加起来,再应用到每张图像之上。

1
2
3
4
augs = torchvision.transforms.Compose([
torchvision.transforms.RandomHorizontalFlip(), color_aug, shape_aug])

apply(img, augs)