Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 较小的图像几乎不会影响OpenCV中掩码RCNN模型的推断时间_C++_Tensorflow_Opencv_Object Detection Api - Fatal编程技术网

C++ 较小的图像几乎不会影响OpenCV中掩码RCNN模型的推断时间

C++ 较小的图像几乎不会影响OpenCV中掩码RCNN模型的推断时间,c++,tensorflow,opencv,object-detection-api,C++,Tensorflow,Opencv,Object Detection Api,上下文 我使用Tensorflow对象检测API训练了一个自定义掩码RCNN来检测面部区域。我的输入图像是480x480,但我选择将其调整为240x240,以便更快地进行培训 我的问题 < P>我在另一个项目中使用OpenCV-DNN在几个计算机上进行C++推理,我的速度结果非常不同(每个计算机都是非常不同的,所以没有什么值得关注的,到目前为止,预测也是好的),但是我有一个推理的时间在最差的一个(没有GPU)上,大约2.5秒,对于我的目的来说太长了。 我所做的 我又训练了一次我的蒙版RCNN模型

上下文

我使用Tensorflow对象检测API训练了一个自定义掩码RCNN来检测面部区域。我的输入图像是480x480,但我选择将其调整为240x240,以便更快地进行培训

我的问题

< P>我在另一个项目中使用OpenCV-DNN在几个计算机上进行C++推理,我的速度结果非常不同(每个计算机都是非常不同的,所以没有什么值得关注的,到目前为止,预测也是好的),但是我有一个推理的时间在最差的一个(没有GPU)上,大约2.5秒,对于我的目的来说太长了。 我所做的

我又训练了一次我的蒙版RCNN模型,这次使用120x120图像作为输入。训练速度快了大约3倍,结果也足够好(表现比第一次差7%左右,对我来说还行)

问题

当使用OpenCV运行推理时,推理速度只快不到10毫秒(总时间约2.5秒),而在我看来,从训练速度来看,推理速度应该快得多

问题

我正在为我的网络提供创建的blob,例如:

  blob = cv::dnn::blobFromImage(image, 1.0, cv::Size(blob_height, blob_width), cv::Scalar(), true, false);
根据型号,
blob_高度
blob_宽度
分别为120或240,并且我的图像是大小为(480480)的cv::Mat。 我想知道是否有一个解释,为什么这两个模型之间的改进如此之少。函数blobFromImage是否返回与输入图像形状相同的张量? 我将非常感谢任何帮助我理解这一点或提供加快过程的提示

其他资料:


Tensorflow 1.14,OpenCV 4.4.0

对于可能有相同问题的人,MASK RCNN和其他类似的模型(如更快的RCNN)始终具有相同数量的参数,而不管图像的输入大小如何,这使得推断时间几乎总是相同的。因此,很难使用OpenCV改进推理

最好的解决方案是使用OpenVINO toolkit(),它有模块来优化您的模型(例如,使用FP16或INT8而不是FP32)和一个推理引擎来优化指定硬件上的推理(不过它必须是Intel硬件,但对于CPU来说,到目前为止很方便)


与OpenCV一样,使用FP32的OpenVINO CPU现在的推理速度是OpenCV的4倍,使用起来比OpenCV要复杂一些,但绝对值得。

这似乎相当明显。MASK RCNN是一个深层模型(多层)。仅更改输入分辨率会改变第一层,在本例中为75%。切换到INT8会将所有层收缩75%。您可能应该检查FP/FN速率。我的观点主要是说,具有相同精度的OpenVINO要快得多,我没有尝试使用INT8或FP16。如果不清楚,很抱歉。