我尝试了GitHub代码Object-Detector-App
这对于具有1秒延迟的单台摄像机来说效果很好,但是当我为多台摄像机尝试时,(两个,三个....)
为此,我为每个摄像机创建了用于图形和 session 的多个线程,并且我得到的高延迟取决于摄像机数量。
a)我使用的是NVIDIA Quadpro GP100,并且摄像机输入为HD(1920x1080)
b)我正在使用SSD_VI_COCO_11_06_2017
我研究了Tensorflow中的线程和队列概念,我在Google上搜索了很多,但是找不到实际的方法。
我想知道我是否在使用正确的方法来处理多个摄像头以进行物体检测,还是有更好的方法呢?
最佳答案
首先,请确保您正在从多个摄像机读取帧而没有延迟。如果将opencv与python包装器一起使用,请注意,read()的底层实现对USB网络摄像头和ip摄像机的工作方式不同。 Usb摄像机可以轻松堆叠,而ip摄像机则可能需要python线程和队列才能有效读取帧。
除非您需要大尺寸的图像,否则在将其输入到提要字典之前,请调整它们的大小。
使用该GPU可以轻松实现30+ FPS。常见的问题是加载图形并为每个推论开始一个新的 session 。如果使用一个GPU,则无需为每个摄像机打开新的图形/ session 。在循环外打开一个图和一个 session ,并在一个循环中推断所有摄像机的图像。这可以一个接一个地或分批完成。例如。将形状(1,512,512,3)的四个图像堆叠到形状(4,512,512,3)的单个数组中,并且只要gpu可以将它们适配到内存中,对所有四个图像的推断将并行进行。
它可能看起来像这样:
加载图并打开 session
每个读取帧并填充队列的摄像机的启动线程
启动单个推理线程,该线程从队列中读取帧,然后按顺序或成批地推断帧
关于python-3.x - 使用多台摄像机进行Tensorflow对象检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47220393/