在对常用图画增广办法的探索时,咱们将运用下面这个尺度为400500的图画作为示例。

d2l.set_figsize()
img = image.imread('../img/cat1.jpg')
d2l.plt.imshow(img.asnumpy());

[07:07:52] ../src/storage/storage.cc:196: Using Pooled (Naive) StorageManager for CPU

计算机视觉技术-常用的图画增广办法图画翻转和裁剪

大多数图画增广办法都具有一定的随机性。为了便于调查图画增广的效果,咱们下面界说辅佐函数apply。 此函数在输入图画img上屡次运行图画增广办法aug并显示一切成果。

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)

左右翻转图画通常不会改动对象的类别。这是最早且最广泛运用的图画增广办法之一。 接下来,咱们运用transforms模块来创立RandomFlipLeftRight实例,这样就各有50%的几率使图画向左或向右翻转。

apply(img, torchvision.transforms.RandomHorizontalFlip())

计算机视觉技术-常用的图画增广办法图画翻转和裁剪

上下翻转图画不如左右图画翻转那样常用。可是,至少关于这个示例图画,上下翻转不会妨碍辨认。接下来,咱们创立一个RandomFlipTopBottom实例,使图画各有50%的几率向上或向下翻转。

apply(img, torchvision.transforms.RandomVerticalFlip())

计算机视觉技术-常用的图画增广办法图画翻转和裁剪

咱们能够经过对图画进行随机裁剪,使物体以不同的比例出现在图画的不同方位。 这也能够下降模型对目标方位的敏感性。

下面的代码将随机裁剪一个面积为原始面积10%到100%的区域,该区域的宽高比从0.5~2之间随机取值。 然后,区域的宽度和高度都被缩放到200像素。 在本节中(除非另有阐明),a和b之间的随机数指的是在区间[a,b]中经过均匀采样取得的接连值。

shape_aug = torchvision.transforms.RandomResizedCrop(
    (200, 200), scale=(0.1, 1), ratio=(0.5, 2))
apply(img, shape_aug)

计算机视觉技术-常用的图画增广办法图画翻转和裁剪