gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:31:36 26 4
gpt4 key购买 nike

Pytorch transfer learning tutorial 中,训练集和测试集中的图像都使用以下代码进行预处理:

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() 背后的直觉是什么?让神经网络在整个图像上训练不是更好吗? (或者至少,使用这些转换来扩充数据集)?我理解为什么只将包含 Ant /蜜蜂的图像部分插入神经网络是合理的,但无法理解为什么插入随机裁剪是合理的......

希望我能把我所有的问题都说清楚

谢谢!

最佳答案

关于 RandomResizedCrop

  • 为什么...ResizedCrop ? - 这个答案很简单。将裁剪调整为相同的尺寸允许您对输入数据进行批处理。由于玩具数据集中的训练图像具有不同的维度,因此这是提高训练效率的最佳方式。
  • 为什么Random... ? - 每次迭代为每个图像生成不同的随机裁剪(即调整大小之前的随机中心和随机裁剪尺寸/比率)是人为地增加数据集的好方法,即每次迭代都为您的网络提供不同外观的输入(从相同的原始图像中提取) .这有助于部分避免小数据集的过度拟合,并使您的网络整体更加健壮。

    然而,您是对的,因为您的一些训练图像的宽度高达 500 像素,并且语义目标( ant/bee )有时仅覆盖图像的一小部分,因此其中一些随机裁剪有可能不会包含昆虫......但只要发生这种情况的机会保持相对较低,它就不会真正影响您的训练。每次迭代提供不同的训练裁剪(而不是总是相同的非增强图像)的优势极大地抵消了有时给予“空”裁剪的副作用。您可以通过替换 RandomResizedCrop(224) 来验证此断言。来自 Resize(224) (固定调整大小)在您的代码中并比较测试集上的最终准确度。

    此外,我要补充一点,神经网络是智能 cookie,有时会通过您意想不到的特征来学习识别图像(即,如果您的数据集或损失有偏差,c.f. 过度拟合,它们往往会学习识别捷径)。如果这个玩具网络表现得如此好,我不会感到惊讶,尽管有时只是因为它学习了“空”裁剪的训练,例如区分通常的“ Ant 背景”(底层、树叶等)和“蜜蜂背景”(花朵)。

  • 关于 RandomHorizontalFlip
    其目的还在于人为地扩充您的数据集。对于网络,图像及其翻转版本是两个不同的输入,因此您基本上是人为地将训练数据集的大小“免费”加倍。

    可以使用更多操作来扩充训练数据集(例如 RandomAffine ColorJitter 等)。然而,必须小心选择对目标用例有意义/不影响目标语义信息的转换(例如,对于 Ant /蜜蜂分类, RandomHorizontalFlip 很好,因为您可能会得到尽可能多的昆虫图像朝右而不是朝左;但是 RandomVerticalFlip 没有多大意义,因为您肯定不会得到颠倒的昆虫照片)。

    关于image-processing - Pytorch - 迁移学习教程中图像预处理的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50963295/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com