Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为单个图像(图像、图形)运行推理-Tensorflow,目标检测_Tensorflow_Object Detection - Fatal编程技术网

为单个图像(图像、图形)运行推理-Tensorflow,目标检测

为单个图像(图像、图形)运行推理-Tensorflow,目标检测,tensorflow,object-detection,Tensorflow,Object Detection,关于。我想知道是否有可能运行一个目录中的所有图像 而不是编写for循环并运行“为单个图像(图像、图形)运行推理”。是否有一种方法可以对目录中的所有图像运行推断,或者对多个图像运行推断。 这将每次创建tf.session,我认为这在计算上很昂贵。如果我错了,请纠正我。如您所知,每次创建“为单个图像运行推理”方法。 如果你想推断多个图像,你应该修改代码如下: 方法调用 images = [] for f in files: if f.lower().endswith(('.png', '.j

关于。我想知道是否有可能运行一个目录中的所有图像

而不是编写for循环并运行“为单个图像(图像、图形)运行推理”。是否有一种方法可以对目录中的所有图像运行推断,或者对多个图像运行推断。


这将每次创建tf.session,我认为这在计算上很昂贵。如果我错了,请纠正我。

如您所知,每次创建“为单个图像运行推理”方法。 如果你想推断多个图像,你应该修改代码如下:

  • 方法调用

    images = []
    for f in files:
      if f.lower().endswith(('.png', '.jpg', '.jpeg')):
        image_path = files_dir + '/' + f
        image =  .... // Read image etc.
        images.append(image)
        output_dicts = run_inference_for_multiple_images(images, detection_graph)
    
  • 为多个图像运行\u推断\u

    def run_inference_for_multiple_images(images, grapg):
      with graph.as_default():
        with tf.Session() as sess:
          output_dicts = []
    
          for index, image in enumerate(images):
            ... same as inferencing for single image
    
             output_dicts.append(output_dict)
    
       return output_dicts
    

此代码将在不创建tf.session的情况下执行,每次只创建一次

我从谷歌找到了这个教程-。查看其-->-->后,我们只需在每次想要检测对象时运行检测对象(图像路径)功能。

可以根据GPU的计算能力和图像大小对一批图像进行推断

步骤1:将所有测试图像堆叠在一个阵列中:

for image_path in glob.glob(PATH_TO_TEST_IMAGES_DIR + '/*.jpg'):
    image_np = io.imread(image_path)  #
    image_array.append(image_np)
image_array = np.array(image_array)
步骤2:对批执行推断:(较大的批大小可能导致内存不足问题)

确保图像张量和图像数组的尺寸匹配。在本例中,图像_数组是(?,高度,宽度,3)

一些提示:

  • 您可能只想加载图形一次,因为加载只需几秒钟
  • 我观察到使用skiliage.io.imread()或cv2.imread()加载图像非常快。这些函数直接将图像作为numpy数组加载
  • 用于保存图像的skimage或opencv比matplotlib更快

  • 如果我们一次评估10幅图像的批次,那么批量图像评估是否会快10倍?在我的例子中,它并不是快10倍。第一个或有时第二个映像所用的时间几乎和单个版本的运行时间相同。但速度肯定更快。实际上,当我用我的视频剪辑运行目标检测时,只需要大约2小时,但单个版本需要18~24小时。这给了我一个好主意。谢谢你@BhanuKiran。我希望我的表现能得到一点提升。
    for image_path in glob.glob(PATH_TO_TEST_IMAGES_DIR + '/*.jpg'):
        image_np = io.imread(image_path)  #
        image_array.append(image_np)
    image_array = np.array(image_array)
    
      BATCH_SIZE = 5
      for i in range(0, image_array.shape[0],BATCH_SIZE):
        output_dict = sess.run(tensor_dict, feed_dict={image_tensor: image_array[i:i+BATCH_SIZE]})
    
    
        print("number of images inferenced = ", i+BATCH_SIZE)
        output_dict_array.append(output_dict)