Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenVINO与TensorRT部署YOLOv10对象检测

OpenVINO与TensorRT部署YOLOv10对象检测

作者头像
OpenCV学堂
发布于 2024-05-28 13:43:47
发布于 2024-05-28 13:43:47
88010
代码可运行
举报
运行总次数:0
代码可运行

模型导出与输入输出

YOLOv10模型导出ONNX脚本如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from ultralytics import YOLOv10
"""Test exporting the YOLO model to ONNX format."""
f = YOLOv10("yolov10n.pt").export(format="onnx", opset=11, dynamic=False)

如果不指明opset=11或者12,默认opset=10导出的模型推理时候会非常的慢。指定opset=11以后,导出的模型结构如下:

输入与输出格式解释如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入支持格式为:1x3x640x640
输出格式为1x300x6

输出格式300是指输出得预测框数目,6分别是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x1 y1 x2 y2 score classid

C++推理

OpenVINO2023 C++ 推理,发现一个很大的BUG,就是当使用AUTO模式的时候:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  ov::CompiledModel compiled_model = ie.compile_model("D:/python/yolov10-1.0/yolov10n.onnx", "AUTO");
  auto infer_request = compiled_model.create_infer_request();

模型推理针对视频推理会发生结果紊乱现象,图示如下:

但是当我把推理设备设定为CPU时候就会非常稳定的运行。说明OpenVINO虚拟推理设备AUTO对YOLOv10支持度还有待提升。

把ONNX格式模型通过下面的命令行转换为engine文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
trtexec.exe -onnx=yolov10n.onnx --saveEngine=yolov10n.engine

TensorRT8.6 C++ 推理演示 , 本人笔记本 显卡为3050ti

C++推理的相关代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int64 start = cv::getTickCount();
// 图象预处理 - 格式化操作
int w = frame.cols;
int h = frame.rows;
int _max = std::max(h, w);

cv::Mat image = cv::Mat::zeros(cv::Size(_max, _max), CV_8UC3);
cv::Rect roi(0, 0, w, h);
frame.copyTo(image(roi));

// HWC => CHW
float x_factor = image.cols / static_cast<float>(input_w);
float y_factor = image.rows / static_cast<float>(input_h);
cv::Mat tensor = cv::dnn::blobFromImage(image, 1.0f / 225.f, cv::Size(input_w, input_h), cv::Scalar(), true);

// 内存到GPU显存
cudaMemcpyAsync(buffers[0], tensor.ptr<float>(), input_h * input_w * 3 * sizeof(float), cudaMemcpyHostToDevice, stream);

// 推理
context->enqueueV2(buffers, stream, nullptr);

// GPU显存到内存
cudaMemcpyAsync(prob.data(), buffers[1], output_h *output_w * sizeof(float), cudaMemcpyDeviceToHost, stream);

// 后处理
cv::Mat det_output(output_h, output_w, CV_32F, (float*)prob.data());

for (int i = 0; i < det_output.rows; i++) {
    float tl_x = det_output.at<float>(i, 0) * x_factor;
    float tl_y = det_output.at<float>(i, 1) * y_factor;
    float br_x = det_output.at<float>(i, 2)* x_factor;
    float br_y = det_output.at<float>(i, 3)* y_factor;
    float score = det_output.at<float>(i, 4);
    int class_id = static_cast<int>(det_output.at<float>(i, 5));
    if (score > 0.25) {
        cv::Rect box((int)tl_x, (int)tl_y, (int)(br_x - tl_x), (int)(br_y - tl_y));
        rectangle(frame, box, cv::Scalar(0, 0, 255), 2, 8, 0);
        putText(frame, cv::format("%s %.2f",classNames[class_id], score), cv::Point(box.tl().x, box.tl().y-5), fontface, fontScale, cv::Scalar(255, 0, 255), thickness, 8);
    }
}
float t = (cv::getTickCount() - start) / static_cast<float>(cv::getTickFrequency());
putText(frame, cv::format("FPS: %.2f", 1.0 / t), cv::Point(20, 40), cv::FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(255, 0, 0), 2, 8);
cv::imshow("YOLOv10对象检测 + TensorRT8.6", frame);

