EmguCV学习笔记 C# 11.3 DNN其它

news/2024/9/19 18:47:59/ 标签: c#, 计算机视觉, 图像, opencv, emgucv, vb.net, dnn

 版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。

教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客

教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客

笔者的博客网址:https://blog.csdn.net/uruseibest

教程配套文件及相关说明以及如何获得pdf教程和代码,请移步:EmguCV学习笔记

学习VB.Net知识,请移步: vb.net 教程 目录_vb中如何用datagridview-CSDN博客

 学习C#知识,请移步:C# 教程 目录_c#教程目录-CSDN博客

11.3 DNN其它

1、Net.SetPreferableBackend方法

Net类的SetPreferableBackend方法用于设置神经网络模型的首选后端。神经网络模型的后端是指用于计算模型的底层计算框架,例如OpenCV的DNN模块支持的后端包括OpenCV DNN、TensorFlow、Caffe和Torch等。

SetPreferableBackend方法是一个backend枚举参数,用于指定所需的后端。这个参数的常用取值有:

  1. Default:默认的后端,具体取决于OpenCV的编译选项和可用的后端。在Windows平台上,通常是OpenCV DNN后端。
  2. OpenCV:OpenCV DNN后端,使用OpenCV的DNN模块进行计算。这个后端的优点是速度较快,支持多线程计算和硬件加速。
  3. Cuda:CUDA DNN后端,使用Nvidia的CUDA库进行计算。这个后端的优点是速度非常快,支持GPU加速,但需要显卡支持CUDA。
  4. Halide:Halide后端,使用Halide框架进行计算。这个后端的优点是灵活性高,支持自定义算子和优化,但速度较慢。

注意:SetPreferableBackend方法只能在模型初始化之后调用,且只能设置一次。如果需要更改后端,必须重新加载模型。此外,后端的选择会影响模型的计算速度和可用性,应根据实际情况选择合适的后端。

2、Net.SetPreferableTarget方法

Net类的SetPreferableTarget方法用于设置神经网络模型的首选目标设备,即用于计算模型的硬件设备,例如CPU、GPU、FPGA等。

SetPreferableTarget方法是一个Target枚举参数,用于指定所需的目标设备。这个参数的常用取值有:

  1. Cpu:CPU设备,使用CPU进行计算。这个目标设备的优点是通用性高,不需要额外的硬件支持,但速度较慢。
  2. OpenCL:OpenCL设备,使用OpenCL框架进行计算。这个目标设备的优点是通用性高,支持多种硬件设备,但速度与CPU相当或略慢。
  3. Cuda:CUDA设备,使用Nvidia的CUDA库进行计算。这个目标设备的优点是速度非常快,支持GPU加速,但需要显卡支持CUDA。
  4. OpenCLFp16:OpenCL设备,使用OpenCL框架进行计算,但使用16位浮点数进行计算。这个目标设备的优点是速度快,支持多种硬件设备,但精度可能受到影响。

注意:SetPreferableTarget方法只能在模型初始化之后调用,且只能设置一次。如果需要更改目标设备,必须重新加载模型。此外,目标设备的选择会影响模型的计算速度和可用性,应根据实际情况选择合适的目标设备。

3、Net.layernames属性

Net类的layernames属性是一个字符串数组,用于获取推理模型中所有层的名称。每个层的名称在模型中是唯一的,可以用于获取或设置相应层的参数,获取到的层名称的顺序与模型文件中定义的层的顺序相同。

在使用此属性前,应首先使用ReadNe相关方法加载模型文件和权重文件。然后使用LayerNames属性获取模型中所有层的名称。

如果需要获取某个特定层的名称,可以使用GetLayerNames方法,指定层的类型和索引。当模型中不存在指定类型和索引的层,则GetLayerNames方法会返回一个空的字符串数组。

【代码位置:frmChapter11】Button1_Click

        //获取推理模型中所有层的名称

        private void Button1_Click(object sender, EventArgs e)

        {

            Net net;

            //读取推理模型文件

            net = DnnInvoke.ReadNetFromTensorflow("C:\\learnEmgucv\\openpose\\graph_opt.pb");

            string[] layer_name;

            //获取推理模型中所有层的名称

            layer_name = net.LayerNames;

        }

4、Net的UnconnectedOutLayersnames和UnconnectedOutLayers属性

Net类的UnconnectedOutLayersnames属性用于获取推理模型中未连接的输出层名称列表,返回一个字符串数组。

Net类的UnconnectedOutLayers属性用于获取未连接的输出层索引列表,返回一个整数数组,包含未连接的输出层的索引。这些索引是从0开始的,表示神经网络模型中各层的顺序。例如,索引为0表示模型的第一层,索引为1表示模型的第二层,以此类推。

