如何使用pytroch标准化Imagenet数据集?

问题描述 投票:0回答:1

我正在尝试编写一个简单的代码来在 ImageNet 数据集上教授 resnet50。我不太明白为什么标准化不起作用。当我使用此转换作为数据增强时:

train_transforms = transforms.Compose([
    transforms.Resize((224, 224), antialias=True),
    transforms.RandomCrop(180),
    transforms.Resize((224, 224), antialias=True),
    transforms.RandomHorizontalFlip(),
    transforms.RandomVerticalFlip(),
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.15),
    transforms.RandomApply([transforms.GaussianBlur(3, sigma=(0.1, 2.0))], p=0.5),
    transforms.ToTensor()
])

我检查了结果,似乎没问题。这是一种光增强。例如这个华夫饼熨斗:

看起来像这样:

但是,如果我做完全相同的事情,但添加标准化,如下所示:

train_transforms = transforms.Compose([
        transforms.Resize((224, 224), antialias=True),
        transforms.RandomCrop(180),
        transforms.Resize((224, 224), antialias=True),
        transforms.RandomHorizontalFlip(),
        transforms.RandomVerticalFlip(),
        transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.15),
        transforms.RandomApply([transforms.GaussianBlur(3, sigma=(0.1, 2.0))], p=0.5),
        transforms.ToTensor(),
        transforms.Normalize(mean, std)
    ])

华夫饼熨斗看起来像这样:

我尝试将规范化放在 Transforms.Compose 的不同部分中,但它以其他方式不起作用。在某些星座中会抛出错误(因为它是在张量上定义的),或者它只是以其他方式破坏图片,例如:

当我尝试此订单时会发生这种情况:

train_transforms = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean, std),
    transforms.Resize((224, 224), antialias=True),
    transforms.RandomCrop(180),
    transforms.Resize((224, 224), antialias=True),
    transforms.RandomHorizontalFlip(),
    transforms.RandomVerticalFlip(),
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.15),
    transforms.RandomApply([transforms.GaussianBlur(3, sigma=(0.1, 2.0))], p=0.5),
])

我怎样才能让它工作,这里有什么问题?其余代码只是标准的 PyTorch 学习过程,没什么花哨的。

deep-learning pytorch torchvision supervised-learning image-augmentation
1个回答
0
投票

假设您为

mean
std
使用了合理的值,那么您的代码没有任何问题。标准化不会保留图像的视觉外观。

© www.soinside.com 2019 - 2024. All rights reserved.