对比YOLOv5跟YOLOv8同等的模型,速度还是非常快。唯一不是很满意的就是感觉对小目标检测能力好像没有YOLOv5跟YOLOv8那么厉害,只是个人感觉。

掌握深度学习模型部署

掌握三种主流的深度学习模型部署框架,实现模型在CPU、GPU、AMD等不同平台硬件上加速推理最佳性能。OpenCV学堂已经推出OpenVINO、TensorRT、ONNXRUNTIME深度学习部署系统化学习路线图“工欲善其事,必先利其器”,做深度学习工程师,学完部署再打工,一切都来得及,现在开始刚刚好!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
openvino AUTO和GPU模式下,我这边也有一样的现象。 另外,我这边还出现在AUTO模式下前几次检测正确,后面就检测不到的情况。
openvino AUTO和GPU模式下,我这边也有一样的现象。 另外,我这边还出现在AUTO模式下前几次检测正确,后面就检测不到的情况。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
YOLOv8对象检测 + ONNXRUNTIME 部署 C++ 源码演示!
ONNXRUNTIME是主流的深度学习部署框架之一,支持ONNX格式模型在CPU、GPU、ARM等不同硬件平台上加速推理,支持C++、Python、Java、C#、JS等不同语言SDK。C++版本安装包下载如下:
OpenCV学堂
2023/08/22
10K0
YOLOv8对象检测 + ONNXRUNTIME 部署 C++ 源码演示!
OpenCV4.5.x DNN + YOLOv5 C++推理
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 引言 昨天修改了个OpenCV DNN支持部署YOLOv5,6.1版本的Python代码,今天重新转换为C++代码了!貌似帧率比之前涨了点!说明C++的确是比Python快点! 点击这里可以查看之前的推文: OpenCV4.5.4 直接支持YOLOv5 6.1版本模型推理 OpenC4 C++部署YOLOv5 我把测试代码封装成一个工具类了,可以直接用,方便大家(生手党)直接部署调用!保重一行代码都不用再写了! 0
OpenCV学堂
2022/03/10
3K0
OpenCV4.8+YOLOv8对象检测C++推理演示
自从YOLOv5更新成7.0版本,YOLOv8推出以后,OpenCV4.6以前的版本都无法再加载导出ONNX格式模型了,只有OpenCV4.7以上版本才可以支持最新版本YOLOv5与YOLOv8模型的推理部署。首先看一下最新版本的YOLOv5与YOLOv8的输入与输出格式:
OpenCV学堂
2023/09/27
2.2K0
OpenCV4.8+YOLOv8对象检测C++推理演示
YOLOv10模型结构详解与推理部署实现
然后快速的看一下相关的文档,发现YOLOv10 相比YOLOv8有两个最大的改变分别是 添加了PSA层跟CIB层
OpenCV学堂
2024/05/28
2.1K0
YOLOv10模型结构详解与推理部署实现
Yolov5 + Opencv DNN + C++部署
OpenCV由各种不同组件组成。OpenCV源代码主要由OpenCV core(核心库)、opencv_contrib和opencv_extra等子仓库组成。近些年,OpenCV的主仓库增加了深度学习相关的子仓库:OpenVINO(即DLDT, Deep Learning Deployment Toolkit)、open_model_zoo,以及标注工具CVAT等。
AI小怪兽
2023/11/30
2K0
OpenVINO2023异步回调流水线提升推理吞吐率
OpenVINO2023版本的SDK支持同步与异步推理模式相比之前OpenVINO2021版本更加的简洁,易用。同时支持创建多个Requst然后基于多个Requst实现流水线方式的推理从而提升CPU推理的吞吐率。同步模式下OpenVINO2023 SDK的推理方式如下:
OpenCV学堂
2023/11/21
7641
OpenVINO2023异步回调流水线提升推理吞吐率
TensorRT + YOLOv5第六版C++部署全解
点击上方↑↑↑“OpenCV学堂”关注我 OpenCV单目相机标定,图像畸变校正 前言 之前对YOLOv5第六版分别在OpenCV DNN、OpenVINO、ONNXRUNTIME 上做了测试,因为版本兼容问题,一直无法在TensorRT上做测试,我当时跑CUDA11.0 + cuDNN8.4.x时候给我报的错误如下: Could not load library cudnn_cnn_infer64_8.dll. Error code 126Please make sure cudnn_cnn_infe
OpenCV学堂
2022/04/08
5.7K2
TensorRT + YOLOv5第六版C++部署全解
OpenCV中如何正确的给文字区域加上底色
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 显示效果 对象检测模型推理解析结果之后,经常需要在对象检测框上部添加文字类别跟其他表述文本,这样显示可以让人一目了然,非常清楚的知道各种检测类别跟自信度信息,但是这个可视化显示,OpenCV可以做的非常好,给人很直观的感觉。图示如下: 如何生成这种显示 OpenCV中有个获取字体跟文本宽高的函数,调用该函数可以获取 Size cv::getTextSize( const String
OpenCV学堂
2022/04/28
2.7K0
OpenCV中如何正确的给文字区域加上底色
OpenVINO部署Mask-RCNN实例分割网络
OpenVINO支持Mask-RCNN与yolact两种实例分割模型的部署,其中Mask-RCNN系列的实例分割网络是OpenVINO官方自带的,直接下载即可,yolact是来自第三方的公开模型库。
OpenCV学堂
2021/03/12
8120
OpenVINO部署Mask-RCNN实例分割网络
YOLOv8自定义数据集训练实现安全帽检测
该图像数据集包含8000张图像,两个类别分别是安全帽与人、以其中200多张图像为验证集,其余为训练集。数据集
OpenCV学堂
2024/01/15
4580
YOLOv8自定义数据集训练实现安全帽检测
OpenVINO + UNet模型部署,实现道路裂纹检测
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 UNet模型 这个模型来自我之前的文章,基于CrackForest数据集训练生成的模型,如何训练道理裂纹数据集,生成UNet模型并导出为ONNX看这里,这个系列文章就可以知道: 轻松学Pytorch – 构建UNet实现道路裂纹检测 https://mp.weixin.qq.com/s/xeUdW2l71RsHe1Zdzr5a7Q 然后我把模型转换ONNX格式了,然后我用OpenVINO+ONNX做个部署演示。之前
OpenCV学堂
2022/05/05
2.4K1
OpenVINO + UNet模型部署,实现道路裂纹检测
OpenCV4.2 + OpenVINO2020安装配置与应用演示
首先需要从官方下载安装文件,下载OpenVINO2020R01版本,然后默认安装,图示如下:
OpenCV学堂
2020/03/24
1.9K0
OpenCV4.2 + OpenVINO2020安装配置与应用演示
YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解
YOLOv5在OpenVINO上的部署,网上有很多python版本的代码,但是基本都有个很内伤的问题,就是还在用pytorch的一些库做解析,C++的代码有个更大的内伤就是自定义解析解释的不是很清楚,所以本人阅读YOLOv5的pytorch代码推理部分,从原始的三个输出层解析实现了boxes, classes, nms等关键C++代码输出,实现了纯OpenVINO+OpenCV版本的YOLOv5s模型推理的代码演示。下面就是详细的系统环境与各个部分解释,以及代码实现与演示图像。
OpenCV学堂
2021/01/18
2.3K0
系列 | OpenVINO视觉加速库使用一
OpenVINO是英特尔推出一套基于深度学习的计算机视觉加速优化框架,支持其它机器学习平台模型的压缩优化、加速计算等功能。 自发布以后就得到开发者的青睐,其强大的模型优化与压缩能力与加速计算引擎带来的速度提升让人十分惊喜,前面发布过一篇文章,详细介绍了OpenVINO的架构与其加速引擎(Inference Engine-IE)使用,如何帮助开发者在CPU上对深度学习的模型跑出实时帧率,文章链接如下:
OpenCV学堂
2019/04/29
3.9K0
系列 | OpenVINO视觉加速库使用一
OpenCV+OpenVINO实现人脸Landmarks实时检测
自从OpenCV3.3版本引入深度神经网络(DNN)模块之后,OpenCV对DNN模块支持最好的表现之一就是开始支持基于深度学习人脸检测,OpenCV本身提供了两个模型分别是基于Caffe与Tensorflow的,Caffe版本的模型是半精度16位的,tensorflow版本的模型是8位量化的。同时OpenCV通过与OpenVINO IE模型集成实现了底层硬件对对象检测、图像分割、图像分类等常见模型加速推理支持。OpenVINO框架本身提供直接快速开发应用原型的模型库,对很多常见视觉任务都可以做到快速演示支持。说起人脸的Lankmarks提取,最早的OpenCV跟DLib支持的方式都是基于AAM算法实现的68个人脸特征点的拟合模型,另外OpenCV中支持landmark的人脸检测会先加载一个很大的模型文件,然后速度感人,觉得还有很大的改进空间。好处是OpenCV自己提供了一个训练工具,可以自己训练模型。常见的MTCNN同时实现了人脸检测跟landmarks检测,但是只支持5点检测。而OpenVINO自带的Landmark检测模型基于自定义的卷积神经网络实现,取35个人脸各部位关键点。
OpenCV学堂
2020/04/14
1.9K0
OpenCV+OpenVINO实现人脸Landmarks实时检测
ONNXRUNTIME部署一键人像抠图模型
一键人像抠图,实时支持的模型,整个代码实现是基于Pytorch完成,通过脚本可以一键导出ONNX格式模型,官方提供了ONNXRUNTIME模型部署推理演示的Python版本代码。项目的github地址如下:
OpenCV学堂
2023/08/22
8930
ONNXRUNTIME部署一键人像抠图模型
利用TensorRT实现神经网络提速(读取ONNX模型并运行)
在之前已经写到过一篇去介绍什么是TensorRT:利用TensorRT对深度学习进行加速,这篇文章中大概已经基本讨论了TensorRT究竟是个什么东西以及怎么使用它。
老潘
2023/10/19
3.6K1
利用TensorRT实现神经网络提速(读取ONNX模型并运行)
OpenVINO +YOLOX最新版本推理演示
点击上方↑↑↑“OpenCV学堂”关注我 yolox 推理openvino与c++支持 YOLOX模型ONNX格式说明 我记得大概是在去年七月份的时候我写过一篇文章是介绍YOLOX+OpenVINO推理的,下载YOLOX的ONNX格式模型(github上可以下载) https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntimehttps://github.com/Megvii-BaseDetection/YOLOX/rel
OpenCV学堂
2022/04/13
8240
OpenVINO +YOLOX最新版本推理演示
手把手教你 封装DLL类 给客户端调用
创建DLL有几种不同的方式,最简单直接的的方式就是通过VS自带的动态链接库(DLL)项目,把相关的功能封装成一个类,然后导出几个接口方法,编译成功以后生成DLL文件,就可以在其他地方跟正常的第三方库配置之后一样调用了。
OpenCV学堂
2023/08/22
9920
手把手教你 封装DLL类 给客户端调用
C++实现yolov5的OpenVINO部署
本文编辑的时间是2020年12月3日,官方最新的releases是v3.1,在v3.0的版本中,官网有如下的声明
BBuf
2020/12/22
2.8K0
C++实现yolov5的OpenVINO部署
推荐阅读
相关推荐
YOLOv8对象检测 + ONNXRUNTIME 部署 C++ 源码演示!
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验