gpt4 book ai didi

python - Tensorflow 实时对象检测 - 需要优化建议

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:31 24 4
gpt4 key购买 nike

我正在开发一款软件,可以在家庭监控系统的多个摄像头设备上进行实时人员检测。

我目前正在运行 Opencv 以从 IP 摄像机和 tensorflow 中抓取帧以分析和查找它们上的对象(代码与可以在 Tf 对象检测 API 中找到的代码非常相似)。我还在这个链接上尝试了来自 tensorflow object detection api 的不同卡住推理图:

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

我有一台配备 CPU Intel Core i7-6700 CPU @ 3.40GHz × 8 的台式电脑,我的 GPU 是 NVidia Geforce gtx960ti。

该软件按预期运行,但比预期慢 (3-5 FPS),并且对于仅在 1 个相机设备上运行的单个 python 脚本,CPU 使用率相当高 (80-90%)。

我做错了什么吗?优化性能并实现更好的 FPS 和更低的 CPU 使用率以同时分析更多视频源的最佳方法是什么?到目前为止,我已经研究了多线程,但我不知道如何在我的代码中实现它。

代码片段:

使用 detection_graph.as_default():
以 tf.Session(graph=detection_graph) 作为 sess:
而真实的:
帧 = cap.read()
frame_expanded = np.expand_dims(frame, 轴 = 0)
image_tensor = detection_graph.get_tensor_by_name("image_tensor:0")
boxes = detection_graph.get_tensor_by_name("detection_boxes:0")
分数 = detection_graph.get_tensor_by_name("detection_scores:0")
classes = detection_graph.get_tensor_by_name("detection_classes:0")
num_detections=detection_graph.get_tensor_by_name("num_detections:0")
(boxes, scores, classes, num_detections) = sess.run(
[框,分数,类,num_detections],
feed_dict = {image_tensor: frame_expanded})
vis_util.visualize_boxes_and_labels_on_image_array(框架,...)
cv2.imshow("视频", 帧)
如果 cv2.waitKey(25) & 0xFF == ord("q"):
cv2.destroyAllWindows()
cap.stop()
休息

最佳答案

我为我的项目尝试的一些事情可能会有所帮助,

  1. 使用 nvidia-smi -l 5,并监控 GPU 使用情况和内存使用情况。
  2. 在 OpenCV 和 TF 之间创建一个小的 buff,这样它就不会竞争相同的 GPU 资源,

    BATCH_SIZE = 200
    frameCount = 1
    images = []

    while (cap.isOpened() and frameCount <= 10000):

    ret, image_np = cap.read()

    if ret == True:
    frameCount = frameCount + 1

    images.append(image_np)

    if frameCount % BATCH_SIZE == 0:

    start = timer()
    output_dict_array = run_inference_for_images(images,detection_graph)
    end = timer()
    avg = (end - start) / len(images)

    print("TF inference took: "+str(end - start) +" for ["+str(len(images))+"] images, average["+str(avg)+"]")

    print("output array has:" + str(len(output_dict_array)))

    for idx in range(len(output_dict_array)):
    output_dict = output_dict_array[idx]
    image_np_org = images[idx]
    vis_util.visualize_boxes_and_labels_on_image_array(
    image_np_org,
    output_dict['detection_boxes'],
    output_dict['detection_classes'],
    output_dict['detection_scores'],
    category_index,
    instance_masks=output_dict.get('detection_masks'),
    use_normalized_coordinates=True,
    line_thickness=6)

    out.write(image_np_org)
    ##cv2.imshow('object image', image_np_org)

    del output_dict_array[:]
    del images[:]



    else:
    break
  3. 使用移动网络模型。

  4. 将捕获的大小调整为 1280 * 720,将捕获保存为文件,然后对该文件运行推理。

我做了以上所有,并在 GTX1060(6GB) 笔记本电脑上存档了 12 ~ 16 FPS。

    2018-06-04 13:27:03.381783: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1435] Adding visible gpu devices: 0
2018-06-04 13:27:03.381854: I tensorflow/core/common_runtime/gpu/gpu_device.cc:923] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-06-04 13:27:03.381895: I tensorflow/core/common_runtime/gpu/gpu_device.cc:929] 0
2018-06-04 13:27:03.381933: I tensorflow/core/common_runtime/gpu/gpu_device.cc:942] 0: N
2018-06-04 13:27:03.382069: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1053] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 5211 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1060 with Max-Q Design, pci bus id: 0000:01:00.0, compute capability: 6.1)
===TF inference took: 8.62651109695 for [100] images, average[0.0862651109695]===

关于python - Tensorflow 实时对象检测 - 需要优化建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50630103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com