我对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)
补丁Tensor
Tensor
给定您提供的平均值和偏差值,对结果进行归一化您的data_transforms['val']
工作是:
(256, 256)
(224, 224)
补丁Tensor
Tensor
给定您提供的平均值和偏差值,对结果进行归一化(即,将训练数据的随机调整大小/裁剪替换为用于验证的固定操作,以得到可靠的验证结果)
如果您不希望将训练图像以50/50的机会水平翻转,只需删除该transforms.RandomHorizontalFlip()
行即可。
同样,如果你希望你的图片永远是中心,裁剪,替换transforms.RandomResizedCrop
用transforms.Resize
和transforms.CenterCrop
,作为完成data_transforms['val']
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句