OpenCV DNN深度学习简介

news2024/12/27 6:30:43
  • 💂 个人主页:风间琉璃
  • 🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)订阅专栏

前言

本文基本上来自以下官方手册:https://learnopencv.com/deep-learning-with-opencvs-dnn-module-a-definitive-guide/

计算机视觉领域自 1960 年代后期以来一直存在。图像分类和对象检测是计算机视觉中最古老的问题,研究人员几十年来一直试图解决。使用神经网络和深度学习,我们已经达到了计算机可以开始以高精度实际理解和识别物体的阶段,在许多情况下甚至超过人类。要了解神经网络和计算机视觉深度学习,OpenCV DNN 模块是一个很好的起点。凭借其高度优化的 CPU 性能,初学者即使没有非常强大的支持 GPU 的系统,也可以轻松入门。 

一、OpenCV DNN模块

OpenCV是最好的计算机视觉库之一。此外,它还具有运行深度学习推理的功能。最好的部分是支持从不同框架加载不同的模型,使用它我们可以执行多种深度学习功能。自 3.3 版以来,支持来自不同框架的模型的功能一直是 OpenCV 的一部分。尽管如此,许多该领域的新人并没有意识到OpenCV的这一重要功能。因此,他们往往会错过许多有趣和良好的学习机会。

OpenCV DNN 模块仅支持对图像和视频进行深度学习推理它不支持微调和训练。尽管如此,OpenCV DNN 模块对于任何初学者来说都是一个完美的起点,可以进入基于深度学习的计算机视觉并四处玩耍。

OpenCV DNN 模块最好的一点是它针对英特尔处理器进行了高度优化。在对实时视频进行推理时,我们可以获得良好的 FPS,用于对象检测和图像分割应用。当使用使用特定框架预先训练的模型时,我们通常会使用 DNN 模块获得更高的 FPS。例如,让我们看一下不同框架的图像分类推理速度。

以上结果是 DenseNet121 模型的推理时序。令人惊讶的是,OpenCV比TensorFlow的原始实现快得多,同时落后于PyTorch。事实上,TensorFlow 的推理时间接近 1 秒,而 OpenCV 的推理时间不到 200 毫秒

二、OpenCV DNN 模块应用

通过使用OpenCV DNN模块,我们可以对图像和视频进行基于深度学习的计算机视觉推理。我们能想到的大多数深度学习和计算机视觉任务都得到了支持。

 1. 图像分类;
 2. 目标检测;
 3. 图像分割;
 4. 文字检测和识别;
 5. 姿态估计;
 6. 深度估计
 7. 人脸验证和检测;
 8. 人体重新识别;

为了支持上面讨论的应用,我们需要很多预先训练好的模型。而且的确存在着一些可供选择的SOTA 模型。下面表格列出了用于不同场合的深度学习模型。

 

上面的表格虽然给出的模型很多但并未穷尽OpenCV DNN模块中所有的模型。仍然还有很多网络模型上述表格中并没有给出。就像前面所示,列出所有模型并进行讨论在一个博文中无法完成。上述表格只是告诉我们一个可行的方法去何选择计算机视觉中不同的深度学习模型。

三、DNN支持的深度学习框架

1.Caffe

在利用OpenCV DNN 调用Caffe中的预训练模型是,我们需要两个文件,一个就是model.caffemodel 文件,其中包含了预训练权重另一个是扩展名为.prototxt的模型架构文件。它就像一个纯文本文件,具有类似JSON的结构,其中包含所有神经网络层的定义。要清楚地了解此文件,请访问此链接。

2.TensorFlow
  使用基于TensorFlow预训练的模型,我们需要两个文件,一个是模型权重参数文件,另一个是定义有模型配置的protobuf文件。权重参数文件的后缀为 .pd,也就是protobuf文件,存储有所有预训练的网络参数。 如果之前你使用过TensorFlow,.pb 文件就是模型的检查点,即 在模型存储以及权系数固定之后存储的文件。 模型配置在 protobuf文件中,具有 .pbtxt 文件后缀。

  注意:在Tensorflow的新的版本中,网络参数文件不再使用 .pb的文件格式。如果你使用自己存储的模型的话,文件的格式可能是 .ckpt 或者 .h5 格式,此时在使用OpenCV DNN之前需要一些中间步骤进行处理。这种情况下,先看到模型转换成 ONNX格式,然后在转换成 .pb格式,这样可以保证所有结果都和所期望的那样。

