为什么如此低的预测率25 - 40 [sec/1]使用更快的RCNN在GPU上进行自定义对象检测?

Sac*_*tel 6 machine-learning object-detection deep-learning tensorflow

我已经为自定义对象检测训练了一个faster_rcnn_inception_resnet_v2_atrous_coco模型(可在此处获得).

为了预测,我在我的图像上使用了对象检测演示jupyter笔记本文件.还检查了每个步骤消耗的时间,发现它sess.run一直在占用.

但是在GPU上预测(3000 x 2000)像素大小(大约1-2 [MB])的图像需要大约25-40 [秒].

有人能解决这个问题吗?

我已经执行了分析,链接到下载分析文件

链接到完整的分析

系统信息:
培训及预测虚拟机中创建Azure的门户与Standard_NV6(细节在这里它使用),NVIDIA的Tesla M60 GPU

  • 操作系统平台和分发 - Windows 10
  • TensorFlow安装自 - 使用pip pip3 install --upgrade tensorflow-gpu
  • TensorFlow版本 - 1.8.0
  • Python版本 - 3.6.5
  • GPU/CPU - GPU
  • CUDA/cuDNN版本 - CUDA 9/cuDNN 7

Sre*_*A R 0

大图像自然需要更多时间。即使在 400*400 等较低分辨率下,Tensorflow 对象检测也能表现良好。

获取原始图像的副本,将其大小调整为较低的分辨率以执行对象检测。您将获得边界框坐标。现在计算原始高分辨率图像的相应边界框坐标。在原始图像上绘制边界框。

IE

假设您有一张 3000*2000 的图像,复制它并将其大小调整为 300*200。对调整大小的图像执行对象检测,检测到具有边界框(50,100,150,150)的对象,即(ymin,xmin,ymax,xmax)

现在较大的原始图像对应的框坐标为(500,1000,1500,1500)。在其上绘制矩形。

对小图像进行检测,然后在原始图像上绘制边界框。 性能将会得到极大的提高。

注意:TensorFlow 支持标准化坐标。

即,如果您有一个高度为 100 且 ymin = 50 的图像,则标准化 ymin 为 0.5。您只需分别乘以 y 和 x 坐标的高度或宽度,即可将标准化坐标映射到任何尺寸的图像。

我建议使用 OpenCV (cv2) 进行所有图像处理。