Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Yolov5 C++ GPU部署方式介绍:ONNX Runtime

Yolov5 C++ GPU部署方式介绍:ONNX Runtime

原创
作者头像
AI小怪兽
修改于 2023-12-26 06:27:52
修改于 2023-12-26 06:27:52
5.7K02
代码可运行
举报
文章被收录于专栏:YOLO大作战YOLO大作战
运行总次数:2
代码可运行
漫谈C++

摘要:深度学习模型如何在C++下进行调用,

本文详细阐述了YOLOv5在C++ ONNX Runtime GPU&CPU下进行调用

1. ONNX和Tensorrt区别

ONNX Runtime 是将 ONNX 模型部署到生产环境的跨平台高性能运行引擎,主要对模型图应用了大量的图优化,然后基于可用的特定于硬件的加速器将其划分为子图(并行处理)。

ONNX的官方网站:https://onnx.ai/

ONXX的GitHub地址:https://github.com/onnx/onnx

1.2 Tensorrt介绍

C++ 库,用于加速 NVIDIA 的 GPU,可以为深度学习应用提供低延迟、高吞吐率的部署推理,支持 TensorFlow,Pytorch,Caffe2 ,Paddle等框架训练出的神经网络,可以优化网络计算TensorRT官网下载地址:https://developer.nvidia.com/zh-cn/tensorrt

开发者指南:https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html

Github地址:https://github.com/NVIDIA/TensorRT

1.3 Yolov5两种部署方式比较:

Tensorrt 优点:在GPU上推理速度是最快的;缺点:不同显卡cuda版本可能存在不适用情况;

ONNX Runtime优点:通用性好,速度较快,适合各个平台复制;

2.Yolov5 ONNX Runtime部署

源码地址:https://github.com/itsnine/yolov5-onnxruntime

C++ YOLO v5 ONNX Runtime inference code for object detection.

Dependecies:

  • OpenCV 4.x
  • ONNXRuntime 1.7+
  • OS: Tested on Windows 10 and Ubuntu 20.04
  • CUDA 11+ [Optional]

2.1 Cmake工程

2.2 填写opencv 和对应路径

2.3 打开工程 手动配置onnxruntime-win-x64-gpu-1.9.0

包含目录:D:\onnxruntime-win-x64-gpu-1.9.0\include

引用目录:D:\onnxruntime-win-x64-gpu-1.9.0\lib

链接器输入:

onnxruntime.lib onnxruntime_providers_cuda.lib onnxruntime_providers_shared.lib

2.4 如何得到 .onnx

GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python export.py --weights weights/yolov5s.pt --include  onnx --device 0

2.5 主函数代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <opencv2/opencv.hpp>

#include "cmdline.h"
#include "utils.h"
#include "detector.h"


int main(int argc, char* argv[])
{
    const float confThreshold = 0.3f;
    const float iouThreshold = 0.4f;

  

    bool isGPU = true;
    const std::string classNamesPath = "coco.names";
    const std::vector<std::string> classNames = utils::loadNames(classNamesPath);
    const std::string imagePath = "bus.jpg";
    const std::string modelPath = "yolov5s.onnx";

    if (classNames.empty())
    {
        std::cerr << "Error: Empty class names file." << std::endl;
        return -1;
    }

    YOLODetector detector {nullptr};
    cv::Mat image;
    std::vector<Detection> result;

    try
    {
        detector = YOLODetector(modelPath, isGPU, cv::Size(640, 640));
        std::cout << "Model was initialized." << std::endl;

        image = cv::imread(imagePath);
        result = detector.detect(image, confThreshold, iouThreshold);
    }
    catch(const std::exception& e)
    {
        std::cerr << e.what() << std::endl;
        return -1;
    }

    utils::visualizeDetection(image, result, classNames);

    cv::imshow("result", image);
    // cv::imwrite("result.jpg", image);
    cv::waitKey(0);

    return 0;
}

2.6编译得到结果

