图像增广

图像增广在对训练图像进行一系 列的随机变化之后,生成相似但不同的训练样本,从而扩大了训练集的规模。此外,应用图像增广的原因是, 随机改变训练样本可以减少模型对某些属性的依赖,从而提高模型的泛化能力。例如,我们可以以不同的方 式裁剪图像,使感兴趣的对象出现在不同的位置,减少模型对于对象出现位置的依赖。我们还可以调整亮度、 颜色等因素来降低模型对颜色的敏感度。可以说,图像增广技术对于AlexNet的成功是必不可少的

常见的图像增广方法

使用PIL库显示测试图片,代码如下:

from PIL import Image

img = Image.open('./dog.jpeg')
img
测试图片
  • 翻转和裁剪

左右翻转图像通常不会改变对象的类别。这是最早和最广泛使用的图像增广方法之一。接下来,我们使用 transforms 模块来创建 RandomFlipLeftRight 实例,这样就各有50%的几率使图像向左或向右翻转

import torchvision.transforms as transforms
from torch.utils.tensorboard import SummaryWriter
from torchvision.utils import make_grid

writer = SummaryWriter('./log')
toTensor = transforms.ToTensor()

imgTensorList = []
for index in range(12):
    randomVerticalFlip = transforms.RandomVerticalFlip()
    afterTrans = randomVerticalFlip(img)
    imgTensor = toTensor(afterTrans)
    imgTensorList.append(imgTensor)
imgTensorList2 = []
for index in range(12):
    randomHorizontalFlip = transforms.RandomHorizontalFlip()
    afterTrans = randomHorizontalFlip(img)
    imgTensor = toTensor(afterTrans)
    imgTensorList2.append(imgTensor)
writer.add_image("RandomVerticalFlip", make_grid(imgTensorList,nrow=3,padding=2), index)
writer.add_image("RandomHorizontalFlip", make_grid(imgTensorList2,nrow=3,padding=2), index)
writer.close()

在我们使用的示例图像中,狗狗位于图像的中间,但并非所有图像都是这样。我们可以通过对图像进行随机裁剪,使物体以不同的比例出现 在图像的不同位置。这也可以降低模型对目标位置的敏感性。
在下面的代码中,我们随机裁剪一个面积为原始面积10%到100%的区域,该区域的宽高比从0.5到2之间随机 取值。然后,区域的宽度和高度都被缩放到200像素。a和b之间的随机数指的是 在区间[a, b]中通过均匀采样获得的连续值

imgTensorList = []
for index in range(12):
    shape_aug = transforms.RandomResizedCrop(size=(200, 200), scale=(0.1, 1), ratio=(0.5, 2))
    afterTrans = shape_aug(img)
    imgTensor = toTensor(afterTrans)
    imgTensorList.append(imgTensor)
writer.add_image("RandomResizedCrop", make_grid(imgTensorList,nrow=3,padding=2), index)
writer.close()
随机裁剪
  • 改变颜色

另一种增广方法是改变颜色。我们可以改变图像颜色的四个方面:亮度、对比度、饱和度和色调。在下面的 示例中,我们随机更改图像的亮度,随机值为原始图像的50%(1 − 0.5)到150%(1 + 0.5)之间。

toTensor = transforms.ToTensor()

imgTensorList = []
for index in range(12):
    color_aug = transforms.ColorJitter(brightness=0.5,contrast=0.5,saturation=0.5,hue=0.5)
    afterTrans = color_aug(img)
    imgTensor = toTensor(afterTrans)
    imgTensorList.append(imgTensor)
writer.add_image("ColorJitter", make_grid(imgTensorList,nrow=3,padding=2), index)
writer.close()
改变颜色
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容