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模式下前几次检测正确,后面就检测不到的情况。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
PhpSpreadsheet 学习和使用
composer require phpoffice/phpspreadsheet
全栈程序员站长
2022/09/30
1.1K0
php导出excel表格_phpspreadsheet导出
单个sheet页Excel2003版最大行数是65536行。Excel2007开始的版本最大行数是1048576行。Excel2003的最大列数是256列,2007以上版本是16384列。
全栈程序员站长
2022/09/30
24.5K1
php导出excel表格_phpspreadsheet导出
PhpSpreadsheet设置单元格常用操作汇总
PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到。
用户8675788
2021/07/13
2.3K0
PhpSpreadsheet_phpquery手册
官网文档:https://phpspreadsheet.readthedocs.io/en/stable/
全栈程序员站长
2022/09/30
6020
PhpSpreadsheet_phpquery手册
phpspreadsheet中文手册_php打开文件
PhpSpreadsheet要求PHP 7.3及以上版本,是PHPExcel库的扩展版本,可用来读写xls、xlsx、CSV、HTML等格式文件。
全栈程序员站长
2022/09/30
6K0
PhpSpreadsheet(PHPExcel)的使用 —— 生成/读取excel
PHPExcel已经不再维护,PhpSpreadsheet是PHPExcel的下一个版本
崔哥
2022/05/25
1.5K0
PhpSpreadsheet_vba遍历所有sheet
* sudo composer require phpoffice/phpspreadsheet
全栈程序员站长
2022/11/04
6080
PhpSpreadsheet_php读取文件内容
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
2.5K0
国产化替代方案_excel表格为什么替换不了
PHPExcel上一版本1.8.1于2015年发布。该项目已不再维护,可以使用,但是不建议再使用。所有用户都应该迁移到其直接后继者PhpSpreadsheet或其他替代方案。PhpSpreadsheet打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等)。
全栈程序员站长
2022/11/04
1.7K0
国产化替代方案_excel表格为什么替换不了
fasadmin导出数(利用PhpSpreadsheet和自制模板的服务端导出到Excel方法)
1.以fastadmin自带的test表为例; 2.所有操作都是针对test做了CURD后形成的文件view之test.html、控制器test.php、test.js文件修改。
超级小可爱
2023/12/21
5370
fasadmin导出数(利用PhpSpreadsheet和自制模板的服务端导出到Excel方法)
phpspreadsheet中文手册_php读取文件内容
由于phpexcel已经不再维护,phpspreadsheet是phpexcel的下一个版本。phpspreadsheet是一个用纯php编写的库,并引入了命名空间,psr规范等。这里简单介绍下phpspreadsheet的导入导出功能。
全栈程序员站长
2022/11/04
5K0
phpspreadsheet中文手册_php读取文件内容
PHP语言超全超好用Excel表格SDK扩展库
PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式。PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到。
Tinywan
2025/03/12
1590
PHP语言超全超好用Excel表格SDK扩展库
PhpSpreadsheet 原
为什么80%的码农都做不了架构师?>>> "require-dev": { "phpoffice/phpspreadsheet": "^1.6" }, use PhpOffice\Php
双面人
2019/05/21
7780
PHP 操作 Excel - phpoffice/phpspreadsheet 扩展包
PhpSpreadsheet 是一个用纯PHP编写的库,提供了一组类。使您可以读取和写入不同电子表格文件格式,并且提供了丰富的API接口,可以设置诸多单元格以及文档属性
很酷的站长
2023/02/17
2.6K0
PHP 操作 Excel - phpoffice/phpspreadsheet 扩展包
PhpSpreadsheet_php file_put_contents
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
4830
[CodeIgniter4]phpspreadsheet的使用
https://phpspreadsheet.readthedocs.io/en/latest/
landv
2020/03/13
1.7K1
PhpSpreadsheet生成Excel时实现单元格自动换行
PhpSpreadsheet是PHPExcel的替代版本,PHPExcel的作者已经停止了更新,今天尝试了使用PhpSpreadsheet生成Excel的时候支持单元格内的自动换行,发现用法其实差不多。
大江小浪
2019/02/22
2.7K0
PhpSpreadsheet生成Excel时实现单元格自动换行
PhpSpreadsheet导出Excel表格,长数字自动转科学计数法
这样子就可以实现传入一个数组data,然后快速导出成Excel表格了。 但是遇到长数字的时候,就会被转成科学计数法的数字,并且会丢失最后的精度 全部转成了 0
宣言言言
2019/12/19
4.8K2
tp6之phpspreadsheet学习(5)读取excel并在模板中显示
知识:thinkphp中volist输出二维数组 和if的用法,如何输出为表头thead与tbody
哆哆Excel
2022/10/25
1.5K0
tp6之phpspreadsheet学习(5)读取excel并在模板中显示
PhpSpreadsheet_php获取表单数据
在利用php读取Excel时,当前(2019年)流行的做法是利用composer安装PhpSpreadsheet(composer require phpoffice/phpspreadsheet)来操作,示例代码如下:
全栈程序员站长
2022/10/05
2K0
推荐阅读
相关推荐
PhpSpreadsheet 学习和使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验