TensorFlow目标检测API测试时间(Google目标检测运行时间)

3
Google物体检测API:

https://github.com/tensorflow/models/tree/master/research/object_detection

测试代码:

https://github.com/tensorflow/models/blob/master/research/object_detection/object_detection_tutorial.ipynb

我按照以下步骤执行了Google物体检测API的测试代码:

with detection_graph.as_default():
  with tf.Session(graph=detection_graph) as sess:
    start = time.time()
    image_tensor = 
    detection_graph.get_tensor_by_name('image_tensor:0')
    # Each box represents a part of the image where a particular 
    #object was detected.
    detection_boxes = 
    detection_graph.get_tensor_by_name('detection_boxes:0')        
    detection_scores = 
    detection_graph.get_tensor_by_name('detection_scores:0')
    detection_classes = 
    detection_graph.get_tensor_by_name('detection_classes:0')
    num_detections = 
    detection_graph.get_tensor_by_name('num_detections:0')

    for image_path in TEST_IMAGE_PATHS:
      image = Image.open(image_path)
      image_np = load_image_into_numpy_array(image)
      image_np_expanded = np.expand_dims(image_np, axis=0)
      # Actual detection.
      (boxes, scores, classes, num) = sess.run(
          [detection_boxes, detection_scores, detection_classes, 
         num_detections], feed_dict={image_tensor: image_np_expanded})

      # Visualization of the results of a detection.
      vis_util.visualize_boxes_and_labels_on_image_array(
          image_np,
          np.squeeze(boxes),
          np.squeeze(classes).astype(np.int32),
          np.squeeze(scores),
          category_index,
          use_normalized_coordinates=True,
          line_thickness=2)

    print("--- %s seconds ---" % (time.time() - start))    

根据谷歌研究论文,谷歌物体检测API支持的所有模型都具有实时性能!然而,上述测试代码显示,检测一个图像需要大约3秒钟(实际上,200帧-> 130秒,400帧-> 250秒)。我认为这个结果是错误的,因为这个模型具有实时性能。
可能的原因如下:
  1. GPU无法正常工作。
  2. 测试运行时间方法错误
请告诉我如何准确测量检测时间。
有关更多详细信息,请参阅以下链接https://github.com/tensorflow/models/issues/3531
1个回答

0

实际上,“object_detection_tutorial notebook”运行非常缓慢,因为它不仅仅是实际推理。它加载图像,将其放入numpy数组中,加载图形(非常计算密集),使用批量大小1运行实际推理,并输出带有框的图像。

这个脚本远远没有被优化,也不适用于时间关键的目的。它只是用于模型的快速视觉验证。

如果您想要部署一个用于生产的模型(在那里时间通常很重要),Tensorflow Serve就是您要寻找的东西。使用Tensorflow Serve,您可以轻松构建运行您的模型的GPU服务器。它具有几个功能,可以简化您的生活。因此,您只需将图像传递给服务器,它将返回您的模型的输出。后处理应该使用另一个服务器进行,因为GPU服务器通常相当昂贵。有几个很好的教程,介绍如何使用Tensorflow Serve设置对象检测服务器。例如here。它需要一些docker的经验,但您会处理好它的!

希望这能帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接