[C#]使用C#部署yolov10的目标检测tensorrt模型

2024-06-14 16:36

本文主要是介绍[C#]使用C#部署yolov10的目标检测tensorrt模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【测试通过环境】

win10 x64
vs2019
cuda11.7+cudnn8.8.0
TensorRT-8.6.1.6
opencvsharp==4.9.0
.NET Framework4.7.2

NVIDIA GeForce RTX 2070 Super

cuda和tensorrt版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll,TensorRtExtern源码地址:TensorRT-CSharp-API/src/TensorRtExtern at TensorRtSharp2.0 · guojin-yan/TensorRT-CSharp-API · GitHub

Windows版 CUDA安装参考:Windows版 CUDA安装_win cuda安装-CSDN博客

【特别注意】

tensorrt依赖不同硬件需要自己从onnx转换tensorrt,转换就是调用api实现,流程如下

下载源码:https://github.com/THU-MIG/yolov10

并按照官方要求安装好环境:

conda create -n yolov10 python=3.9
conda activate yolov10
pip install -r requirements.txt
pip install -e .

下载yolov10n.pt模型:https://huggingface.co/jameslahm/yolov10n

将Pytorch导出onnx:

# End-to-End ONNX
yolo export model=jameslahm/yolov10{n/s/m/b/l/x} format=onnx opset=13 simplify

将onnx转成tensorrt模型:

trtexec --onnx=yolov10n/s/m/b/l/x.onnx --saveEngine=yolov10n/s/m/b/l/x.engine --fp16

最后将转换好的tenorrt模型使用C#源码即可

【视频演示和解说】

使用C#部署yolov10的目标检测tensorrt模型_哔哩哔哩_bilibili测试环境:win10 x64vs2019cuda11.7+cudnn8.8.0TensorRT-8.6.1.6opencvsharp==4.9.0.NET Framework4.7.2特别注意:环境一定要对上,否则无法正常运行,具体可以参考我的博客和录制视频。博客地址:https://blog.csdn.net/FL1623863129/article/details/139682652, 视频播放量 1、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:用C#部署yolov8的tensorrt模型进行目标检测winform最快检测速度,使用纯opencv部署yolov8目标检测模型onnx,[深度学习][目标检测][面试提问]Batch Normalization批归一化,使用C++部署yolov9的tensorrt模型进行目标检测,labelme json转yolo工具用于目标检测训练数据集使用教程,基于yolov8+bytetrack实现目标追踪视频演示,【yolo标题党的无奈】TRT快不等于TRT快- -!,C++使用纯opencv部署yolov9的onnx模型,yolov5自动标注工具自动打标签目标检测自动标注使用教程,C#实现全网yolov7目前最快winform目标检测icon-default.png?t=N7T8https://www.bilibili.com/video/BV17S411P7he/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee

【部分实现源码】

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 FIRC;
using OpenCvSharp;
using TrtCommon;
using TensorRtSharp;
using TensorRtSharp.Custom;
using System.Diagnostics;namespace WindowsFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){Yolov10Det detector = new Yolov10Det("yolov10n.engine");Mat image1 = Cv2.ImRead(@"E:\person.jpg");List<DetResult> detResults = detector.Predict(new List<Mat> { image1 });Mat re_image1 = Visualize.DrawDetResult(detResults[0], image1);Cv2.ImShow("image1", re_image1);Cv2.WaitKey(0);}private void button2_Click(object sender, EventArgs e){}private void button3_Click(object sender, EventArgs e){Yolov10Det detector = new Yolov10Det("yolov10n.engine");VideoCapture capture = new VideoCapture(0);if (!capture.IsOpened()){Console.WriteLine("video not open!");return;}Mat frame = new Mat();var sw = new Stopwatch();int fps = 0;while (true){capture.Read(frame);if (frame.Empty()){Console.WriteLine("data is empty!");break;}sw.Start();List<DetResult> detResults = detector.Predict(new List<Mat> { frame });Mat resultImg = Visualize.DrawDetResult(detResults[0], frame);sw.Stop();fps = Convert.ToInt32(1 / sw.Elapsed.TotalSeconds);sw.Reset();Cv2.PutText(resultImg, "FPS=" + fps, new OpenCvSharp.Point(30, 30), HersheyFonts.HersheyComplex, 1.0, new Scalar(255, 0, 0), 3);//显示结果Cv2.ImShow("Result", resultImg);int key = Cv2.WaitKey(10);if (key == 27)break;}capture.Release();}}
}

【演示源码下载地址】https://download.csdn.net/download/FL1623863129/89432589

注意源码提供上面对应环境的dll,只需要安装上面一样cuda+cudnn和tensorrt版本即可正常运行。如果您不安装一样版本不能正常运行。此时需要重新编译TensorRtExtern.dll,此外由于tensorrt依赖硬件不一样电脑可能无法共用tensorrt模型,所以必须要重新转换onnx模型到engine才可以运行。

这篇关于[C#]使用C#部署yolov10的目标检测tensorrt模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060938

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

C# 中变量未赋值能用吗,各种类型的初始值是什么

对于一个局部变量,如果未赋值,是不能使用的 对于属性,未赋值,也能使用有系统默认值,默认值如下: 对于 int 类型,默认值是 0;对于 int? 类型,默认值是 null;对于 bool 类型,默认值是 false;对于 bool? 类型,默认值是 null;对于 string 类型,默认值是 null;对于 string? 类型,哈哈,没有这种写法,会出错;对于 DateTime 类型,默

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

UnrealScriptIDE调试环境部署

先安装vs2010   再安装VSIsoShell.exe, 下载地址 https://pan.baidu.com/s/10kPNUuDGTbWXbz7Nos-1WA       fd3t   最后安装unside,下载地址 https://archive.codeplex.com/?p=uside  安装中间有一步选择Binary文件夹要选对路径。   安装好以后,启动 UDKDe

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers