【问题标题】:Tensorflow Object detection with multiple camera使用多个摄像头进行 TensorFlow 对象检测
【发布时间】:2017-11-10 10:14:21
【问题描述】:
我试过 GitHub 代码Object-Detector-App
这适用于延迟为 1 秒的单台摄像机,但当我尝试多台摄像机时,(两个、三个....)
为此,我为每个摄像机的图形和会话创建了多个线程,并且我得到的高延迟取决于摄像机的数量。
a) 我使用的是 NVIDIA Quadpro GP100,摄像头输入为 HD(1920x1080)
b) 我正在使用 SSD_VI_COCO_11_06_2017
我在 tensorflow 中研究了线程和队列的概念,我搜索了很多但找不到实用的方法。
我想知道我是否以正确的方式处理多个摄像头进行物体检测,或者有什么更好的方法吗?
【问题讨论】:
标签:
python-3.x
tensorflow-gpu
【解决方案1】:
首先确保您正在读取来自多个摄像头的帧而没有延迟。如果将 opencv 与 python 包装器一起使用,请注意 read() 的底层实现对于 usb 网络摄像头和 ip 摄像头的工作方式不同。 Usb 摄像头可以轻松堆叠,而 ip 摄像头可能需要 python 线程和队列才能有效地读取帧。
除非您需要这么大的图像,否则请在将它们输入到 feed dict 之前调整它们的大小。
30+ FPS 应该很容易用那个 gpu 实现。常见问题是加载图表并为每个推理启动一个新会话。如果使用一个 gpu,则无需为每个摄像头打开一个新的图形/会话。在循环外打开一个图形和一个会话,并在一个循环中推断来自所有相机的图像。这可以一个接一个地进行,也可以分批进行。例如。将四个形状 (1, 512, 512, 3) 的图像堆叠到一个形状 (4, 512, 512, 3) 的数组中,如果 gpu 可以将它们装入内存,所有四个图像的推理将并行发生。
它可能看起来像这样:
加载图表并打开会话
为读取帧并填充队列的每个相机启动线程
启动单个推理线程,从队列中读取帧,然后按顺序或批量推理帧