3.Torch和PyTorch
  为了载入Torch 模型文件,我们需要包含有预训练权重参数的文件。通常这个文件具有 .t7 或者 .net的文件后缀。最新的Torch版本的网络模型具有 .pth 的文件后缀。将这些文件首先转换成 ONNX是最好的处理方法。转换成ONNX文件之后,你可以直接通过OpenCV DNN所支持的ONNX模型方式载入网络。

4.Darknet
  OpenCV DNN 也支持著名的 DarkNet学习框架。 如果你使用过官方的基于Darknet学习框架的YOLO模型就可以了解这一点。通常,我们通过具有 .weights 后缀的文件来载入 Darknet模型Darknet模型的网络配置文件的后缀是 .cfg

5.转换成ONNX格式
  可以通过软件工具将来自于 Keras 或者Pytorch的网络模型转换成 ONNX 格式文件。在OpenCV DNN 中不能够直接使用来自于Keras, Pytorch学习框架中的网络模型。通常将这些模型转换成ONNX的格式(Open Neural Network Exchange),这样可以使用他们,甚至将它们转换成其他学习框架中的模型,比如 TensorFlow, PyTorch。在OpenCV DNN中我们需要后缀为 .onnx 的权重参数文件来载入 ONNX 模型。通过访问 OpenCV 官方文件 来了解不同的学习框架,他们权重阐述文件以及配置文件。

  这里所见到的所有模型都是经过OpenCV DNN 模块完美测试过的。理论上,前面所有学习框架下的网络都可以在DNN模块中工作。我们只需要找到正确的权重参数文件以及相应的神经网络结构文件即可
 

结束语
感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,博主要一下你们的三连呀(点赞、评论、收藏),不要钱的还是可以搞一搞的嘛~

不知道评论啥的,即使扣个666也是对博主的鼓舞吖 💞 感谢 💐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/994162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9月8日扒面经

慢sql日志的排查和调优 开启慢查询日志:首先需要确保数据库的慢查询日志功能已经开启。在MySQL中,可以通过设置slow_query_log参数为1来开启慢查询日志,并设置long_query_time参数来定义慢查询的阈值。定位慢查询语句:根据慢查询…

.kann勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

引言: 在数字化时代,勒索病毒已经成为了网络安全的严重威胁,其中 .kann 勒索病毒是最新的一种。这种恶意软件通过加密您的数据文件,然后勒索您支付赎金以获取解密密钥。本文将深入探讨 .kann 勒索病毒、如何恢复被它加密的数据文件…

【多线程】Synchronized 用法详解

