CUDA(GPU)作为OpenCV后端
CUDA(GPU) as OpenCV backend
我试图使用 CUDA 作为 opencv-4.1.1 中提供的 dnn 模块的后端,我已经在启用 CUDA 的情况下构建了 opencv,nvidia 驱动程序和 CUDA 已正确放置在系统上,这里使用 manjaro 作为开发平台。
我正在尝试使用 cv2.dnn 模块加载预先训练的 YOLOv3 权重,
net = cv2.dnn.readNetFromDarknet('yolov3.cfg', 'yolov3.weights')
但它使用 CPU 作为定义的推理引擎,但我尝试使用 GPU 作为后端 IE,来自官方的 opencv 文档,我发现以下内容
DNN_TARGET_CPU
DNN_TARGET_OPENCL
DNN_TARGET_OPENCL_FP16
DNN_TARGET_MYRIAD
DNN_TARGET_FPGA
作为目标后端,但不支持直接 GPU 推理,那么如果它不使用 GPU 作为底层推理引擎,那么使用 CUDA 编译 openCV 有什么意义,
为了确保进程在GPU上运行,我发布了输出
nvidia-smi
,
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26 Driver Version: 430.26 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GT 710 Off | 00000000:01:00.0 N/A | N/A |
| 40% 40C P0 N/A / N/A | 598MiB / 1998MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 Not Supported |
+-----------------------------------------------------------------------------+
GPU利用率的进程 ID 为 0,显然表示没有使用 GPU 的进程,任何指导都将不胜感激。
目前,在 GSOC 任务下,CUDA 对 DNN 模块的支持正在进行中,因此尚未正式发布。您可以在此处查看其存储库以查看进度。
编辑:看起来CUDA后端集成已完成并包含在发布版本4.2.0中,您可以在此处查看更改日志。
您可以在 OpenCV 上使用 CUDA 后端,如下所示。
# Loading trained YOLO v3 Objects Detector
network = cv2.dnn.readNetFromDarknet('yolo-coco-data/yolov3.cfg',
'yolo-coco-data/yolov3.weights')
# CUDA Backend
network.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
network.setPreferableTarget(cv2.dnn. DNN_TARGET_CUDA)
# Also you can use following code for 16 FPS(if your system supports).
#network.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA_FP16)
相关文章:
- ArrayFire中统一后端的使用
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 如何在 LLVM 后端的机器级别找到 def-use 链
- 如何在 boost::msm 中实现可以访问状态机 (SM) 的后端/前端的"BaseState"
- 在单链表中的后端插入节点
- CUDA(GPU)作为OpenCV后端
- 如何将C 中的后端写入与TCL/TCK用户界面连接
- 在同一应用程序中,可以将C 用作后端和Javafx
- 是否可以使用 c++ 作为 Electron.js 的后端
- 我如何将 c++ 中的向量序列化为 char,以便于将 mondodb 用于后端
- 当后端响应需要很长时间时,WXWIDGET应用程序会挂起
- Boost ::使用与多个水槽的同一后端使用相同的后端安全性
- 从Web前端发送请求到C 后端
- 应用傅里叶逆变换OpenCV后构建图像
- 安装额外模块openCV后未定义跟踪器
- 无法使用CPU后端使用TensorFlow AOT编译创建最终二进制文件
- Skia中的非均匀文本缩放(Freetype 2后端)
- 带有C 类的Electron Nodejs在后端
- 用于C++后端服务的 Web 界面
- 在不减慢主应用程序速度的情况下在后端运行成员函数的技巧是什么