×

PyTorch教程14.1之图像增强

消耗积分:0 | 格式:pdf | 大小:0.23 MB | 2023-06-05

分享资料个

8.1 节中,我们提到大型数据集是深度神经网络在各种应用中取得成功的先决条件。图像增强在对训练图像进行一系列随机变化后生成相似但不同的训练示例,从而扩大了训练集的大小。或者,图像增强的动机可能是训练示例的随机调整允许模型减少对某些属性的依赖,从而提高它们的泛化能力。例如,我们可以通过不同的方式裁剪图像,使感兴趣的对象出现在不同的位置,从而减少模型对对象位置的依赖。我们还可以调整亮度和颜色等因素,以降低模型对颜色的敏感度。图像增强对于当时 AlexNet 的成功来说可能是不可或缺的。在本节中,我们将讨论这种在计算机视觉中广泛使用的技术。

%matplotlib inline
import torch
import torchvision
from torch import nn
from d2l import torch as d2l
%matplotlib inline
from mxnet import autograd, gluon, image, init, np, npx
from mxnet.gluon import nn
from d2l import mxnet as d2l

npx.set_np()

14.1.1。常见的图像增强方法

在我们对常见图像增强方法的研究中,我们将使用以下方法400×500形象一个例子。

d2l.set_figsize()
img = d2l.Image.open('../img/cat1.jpg')
d2l.plt.imshow(img);
https://file.elecfans.com/web2/M00/A9/CC/poYBAGR9OwuAfxQ9AAHybXAM-vQ446.svg
d2l.set_figsize()
img = image.imread('../img/cat1.jpg')
d2l.plt.imshow(img.asnumpy());
https://file.elecfans.com/web2/M00/A9/CC/poYBAGR9OwuAfxQ9AAHybXAM-vQ446.svg

大多数图像增强方法都具有一定的随机性。为了方便我们观察图像增强的效果,接下来我们定义一个辅助函数applyaug此函数在输入图像上多次运行图像增强方法img 并显示所有结果。

def apply(img, aug, num_rows=2, num_cols=4, scale=1.5):
  Y = [aug(img) for _ in range(num_rows * num_cols)]
  d2l.show_images(Y, num_rows, num_cols, scale=scale)
def apply(img, aug, num_rows=2, num_cols=4, scale=1.5):
  Y = [aug(img) for _ in range(num_rows * num_cols)]
  d2l.show_images(Y, num_rows, num_cols, scale=scale)

14.1.1.1。翻转和裁剪

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

apply(img, torchvision.transforms.RandomHorizontalFlip())
https://file.elecfans.com/web2/M00/AA/47/pYYBAGR9OxCAR_h_AAKgwdZBIlU089.svg

上下翻转不像左右翻转那样常见。但至少对于这个示例图像,上下翻转并不妨碍识别。接下来,我们创建一个RandomVerticalFlip实例,以 50% 的几率上下翻转图像。

apply(img, torchvision.transforms.RandomVerticalFlip())
https://file.elecfans.com/web2/M00/A9/CC/poYBAGR9OxOAa0bRAAKhFWS9J2s477.svg

Flipping the image left and right usually does not change the category of the object. This is one of the earliest and most widely used methods of image augmentation. Next, we use the transforms module to create the RandomFlipLeftRight instance, which flips an image left and right with a 50% chance.

apply(img, gluon.data.vision.transforms.RandomFlipLeftRight())
https://file.elecfans.com/web2/M00/AA/47/pYYBAGR9OxeAbSsbAAKgwXaeKZI169.svg

Flipping up and down is not as common as flipping left and right. But at least for this example image, flipping up and down does not hinder recognition. Next, we create a RandomFlipTopBottom instance to flip an image up and down with a 50% chance.

apply(img, gluon.data.vision.transforms.RandomFlipTopBottom())
https://file.elecfans.com/web2/M00/A9/CC/poYBAGR9OxmAStjwAAKhFd5H4m4670.svg

在我们使用的示例图像中,猫位于图像的中间,但一般情况下可能并非如此。7.5 节中,我们解释了池化层可以降低卷积层对目标位置的敏感性。此外,我们还可以随机裁剪图像,让物体以不同的尺度出现在图像中的不同位置,这样也可以降低模型对目标位置的敏感度。

在下面的代码中,我们随机裁剪一个面积为 10%∼100%每次都是原始区域的大小,这个区域的宽高比是随机选择的 0.5∼2. 然后,该区域的宽度和高度都缩放为 200 像素。除非另有说明,之间的随机数ab本节中指的是从区间中随机均匀采样得到的连续值 [a,b].

shape_aug = torchvision.transforms.RandomResizedCrop(
  (200, 200), scale=(0.1, 1), ratio=(0.5, 2))
apply(img, shape_aug)
https://file.elecfans.com/web2/M00/AA/47/pYYBAGR9OxyAUqxIAAMIQfFRxQw242.svg
shape_aug = gluon.data.vision.transforms.RandomResizedCrop(
  (200, 200), scale=(0.1, 1), ratio=(0.5, 2))
apply(img, shape_aug)
https://file.elecfans.com/web2/M00/AA/47/pYYBAGR9Ox-AdQaOAAMM3Un8law899.svg

14.1.1.2。改变颜色

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

apply(img, torchvision.transforms.ColorJitter(
  brightness=0.5, contrast=0, saturation=0, hue=0))
https://file.elecfans.com/web2/M00/AA/47/pYYBAGR9OyOAOS8JAAKBDXaQiH4973.svg
apply(img, gluon.data.vision.transforms.RandomBrightness(0.5))
https://file.elecfans.com/web2/M00/A9/CC/poYBAGR9OyaAHswFAAKTRSHZWWM350.svg

同样,我们可以随机改变图像的色调。

apply(img, torchvision.transforms.ColorJitter(
  brightness=0, contrast=0, saturation=0, hue=0.5))
https://file.elecfans.com/web2/M00/AA/47/pYYBAGR9OyiAKZ5XAAKgBf48WXw811.svg
apply(img, gluon.data.vision.transforms.RandomHue(0.5))
https://file.elecfans.com/web2/M00/AA/47/pYYBAGR9OyuAPyxyAAKjNZd5bQw461.svg

我们也可以创建一个RandomColorJitter实例,同时设置如何随机改变图片的brightness, contrast, saturation, 。hue

color_aug = torchvision.transforms.ColorJitter(
  brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5)
apply(img, color_aug)
https://file.elecfans.com/web2/M00/AA/47/pYYBAGR9Oy2AE_XgAAJd2aug_jE886.svg
color_aug = gluon.data.vision.transforms.RandomColorJitter(
  brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5)
apply(img, color_aug)
https://file.elecfans.com/web2/M00/A9/CC/poYBAGR9Oy-AVr8NAAJhlfJqe4U114.svg

1


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !