Модель двоичного классификатора, обученная с использованием пакета, сгенерированного с использованием ImageDataGenerator, не дающего того же результата без ImageDataGenerator - PullRequest
0 голосов
/ 12 октября 2019

Я обучил свою двоичную модель классификации, передавая данные в fit_generator с использованием ImageDataGenerator. Я не использовал никаких опций аугментации, я использовал ImageDataGenerator просто для изменения размера изображения до 224x224x3. Ниже приведен мой тренировочный код.

def get_batches(directory, target_size=target_size, batch_size=batch_size, shuffle=False):
    datagen = ImageDataGenerator()
    return datagen.flow_from_directory(directory=directory,
                                          target_size=target_size,
                                          batch_size=batch_size,
                                          class_mode='categorical',
                                          shuffle=shuffle)


batches = get_batches(train_dataset, shuffle=True)
valid_batches = get_batches(validation_dataset, shuffle=True)

model.fit_generator(batches, steps_per_epoch=batches.samples//batch_size, nb_epoch=150,
                    validation_data=valid_batches,
                    callbacks= [early_stop, checkpoint, tensorboard, time_callback, TerminateOnNaN()],
                    validation_steps=valid_batches.samples//batch_size)

Я получил достойный результат обучения, и я тренировался оценивать с помощью тестового набора.

batches = get_batches(evaluation_dataset, shuffle=True)

pred_acc = top_model.predict_generator(batches, steps=batches.samples//batch_size)

Я получаю приличную точность оценки, как и ожидалось.

Я попытался выполнить ту же операцию с функцией предиката вместо Предиката_генератора и изменил размер изображения самостоятельно вместо ImageDataGenerator.

image = cv2.imread ("xyz.bmp")
image_resized = cv2.resize(image, (224,224))

pred_img = np.expand_dims(image_resized, axis=0)

prediction = top_model.predict(pred_img)

Я не получаю вывод той же модели, когда я использовал прогноз дляте же изображения, передаваемые в Предикат_Генератор с использованием ImageDataGenerator.

Я не могу использовать ImageDataGenerator для моего использования в реальном времени.

В чем может быть проблема?

Любые указатели.

Я видел некоторые обсуждения, похожие на эту проблему https://github.com/keras-team/keras/issues/3477#issuecomment-360022086,, но для моего случая я проверил длякак положительные, так и отрицательные случаи и результат всегда одинаков независимо от входного изображения. Похоже, ImageDataGenerator делает некоторые изменения в данных, которые мне нужно интегрировать.

Спасибо, Partha

1 Ответ

0 голосов
/ 14 октября 2019

Есть проблема решена.

Проблема связана с форматом цвета.

Вывод ImageDataGenerator в формате RGB, тогда как opencv imread читает его в формате BGR.

Так что BGR2RGBДля решения этой проблемы используется преобразование.

image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)

Также в ImageDataGenerator для изменения размера изображения по умолчанию установлено значение «Ближайший», я также использовал его в opencv resize.

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