Методы Keras 'Foregnit' и 'Foregnet_Generator' с различным результатом - PullRequest
1 голос
/ 24 октября 2019

Я подготовил базовую модель CNN для классификации изображений. При обучении модели я использовал ImageDataGenerator от keras api. После обучения модели я использовал для тестирования метод testdatagenerator и метод flow_from_directory. Все прошло хорошо. Затем я сохранил модель для дальнейшего использования. Сейчас я использую ту же модель и использовал метод прогнозирования из keras api с одним изображением, но прогноз каждый раз сильно отличается, когда я тестирую с использованием разных изображений. Не могли бы вы сообщить мне какое-либо решение.

training_augmentation = ImageDataGenerator(rescale=1 / 255.0)
validation_testing_augmentation = ImageDataGenerator(rescale=1 / 255.0)

# Initialize training generator
training_generator = training_augmentation.flow_from_directory(
                                                                 JPG_TRAIN_IMAGE_DIR,
                                                                 class_mode="categorical",
                                                                 target_size=(32, 32),
                                                                 color_mode="rgb",
                                                                 shuffle=True,
                                                                 batch_size=batch_size
                                                              )

# initialize the validation generator
validation_generator = validation_testing_augmentation.flow_from_directory(
                                                                             JPG_VAL_IMAGE_DIR,
                                                                             class_mode="categorical",
                                                                             target_size=(32, 32),
                                                                             color_mode="rgb",
                                                                             shuffle=False,
                                                                             batch_size=batch_size
                                                                          )

# initialize the testing generator
testing_generator = validation_testing_augmentation.flow_from_directory(
                                                                           JPG_TEST_IMAGE_DIR,
                                                                           class_mode="categorical",
                                                                           target_size=(32, 32),
                                                                           color_mode="rgb",
                                                                           shuffle=False,
                                                                           batch_size=batch_size
                                                                        )

history = model.fit_generator(
    training_generator,
    steps_per_epoch=total_img_count_dict['train'] // batch_size,
    validation_data=validation_generator,
    validation_steps=total_img_count_dict['val'] // batch_size,
    epochs=epochs,
    callbacks=callbacks)

testing_generator.reset()
prediction_stats = model.predict_generator(testing_generator, steps=(total_img_count_dict['test'] // batch_size) + 1)


### Trying to use predict method
img_file = '/content/drive/My Drive/Traffic_Sign_Recognition/to_display_output/Copy of 00003_00019.jpg'
img = cv2.imread(img_file)
img=cv2.resize(img, (32,32))
img = img/255.0
a=np.reshape(img, (1, 32, 32, 3))

model = load_model('/content/drive/My Drive/Traffic_Sign_Recognition/basic_cnn.h5')

prediction = model.predict(a)

Когда я пытаюсь использовать прогноз, каждый раз, когда приходит неправильный прогноз.

Будут оценены любые выводы.

1 Ответ

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

Keras generator использует PIL для чтения изображений, которые считывают изображения с диска как RGB.

. Вы используете opencv для чтения, при котором изображения читаются как BGR. Вы должны конвертировать ваше изображение из BGR в RGB.

img = cv2.imread(img_file)

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

...
...