1. 项目介绍

   基于.NET Framework 4.8 开发的深度学习模型部署测试平台,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等应用场景,同时支持图像与视频检测。模型部署引擎使用的是OpenVINO、TensorRT、ONNX runtime以及OpenCV DNN,支持CPU、IGPU以及GPU多种设备推理。

  其中,OpenVINO以及TensorRT的C#接口均为自行开发,项目链接为:

OpenVINO C# API :

https://github.com/guojin-yan/OpenVINO-CSharp-API.git

TensorRT C# API :

https://github.com/guojin-yan/TensorRT-CSharp-API.git

  演示视频:

  C#&YOLO系列深度学习模型部署平台页面主要包括四个区域,分别为:模型选择和加载区域、推理区域、输入图像展示区域以及输出结果图像展示区域。如下图所示:

  如下图所示,演示的是使用YOLOv5 Det模型的推理情况,

  同样的方式,我们可以实现多种模型在不同平台的上的推理,如下图所示:

2. 支持模型

  项目在开发时,同时开发了YOLOv5~v9以及YOLO World等YOLO系列模型,模型部署工具使用的是OpenVINO 、TensorRT 、ONNX runtime、OpenCV DNN,但有一些模型部署工具对模型的算子存在不支持情况,因此,对该项目中所使用的所有模型进行了测试,如下表所示:

Model OpenVINO CPU OpenVINO GPU TensorRT GPU ONNX runtime CPU ONNX runtime GPU OpenCV DNN
YOLOv5 Det
YOLOv5 Seg
YOLOv5 Cls
YOLOv6 Det
YOLOv7 Det
YOLOv8 Det
YOLOv8 Seg
YOLOv8 Pose
YOLOv8 Obb
YOLOv8 Cls
YOLOv9 Det
YOLOv9 Seg
YOLO World

3. 时间测试

  在开发的模型部署平台上进行时间测试,当前的测试环境为:

  • CPU:11th Intel Core i7-1165G7 2.8GHz
  • IGPU:Intel Iris Xe Graphics
  • GPU:NVIDIA GeForce RTX 2060

在同一环境下,对其中一些模型进行了测试,如下表所示:

Model OpenVINO CPU OpenVINO IGPU TensorRT GPU ONNX runtime CPU ONNX runtime GPU OpenCV DNN
YOLOv5s Det 53.78 ms 28.84 ms 22.95 ms 95.68 ms 29.22 ms 178.53 ms
YOLOv5s Seg 119.53 ms 43.49 ms 31.17 ms 144.68 ms 42.27 ms 500.26 ms
YOLOv6s Det 98.66 ms 43.50 ms 19.93 ms 147.14 ms 25.90 msd 155.20 ms
YOLOv8s Det 77.06 ms 37.54 ms 20.04 ms 134.05 ms 25.82 ms 191.34 ms
YOLOv8s Seg 105.55 ms 48.45 ms 25.91 ms 200.01 ms 37.24 ms 532.16 ms

  通过测试结果可以看出:

  • 在GPU上:使用独立显卡加速的TensorRT在推理速度上表现是十分优秀的,但使用集成显卡加速的OpenVINO其推理速度也不容小觑,如果上到英特尔的独立显卡,其推理速度应该还会有很大程度上的提升,而ONNX runtime使用独立显卡加速,其推理性能上与TensorRT相比稍逊色;
  • 在CPU上,OpenVINO 的表现时十分突出的,在使用极少的CPU占用上,其推理速度已经有了很大的提升,而ONNX runtime以及OpenCV DNN占用CPU很大的情况下,其推理速度远不如OpenVINO。

4. 总结

  项目源码目前已经在GitHub上开源,项目链接为:

https://github.com/guojin-yan/YoloDeployCsharp.git

  各位开发者可以根据自己情况加逆行下载,并进行项目配置,其中一些内容的配置可以参考一下文章:

  最后如果各位开发者在使用中有任何问题,欢迎大家与我联系。

