参考object_detection_tutorial.ipynb。我想知道是否可以运行目录中的所有图像。
而不是编写for循环并运行" run_inference_for_single_image(图像,图形)"。有没有办法在目录中的所有图像上运行推理或在多个图像上运行推理。 link
for f in files:
if f.lower().endswith(('.png', '.jpg', '.jpeg')):
image_path = files_dir + '/' + f
.... // Read image etc.
output_dict = run_inference_for_single_image(image_np, detection_graph)
这将每次创建tf.session,我认为它的计算成本很高。如果我错了,请纠正我。
答案 0 :(得分:4)
您知道,每次都会创建“ run_inference_for_single_image”方法。 如果您想推断出多张图片,则应更改代码,例如
方法调用
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)
run_inference_for_multiple_images
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。
答案 1 :(得分:2)
我从Google-creating-object-detection-application-tensorflow找到了本教程。在查看了github page-> object_detection_app-> app.py之后,我们只需要在每次要检测到一个 detect_objects(image_path)函数时运行对象。
答案 2 :(得分:0)
可以根据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步:对批次进行推断:(较高的批次大小可能会导致内存不足的问题)
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)
确保image_tensor和image_array的尺寸匹配。在此示例中,image_array为(?,height,width,3)
一些提示: