c++部署yolov5模型

2023-05-16

C++部署yolov5模型

  • 前言
  • 一、准备模型
  • 二、Fastdeploy准备
  • 三 调用
  • 总结

前言

不可否认,yolov5在目标检测方面大杀四方,在 SOTA 榜上留下过万众瞩目的成绩,但是官网代码给的只有 python 版本的 infer 代码,要求不高的话,勉勉强强可以实现部署,现在,我想在 win 下实现 c++ 部署过程,主要原因有:

  1. c++编译的文件,直接 cp 所有的 dll 以及 exe 到目标机器上就行,而 python 需要安装各种环境;
  2. c++的效率高于 python
  3. win 下我感觉 c++ 的部署与移植的便利性远远高于 python

谈到深度学习模型的部署问题,就引出来了几个常见的部署工具,例如 OpenVINO, tensorrt, onnxruntime等,以及基于这些框架又封装一层的,如 FastDeploy, mmdeploy等,这些工具各有特点,但对于目前的我来讲,就是想以最快的速度完成 ultracity/yolov5 生成的 pt 模型的部署,所以,选择了比较简单的 FastDeploy添加链接描述
现在这个 toolbox 能实现很多的功能,支持的模型也很多,有需要的话,可以自己上官网看看,这里就不做过多介绍了。

一、准备模型

FastDeploy 在调用 yolov5 的模型时,不是直接调用的 *.pt 文件,而是调用的 *.onnx(一种通用的深度学习模型)文件,因此,首先是需要对 *.pt 的文件进行格式转换,但并不是所有yolov5 的代码都支持 export *.pt to *.onnx 的功能,在这里,需要关注下 yolov5tag ,大于等于 v6.0 的才有 export.py 这个文件,所以,如果是老用户,就不不需读此文章了。

python export --weights *.pt --include onnx

二、Fastdeploy准备

这个还是需要自己编译下的,我是用 cmake 编译的,具体步骤:

  1. 设置下 ENABLE 目录下的选项:在这里插入图片描述我是用视觉模块,所以,我把 ENABLE_VISION 设置为 ON, 并且,因为我需要调用 onnx,也把 ORT_BACKENDPADDLE_BACKEND 设置为 ON,个人建议,用啥选啥,不用的先不要选,曾经遇到过坑,在编译的时候 ENABLE_OPENVINO_BACKEND=ON,然后再程序运行的时候就卡住不动了,结果发现是因为缺少了一个*.xml的文件,如果没人指点的话,估计这一个月都不知道问题出在哪里。2. 设置 with,在这里插入图片描述
    个人建议 WITH_GPU,因为在运行的时候,有 GPU 就调用 GPU 了,没有 GPU 就调用 CPU了,兼容性好点。

三 调用

如果第一,二步没啥问题,就恭喜了,后面的调用就更简单了,直接看下代码吧:

bool demo_yolov5onnx(const std::string& model_file, const std::string& img_path, const int& loop, const int& use_gpu) {
	fastdeploy::RuntimeOption option; // Configuration information for model inference 	                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
	if (use_gpu == 1) {
		option.UseGpu();
	} else {
		option.UseCpu();
	}
	auto model = fastdeploy::vision::detection::YOLOv5(model_file, "hello", option);

	if (!model.Initialized()) {
		std::cerr << "Failed to initialize." << std::endl;
		return false;
	}
	std::cout << "init successful" << std::endl;

	cv::Mat im = cv::imread(img_path);
	fastdeploy::vision::DetectionResult result;

	clock_t t1, t2;
	for (int i = 0; i < loop; i++) {
		t1 = clock();
		if (!model.Predict(im, &result)) {
			std::cerr << "Failed to predict." << std::endl;
			return false;
		}
		t2 = clock();
		std::cout << "predict image cost time: " << t2 - t1 << std::endl;
	}

	std::cout << "=================================" << std::endl;
	std::cout << result.Str() << std::endl;
	std::cout << "=================================" << std::endl;

	cv::Mat vis_im = fastdeploy::vision::VisDetection(im, result, 0.5);
	cv::imwrite("vis_result.jpg", vis_im); // The visualization results are saved locally
	return true;
}

调用还是比较简单的,也就三五句有用的语句。

