C#Halcon深度学习预热与否的运行时间测试

       在深度学习推理应用阶段,涉及到提速,绕不开一个关键词“预热”。

       在其他地方的“预热”,预先加热到指定的温度。通常指预习准备做某一样事时,为此做好准备。

       而在深度学习推理应用阶段涉及的预热通常是指GPU预热,GPU在不用的时候是低功耗状态,它会把有些高性能的功能暂时关闭或降低性能,这时候如果把模型放上面处理,能明显感觉到有点慢,甚至从点击程序运行以后要等个几秒钟才出结果,因为这个阶段GPU要完成很多初始化工作【当然了,这也和显卡好坏有关系】。

     接下来的Demo案例主要是呈现预热与否的运行时间差异

首先呈现的是未经预热的第一次测试

未经预热的第二次测试

未经预热的第三次测试

预热后第一次应用

预热后第二次应用

预热后第N次应用

Demo案例预热方式仅采用部分内存释放与否的方式进行测试,仅为展示效果

附上C#UI代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ViewControl;
using HalconDotNet;
using System.Reflection.Emit;
using static System.Net.Mime.MediaTypeNames;
namespace DeepLearningTest1
{public partial class Form1 : Form{HalconView HW; //dll调用public static DeepLearning Dl = new DeepLearning();//类调用//全局变量HObject HIMage = new HObject();HTuple hv_DLDataset = new HTuple(), hv_DLPreprocessParam = new HTuple();HTuple hv_DLModelHandle = new HTuple(), hv_ImageFiles = new HTuple();public Form1(){InitializeComponent();HW = new HalconView();HW.HWindowControl.BackColor = Color.White;splitContainer1.Panel1.Controls.Add(HW);HW.Dock = DockStyle.Fill;}/// <summary>/// 加载图片/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){try{OpenFileDialog openFileDialog = new OpenFileDialog();//openFileDialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;openFileDialog.Filter = "图片文件(*.bmp;*.jpg;*.gif;*.png;*.tiff;*.tif)|*.bmp;*.jpg;*.gif;*.png;*.tiff;*.tif";openFileDialog.RestoreDirectory = true;openFileDialog.FilterIndex = 1;if (openFileDialog.ShowDialog() == DialogResult.OK){label3.Text = openFileDialog.FileName;HOperatorSet.ReadImage(out HIMage, label3.Text);HW.DispImage(HIMage, true);}               }catch (Exception ex){MessageBox.Show("加载图片失败  " + ex.ToString());}}/// <summary>/// 模型预热/// </summary>Detect detectResult = new Detect();private Detect detectTest(HObject Hobj, string mode){detectResult = new Detect();HObject ho_Image = new HObject(); ;HTuple hv_WindowDict = new HTuple(), hv_Index = new HTuple();HTuple hv_SampleIndex = new HTuple(), hv_DLSampleBatch = new HTuple();HTuple hv_DLResult = new HTuple(), hv_ClaID = new HTuple();HTuple hv_ClassSorce = new HTuple(), hv_ClassName = new HTuple();HTuple hv_ID = new HTuple(), hv_Sorce = new HTuple(), hv_N = new HTuple();HOperatorSet.GenEmptyObj(out ho_Image);try{HTuple t = new HTuple(), t1 = new HTuple(), T = new HTuple();hv_DLDataset.Dispose();HOperatorSet.ReadDict("E:/Halcon数据/测量程序/深度学习/1109/xin1109.hdict",new HTuple(), new HTuple(), out hv_DLDataset);hv_DLPreprocessParam.Dispose();HOperatorSet.ReadDict("E:/Halcon数据/测量程序/深度学习/xin110900/训练-241109-153815/dl_preprocess_param.hdict",new HTuple(), new HTuple(), out hv_DLPreprocessParam);hv_DLModelHandle.Dispose();HOperatorSet.ReadDlModel("E:/Halcon数据/测量程序/深度学习/xin110900/训练-241109-153815/best_model.hdl",out hv_DLModelHandle);ho_Image.Dispose();ho_Image = Hobj;HW.DispImage(ho_Image, true);hv_DLSampleBatch.Dispose();Dl.gen_dl_samples_from_images(ho_Image, out hv_DLSampleBatch);Dl.preprocess_dl_samples(hv_DLSampleBatch, hv_DLPreprocessParam);HOperatorSet.CountSeconds(out t);hv_DLResult.Dispose();HOperatorSet.ApplyDlModel(hv_DLModelHandle, hv_DLSampleBatch, new HTuple(),out hv_DLResult);HOperatorSet.CountSeconds(out t1);T = t1 - t;label11.Text = T.ToString();hv_ClaID.Dispose();HOperatorSet.GetDictTuple(hv_DLResult, "classification_class_ids", out hv_ClaID);hv_ClassSorce.Dispose();HOperatorSet.GetDictTuple(hv_DLResult, "classification_confidences", out hv_ClassSorce);hv_ClassName.Dispose();HOperatorSet.GetDictTuple(hv_DLResult, "classification_class_names", out hv_ClassName);hv_ID.Dispose();using (HDevDisposeHelper dh = new HDevDisposeHelper()){hv_ID = hv_ClaID.TupleSelect(0);}hv_Sorce.Dispose();using (HDevDisposeHelper dh = new HDevDisposeHelper()){hv_Sorce = hv_ClassSorce.TupleSelect(0);}label1.Text = hv_Sorce.ToString();hv_N.Dispose();using (HDevDisposeHelper dh = new HDevDisposeHelper()){hv_N = hv_ClassName.TupleSelect(0);}label2.Text = hv_N.ToString();}catch{detectResult = new Detect();detectResult.finishJudge_CCD2 = false;}ho_Image.Dispose();hv_WindowDict.Dispose();hv_Index.Dispose();hv_SampleIndex.Dispose();hv_DLSampleBatch.Dispose();hv_DLResult.Dispose();hv_ClaID.Dispose();hv_ClassSorce.Dispose();hv_ClassName.Dispose();hv_ID.Dispose();hv_Sorce.Dispose();hv_N.Dispose();return detectResult;}/// <summary>/// 图片检测/// </summary>/// <param name="Hobj"></param>/// <param name="mode"></param>/// <returns></returns>private Detect detectTest1(HObject Hobj, string mode){detectResult = new Detect();HObject ho_Image = new HObject(); ;HTuple hv_WindowDict = new HTuple(), hv_Index = new HTuple();HTuple hv_SampleIndex = new HTuple(), hv_DLSampleBatch = new HTuple();HTuple hv_DLResult = new HTuple(), hv_ClaID = new HTuple();HTuple hv_ClassSorce = new HTuple(), hv_ClassName = new HTuple();HTuple hv_ID = new HTuple(), hv_Sorce = new HTuple(), hv_N = new HTuple();HOperatorSet.GenEmptyObj(out ho_Image);try{HTuple t = new HTuple(), t1 = new HTuple(), T = new HTuple();ho_Image.Dispose();ho_Image = Hobj;HW.DispImage(ho_Image, true);hv_DLSampleBatch.Dispose();Dl.gen_dl_samples_from_images(ho_Image, out hv_DLSampleBatch);Dl.preprocess_dl_samples(hv_DLSampleBatch, hv_DLPreprocessParam);HOperatorSet.CountSeconds(out t);hv_DLResult.Dispose();HOperatorSet.ApplyDlModel(hv_DLModelHandle, hv_DLSampleBatch, new HTuple(),out hv_DLResult);HOperatorSet.CountSeconds(out t1);T = t1 - t;label13.Text = T.ToString();hv_ClaID.Dispose();HOperatorSet.GetDictTuple(hv_DLResult, "classification_class_ids", out hv_ClaID);hv_ClassSorce.Dispose();HOperatorSet.GetDictTuple(hv_DLResult, "classification_confidences", out hv_ClassSorce);hv_ClassName.Dispose();HOperatorSet.GetDictTuple(hv_DLResult, "classification_class_names", out hv_ClassName);hv_ID.Dispose();using (HDevDisposeHelper dh = new HDevDisposeHelper()){hv_ID = hv_ClaID.TupleSelect(0);}hv_Sorce.Dispose();using (HDevDisposeHelper dh = new HDevDisposeHelper()){hv_Sorce = hv_ClassSorce.TupleSelect(0);}label21.Text = hv_Sorce.ToString();hv_N.Dispose();using (HDevDisposeHelper dh = new HDevDisposeHelper()){hv_N = hv_ClassName.TupleSelect(0);}label20.Text = hv_N.ToString();}catch{detectResult = new Detect();detectResult.finishJudge_CCD2 = false;}ho_Image.Dispose();hv_WindowDict.Dispose();hv_Index.Dispose();hv_SampleIndex.Dispose();hv_DLSampleBatch.Dispose();hv_DLResult.Dispose();hv_ClaID.Dispose();hv_ClassSorce.Dispose();hv_ClassName.Dispose();hv_ID.Dispose();hv_Sorce.Dispose();hv_N.Dispose();return detectResult;}/// <summary>/// 模型预热/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button3_Click(object sender, EventArgs e){if (!HIMage.IsInitialized()) { MessageBox.Show("图片为空"); return; }Detect detectTemp = new Detect();HTuple t = new HTuple(), t1 = new HTuple(), T = new HTuple();HOperatorSet.CountSeconds(out t);detectTemp = detectTest(HIMage, "test");HOperatorSet.CountSeconds(out t1);T = t1 - t;label7.Text = T.ToString();}/// <summary>/// 图片检测/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){if (!HIMage.IsInitialized()) { MessageBox.Show("图片为空"); return; }Detect detectTemp = new Detect();HTuple t = new HTuple(), t1 = new HTuple(), T = new HTuple();HOperatorSet.CountSeconds(out t);detectTemp = detectTest1(HIMage, "test");HOperatorSet.CountSeconds(out t1);T = t1 - t;label17.Text = T.ToString();}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32-笔记18-呼吸灯

1、实验目的 使用定时器 4 通道 3 生成 PWM 波控制 LED1 &#xff0c;实现呼吸灯效果。 频率&#xff1a;2kHz&#xff0c;PSC71&#xff0c;ARR499 利用定时器溢出公式 周期等于频率的倒数。故Tout 1/2KHZ&#xff1b;Ft 72MHZ PSC71&#xff08;喜欢设置成Ft的倍数&…

OCR实践-问卷表格统计

前言 书接上文 OCR实践—PaddleOCROCR实践-Table-Transformer 本项目代码已开源 放在 Github上&#xff0c;欢迎参考使用&#xff0c;Star https://github.com/caibucai22/TableAnalysisTool 主要功能说明&#xff1a;对手动拍照的问卷图片进行统计分数&#xff08;对应分数…

使用pandas把数据库中的数据转成csv文件

使用pandas把数据库中的数据转成csv文件 1、效果图 2、流程 1、连接数据库,获取数据 2、把一些中文字符转成gbk,忽略掉无法转化的 3、把数据转成csv 3、代码 import pymysql import pandas as pddef get_database(databasename):

windows下vscode使用msvc编译器出现中文乱码

文章目录 [toc]1、概述2、修改已创建文件编码3、修改vscode默认编码 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;C &#x1f448;&#x1f449;开发工具 &#x1f448; 1、概述 在使用MSVC编译器时&#xff0c;出现中文报错的问题可能与编码格式有关。UTF-…

传统听写与大模型听写比对

在快节奏的现代生活中&#xff0c;听写技能仍然是学习语言和提升认知能力的重要环节。然而&#xff0c;传统的听写练习往往枯燥乏味&#xff0c;且效率不高。现在&#xff0c;随着人工智能技术的发展&#xff0c;大模型听写工具的问世&#xff0c;为传统听写带来了革命性的变革…

前端页面上传文件:解决 ERR_UPLOAD_FILE_CHANGED

文章目录 引言I 问题 ERR_UPLOAD_FILE_CHANGED问题重现步骤原因II 解决方法将文件转换为base64再转回file检测文件内容是否发生变更III 知识扩展发送一个包含文件和文本的multipart/form-data请求签名优化引言 文件上传应用场景:船舶设备的新增导入(基础信息:出厂编号)船舶…

图文教程:使用PowerDesigner导出数据库表结构为Word/Html文档

1、第一种情况-无数据库表&#xff0c;但有数据模型 1.1 使用PowerDesigner已完成数据建模 您已经使用PowerDesigner完成数据库建模&#xff0c;如下图&#xff1a; 1.2 Report配置和导出 1、点击&#xff1a;Report->Reports&#xff0c;如下图&#xff1a; 2、点击&…

vscode 多项目冲突:进行 vscode 工作区配置

问题&#xff1a;多个项目&#xff0c;每次打开会因为配置问题/包版本冲突&#xff0c;花费过长时间。 解决&#xff1a;可以通过启用工作区&#xff0c;使得各个项目的开发环境隔离。 vscode官网 对此有两种方法&#xff1a;方法一&#xff1a;启用工作区&#xff08;workspa…

试用ChatGPT的copilot编写一个程序从笔记本电脑获取语音输入和图像输入并调用开源大模型进行解析

借助copilot写代码和自己手写代码的开发过程是一样的。 首先要有明确的开发需求&#xff0c;开发需求越详细&#xff0c;copilot写出的代码才能越符合我们的预期。 其次&#xff0c;有了明确的需求&#xff0c;最好先做下需求拆解&#xff0c;特别是对于比较复杂的应用&#xf…

快速掌握Elasticsearch检索之二:滚动查询(scrool)获取全量数据(golang)

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一&#xff1a;使用fromsize实现分页 1、滚动查询的使用场景 滚动查询区别于上一篇文章介绍的使用from、size分页检索&#xff0c;最大的特点是&#xff0c;它能够检索超过10000条外的…

【分布式文件存储系统Minio】2024.12保姆级教程

文章目录 1.介绍1.分布式文件系统2.基本概念 2.环境搭建1.访问网址2.账号密码都是minioadmin3.创建一个桶4.**Docker安装miniomc突破7天限制**1.拉取镜像2.运行容器3.进行配置1.格式2.具体配置 4.查看桶5.给桶开放权限 3.搭建minio模块1.创建一个oss模块1.在sun-common下创建2.…

2021.12.28基于UDP同信的相关流程

作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…

StarRocks 存算分离在得物的降本增效实践

编者荐语&#xff1a; 得物优化数据引擎布局&#xff0c;近期将 4000 核 ClickHouse 迁移至自建 StarRocks&#xff0c;成本降低 40%&#xff0c;查询耗时减半&#xff0c;集群稳定性显著提升。本文详解迁移实践与成果&#xff0c;文末附丁凯剑老师 StarRocks Summit Asia 2024…

vue视频录制 限制大小,限制时长

<template><div style"height: 100vh;background: #000;"><span style"color: #fff;font-size: 18px;">切换数量&#xff1a;{{ devices.length }}</span><video ref"video" autoplay muted playsinline></vid…

若依框架之简历pdf文档预览功能

一、前端 &#xff08;1&#xff09;安装插件vue-pdf&#xff1a;npm install vue-pdf &#xff08;2&#xff09;引入方式&#xff1a;import pdf from "vue-pdf"; &#xff08;3&#xff09;components注入方式&#xff1a;components:{pdf} &#xff08;4&…

永磁同步电机负载估计算法--自适应龙伯格观测器

一、原理介绍 龙贝格扰动观测器的参数可以通过带宽配置法进行整定&#xff0c;将观测器带宽设为L&#xff0c;选取大的L可以加快观测器的收敛速度&#xff0c;但是L过大会导致系统阶跃响应出现超调、稳态性能差等问题。因此&#xff0c;在龙贝格观测器中引入表征系统状态变量x…

Python机器学习笔记(十七、分箱、离散化、线性模型与树)

数据表示的最佳方法&#xff1a;取决于数据的语义&#xff0c;所使用的模型种类。 线性模型与基于树的模型&#xff08;决策树、梯度提升树和随机森林&#xff09;是两种成员很多同时又非常常用的模 型&#xff0c;它们在处理不同的特征表示时就具有非常不同的性质。我们使用w…

Spring Boot介绍、入门案例、环境准备、POM文件解读

文章目录 1.Spring Boot(脚手架)2.微服务3.环境准备3.1创建SpringBoot项目3.2导入SpringBoot相关依赖3.3编写一个主程序&#xff1b;启动Spring Boot应用3.4编写相关的Controller、Service3.5运行主程序测试3.6简化部署 4.Hello World探究4.1POM文件4.1.1父项目4.1.2父项目的父…

嵌入式入门Day35

网络编程 Day2 套接字socket基于TCP通信的流程服务器端客户端TCP通信API 基于UDP通信的流程服务器端客户端 作业 套接字socket socket套接字本质是一个特殊的文件&#xff0c;在原始的Linux中&#xff0c;它和管道&#xff0c;消息队列&#xff0c;共享内存&#xff0c;信号等…

安卓系统主板_迷你安卓主板定制开发_联发科MTK安卓主板方案

安卓主板搭载联发科MT8766处理器&#xff0c;采用了四核Cortex-A53架构&#xff0c;高效能和低功耗设计。其在4G网络待机时的电流消耗仅为10-15mA/h&#xff0c;支持高达2.0GHz的主频。主板内置IMG GE832 GPU&#xff0c;运行Android 9.0系统&#xff0c;内存配置选项丰富&…