Keras / Tensorflow - Генерация прогнозов в пакетном режиме для imag enet (я получаю только один результат назад) - PullRequest
1 голос
/ 15 февраля 2020

Я генерирую теги imag enet для всех ключевых кадров в видео с одним вызовом и имеют этот код:

 # all keras/tf/mobilenet imports
model_imagenet = MobileNetV2(weights='imagenet')

frames_list = []
for frame in frame_set:
    frame_img = frame.to_image()
    frame_pil = frame_img.resize((224,224), Image.ANTIALIAS)
    ts = int(frame.pts)
    x = image.img_to_array(frame_pil)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    frames_list.append(x)

print(len(frames_list))                

preds_list = model_imagenet.predict_on_batch(frames_list)
print("[*]",preds_list)

Результат выглядит так:

frames_list count: 125

и таким образом, прогнозы - это одна строка из 1000 измерений (классы imag enet), не должно ли быть 125 строк?:

[[1.15425530e-04 1.83317825e-04 4.28701424e-05 2.87547664e-05
                    :
  7.91769926e-05 1.30803732e-04 4.81895368e-05 3.06891889e-04]]

Это генерирует прогноз для одной строки в пакете. Я пробовал и predict, и predict_on_batch с одинаковым результатом.

Как я могу получить общий прогноз, скажем, 200 кадров в одном go с Keras / Tensorflow / Mobil enet?

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

Imag eNet - популярная база данных, состоящая из 1000 различных категорий.

Размерность 1000 является естественной и ожидаемой, поскольку для одного изображения softmax выдает вероятность для каждого из 1000 классов .

РЕДАКТИРОВАТЬ: Для предсказания нескольких изображений, вы должны использовать predict_generator(). Кроме того, начиная с TensorFlow 2.0, если вы используете бэкэнд Keras, predict_generator() не рекомендуется в пользу простых predict, что также позволяет вводить данные в качестве генераторов.

Например: (из Керас: Как использовать Предикат_Генератор с ImageDataGenerator? ):

test_datagen = ImageDataGenerator(rescale=1./255)
#Modify the batch size here
test_generator = test_datagen.flow_from_directory(
        test_dir,
        target_size=(200, 200),
        color_mode="rgb",
        shuffle = False,
        class_mode='categorical',
        batch_size=1)

filenames = test_generator.filenames
nb_samples = len(filenames)

predict = model.predict_generator(test_generator,steps = nb_samples)

Имейте в виду, что очень маловероятно, что будет много предсказаний одновременно, так как оно ограничено видео памяти card.

Кроме того, обратите внимание на различие между Forec и Foregnit_on_batch: В чем разница между методами Foret и Foregnate_on_batch модели Keras?

0 голосов
/ 15 февраля 2020

Хорошо, вот как я решил эту проблему, надеюсь, это поможет кому-то еще:

preds_list = model_imagenet.predict(np.vstack(frames_list),batch_size=32)
print("[*]",preds_list)

Обратите внимание на np.vstack и настройте batch_size в соответствии с тем, на что способен ваш компьютер.

...