PyTorch中的数据增强

HS:

我对PyTorch中执行的数据扩充感到有些困惑。现在,据我所知,当我们执行数据扩充时,我们将保留原始数据集,然后添加它的其他版本(Flipping,Cropping等)。但这似乎并没有在PyTorch中发生。据我从参考文献中了解到,当我们data.transforms在PyTorch中使用,它将一一应用。因此,例如:

data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

在这里,为了进行培训,我们首先要随机裁剪图像并将其调整大小以成形(224,224)然后,我们拍摄这些(224,224)图像并水平翻转它们。因此,我们的数据集现在仅包含水平翻转的图像,因此在这种情况下我们的原始图像会丢失。

我对吗?这种理解正确吗?如果不是,那么我们在上面的代码中(从官方文档中获取)告诉PyTorch保留原始图像并将其大小调整为所需的形状(224,224)

谢谢

本杰明普兰什:

这些transforms操作将在每个批次生成时应用于原始图像。因此,您的数据集保持不变,只有批处理图像在每次迭代时都被复制和转换。

造成混淆的原因可能是,经常像您的示例中那样,transforms既用于数据准备(调整大小/裁剪为期望的尺寸,规格化值等)又用于数据增强(随机化调整大小/裁剪,随机翻转图像)等)。


您的data_transforms['train']工作是:

  • 随机调整提供的图像大小并随机裁剪以获得(224, 224)补丁
  • 是否对该补丁应用随机水平翻转,机会为50/50
  • 将其转换为 Tensor
  • Tensor给定您提供的平均值和偏差值,对结果进行归一化

您的data_transforms['val']工作是:

  • 将图像调整为 (256, 256)
  • 中心裁剪调整大小的图像以获得(224, 224)补丁
  • 将其转换为 Tensor
  • Tensor给定您提供的平均值和偏差值,对结果进行归一化

(即,将训练数据的随机调整大小/裁剪替换为用于验证的固定操作,以得到可靠的验证结果)


如果您不希望将训练图像以50/50的机会水平翻转,只需删除该transforms.RandomHorizontalFlip()行即可。

同样,如果你希望你的图片永远是中心,裁剪,替换transforms.RandomResizedCroptransforms.Resizetransforms.CenterCrop,作为完成data_transforms['val']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章