предварительная обработка изображений RGB для передачи обучения - Python - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу лучше понять концепцию предварительной обработки изображений для ввода их в предварительно обученную нейронную сеть (и, в общем, в одну, созданную с нуля).Я думаю, что новые данные для предварительно обученного NN должны иметь тот же диапазон данных, что и исходный.В этом случае я готов использовать архитектуру ResNet18 , обученную на наборе данных ImageNet , которая, если я не ошибаюсь, принимала данные в диапазоне [-1,1] какinput.

Представьте, что я работаю над набором данных cifar10, для простоты

import keras
from keras.datasets import cifar10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

, который дает значения rgb в диапазоне [0,256].Чтобы достичь диапазона [-1,1], я использую следующий код:

# this makes data in [0,1] range
x_train = np.divide(x_train, 255.0)
x_test = np.divide(x_test, 255.0)

# this generates batches in [-1,1] range, if I'm correct
datagen = ImageDataGenerator(
    featurewise_center = True,
    featurewise_std_normalization = True
)
datagen.fit(x_train)

# always if I'm correct, this should apply the normalization configuration also to the test set,
# so that x_train and x_test have the same range [-1,1]
for i in range(len(x_test)):
    x_test[i] = datagen.standardize(x_test[i])

# now I fit the generator
epochs = 20
batch_size = 32
model.fit_generator(datagen.flow(x_train, y_train,
                             batch_size = batch_size),
                steps_per_epoch = x_train.shape[0] // batch_size,
                epochs = epochs,
                validation_data = (x_test, y_test))

У меня есть следующие вопросы:

  1. Процедура преобразования [0,256]] исходные данные в диапазоне [-1,1] приемлемы?Является ли x_train = np.divide(x_train, 255.0) значимой операцией или мы получили бы тот же результат только с помощью функции ImageDataGenerator?
  2. Я считаю, что тестовый набор должен иметь тот же диапазон данных, что и обучающий набор, то есть [-1, 1].for i in range(len(x_test)): x_test[i] = datagen.standardize(x_test[i]) - правильная команда для использования?

У меня пока нет четких представлений о предварительной обработке изображений.Заранее спасибо за помощь!

...