Должны ли мы обучать исходную точку данных, когда мы делаем увеличение данных? - PullRequest
0 голосов
/ 12 апреля 2020

Я запутался в определении увеличения данных. Должны ли мы обучать исходные данные и преобразованные или просто преобразованные? Если мы обучим оба, то мы увеличим размер набора данных, в то время как второй подход не будет.

Я получил этот вопрос при использовании функции RandomResizedCrop.

'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),

Если мы случайным образом изменяем размер и обрезаем часть набора данных, мы фактически не увеличиваем размер набора данных для увеличения данных. Это верно? Или для дополнения данных требуется просто изменить / изменить исходный набор данных, а не увеличить его размер?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

По определению или, по крайней мере, влиятельная статья Ale xNet от 2012 , которая популяризировала увеличение данных в компьютерном зрении, увеличивает размер обучающего набора. Отсюда и слово увеличение . Go вперед и взгляните на Раздел 4.1 из бумаги Эль xNet . Но вот суть этого, который я цитирую из статьи:

Самый простой и наиболее распространенный способ уменьшения переобучения данных изображения - это искусственное увеличение набора данных используя сохраняющие метки преобразования. Первая форма увеличения данных состоит в генерации трансляций изображений и горизонтальных отражений. Мы делаем это путем извлечения случайных 224 × 224 патчей (и их горизонтальных отражений) из изображений 256 × 256 и обучаем нашу сеть этим извлеченным патчам. Это увеличивает размер нашего обучающего набора в 2048 раз, хотя приведенные примеры обучения, конечно, сильно взаимозависимы.

Что касается конкретной реализации c , это зависит от вашего варианта использования и, самое главное, от размера ваших тренировочных данных. Если вам не хватает количества в последнем случае, вам следует подумать о том, как подготовить оригинальные и преобразованные изображения, уделяя достаточное внимание сохранению меток.

0 голосов
/ 12 апреля 2020

transform.compose - это как предварительная обработка изображения, конвертирование одной формы в конкретную пригодную форму

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

для получения большего набора данных вы должны выполнить следующие операции:

final_train_data = []
final_target_train = []
for i in tqdm(range(train_x.shape[0])):
    final_train_data.append(train_x[i])
    final_train_data.append(rotate(train_x[i], angle=45, mode = 'wrap'))
    final_train_data.append(np.fliplr(train_x[i]))
    final_train_data.append(np.flipud(train_x[i]))
    final_train_data.append(random_noise(train_x[i],var=0.2**2))
for j in range(5):
    final_target_train.append(train_y[i]) 

для более подробной информации pytorch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...