by CSDN AI小怪兽 http://cv2023.blog.csdn.net

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
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++部署全解
Yolov8 pose关键点检测 C++ GPU部署:ONNXRuntime cuda部署
💡💡💡本文摘要:本文提供了YOLOv8 pose关键点检测 c++部署方式,ONNX Runtime CUDA和cpu部署
AI小怪兽
2024/08/14
1.6K0
Yolov8 Seg分割 C++ GPU部署:ONNXRuntime cuda部署
💡💡💡本文摘要:本文提供了YOLOv8 seg c++部署方式,ONNX Runtime CUDA和cpu部署
AI小怪兽
2024/08/13
1.4K0
大意了| ONNXRUNTIME C++ 版本推理部署踩坑记录
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 前言     之前我安装了CUDA10.0跟cuDnn7.6.5 然后我在VS2017中配置了包含路径、库路径跟连接器,把环境变量加上,重启一下就可以运行onnxruntime-1.4 gpu版本,用YOLOv5导出onnx格式模型,跑的很欢畅。 -VS2017-CUDA10.1-cuDnn7.6.5-onnxruntime-1.4-gpu Faster-RCNN转ONNX 周末的时候我想试试tensorRT+
OpenCV学堂
2022/03/29
7.5K1
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
YOLOv8对象检测 + ONNXRUNTIME 部署 C++ 源码演示!
ONNXRUNTIME是主流的深度学习部署框架之一,支持ONNX格式模型在CPU、GPU、ARM等不同硬件平台上加速推理,支持C++、Python、Java、C#、JS等不同语言SDK。C++版本安装包下载如下:
OpenCV学堂
2023/08/22
10.3K0
YOLOv8对象检测 + ONNXRUNTIME 部署 C++ 源码演示!
YOLOv5最新6.1在OpenCV DNN、OpenVINO、ONNXRUNTIME上推理对比
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 引言 我把YOLOv5最新版本的模型分别用OpenCV DNN(Python、C++)部署、OpenVINO(Python、C++)部署、ONNXRUNTIME-GPU(Python、C++)部署,然后还测试了CPU/GPU不同平台上的运行速度比较。 软件版本与硬件规格 测试用的硬件与软件信息: GPU 1050TiCPU i7八代OS:Win10 64位OpenVINO2021.4ONNXRUNTI
OpenCV学堂
2022/03/14
3.7K0
三种主流模型部署框架YOLOv8推理演示
深度学习模型部署有OpenVINO、ONNXRUNTIME、TensorRT三个主流框架,均支持Python与C++的SDK使用。对YOLOv5~YOLOv8的系列模型,均可以通过C++推理实现模型部署。这里以YOLOv8为例,演示了YOLOv8对象检测模型在OpenVINO、ONNXRUNTIME、TensorRT三个主流框架上C++推理演示效果。所有测试均基于我笔记本电脑,相关的硬件配置如下:
OpenCV学堂
2023/08/22
2K0
三种主流模型部署框架YOLOv8推理演示
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
旋转目标检测模型-TensorRT 部署(C++)
这次工程部署主要选择了比较熟悉的旋转选择框架-GGHL。如果没有特殊算子的检测框架,依然可以使用下面的这个Pipeline, 旋转目标检测主要分成五参数和八参数的表征方法,分别对应的 x,y,w,h.以及对应的八参数的转化求法 x_1,y_1,x_2,y_2,x_3,y_3,x_4,y_4 。这两种方式在后处理的时候可以互相转换,我们这里选择后者。
墨明棋妙27
2022/09/27
1.7K0
旋转目标检测模型-TensorRT 部署(C++)
基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型
YOLOv5兼具速度和精度,工程化做的特别好,Git clone到本地即可在自己的数据集上实现目标检测任务的训练和推理,在产业界中应用广泛。开源社区对YOLOv5支持实例分割的呼声高涨,YOLOv5在v7.0中正式官宣支持实例分割。
SDNLAB
2023/02/26
2K0
基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型
YOLOv5-Lite 详解教程 | 嚼碎所有原理、训练自己数据集、TensorRT部署落地应有尽有
YOLOv5 Lite的输入端采用了和YOLOv5、YOLOv4一样的Mosaic数据增强的方式。其实Mosaic数据增强的作者也是来自YOLOv5团队的成员,不过,随机缩放、随机裁剪、随机排布的方式进行拼接,对于小目标的检测效果还是很不错的。
集智书童公众号
2022/04/07
4.9K0
YOLOv5-Lite 详解教程 | 嚼碎所有原理、训练自己数据集、TensorRT部署落地应有尽有
【C++】和【预训练模型】实现【机器学习】【图像分类】的终极指南
在现代机器学习和人工智能应用中,图像分类是一个非常常见且重要的任务。通过使用预训练模型,我们可以显著减少训练时间并提高准确性。C++作为一种高效的编程语言,特别适用于需要高性能计算的任务。
小李很执着
2024/06/15
4070
YOLOv5模型部署TensorRT之 FP32、FP16、INT8推理
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 引言 YOLOv5最新版本的6.x已经支持直接导出engine文件并部署到TensorRT上了。 FP32推理TensorRT演示 可能很多人不知道YOLOv5新版本6.x中已经支持一键导出Tensor支持engine文件,而且只需要一条命令行就可以完成:演示如下: python export.py --weights yolov5s.pt --include onnx engine --device 0 其中on
OpenCV学堂
2022/09/23
6.2K0
YOLOv5模型部署TensorRT之 FP32、FP16、INT8推理
YOLOv5新版本6.x 自定义对象检测-从训练到部署
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 安装与测试 最近YOLOv5最新更新升级到v6.x版本,工程简便性有提升了一大步,本教程教你基于YOLOv5框架如何训练一个自定义对象检测模型,首先需要下载对应版本: https://github.com/ultralytics/yolov5/releases/tag/v6.1 鼠标滚到最下面下载源码zip包: https://github.com/ultralytics/yolov5/archive/refs/t
OpenCV学堂
2022/09/20
1.6K0
YOLOv5新版本6.x 自定义对象检测-从训练到部署
OpenVINO与TensorRT部署YOLOv10对象检测
如果不指明opset=11或者12,默认opset=10导出的模型推理时候会非常的慢。指定opset=11以后,导出的模型结构如下:
OpenCV学堂
2024/05/28
9151
OpenVINO与TensorRT部署YOLOv10对象检测
TensorRT 开始
TensorRT 是 NVIDIA 自家的高性能推理库,其 Getting Started[1] 列出了各资料入口,如下:
GoCoding
2022/02/23
2.8K0
TensorRT 开始
YOLOX在OpenVINO、ONNXRUNTIME、TensorRT上面推理部署与速度比较
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 YOLOX目标检测模型 旷视科技开源了内部目标检测模型-YOLOX,性能与速度全面超越YOLOv5早期版本! 如此神奇原因在于模型结构的修改,下图说明了改了什么地方: 把原来的耦合头部,通过1x1卷积解耦成两个并行的分支,经过一系列处理之后最终取得精度与速度双提升。实验对比结果如下: 论文与代码模型下载地址: https://arxiv.org/pdf/2107.08430.pdfhttps://github
OpenCV学堂
2022/04/14
5.2K0
YOLOX在OpenVINO、ONNXRUNTIME、TensorRT上面推理部署与速度比较
ONNXRUNTIME | Faster-RCNN ONNX模型在C++与Python推理不一致原因找到了
点击上方↑↑↑“OpenCV学堂”关注我 onnxruntime 推理python与c++支持 现象 最近用torchvision中的Faster-RCNN训练了一个自定义无人机跟鸟类检测器,然后导出ONNX格式,Python下面运行效果良好!显示如下: 然后我就想把这个ONNXRUNTIME部署成C++版本的,我先测试了torchvision的预训练模型Faster-RCNN转行为ONNX格式。然后针对测试图像,代码与测试效果如下: transform = torchvision.transforms
OpenCV学堂
2022/04/11
2.3K0
ONNXRUNTIME | Faster-RCNN ONNX模型在C++与Python推理不一致原因找到了
用YOLOv5模型识别出表情!
本文整体思路如下。提示:本文含完整实践代码,代码较长,建议先看文字部分的实践思路,代码先马后看
Datawhale
2021/09/22
1.3K0
推荐阅读
相关推荐
TensorRT + YOLOv5第六版C++部署全解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验