TensorFlow预测也会针对已删除的图像运行

时间:2018-01-31 13:36:29

标签: python tensorflow image-recognition

我们正在使用tensorflow库进行人脸识别。我们的代码适用于单个图像。但是当我们将其作为API运行时,预测时间会随着每个后续请求而增加。这是因为它搜索先前预测的图像,理想情况下不会发生。请在下面找到我正在使用的代码。

def train:   
    with tf.Session(config=tf.ConfigProto(log_device_placement=False)) as sess:
        test_set = _get_test_data(input_directory)

        images, labels = _load_images_and_labels(test_set, image_size=160, batch_size=batch_size,
                                                              num_threads=4, num_epochs=1)

        _load_model(model_filepath=model_path)

        init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
        sess.run(init_op)

        images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")
        embedding_layer = tf.get_default_graph().get_tensor_by_name("embeddings:0")
        phase_train_placeholder = tf.get_default_graph().get_tensor_by_name("phase_train:0")

        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(sess=sess,coord=coord)

        emb_array, label_array = _create_embeddings(embedding_layer, images, labels, images_placeholder,
                                                phase_train_placeholder, sess)

        classifier_filename = classifier_output_path

        class_name, prob = _evaluate_classifier(emb_array, label_array, classifier_filename)
        coord.request_stop()
        coord.join(threads)

def _create_embeddings(embedding_layer, images, labels, images_placeholder, phase_train_placeholder, sess):
    emb_array = None
    label_array = None
    try:
        i = 0
        while True:
            print("batch images")
            batch_images, batch_labels = sess.run([images, labels])
            print('Processing iteration {} batch of size: {}'.format(i, len(batch_labels)))
            emb = sess.run(embedding_layer,
                       feed_dict={images_placeholder: batch_images, phase_train_placeholder: False})

            emb_array = np.concatenate([emb_array, emb]) if emb_array is not None else emb
            label_array = np.concatenate([label_array, batch_labels]) if label_array is not None else batch_labels
            i += 1

    except tf.errors.OutOfRangeError:
        pass

return emb_array, label_array

它在

处搜索先前预测的图像
`batch_images, batch_labels = sess.run([images, labels])`

在创建嵌入函数中。我认为这是一些未闭合线程的问题,因为sess.run运行所有排队的线程。任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

在调试期间,我发现先前预测的图像信息是默认图形,在执行后续行

时选择
    images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")
    embedding_layer = tf.get_default_graph().get_tensor_by_name("embeddings:0")

因此,在开始会话之前重置图形将解决扫描先前预测图像的问题

tf.reset_default_graph()