【问题标题】:opencv doesn't use all GPU memoryopencv 不使用所有 GPU 内存
【发布时间】:2020-12-25 08:44:39
【问题描述】:

我正在尝试使用 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)

结果大约为 60 毫秒。

cvlib 使用 opencv 计算这个 cnn 部分。

如果现在我尝试查看使用了多少 GPU tensorflow,使用子进程,它只需要 824MiB。

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

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

编辑:

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

【问题讨论】:

  • 您是否从源代码安装了支持 CUDA 的 OpenCV?
  • 是的,我做到了,这就是为什么它在那里使用一些 GPU 而不是 CPU。
  • 您可能尝试同时安装两个版本。然后你在安装新的之前没有卸载前一个。 nvcc --version 的输出是什么,你的驱动是什么?

标签: python-3.x opencv gpu cvlib


【解决方案1】:

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

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

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

import cv2
print cv2.getBuildInformation()

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

【讨论】:

  • 非常感谢您的回答。如前所述,opencv 使用 Cuda 和 GPU 尝试你答案的第一部分我得到了结果:1 这意味着我有一个使用 cuda 启用的设备(RTX 2060)但奇怪的是,它并没有全部使用!第二部分给了我构建过程,唯一缺少的是我禁用的 FAST_MATH。
  • @Panda50 在执行 cmake 时,您是否有 WITH_CUDA=ON、ENABLE_FAST_MATH=1 和 CUDA_FAST_MATH=1 的标志?
  • 是的,我用 FAST_MATH=1 再次构建它来测试它并没有改变任何东西。
  • @Panda50 你能分享你的安装脚本吗?我想重现您面临的问题
  • @Panda50 不完全是,您分享的是安装过程的输出。我正在寻找某种 shell 脚本或指令,我可以使用它们以与您安装的完全相同的方式安装 OpenCV。鉴于我将能够重现您面临的问题。
【解决方案2】:

我明白了!问题在于我为每个迭代创建了一个新的Net 对象。

这里是github上的相关问题,你可以关注它:https://github.com/opencv/opencv/issues/16348

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

【讨论】:

    【解决方案3】:
    workon opencv_cuda                                                                                                          
    cd opencv                                                                                                                              
    mkdir build                                                                                                                                
    cd build                                                                                                                               
    cmake -D CMAKE_BUILD_TYPE=RELEASE
    

    并分享结果。 它应该是这样的

    【讨论】:

    • 我在 Windows 10 上,但是当我输入 @ravikt 推荐的代码时,我有:``` NVIDIA CUDA: YES (ver 10.1, CUFFT CUBLAS FAST_MATH) NVIDIA GPU arch: 60 61 70 75 NVIDIA PTX 拱门:cuDNN:是(7.6.5 版)```
    • type make -j(n) n 是您的系统拥有的核心数。假设它是 4,然后输入 make -j4
    • 查看此链接的第 6 步及更多内容。 pyimagesearch.com/2020/02/03/…
    • 我想我把你需要的东西放在@ravikt 评论会话中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2018-02-15
    • 2019-02-11
    • 2018-02-11
    • 1970-01-01
    • 2017-04-25
    • 2015-01-18
    相关资源
    最近更新 更多