我是图像识别的初学者,需要一些有关图像预处理的帮助。
resnet18
进行识别工作。我得到:
In [3]: pretrainedmodels.pretrained_settings['resnet18']
Out[3]:
{'imagenet': {'url':
'https://download.pytorch.org/models/resnet18-
5c106cde.pth',
'input_space': 'RGB',
'input_size': [3, 224, 224],
'input_range': [0, 1],
'mean': [0.485, 0.456, 0.406],
'std': [0.229, 0.224, 0.225],
'num_classes': 1000}}
我发现mean
和std
与我的图像数据集完全不同。
我应该如何规范火车?使用上面的均值和标准差,还是使用我计算自己的均值和标准差?
train_set
,valid_set
和test_set
。我有两种方法:
A。计算它们的均值和std并将其分别归一化
B。计算整个数据集的均值和标准差,然后进行归一化。
哪个是对的?
3。我应该何时进行归一化?在data_augmentation之前还是在data_augmentation之后?
答案 0 :(得分:1)
如果您使用自己的数据集和预先训练的权重训练新模型,则需要为新数据集输入新的均值和标准差。
基本上,您将需要重复ImageNet的操作过程。创建一个脚本来计算整个数据集的常规[mean, std]
值。
但是请记住要注意数据集的分布,因为它肯定会影响模型的性能。
然后为您的火车/阀门组单独定义一种变压方法。通常,我们不对测试集进行标准化,因为在现实世界中,您的模型将采用不同种类的数据。构建数据集时,应与其他扩充技术一起执行标准化过程。
例如,考虑这个玩具示例
"transformer": {
"train": transforms.Compose([
transforms.Resize(size=299),
transforms.RandomHorizontalFlip(p=0.2),
transforms.ToTensor(),
transforms.Normalize(new_mean, new_std)
]),
"valid": transforms.Compose([
transforms.Resize(size=299),
transforms.ToTensor(),
])
}
train_ds = CustomDataset(type="train", transformer=transformer["train"])
valid_ds = CustomDataset(type="valid", transformer=transformer["valid"])
让我知道您是否还有困惑