Как запускать классификации для видеокадров в начале, не запуская новый сеанс tensorflow для каждого кадра?

#python #tensorflow #classification #conv-neural-network

#python #tensorflow #классификация #conv-нейронная сеть

Вопрос:

Я использую это репозиторий для запуска классификатора для изображений с началом. Однако вместо того, чтобы работать с изображениями, я хочу, чтобы он перебирал видео и запускал обнаружение для каждого кадра. Я настроил read_tensor_from_image_file() функцию так, чтобы она могла обрабатывать кадр вместо файла изображения, так что это здорово. Однако теперь происходит то, что для каждого кадра запускается новый сеанс tensorflow из-за этого бита:

  with tf.Session(graph=graph) as sess:
    start = time.time()
    results = sess.run(output_operation.outputs[0],
                      {input_operation.outputs[0]: t})
    end=time.time()
  results = np.squeeze(results)
 

(t определяется как t = read_tensor_from_image_file() )

Мой вопрос: как я могу изменить этот код, чтобы я мог запускать классификацию для кадра, не инициируя новый tf.Session для каждого кадра. Вместо этого я хочу запустить один tf.Session в начале видео и закрыть его в конце видео.

Комментарии:

1. Переместите часть with tft.Session в соответствующую область и передайте объект sess туда, где это необходимо

2. Хорошо, это действительно сработало. Я перешел с tf.Session вверх, так что это стало: graph = load graph(), with tf.Session: for frame in video, t = sess.run() .

3. Отлично. Вы дадите ответ на свой пост и одобрите его? Тогда другие тоже легко найдут решение

Ответ №1:

     graph = load_graph(model_file)
    with tf.Session (graph=graph) as sess:    # initiate tensorflow session
        for t in frame_list:                  # framelist is a list with all frames
            results = sess.run(output_operation.outputs[0],
                  {input_operation.outputs[0]: t})