在深度学习模型中,每个层都会有一个输出张量作为下一层的输入张量。但在某些情况下,可能只需要使用模型的某些层的输出张量,它们不会被用于计算损失函数或反向传播,而不需要使用整个模型的输出张量。这时候,可以将这些层称为未连接的输出层。未连接的输出层通常用于向用户或其他系统输出模型的某些结果,例如分类结果、目标检测结果等。这些结果通常与整个模型的输出不同,因此需要单独计算。需要注意的是,未连接的输出层的数量和位置取决于模型的设计和用途。在使用推理模型时,需要根据实际情况选择使用连接的输出层还是未连接的输出层。

注意:UnconnectedOutLayersnames和UnconnectedOutLayers属性只能在模型初始化之后调用。如果模型还没有初始化,或者模型没有输出层,将返回一个空数组。此外,如果要使用UnconnectedOutLayers属性获取未连接的输出层索引列表,请确保在模型中确实存在未连接的输出层。

5、DnnInvoke.NMSBoxes方法

DnnInvoke.NMSBoxes方法用于在目标检测任务中对检测结果进行非极大值抑制(Non-Maximum Suppression)处理,以排除重叠的矩形框。NMSBoxes方法将输入的矩形框列表和置信度列表作为输入,并返回一个过滤后的矩形框列表。该方法声明如下:

public static int[] NMSBoxes(

           Rectangle[] bboxes,

                    float[] scores,

                    float scoreThreshold,

                    float nmsThreshold,

                    float eta = 1f,

           int topK = 0

)

参数说明:

  1. bboxes:包含所有矩形框的矩形数组。
  2. scores:对应于每个矩形框的置信度数组。
  3. scoreThreshold:置信度阈值,低于该阈值的矩形框将被过滤掉。
  4. nmsThreshold:重叠的矩形框之间的IoU(Intersection over Union)阈值,超过该阈值的边界框将被过滤掉。
  5. eta:调整重叠框之间的重叠度权重。
  6. topK:最多保留索引个数,0表示不限制个数。

返回值:

经过NMS之后要保留的矩形框的索引数组。

注意:在使用NMSBoxes方法时,需要选择合适的置信度阈值和重叠的矩形框之间的IoU阈值。通常情况下,置信度阈值越高,过滤后的矩形框越少;重叠的矩形框之间的IoU阈值越低,过滤后的边界框越少。如果选择不合适的阈值,可能会导致部分目标被漏检或者误检。

关于以上方法或属性,在后面小节的示例中会展示用法。


http://www.ppmy.cn/news/1523953.html

相关文章

Python Web 框架篇:Flask、Django、FastAPI介绍及其核心技术

