在张量流

时间:2017-09-06 08:15:28

标签: python tensorflow

我正在开展一个涉及人脸检测,人脸识别(基于facenet),年龄/性别检测和面部表情分析的项目。对于每个提到的功能,我有一个工作正常的张量流图。现在,我需要将所有这些组合在一个代码中。我的方法如下:

with tf.Graph().as_default(): 

      sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options, log_device_placement=False))
      with sess.as_default():

            #configure my camera
            video_capture = cv2.VideoCapture(0)


            while True:

              #read one frame from camera
              ret, frame = video_capture.read()



             #here I load face recognition graph using saver restore
             facenet.load_model(modeldir)
             images_placeholder tf.get_default_graph().get_tensor_by_name("input:0")
             embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0")


             #Here I reset the graph and load another tensorflow graph for age/gender detection
             tf.reset_default_graph()
             ....


             #Here I reset the graph and load another tensorflow graph for face expression analysis
             tf.reset_default_graph()
             .....

现在我的问题是代码效率不高而且速度很慢。原因是对于视频的每一帧,我需要从我的磁盘加载(恢复)几个图形(同时)。但是,我想加载所有图形一次(之前),只需在while循环中切换图形以减少运行时间。我很感激你的评论

1 个答案:

答案 0 :(得分:1)

请尝试以下表格:

graph_face_detection = tf.Graph()
sess_face_detection = tf.Session(graph=graph_face_detection)

graph_face_recognition = tf.Graph()
sess_face_recognition = tf.Session(graph=graph_face_recognition)

...

sess_face_detection.run(operations)

...

sess_face_recognition.run(operations)

如果你想使用gpu,请注意你的gpu内存分配。

更新

首先,一个会话一个图。

其次,要指定应使用哪个图形操作:

graph_face_detection = tf.Graph()
sess_face_detection = tf.Session(graph=graph_face_detection)

graph_face_recognition = tf.Graph()
sess_face_recognition = tf.Session(graph=graph_face_recognition)

with graph_face_detection.as_default() as g:
    output_face_detection = tf.matmul(x, y)

with graph_face_recognition.as_default() as g:
    output_face_recognition = tf.matmul(x, y)

...

sess_face_detection.run([output_face_detection])
sess_face_recognition.run([output_face_recognition])

此外,当您运行output_face_detection = tf.matmul(x, y)时,您只需创建一个节点并将其添加到图形中,而无需任何实际计算。因此,您可以先构建所有图形,然后在循环中使用sess_xxx.run(operation)