Synchronized 用法详解 一. synchronized 的特性1. 互斥2. 刷新内存3. 可重入 二. synchronized 的使用1. 直接修饰普通方法2. 修饰静态方法3. 修饰代码块 三. Java 标准库中的线程安全类 synchronized: 又叫监视器锁 monitor lock一. synchronized 的特性 1. 互斥 (保证原子…

SpringBoot整合WebSocket【代码】

系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 文章目录 系列文章目录代码下载地址一、效果演示二、引入依赖三、WebSocketConfig四、SessionWrap五、WebSoc…

这样的接口千万别暴露,小心横向越权。

前言 谈不上是多么厉害的知识,但可能确实有人不清楚或没见过。 我还是分享一下,就当一个小知识点。 如果知道的,就随便逛逛,不知道的,Get到了记得顺手点个赞哈。 正文 1、接口别随便暴露 当一个项目的维护周期拉长的时…

zustand实践与源码阅读

如何管理数据? 日常使用:发布订阅、context、redux… zustand是一个轻量、快速、可扩展的状态管理库。 目前在社区非常流行,现在github上有30K的star。npm包的下载量,现在也仅次于redux,位于mobx之上,并且差距日益扩大…

客户端SDK测试是什么?如何测?

01 是什么 客户端SDK是为第三方开发者提供的软件开发工具包,包括SDK接口、开发文档和Demo示例等。SDK和应用之间是什么关系呢?以云信即时消息服务为例,如下图所示,应用客户端通过调用云信SDK接口,进行消息等数据查询存…

华为云云耀云服务器L实例评测 | 零门槛入门使用教学

近年来,随着企业应用上云,云服务器一直备受用户的关注。特别是对于大多数的中小企业在上云的过程中,都希望能使用的是一种快速、简洁高效的云服务器。因为这样能尽可能地减轻企业运维的成本,同时又能方便企业的信息技术人员管理。…

Set和Map及哈希表介绍

搜索方式介绍TreeMapMap使用 TreeSetSet使用 Set和Map常用方法练习(后面补充)练习之Set/Mapoj练习(后面补充)哈希表哈希冲突避免冲突-哈希函数设计避免冲突-负载因子调节避免冲突-闭散列避免冲突-开散列 模拟实现哈希表哈希Map源码分析 搜索方式介绍 哈…

mysql的索引分类

索引分类 在 MySQL 数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。 分类 含义 特点 关键字 主键 索引 针对于表中主键创建的索引 默认自动创建 , 只能 有一个 PRIMARY 唯一 索引 避免同一个表中某数据列中…

C语言“牵手”速卖通商品详情数据方法,速卖通商品详情API接口,速卖通API申请指南

速卖通是全球最大的自营式电商企业之一,在线销售计算机、手机及其它数码产品、家电、汽车配件、服装与鞋类、奢侈品、家居与家庭用品、化妆品与其它个人护理用品、食品与营养品、书籍与其它媒体产品、母婴用品与玩具、体育与健身器材以及虚拟商品等。 速卖通平台的…

nginx日志、nginx访问控制、nginx优化

总结 nginx监控 内存,网络,磁盘,cpu 对nginx监控可以监控什么? 1、监控nginx服务存活状况(ss -antpl 、systemctl status nginx 、pa aux | grep nginx) 2、对nginx的运行状态进行监控 3、 监控nginx的监…

进程的同步与互斥

相关概念 临界资源与临界区 临界资源:同一时刻只能由一个进程使用的资源。 如打印机、磁带机、绘图仪等物理设备;由不同进程共享的消息队列、变量、数据、文件等软件资源 临界区:程序中访问临界资源的那一部分代码 进入区、退出区、剩余区&a…

六、MySql表的增删改查

CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 文章目录 一、Create(一)语法(二)案例(三)插入情况1.单行数据 全列插入2.多行数据 指定…

Matlab之数组字符串函数汇总

一、前言 在MATLAB中,数组字符串是指由字符组成的一维数组。字符串可以包含字母、数字、标点符号和空格等字符。MATLAB提供了一些函数和操作符来创建、访问和操作字符串数组。 二、字符串数组具体怎么使用? 1、使用单引号或双引号括起来的字符序列 例…

日常开发小汇总(5)数组克隆、伪数组转换为真数组、随机排序

slice 切割数组实现克隆是浅拷贝 let arr [1,2, {name:1}] let newarr arr.slice(0); console.log(newarr) //[1,2, {name:1}] newarr[2].name 666; console.log(arr[2].name);//666 JSON实现克隆 深拷贝 let arr [1,2, {name:1}] let newarr JSON.parse( JSON.stringi…

【JS面试题】如何通过闭包漏洞在外部修改函数中的变量

✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 前端面试题 文章目录 什么是闭包例 如何在函数外部修改闭包中变量 什么是闭包 闭包这个东西对新…

linux--进程通信--管道通信

IPC是各种进程间通信方式的统称。 进程间通信:是指在不同进程之间传播或交换信息。 IPC的方式通常有: 单机:管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、 多机:Socket、Streams等 1、管道…

【计算机组成原理】十个问题带你走进计算机组成的世界

十个问题带你走进计算机组成的世界 你知道 a 1 2 这条代码是怎么被 CPU 执行的吗? 在计算机中,数据和指令是分开区域存放的,存放指令的区域的地方称为正文段,存放数据的区域称为数据段。 例如下图中,数据1和数据2…

Redis配置

关系型数据库和非关系型数据库 ①了解关系和非关系 关系型数据库 一个结构化的数据库,创建在关系模型基础上,一般面向于记录,包括Oracle、MySQL、SQL Server、Microsoft Access、DB2、postgreSQL等 非关系型数据库 除了主流的关系型数据库…