Python Web 框架篇:Flask、Django、FastAPI介绍及其核心技术 目录 🐍 Flask Flask 核心概念(路由、视图函数、模板渲染)Flask Blueprint 模块化应用Flask 扩展(Flask-SQLAlchemy、Flask-WTF、Flask-Migrate 等&#…

Centos7.9部署Gitlab-ce-16.9

一、环境信息 软件/系统名称版本下载地址备注Centos77.9.2009https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.isogitlab-cegitlab-ce-16.9.1https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.9.1-ce.0.el7.x86_64.rpm…

半监督学习能否帮助训练更好的模型?

数据科学家面临的最常见挑战之一是缺乏足够的标记数据来训练一个可靠且准确的模型。标记数据对于监督学习任务,如分类或回归至关重要。然而,在许多领域,获取标记数据既昂贵又耗时,有时甚至是不切实际的。另一方面,未标…

CSS学习18--伸缩布局

伸缩布局 一、伸缩布局二、属性设置 一、伸缩布局 给父级display: flex; 给孩子flex: 1; 自由变动 <html><head><style>section {width: 1000px;height: 200px;border:1px solid pink;margin:100px auto;/*父级盒子添加f1ex*/dispLay:flex;/*伸缩布局模式*/…

HW | AMD GPU上 “nvidia-smi -lms” 的等价指令——MI300X实时查看GPU使用率

文章目录 .实验背景.nvidia-smi -lms.rocm-smi 等价指令.结语. . 实验背景 最近在使用AMD MI300X GPU进行实验&#xff0c;MI300X是目前AMD最先进的几款数据中心GPU之一。该GPU的软件指令和NVIDIA的不同&#xff0c;主要因为底层的驱动命名不同&#xff08;在我理解确实是这样…

小型洗衣机什么牌子好又便宜?五款备受好评机型测评,闭眼入

在日常生活中&#xff0c;内衣洗衣机已成为现代家庭必备的重要家电之一。选择一款耐用、质量优秀的内衣洗衣机&#xff0c;不仅可以减少洗衣负担&#xff0c;还能提供高效的洗涤效果。然而&#xff0c;市场上众多内衣洗衣机品牌琳琅满目&#xff0c;让我们往往难以选择。那么&a…

HarmonyOs 应用基础--Swiper-样式结构重用-GridGridItem

目录 九、Swiper-样式&结构重用-Grid&GridItem 1. Swiper 1.1. 适用场景 1.2. 基本用法 1.3. 常用属性方法 1.4. 调整导航点 1.5. 案例-小米有品 2. 样式&结构重用 2.1. Styles 2.2. Extend 2.3. Builder 2.4. Extend、Styles、Builder 对比 3. 网格布…

opencv图像透视处理

引言 在图像处理与计算机视觉领域&#xff0c;透视变换&#xff08;Perspective Transformation&#xff09;是一种重要的图像校正技术&#xff0c;它允许我们根据图像中已知的四个点&#xff08;通常是矩形的四个角&#xff09;和目标位置的四个点&#xff0c;将图像从一个视…

C语言---循环程序设计万字总结(2)

选择、循环结构 最简单的结构是 if-else &#xff08;类比日常生活中 如果…否则…&#xff09; 其次&#xff0c; switch&#xff0c; 最后是三大循环结构&#xff0c; while do-while for 选择、循环结构是后续学习的基石&#xff0c; 尤其是与数组和指针 关联性很强 一、选…

Python\Scripts文件夹中只有pip3.exe而缺少pip.exe

解决办法&#xff1a; 以管理员身份运行命令提示符 执行如下命令 mklink D:\Python\Scripts\pip.exe D:\Python\Scripts\pip3.exe&#xff08;命令中的路径应填入你的Python安装路径&#xff0c;并且Python\Scripts路径也正常放入系统变量中&#xff09; 然后就可以检查你的…

美团面试题:生成字符串的不同方式

美团面试题:生成字符串的不同方式 引言问题分析动态规划思路伪代码C代码实现代码解析复杂度分析优化建议结论引言 小红拿到了一个空字符串 s s s,她希望通过两种操作生成一个给定的字符串 t t t。我们需要计算生成字符串

springboot项目编写发送异常日志到企微工具包

1.创建基础Bean public final class ThreadFactory implements java.util.concurrent.ThreadFactory {private static final AtomicInteger poolNumber new AtomicInteger(1);private final ThreadGroup group;private final AtomicInteger threadNumber new AtomicInteger(1…

学校不会教的找工作信息差,靠谱招聘网站分享给你

1、国家大学生就业服务平台 2、中国公共招聘网 3、中国国家人才网

机器学习 第10章 降维与度量学习

目录 k近邻学习低维嵌入主成分分析&#xff08;PCA&#xff09;核化线性降维&#xff08;KPCA&#xff09;流形学习等度量映射&#xff08;Isomap&#xff09;局部线性嵌入 度量学习 k近邻学习 k 近邻&#xff08;KNN&#xff09;学习是一种常用的监督学习方法&#xff0c;其工…

3.无人机介绍

学习无人机相关科研知识,首先要了解无人机的相关知识,以及无人机系统的组成. 目录 无人机初步介绍 无人机分类 无人机初步介绍 无人驾驶飞机简称“无人机”&#xff0c;英文缩写为"UAV"&#xff0c;是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机&am…

基于协同过滤算法+SpringBoot+Vue+MySQL的商品推荐系统

系统展示 用户前台界面 管理员后台界面 系统背景 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛运用&#xff0c;以及…

新手常见错误:java.lang.NumberFormatException: For input string: “xxxx“

目录 ​编辑 故事背景 文言一心解答&#xff1a; 思考&#xff1a; 文心一言总结&#xff1a; 报错总结&#xff1a; 解决方案&#xff1a; 结语&#xff1a; 故事背景 写代码的时候遇到的报错 文言一心解答&#xff1a; 这个错误 java.lang.NumberFormatException:…

OpenCV 与 YoloV3的结合使用:目标实时跟踪

目录 代码分析 1. YOLO 模型加载 2. 视频加载与初始化 3. 视频帧处理 4. 物体检测 5. 处理检测结果 6. 边界框和类别显示 7. 帧率&#xff08;FPS&#xff09;计算 8. 结果显示与退出 9. 资源释放 整体代码 效果展示 总结 代码分析 这段代码使用 YOLO&#xff08…

机器学习和深度学习的区别是什么?

目录 前言1. 定义与起源2. 模型复杂度3. 数据需求4. 计算资源需求5. 应用范围和场景6. 学习方式与特点总结 前言 机器学习和深度学习在多个方面存在显著差异&#xff0c;这些差异主要体现在定义与起源、模型复杂度、数据需求、计算资源需求、应用范围和场景&#xff0c;以及学…

Maven聚合与继承

聚合 当我们一次想要构建多个项目时&#xff0c;而不是到每一个模块的目录下分别执行mvn命令。这个时候就需要使用到maven的聚合特性 这里第一个特殊的地方是packaging&#xff0c;值设置为pom。我们正常开发的其他模块中都没有声明packaging&#xff0c;默认使用了默认值jar&a…