opencv不会使用所有GPU内存

时间:2020-09-06 21:08:47

标签: python-3.x opencv gpu cvlib

我正在尝试使用cvlib软件包,该软件包使用yolov3模型来识别Windows 10上图像上的对象。 让我们举一个简单的例子:

import cvlib as cv
import time
from cvlib.object_detection import draw_bbox


inittimer=time.time()
bbox, label, conf = cv.detect_common_objects(img,confidence=0.5,model='yolov3-worker',enable_gpu=True)
print('The process tooks %.3f s'%(time.time()-inittimer)

output_image = draw_bbox(img, bbox, label, conf)

结果给出〜60ms。

cvlib使用opencv计算此cnn部分。

如果现在我尝试使用子进程查看使用了多少GPU张量流,则仅需824MiB。

程序运行时,如果我启动nvidia-smi,它将得到以下结果:

enter image description here

您可以看到这里有更多可用的内存。我的问题很简单..为什么Cvlib(以及tensorflow)没有使用所有这些来改善时间检测?

编辑:

据我了解,cvlib使用tensorflow但也使用opencv检测器。我使用cmake和Cuda 10.2安装了opencv 我不明白为什么,但是在nvidia-smi中写的是CUDA版本:11.0,不是。也许这就是问题的一部分?

3 个答案:

答案 0 :(得分:0)

您可以验证opencv是否正在使用CUDA。可以使用以下方法完成

import cv2
print(cv2.cuda.getCudaEnabledDeviceCount())

这应该为您提供机器中启用CUDA的设备的数量。您还应该使用以下方法检查构建信息

import cv2
print cv2.getBuildInformation()

以上两种情况的输出都可以指示您的opencv是否可以访问GPU。如果无法访问GPU,则可以考虑重新安装。

答案 1 :(得分:0)

workon opencv_cuda                                                                                                          
cd opencv                                                                                                                              
mkdir build                                                                                                                                
cd build                                                                                                                               
cmake -D CMAKE_BUILD_TYPE=RELEASE

并分享结果。 应该是这样的 enter image description here

答案 2 :(得分:0)

我明白了!问题出在我为每个问题创建了一个新的Net对象的情况。

以下是github上的相关问题,您可以在其中关注它:https://github.com/opencv/opencv/issues/16348

有了自定义功能,它现在可以约60 fps的速度工作。请注意,cvlib可能尚未进行实时计算。