图像增广(image augmentation)是通过对训练图像进行一系列随机改变,从而产生相似但又不同的训练样本的技术。
图像增广有以下两个主要作用:
- 扩大训练数据集的规模;
- 随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。
例如,通过不同方式裁剪图像,使感兴趣的物体出现在不同位置,可以减轻模型对物体出现位置的依赖性;调整亮度、色彩等因素能降低模型对色彩的敏感度。
一些常见的图像增广方法包括:
- 翻转 :如左右翻转(通过
torchvision.transforms.RandomHorizontalFlip
或tf.image.random_flip_left_right
实现)和上下翻转(通过torchvision.transforms.RandomVerticalFlip
或tf.image.random_flip_up_down
实现),通常不会改变对象的类别。 - 随机裁剪 :随机裁剪一个面积为原始面积一定比例(如10%到100%)的区域,该区域的宽高比也在一定范围内随机取值(如0.5到2),然后将该区域的宽度和高度缩放到指定像素(如200像素)。例如,使用
torchvision.transforms.RandomResizedCrop
或tf.image.random_crop
。 - 亮度变化 :将图像的亮度随机调整为原图亮度的一定比例范围(如50%到150%),可通过
torchvision.transforms.ColorJitter
中的brightness
参数或tf.image.random_brightness
实现。 - 色调变化 :随机更改图像的色调,如使用
torchvision.transforms.ColorJitter
中的hue
参数或tf.image.random_hue
。 - 颜色变化 :还可以同时随机更改图像的亮度、对比度、饱和度和色调,创建
torchvision.transforms.ColorJitter
实例并设置相应参数即可。 - 组合多种方法 :可以使用
torchvision.transforms.Compose
将多个图像增广方法组合起来应用到图像上。
在实践中,通常仅在训练样本上进行图像增广,而在预测过程中不使用随机操作的图像增广,以获得确切的结果。