1

我正在尝试使用 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 tensorflow,使用子进程,它只需要 824MiB。

当程序运行时,如果我启动 nvidia-smi 它会给我这个结果:

在此处输入图像描述

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

编辑:

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

4

3 回答 3

1

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

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

这应该可以让您了解机器中启用 CUDA 的设备的数量。您还应该使用以下命令检查构建信息

import cv2
print cv2.getBuildInformation()

以上两种情况的输出都可以表明你的opencv是否可以访问GPU。如果它不访问GPU,那么您可以考虑重新安装。

于 2020-09-11T10:57:37.040 回答
1

我得到了它!问题来自于我Net为每次迭代创建了一个新对象。

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

使用自定义功能,它现在可以以大约 60 fps 的速度工作。请注意,cvlib 可能不是为实时计算完成的。

于 2020-09-15T16:11:07.640 回答
0
workon opencv_cuda                                                                                                          
cd opencv                                                                                                                              
mkdir build                                                                                                                                
cd build                                                                                                                               
cmake -D CMAKE_BUILD_TYPE=RELEASE

并分享结果。它应该是这样的 在此处输入图像描述

于 2020-09-14T12:40:21.303 回答