Pytorch - 迁移学习教程中图像预处理的目的

4
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])
]),
}

我的问题是 - 选择这些变换的直觉是什么?特别是,选择RandomResizedCrop(224)RandomHorizontalFlip()的直觉是什么?让神经网络在整个图像上进行训练不是更好吗?(或者至少使用这些转换来增强数据集)我理解为什么将只包含蚂蚁/蜜蜂的部分插入神经网络是合理的,但不明白为什么插入随机裁剪是合理的...希望我的所有问题都清楚了。谢谢!
1个回答

3

关于RandomResizedCrop

  1. 为什么要使用...ResizedCrop - 答案很简单。将裁剪的图像调整为相同的尺寸可以批处理输入数据。由于玩具数据集中的训练图像具有不同的尺寸,因此这是使您的训练更有效的最佳方法。

  2. 为什么要使用Random... - 每次迭代生成不同的随机裁剪(即在调整大小之前随机选择中心和裁剪尺寸/比率)是一种人工增广数据集的好方法,即在每次迭代中提供来自同一原始图像中提取的不同外观的输入以供网络使用。这有助于部分避免小数据集的过拟合,并使您的网络整体更加健壮。

    但是,您说得对,由于一些训练图像宽度高达500像素,语义目标(ant/bee)有时只覆盖图像的一小部分,因此某些随机修剪可能不包含昆虫……但只要发生这种情况的几率保持相对较低,它不会真正影响您的训练。每次提供不同的训练裁剪(而不是始终相同的非增广图像)的优点大大抵消了有时提供“空”裁剪的副作用。您可以通过将RandomResizedCrop(224)替换为Resize(224)(固定大小调整)在代码中并比较测试集上的最终准确性来验证这种说法。

    此外,我要补充说明,神经网络很聪明,有时会通过您意想不到的特征来识别图像(即它们倾向于在数据集或损失偏差的情况下学习识别快捷方式,参见过拟合)。我不会感到惊讶,即使这个玩具网络有时在“空”裁剪上进行训练,因为它学会了区分通常的“蚂蚁背景”(地面、叶子等)和“蜜蜂背景”(花卉)之间的差异。

关于RandomHorizontalFlip

它的目的也是人工增广数据集。对于网络来说,一张图像及其翻转版本是两个不同的输入,因此您基本上可以免费增加训练数据集的大小。


有很多操作可以用来增强训练数据集(例如RandomAffineColorJitter等)。但是,必须小心选择对目标用例有意义/不影响目标语义信息的转换(例如对于蚂蚁/蜜蜂分类,RandomHorizontalFlip是可以的,因为您可能会得到许多向右面对的昆虫图像,而RandomVerticalFlip则没有太多意义,因为您几乎不会得到倒置的昆虫图片)。


非常感谢Aldream!只有一件事我不太明白 - 你写道“在每次迭代中生成不同的随机裁剪(即在调整大小之前随机选择中心和裁剪尺寸/比率)是一种很好的人工增强数据集的方法”。据我所知,训练集在插入分类器之前被转换,因此随机裁剪实际上通过训练过程替换了原始图像。我错了吗?如果我确实错了,并且图像在每次迭代中被重新转换,那么我认为我们已经解决了大部分的误解 :) - Dr. John
ImageFolder 通过以下步骤生成样本:1)打开文件夹中的图像文件,2)对其应用 transform 并返回结果样本。这些样本不会被保存,因此每次调用都会重复执行步骤 1)和 2),参见 code。因此,如果您的 transform 由随机操作组成,则每次迭代都会得到不同的增强样本。(重新打开文件并重新应用常量操作可能听起来有些反直觉,但这是处理大型数据集和数据增强的最佳方式)。 - benjaminplanche
非常感谢。非常有帮助! - Beginner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接