OpencCV DNN 为模型运行设置目标设备与计算后台

转载请注明作者和出处: http://blog.csdn.net/john_bh/


OpenCV中加载网络模型之后,可以设置计算后台与计算目标设备,OpenCV DNN模块支持这两个设置的相关API如下:

1.设置计算后台

opencv 4.4:
在这里插入图片描述
C++:

void cv::dnn::Net::setPreferableBackend	(int backendId)	

Python:

None=cv.dnn_Net.setPreferableBackend(backendId)

backendId 表示后台计算,常见参数如下:

  • DNN_BACKEND_DEFAULT (DNN_BACKEND_INFERENCE_ENGINE):表示默认使用intel的预测推断库(需要下载安装Intel® OpenVINO™ toolkit, 然后重新编译OpenCV源码,在CMake时候enable该选项方可), 可加速计算;
  • DNN_BACKEND_HALIDE
  • DNN_BACKEND_INFERENCE_ENGINE
  • DNN_BACKEND_OPENCV: 一般情况都是使用opencv dnn作为后台计算;
  • DNN_BACKEND_VKCOM
  • DNN_BACKEND_CUDA :使用GPU作为后台计算,可以加速很多,参考:OpenCV ‘dnn’ with NVIDIA GPUs: 1549% faster YOLO, SSD, and Mask R-CNN

2. 设置目标设备

在这里插入图片描述
C++:

void cv::dnn::Net::setPreferableTarget	(int targetId)	

Python:

None=cv.dnn_Net.setPreferableTarget(targetId)

常见的目标设备如下:

  • DNN_TARGET_CPU:其中表示使用CPU计算,默认是的;
  • DNN_TARGET_OPENCL: 表示使用OpenCL加速,一般情况速度都很扯;
  • DNN_TARGET_OPENCL_FP16 :可以尝试;
  • DNN_TARGET_MYRIAD :树莓派上的;
  • DNN_TARGET_VULKAN
  • DNN_TARGET_FPGA :使用推理引擎的异构插件与CPU回退的FPGA设备;
  • DNN_TARGET_CUDA :在GPU上使用;
  • DNN_TARGET_CUDA_FP16

3. 代码

python:

"""
DNN 为模型运行设置目标设备与计算后台
"""

import cv2 as cv
import numpy as np

bin_model = "bvlc_googlenet.caffemodel"
protxt = "bvlc_googlenet.prototxt"

# load names of classes
classes = None
with open("classification_classes_ILSVRC2012.txt", 'rt') as f:
    classes = f.read().rstrip('\n').split('\n')

# load CNN model
net = cv.dnn.readNetFromCaffe(protxt, bin_model)
net.setPreferableBackend(cv.dnn.DNN_BACKEND_OPENCV)
net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)

# read input data
image = cv.imread("images/airplane.jpg")
blob = cv.dnn.blobFromImage(image, 1.0, (224, 224), (104, 117, 123),
                            False, False)
result = np.copy(image)
cv.imshow("input", image)

# run a model
net.setInput(blob)
out = net.forward()

# get a class with a highest score
out = out.flatten()
classId = np.argmax(out)
confidence = out[classId]

# put efficiency information
t, _ = net.getPerfProfile()
label = 'Inference time: %.2f ms' % (t * 1000.0 / cv.getTickFrequency())
cv.putText(result, label, (0, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0))

# print predicted class
label = '%s : %.4f' % (classes[classId], confidence)
cv.putText(result, label, (50, 50), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
cv.imshow("googlenet-demo", result)

cv.waitKey(0)
cv.destroyAllWindows()

结果:
在这里插入图片描述

参考链接:

  1. OpenCV 4.4 官方文档
  2. OpenCV ‘dnn’ with NVIDIA GPUs: 1549% faster YOLO, SSD, and Mask R-CNN
  3. https://fanfuhan.github.io/2019/05/25/opencv-123/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值