将给定的 PIL 图像裁剪到随机尺寸和长宽比,并使用随机插值。

在这篇文档中,我们将介绍 timm 中的 RandomResizedCropAndInterpolation 数据增强。除非在训练模型时传递了 --no-aug 标志,否则此增强默认应用于 timm 中的输入数据。在这种情况下,除了 ResizeCenterCrop 之外,不会应用任何其他增强。

由于 RandomResizedCropAndInterpolation 增强默认应用,我们不会深入研究如何将其应用于训练数据的示例。任何训练脚本都会应用此技术,例如下面的脚本

python train.py ../imagenette2-320

要不对输入数据应用任何数据增强,可以像这样传递 --no-aug 标志

python train.py ../imagenette2-320 --no-aug

将随机尺寸裁剪和插值作为自定义训练循环的独立数据增强技术

在本节中,我们将介绍如何利用 timm 库将此数据增强技术应用于我们的输入数据。让我们来看一个示例。

from timm.data.transforms import RandomResizedCropAndInterpolation
from PIL import Image
from matplotlib import pyplot as plt

tfm = RandomResizedCropAndInterpolation(size=224)
X   = Image.open("../../imagenette2-320/train/n01440764/ILSVRC2012_val_00000293.JPEG")
plt.imshow(X)
<matplotlib.image.AxesImage at 0x7f8788f027f0>

像往常一样,我们创建一个输入图像 X,它是本文档其他地方常用的“丁鱥”(tench) 图像。

现在让我们多次应用变换并可视化结果。

for i in range(6):
    plt.subplot(2, 3, i+1)
    plt.imshow(tfm(X))

如下所示,我们可以看到变换正在工作,它正在随机裁剪/调整输入图像的大小,并且还随机改变图像的长宽比。