Opencv DNN

部署运行你感兴趣的模型镜像

1.1. DNN模块简介

OpenCV中的深度学习模块(DNN)只提供了推理功能,不涉及模型的训练,支持多种深度学习框架,比如TensorFlow,Caffe,Torch和Darknet。

OpenCV为什么要实现深度学习模块?

  • 轻量型。DNN模块只实现了推理功能,代码量及编译运行开销远小于其他深度学习模型框架

  • 使用方便。DNN模块提供了内建的CPU和GPU加速,无需依赖第三方库,若项目中之前使用了OpenCV,那么通过DNN模块可以很方便的为原项目添加深度学习的能力。

  • 通用性。DNN模块支持多种网络模型格式,用户无需额外的进行网络模型的转换就可以直接使用,支持的网络结构涵盖了常用的目标分类,目标检测和图像分割的类别,如下图所示:

DNN模块支持多种类型网络层,基本涵盖常见的网络运算需求。

2.常用方法简介

2.1.dnn.blobFromImage

blobFromImage(img, 
                  scalefactor=None, 
                  size=None, 
                  mean=None, 
                  swapRB=None, 
                  crop=None, 
                  ddepth=None):

参数:

  • image:cv2.imread 读取的图片数据
  • scalefactor: 缩放像素值,假设scalefactor=1/255, mean=None, 则表示将像素值归一化到区间[0,1]内,即img = img *  scalefactor
  • size: 输出blob(图像)的尺寸,如 (netInWidth, netInHeight)
  • mean: 从各通道减均值。例子:当 mean=(10,20,30),img =( cv2.merge( img[: ,: ,0] -10,img[:, :, 1] - 20, img[:, :, 2] - 30) )  *  scalefactor
  • swapRB: 交换 3 通道图片的第一个和最后一个通道,如 BGR - RGB
  • crop: 图像尺寸 resize 后是否裁剪. 如果crop=True,则,输入图片的尺寸调整resize后,一个边对应与 size 的一个维度,而另一个边的值大于等于 size 的另一个维度;然后从 resize 后的图片中心进行 crop. 如果crop=False,则无需 crop,只需保持图片的长宽比
  • ddepth: 输出 blob 的 Depth. 可选: CV_32F 或 CV_8U

2.2.dnn.NMSBoxes

作用:根据给定的检测boxes和对应的scores进行NMS(非极大值抑制)处理

NMSBoxes(bboxes, 
             scores, 
             score_threshold, 
             nms_threshold, 
             eta=None, 
             top_k=None)

参数:

  • boxes: 待处理的边界框 bounding boxes
  • scores: 对于于待处理边界框的 scores
  • score_threshold: 用于过滤 boxes 的 score 阈值
  • nms_threshold: NMS 用到的阈值
  • indices: NMS 处理后所保留的边界框的索引值
  • eta: 自适应阈值公式中的相关系数:

  • top_k: 如果 top_k>0,则保留最多 top_k 个边界框索引值.

2.3. dnn.readNet

作用:加载深度学习网络及其模型参数

 

DNN 加速

net.setPreferableBackend(DNN_BACKEND_OPENCV);
net.setPreferableTarget(DNN_TARGET_OPENCL);

第一个设置,假如设置DEFAULT,默认设置的话,必须设置一个环境变量,并且变量的路径要是磁盘上一个文件夹,文件夹要存在,否则会警告或者报错。假如设置成OPENCV,会在用户名一个临时文件夹生成一些OPENCL的文件。建议设置为OPENCV,不用去配置环境变量

第二个设置,假如设置为CPU的话,速度较慢,通用性较好。设置为OPENCL的话,只能运行在inter的GPU上。假如电脑上有NVIDIA的话,会一直卡住,目前还没找到设置OPENCV运行哪块GPU的方法,没有在NVIDIA上的电脑上运行过。所以,为了确保GPU加速,不要在有NVIDIA电脑上运行

采用OPENCL运行加速,SSD项目测试,CPU每帧90ms,OPENCL每帧只要45ms左右,OPENCL_FP16只要30ms左右,实时性还是不错的

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

OpenCV DNNOpenCV中的深度神经网络模块,能让读者快速认识OpenCV,消除神秘感,同时对计算机视觉从传统算法到深度学习算法的演进历史有所了解 [^1]。 ### 功能介绍 - **加载和运行深度学习模型**:支持从各种框架导入预训练的深度学习模型,并在OpenCV中执行推理 [^3]。 - **图像预处理和后处理**:提供了多种图像预处理和后处理功能,如图像缩放、归一化、颜色转换、非极大值抑制等 [^3]。 - **支持多种硬件加速**:支持使用CPU、GPU(通过OpenCL和CUDA)、Intel的Inference Engine等进行硬件加速 [^3]。 - **易于集成**:与OpenCV的其他模块无缝集成,便于在计算机视觉项目中使用 [^3]。 ### 常用操作 在实际利用opencv提供的dnn模块部署onnx格式的模型的时候,一些python端利用numpy可以简单轻易实现的操作,在C++端就得仔细考虑下实现的策略,因为大多数并没有非常简单方便地使用形式,甚至可能需要自己去实现 [^2]。 ### 支持的模型格式及加载API 支持的配置文件格式有 (Caffe) 、*.pbtxt (TensorFlow) 、*.prototxt 、*.cfg (Darknet) 、*.xml (DLDT) 。加载网络模型的api如下: ```cpp Net cv::dnn::readNet (const String &model, const String &config="", const String &framework=""); Net cv::dnn::readNetFromCaffe (const String &prototxt, const String &caffeModel=String()); Net cv::dnn::readNetFromTensorflow (const String &model, const String &config=String()); Net cv::dnn::readNetFromTorch (const String &model, bool isBinary=true, bool evaluate=true); Net cv::dnn::readNetFromDarknet (const String &cfgFile, const String &darknetModel=String()); ``` [^4][^5] ### 应用案例 在计算机视觉项目中,可利用其加载预训练模型进行目标检测、图像分类等任务。例如加载Caffe框架的预训练模型进行图像分类,先使用`cv::dnn::readNetFromCaffe`加载模型,然后进行图像预处理,最后执行推理得到分类结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值