总结

FastDeploy封装的还是挺简单的,使用很方便,但是,毕竟是二次开发的工具,在功能上,还是会受限的,所以,要想能更精通的实现模型部署的工作,还是需要学习下底层的部署工具(OpenVINO,ONNXRuntime, TensorRT)的使用以及对模型框架本身的理解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++部署yolov5模型 的相关文章

  • yolov5输出检测框的中心位置,框的长宽,框的位置,以及输出对应标签格式的输出

    yolov5输出检测框的中心位置 xff0c 框的长宽 xff0c 框的位置 xff0c 以及输出对应标签格式的输出 模型读取每个图片 xff0c 并将上述的信息依此输出到同名的txt文件中保存 xff0c 具体需要哪些坐标可以自己选 更改
  • ubuntu18.04使用anaconda3配置yolov5

    ubuntu18 04使用anaconda3配置yolov5 1 anaconda官网下载相关的sh文件 在sh文件所在的文件夹里打开终端 使用bash命令 运行sh文件安装anaconda 在安装的过程中首先有一个确定anaconda的安
  • yolov5记录检测框中心坐标

    yolov5记录检测框中心坐标 最近用到yolov5进行目标检测并确定目标在图片中的位置 xff0c 直接上代码 xff1a 第一步在detect py中建立文件夹并对每张图片建立txt文件 xff1a location center di
  • YOLOv5训练参数简介

    YOLOv5参数解析 xff0c 这次主要解析源码中train py文件中包含的参数 1 1 39 weights 39 1 2 39 cfg 39 1 3 39 data 39 1 4 39 hyp 39 1 5 39 epochs 39
  • RoboCom机器人大赛使用yolov5抽取20个随机图片进行人群识别

    目录 1 原理 2 思维流程 2 1 进行yolov5的环境搭建 2 1 1 在Linux的ubuntu环境anaconda的安装 2 1 2 Vscode的安装和配置 2 1 3 Github上面yolov5文件的下载 2 1 4 使用A
  • Yolov5 -libtorch部署

    将python训练好的网络模型转为可以再libtorch上走的pth模型 xff0c 转换代码如下 xff1a 可以直接赋值粘贴 import argparse import sys import time sys span class t
  • YOLOv5训练自己的数据集实现视频的识别

    写在前面 我本来是使用这个模型进行手写签名的定位 xff0c 但是因为比赛的主办方原因 xff0c 数据不允许公开 xff0c 所以我使用动物世界的一段开头视屏来制作我的数据集 这整个模型跑通的过程中 xff0c 我参考了很多不错的博客 x
  • YOLOv5 数据集划分及生成labels

    0 本人文件夹存放格式 xff08 因为要测试多个数据集和不同的yolov5版本和其他算法 xff0c 所以数据集整体放到外面 xff09 1 划分数据集 验证集 测试集 coding utf 8 import os import rand
  • YoloV5 train.py 如何使用

    parser 参数详解 1 weights 初始化模型 有yolov5m yolov5s yolov5x yolov5l 如果为设置为空就是没有任何与训练模型 2 config 训练配置文件 yaml 文件 与预训练模型相对应 3 data
  • YOLOv5区域入侵检测【附完整代码以及视频演示】

    一 前期准备 首先你需要有一份yolov5的官方源码 并且能够找到其中的detect py文件即可 在检测过程中 有些项目不需要我们检测所有的区域 比如禁止区域的入侵检测 只需要检测制定规划出来的区域就可以 例如下图所示这样 在网上随便找的
  • No module named ‘win32con‘

    pip install pywin32
  • yolov5小目标检测-提高检测小目标的检测精度

    目前基于目标检测方面 近些年基于深度学习的人神经网络产生了很多经典且高效的网络结构 其中不乏有凯明大神的Fast RCNN Faster RCNN家族系列检测网络结构 还有号称you only look once的YOLO系列 本次分享的就
  • yolov5代码--注释

    yolov5目录结构 yolov5 detect py代码详解 https blog csdn net CharmsLUO article details 123422822 spm 1001 2014 3001 5506 yolov5 t
  • yolo毕业设计(车辆识别、行人识别、车牌识别)

    车牌识别视频 车辆识别视频 yolov5车辆识别视频 yolov5 yoloR对比行人车辆识别视频
  • 阿里天池比赛——街景字符编码识别

    文章目录 前言 一 街景字符编码识别 1 目标 2 数据集 3 指标 总结 前言 之前参加阿里天池比赛 好久了 一直没有时间整理 现在临近毕业 趁论文外审期间 赶紧把东西整理了 5月底学校就要让我们滚蛋了 哭哭哭 大运会的牺牲品 一 街景字
  • Yolov5权重 预训练模型 V4.0版本

    首先用bash weights download weights sh在主目录执行 下载模型要比直接去release快很多 不过你可能更想要这个 链接 https pan baidu com s 1Wc1jpP wcCKfwtWf iNml
  • 【目标检测-YOLO】YOLOv5-5.0v-损失函数(第四篇)

    YOLO Input Backbone Neck Head 置信度Loss 坐标回归Loss 分类Loss v1 448 448 GoogleNet FC 2 MSE v2 32x D
  • 还是得从代码角度看yolov5(1)

    train 参考文章 又是经典写到一半发现别人写的更好 基础函数 1 setattr setattr opt k v 将给定对象上的命名属性设置为指定值 等价于opt k v 2 getattr callback getattr logge
  • yolov5量化部署(基于openvino和tensorrt)

    yolov5 openvino量化部署 首先 下载YOLOv5源码 安装YOLOv5和OpenVINO的python依赖 git clone https github com ultralytics yolov5 git pip insta
  • “分页文件太小,无法完成此操作”尝试训练 YOLOv5 对象检测模型时出错

    我有大约 50000 个图像和注释文件用于训练 YOLOv5 对象检测模型 我在另一台计算机上仅使用 CPU 训练模型没有问题 但需要太长时间 因此我需要 GPU 训练 我的问题是 当我尝试使用 GPU 进行训练时 我不断收到此错误 OSE

