Предварительная обработка в распознавании изображений - PullRequest
0 голосов
/ 28 января 2019

Я новичок в распознавании изображений и мне нужна помощь по предварительной обработке изображений.

  1. Я использую модель трансферного обучения 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. рассчитать их среднее значение и стандартизировать их и нормализовать ихиндивидуально

B. рассчитать среднее значение и стандартное значение всего набора данных, а затем выполнить нормализацию.

Какой из них правильный?

3.Когда мне делать нормализацию?До data_augmentation или после data_augmentation?

1 Ответ

0 голосов
/ 28 января 2019

Если вы тренируете новую модель с вашим собственным набором данных, с предварительно подготовленными весами, вам потребуется новое среднее значение и стандартное значение для вашего нового набора данных.

В основном вам нужно будет повторить процесскак 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"])

Дайте мне знать, если у вас больше путаницы

...