Классифицировать несколько изображений за один раз с InceptionV3 - PullRequest
0 голосов
/ 05 ноября 2019

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

Мой вопрос заключается в том, как узнать, к какому изображению относится каждое предсказание, поскольку они не соответствуют порядку в массиве. Я пытался извлечь классы с помощью generator_top.classes, но он берет их из имени каталога, в котором находятся изображения. Я вижу, что все прогнозы верны (те объекты, которые находятся на изображениях, те, которые получены в исходном массиве). Я бы только понял, как их сравнивать.

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

from keras import applications

base_model = applications.InceptionV3(include_top=False, weights='imagenet')

res_model = Sequential()
res_model.add(GlobalAveragePooling2D(input_shape=train_data.shape[1:]))
res_model.add(Dense(17, activation='softmax'))
datagen=ImageDataGenerator(rescale=1./255)


generator = datagen.flow_from_directory(  
    test_path,  
    target_size=(img_width, img_height),  
    batch_size=batch_size,  
    class_mode=None,  
    shuffle=False)

nb_test_samples = len(generator.filenames)  #17
predict_size_test = int(math.ceil(nb_test_samples/batch_size))   #2  
bottleneck_features_test = base_model.predict_generator( generator, 
    predict_size_test, verbose=1) 

np.save('bottleneck_features_test_10000inc.npy', bottleneck_features_test)

generator = datagen.flow_from_directory(  
    test_path,  
    target_size=(img_width, img_height),  
    batch_size=batch_size,  
    class_mode=None,  
    shuffle=False)  

nb_test_samples = len(generator_top.filenames)  

test_data = np.load('bottleneck_features_test_10000inc.npy')  

test_labels = generator_top.classes
test_labels = to_categorical(test_labels, num_classes=17) 

tr_predictions=[np.argmax(res_model.predict(np.expand_dims(feature,axis=0)))for feature in test_data]

1 Ответ

0 голосов
/ 06 ноября 2019

Вы можете получить имена файлов сгенерированных файлов и сопоставить их с предсказанными результатами.

datagen = ImageDataGenerator()
gen = datagen.flow_from_directory(...)
for i in gen:
idx = (gen.batch_index - 1) * gen.batch_size
filenames = gen.filenames[idx : idx + gen.batch_size]

Массив filenames будет иметь имена файлов, использовать такие функции, как zip в python, для отображения имен файлов и прогнозируемых результатов.

Примечание 1. - Это будет работать при

shuffle=False

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

Примечание 2 - этот ответ основан на Keras flowFromDirectory получает имена файлов по мере их создания .

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