随机推荐

  • 网易我的世界服务器正在维护,网易《我的世界》Hypixel中国版服务器将停止运营...

    4月16日消息 网易 我的世界 官方现已发布Hypixel中国版服务器停止运营公告 网易表示 xff0c 由于其与Hypixel团队的合作即将到期 xff0c 按照约定将于2020年6月30日10点停止运营Hypixel中国版服务器 届时将
  • 七日杀服务器怎么修改天数,七日杀如何调整天数 | 手游网游页游攻略大全

    发布时间 xff1a 2016 01 21 有这种报错的是硬件加速的问题 调整硬件加速的方法 右键桌面属性 点设置 在设置界面中点高级 然后弹出一个界面 点击疑问解答 然后把硬件加速调到最大 如果还是不能解决可能是软件本身有问题 建议重新安
  • 如何给服务器传输文件,给服务器传输文件

    给服务器传输文件 内容精选 换一换 公有云通常指第三方供应商为用户提供的能够通过Internet使用的云端基础设施和服务 xff0c 其核心属性是共享资源服务 华为云是公有云品牌 xff0c 在SAP系统迁移的过程中 xff0c 您可以单独
  • 服务器架设文件服务器,服务器架设文件服务器

    服务器架设文件服务器 内容精选 换一换 安装完操作系统后的临时云服务器需要进行相关配置 xff0c 并安装原生的XEN和KVM驱动 xff0c 才能保证后续创建的云服务器正常使用 该任务指导用户完成Linux云服务器的相关配置与驱动安装 x
  • 基于YOLOv3的视频中无人机的目标检测(包括CUDA等环境配置)

    在SLAM毫无建树的我又投入了深度学习的大坑 xff0c 由于项目需求需要做无人机的目标检测 xff0c 这里把搭建系统中的一些问题记录下来 xff0c 方便之后复现 系统搭建 采用YOLOv3来进行无人机的检测 xff0c yolo的安装
  • 【CAN】CAN基础概念2

    摘自VECTOR官网E Learning的资料 9 帧类型 数据帧 为传输用户数据 xff0c ISO 11898 1定义了数据帧 数据帧可以传输的最大有效负载为八个字节 xff0c 即数据场 除了数据场 xff0c 数据帧还包括执行CAN
  • 如何设计一个锂电池充电电路(TP4056)

    这个是个单节18650锂电池的充电模块 xff0c 这个是个18650的锂电池 xff0c 18指的是它的直径是18mm xff0c 65指的是它的高度为65mm 这个18650电池的标称电压是3 7V xff0c 电池充满时电压为4 2V
  • 黑马程序员C++系统班学习笔记(一)——Linux操作系统一

    黑马程序员C 43 43 系统班链接 xff1a https www bilibili com video av37403127 from 61 search amp seid 61 5509409937472093685 本笔记旨在记录学
  • ubunbtu下基于c++实现MQTT客户端通信

    文章目录 一 MQTT简介1 1 MQTT 服务器 xff08 Broker xff09 是发布 订阅架构的核心1 2 MQTT 网络协议1 3 服务质量1 4 MQTT 数据包结构1 4 1 MQTT固定头1 4 2 MQTT可变头 Va
  • python 提取页面验证码

    以下代码都使用python 43 selenium 实现 xff0c 请先搭建好开发环境 1 页面的验证码若为静态验证码可以使用截屏的方式获取代码如下 driver save screenshot 39 C crawlerScript pi
  • 基于单片机的GPS开发 (four) GPS基础知识

    一 GPS硬件模块 xff1a VCC xff1a 兼容3 3V和5V GND xff1a 地 TXD xff1a 接51单片机的RXD P3 0 RXD xff1a 可接单片机的TXD P3 1 或者直接悬空 PPS xff1a 时钟脉冲
  • 记录:C++打印堆栈信息并优化打印结果

    1 介绍打印堆栈信息函数 头文件 xff1a span class token macro property span class token directive hash span span class token directive k
  • Ubuntu “无法定位软件包”

    Ubuntu 无法定位软件包 问题描述 xff1a 在使用Ubuntu 18 0 4 安装ceres库时安装依赖项时报错 xff0c 如图所示 xff1a 原因分析 xff1a libcxsparse3 1 2软件包是Ubuntu 14 0
  • NVIDIA Jetson TX2:TX2平台介绍

    一 xff1a TX2平台概述 TX2是快速高效的嵌入式AI计算设备 低功耗 xff08 标准 xff09 模式 xff08 7 5w xff09 xff1b 高功耗模式 xff08 15w xff09 xff0c 性能是TX1的两倍 具有
  • VSCode安装配置C++开发环境

    真相需要去探寻 之前已经在VSCode上配置了Golang的开发环境 xff0c 使用起来还是十分舒服的 xff0c 特别是设置了镜像下载地址和掌握了go mod的使用 xff0c 小巧轻便 xff0c 舒爽流畅 最近要用到C 43 43
  • 图像处理的基本操作(灰度化,二值化)

    基本的概念 xff1a 图像的深度 xff1a 图像中像素点占得bit位数 xff0c 就是图像的深度 xff0c 并不是每个像素点分配了多少位内存空间 xff0c 就一定能够要用完 xff0c 深度仅仅标识用于真真能表示颜色的位数 xff
  • Ubuntu如何切换Python版本

    这几天一直在搞小米官方提供的ESP32 WiFi SDK xff0c 过程中遇到了很多坑 xff0c 其中包括Python版本兼容的问题 xff0c 我的Ubuntu 上安装的Python版本是Python3 xff0c 而脚本的使用的是p
  • C++面试宝典:__FILE__,__func__,__LINE__

    C语言中 xff0c FILE xff0c func xff0c LINE 常用于logout xff0c debug调试 注意 xff1a 其使用不需要定义 xff0c FILE 指示当前文件名 xff0c func 指示当前函数名 xf
  • C++面试宝典:头文件引用的顺序

    头文件引用的顺序 当我们有多个头文件的时候 xff0c 特定情况下要注意引用的顺序 如果要在文件a h中声明一个在文件b h中定义的变量 xff0c 而不引用b h 那么要在a cpp文件中引用b h文件 xff0c 并且要先引用b h x
  • c++部署yolov5模型

    C 43 43 部署yolov5模型 前言一 准备模型二 Fastdeploy准备三 调用总结 前言 不可否认 xff0c yolov5在目标检测方面大杀四方 xff0c 在 SOTA 榜上留下过万众瞩目的成绩 xff0c 但是官网代码给的