【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台的更多相关文章

  1. Opencv调用深度学习模型

    https://blog.csdn.net/lovelyaiq/article/details/79929393 https://blog.csdn.net/qq_29462849/article/d ...

  2. Apple的Core ML3简介——为iPhone构建深度学习模型(附代码)

    概述 Apple的Core ML 3是一个为开发人员和程序员设计的工具,帮助程序员进入人工智能生态 你可以使用Core ML 3为iPhone构建机器学习和深度学习模型 在本文中,我们将为iPhone ...

  3. 利用 TFLearn 快速搭建经典深度学习模型

      利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<Tenso ...

  4. 在NLP中深度学习模型何时需要树形结构?

    在NLP中深度学习模型何时需要树形结构? 前段时间阅读了Jiwei Li等人[1]在EMNLP2015上发表的论文<When Are Tree Structures Necessary for ...

  5. PyTorch如何构建深度学习模型?

    简介 每过一段时间,就会有一个深度学习库被开发,这些深度学习库往往可以改变深度学习领域的景观.Pytorch就是这样一个库. 在过去的一段时间里,我研究了Pytorch,我惊叹于它的操作简易.Pyto ...

  6. flask部署深度学习模型

    flask部署深度学习模型 作为著名Python web框架之一的Flask,具有简单轻量.灵活.扩展丰富且上手难度低的特点,因此成为了机器学习和深度学习模型上线跑定时任务,提供API的首选框架. 众 ...

  7. 用 Java 训练深度学习模型,原来可以这么简单!

    本文适合有 Java 基础的人群 作者:DJL-Keerthan&Lanking HelloGitHub 推出的<讲解开源项目> 系列.这一期是由亚马逊工程师:Keerthan V ...

  8. CUDA上深度学习模型量化的自动化优化

    CUDA上深度学习模型量化的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参数 ...

  9. CUDA上的量化深度学习模型的自动化优化

    CUDA上的量化深度学习模型的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参 ...

  10. AI佳作解读系列(一)——深度学习模型训练痛点及解决方法

    1 模型训练基本步骤 进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的.选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤 定义算法公 ...

随机推荐

  1. MySQL 汉字字段 拼音排序

    原数据 排序后 SELECT c1 FROM test ORDER BY CONVERT ( c1 USING gbk )

  2. quartus之ram的IP测试

    quartus之ram的IP测试 1.基本原理 ram,读取存储器,用于储存数据.基本的原理就是使用时钟驱动时序,利用地址区分位置,使用使能控制写入.输出的结果以写入的位宽输出. 2.实际操作 顶层代 ...

  3. FPGA之PLD的简单设计

    FPGA之PLD的简单设计 1.实验原理 PLD是可编程逻辑器件的简称,是FPGA的前身(FPGA是在PLD的基础上发展出来的).从PLD设计可以感受早期可编程逻辑器件的特点,了解FPGA在器件层的原 ...

  4. 化腐朽为神奇的QueryMapping

    化腐朽为神奇的QueryMapping 老车除了报废没别的方法? 应用系统就像老车,经过十几二十年的使用,积累了大量里程数据,但是英雄迟暮,反应迟钝,时不时还要病休.但就这样报废,推到重来,如果没有充 ...

  5. FFmpeg开发笔记(九)Linux交叉编译Android的x265库

    ​<FFmpeg开发实战:从零基础到短视频上线>一书的"12.1.2  交叉编译Android需要的so库"介绍了如何在Windows环境交叉编译Android所需FF ...

  6. Go 中的格式化字符串`fmt.Sprintf()` 和 `fmt.Printf()`

    在 Go 中,可以使用 fmt.Sprintf() 和 fmt.Printf() 函数来格式化字符串,这两个函数类似于 C 语言中的 scanf 和 printf 函数. fmt.Sprintf() ...

  7. reactive stream协议详解

    目录 背景 什么是reactive stream 深入了解java版本的reactive stream Publisher Subscriber Subscription Processor JDK中 ...

  8. vc修改ocx控件classID

    背景: 客户希望,classID 为客户自已定义好的一个 ID ,由于我们自动生成的 classID 和客户定义的 ID 不同,所以我们需要修改 classID 为客户指定的 ID 解决方法: 1.打 ...

  9. centos6.5下安装配置apache2.4.9

    centos6.5下安装配置apache2.4.9 摘要: 需要下载的包 apr-1.5.0.tar.gz apr-util-1.5.3.tar.gz pcre-8.33.tar.gz httpd-2 ...

  10. python mmsql连接支持

    前言 因为我使用的是mmsql数据库,因为遇到一点坑,所以发布出来. 正文 准备工作: https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql 下载对应 ...