YOLOv5部署到Windows的C++(使用LibTorch)

2023-05-16

YOLOv5部署到Windows的C++(使用LibTorch)

  • 前言
  • 准备内容
  • 配置环境
  • 编译
  • YOLOv5 检测
  • 可能遇到的问题

前言

由于项目需要,我们要将YOLOv5部署到Windows上的C++程序使用,本文使用LibTorch将YOLOv5部署到Visual Studios 2019上。

准备内容

首先我们下载准备好需要的内容:

  • Visual Studios 2019
  • LibTorch (要和你的Pytorch版本对应,Debug 和 Release 版本均可,和后续C++版本统一即可)
  • OpenCV
  • Libtorch-Yolov5
  • Cmake
  • CUDA & cuDNN

配置环境

配置 OpenCV 和 LibTorch 环境,二者配置内容大体一致(以下路径地址按个人安装路径调整)。

  1. 配置系统环境变量:
    在系统环境变量中分别添加 OpenCV 和 LibTorch 的路径
    Opencv:
    D:\opencv\build\x64\vc15\bin
    Libtorch:
    D:\libtorch\lib

  2. VS2019 新建 C++ 空项目;

  3. 项目属性 -> VC++目录 -> 包含目录:
    Opencv:
    D:\opencv\build\include
    D:\opencv\build\include\opencv2
    Libtorch:
    D:\libtorch\include
    D:\libtorch\include\torch\csrc\api\include

  4. 项目属性 -> VC++目录 -> 库目录:
    Opencv:
    D:\opencv\build\x64\vc15\lib
    Libtorch:
    D:\libtorch\lib

  5. 项目属性 -> 链接器-> 输入-> 附加依赖项:
    Opencv:
    将D:\opencv\build\x64\vc15\lib文件中的 .lib 文件放入附加依赖项里面,两个版本和你项目版本一致:
    opencv_world452d.lib(Debug)
    opencv_world452.lib(Release)
    Libtorch:
    将D:\libtorch\lib中的 .lib 文件全部放入附加依赖项里面。

  6. 项目属性 -> C/C++ -> 附加包含目录:
    D:\opencv\build\include
    D:\libtorch\include
    D:\libtorch\include\torch\csrc\api\include

  7. 项目属性 -> C/C++ -> 常规 SDL检查 改为

  8. 项目属性 -> C/C++ -> 语言 -> 符合模式 符合模式 改为

  9. 项目属性 -> 调试 -> 环境:
    Opencv:
    D:\opencv\build\x64\vc15\lib;
    Libtorch:
    D:\libtorch\lib;

  10. 测试OpenCV:
    运行以下代码检查是否正确配置OpenCV:

    #include <opencv2/opencv.hpp>
    int main() {
    	cv::Mat img = cv::imread("图片路径");
    	cv::imshow("", img);
    	cv::waitKey(0);
    	return 0;
    }
    
  11. 测试LibTorch:
    运行以下代码检查是否正确配置LibTorch:

    #include <torch/torch.h>
    #include <iostream>
    int main() {
    	std::cout << "cuda::is_available():" << torch::cuda::is_available() << std::endl;
    	torch::Tensor tensor = torch::rand({ 3, 4 });
    	std::cout << tensor << std::endl;
    }
    

编译

  1. 打开 Libtorch-Yolov5 中的 CMakeLists.txt,在以下两行中给出 OpenCV 和 LibTorch 的路径:
    set(OpenCV_DIR D:/opencv/build)
    set(Torch_DIR D:/libtorch/share/cmake/Torch/)
  2. 打开CMD
    mkdir build	# 建立build文件夹
    cd build		# 进入build文件夹
    cmake ..		# 编译
    

YOLOv5 检测

  • 将 D:/libtorch-yolov5/weights 中的coco.names中的类别名称改为自己的数据集类别名称,训练好的权重文件可放于此文件夹(.pt 权重文件先使用 yolov5 的 export.py 转化为 .torchscript.pt 文件);
  • D:/libtorch-yolov5/src 中的文件就是检测函数 detector.cpp 和主函数 main.cpp,具体内容按照个人需求更改。

可能遇到的问题

  • 无法打开源文件 opencv2/opencv.hpp 或 torch/torch.h: 环境未配置好。
  • 编译时找不到 OpenCV 或者 LibTorch 的文件: 检查 CMakeLists.txt 中的路径地址是否填写正确,注意斜杠方向,是否有注释符号,是否添加到系统环境变量。
  • 编译时找不到 CUDA: CUDA 未正确安装或未添加到系统环境变量中。
  • 推理速度缓慢 或 模型加载缓慢: 检查 pytorch 版本以及 CUDA 版本是否对应正确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YOLOv5部署到Windows的C++(使用LibTorch) 的相关文章

  • 使用加密 API 导入 DER 编码的公钥

    是否可以使用 MS crypto API 导入 DER 编码的公钥 那么我可以验证签名吗 我需要 MS Crypto API 的一段代码或帮助来导入 DER 编码的公钥 证书 以下三个步骤将允许您导入公钥证书 使用获取证书上下文证书创建证书
  • 是否可以调用驻留在 exe 中的非导出函数?

    我想调用驻留在第 3 方 exe 中的函数并获取其结果 好像有should是一种方法 只要我知道函数地址 调用约定等 但我不知道如何 有谁知道我会怎么做 我意识到任何解决方案都是非标准的黑客 但有must成为一种方式 我的非恶意用例 我正在
  • 最后一个参数中的正斜杠会导致批处理文件目录(“%~dp0”)的路径发生更改

    我正在学习如何在批处理脚本中使用参数 并最终创建了某种用于读取参数和设置参数的模板 echo off SetLocal EnableDelayedExpansion set needextra set errstat set noflag
  • 在 Docker 中启动 tomcat 时无法在端口 8080 上打开网页

    在我的本地计算机 Windows 10 64 位 上 我启动 docker Toolbox 然后我拉取 Tomcat 映像并运行它 如下所示 docker run it tomcat 就跑成功了 31 Dec 2019 17 54 27 5
  • 如何使用Windows批处理命令删除“无扩展名的文件”的所有内容

    我想删除以 FIlE 为扩展名的文件的内容 即没有扩展名 我知道如何删除文本文件的内容 但不知道如何删除以 文件 为扩展名的文件 我会感谢你的努力 提前致谢 Use Del 在批处理文件中删除没有扩展名的文件 use Dir A D 列出所
  • 避免 Inno Setup 中的“无法展开 shell 文件夹常量 userdocs”错误

    我将一些示例文档安装到 Windows 上标准 我的文档 文件夹的 PerfectTablePlan 子文件夹中 这对于 99 以上的用户来说效果很好 但是 如果用户没有 我的文档 文件夹 我会收到许多以下形式的丑陋错误消息 内部错误 无法
  • 为什么我们从 MultiByte 转换为 WideChar?

    我习惯于处理 ASCII 字符串 但现在使用 UNICODE 我对一些术语感到非常困惑 什么是多字节字符以及什么是widechar有什么不同 多字节是指在内存中包含多个字节的字符吗 widechar只是一个数据类型来表示吗 为什么我们要从M
  • R 脚本自动化时的不同结果

    以下命令对 pdf 文件执行 Ghostscript 这pdf file变量包含该 pdf 的路径 bbox lt system paste C gs gs8 64 bin gswin32c exe sDEVICE bbox dNOPAUS
  • .wav 文件长度/持续时间,无需读入文件

    有没有办法提取有关 wav 文件长度 持续时间的信息 而无需在 R 中读取文件 我有数千个这样的文件 如果我必须阅读每个文件才能找到其持续时间 那将需要很长时间 Windows 文件资源管理器为您提供了打开 长度 字段的选项 并且您可以查看
  • Windows Workflow Foundation 4 (WF4) 延迟

    我正在与 Visual Studio 2010 的候选版本一起使用 Wf4 编写一个用于批准资源请求的新工作流程 在我的工作流程中 如果请求未获得批准 我希望请求在几天后过期 我们在 WF 3 5 Visual Studio 2008 中通
  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • 用于验证 IIS 设置的 Powershell 脚本

    是否可以使用 Power Shell 脚本获取 IIS 设置 我希望使用脚本获取 检查以下信息 检查 Windows 身份验证提供程序是否正确列出 协商 NTLM 检查是否启用了 Windows 身份验证 Windows 身份验证高级设置
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何使用命令行压缩文件?

    我想使用批处理文件命令 Windows XP 批处理文件 压缩目录 例如 如果我想解压缩一个文件意味着我可以使用jar xf file zip java bat 文件命令 就像我想要一个命令行批处理来压缩目录一样 如果您使用的是 Ubunt
  • 在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥

    正如标题所示 我想在不使用 OpenSSL 或任何其他第三方工具的情况下导出我的私钥 如果我需要一个 cer文件或 pfx我可以通过 MMC 或 PowerShell 轻松导出这些文件pkiclient但我找不到获取私钥的方法 https
  • Windows 窗口对接

    我想知道如何在 Windows 中将窗口停靠 捕捉到屏幕的一侧 最好使用直接的 Win32 API 我正在寻找的效果就像任务栏 一个在屏幕上有保留空间的窗口 因此最大化另一个窗口会使该窗口占据屏幕的其余部分 但使我的窗口保持在适当的位置并可
  • 为什么我只能用管理员权限才能导入Python中的某些模块?

    我正在努力解决 Python 2 7 中的一些奇怪问题 我写了一个很长的工具 在其中导入不同的模块 我必须首先使用它安装pip 该工具将在公司内部共享 不同的用户在其特定机器上拥有不同的权限 当另一个用户登录我的计算机 我在那里拥有管理员权
  • 对于多重继承,使用隐式转换而不是 QueryInterface() 是否合法?

    假设我有一个类实现两个或多个 COM 接口 正如here https stackoverflow com questions 1742848 why exactly do i need an explicit upcast when imp
  • 将 CrashDumps 转储到应用程序运行所在的同一文件夹中

    我编写了一个应用程序 我希望对其进行一定程度的自动调试 我想使用 Windows 错误报告将故障转储输出到应用程序运行所在的同一文件夹中 我的想法是 我可以让我的应用程序在它自己的文件夹中查找任何 dmp 文件 然后根据需要上传它们进行分析

随机推荐

  • 浅析Windows编程的剪贴板机制

    摘要 xff1a 本文对Windows剪贴板机制作了深入 全面的阐述 xff0c 具体内容包括 xff1a 文本 位图 DSP 自定义格式剪贴板的使用和多数据项和延迟提交技术 关键词 xff1a VC 43 43 6 0 xff1b 剪贴板
  • Matthew Curland的VB函数指针调用

    Matthew Curland简介 xff1a Visual Studio开发小组成员 xff0c 参与开发了VB的IntelliSense和Object Browser 他是VB资深专家 xff0c 对VB有非常深入的研究 xff0c 堪
  • Access中神秘的Criteria(上)

    看到这个标题 xff0c 很多读者可能会迷惑 xff0c 什么是Criteria xff1f 我用了这么久Access xff0c 怎么从来没听说国 我猜想很多读者都是怀着好奇的心情点击的这个主题 但是也许你不知道 xff0c Access
  • Access多条件格式研究笔记(上)

    之前见过论坛好几个帖子讨论过超过三个的条件格式 xff0c 当时因为没有用过条件格式 xff08 通常遇到类似需求我就直接用VBA写代码了 xff09 xff0c 所以也无法加入讨论 xff0c 但是开始留意条件这个这个功能 适逢周末有点空
  • Access 窗体控件事件集线器(EventsHub)V 1.1

    模块名称 xff1a EventsHub 模块版本 xff1a V 1 1 模块介绍 xff1a 很多时候我们在窗体中会有很多类似的控件 xff08 比方说40多个TextBox xff09 xff0c 对于这些类似的控件我们需要编制类似的
  • 窗体类中慎用Option Explicit

    今天遇到一个怪病 xff0c 困扰了我几个小时 xff0c 我有一段程序读取窗体上的切换按钮状态 xff0c 在一个新文件中运行得很好 xff0c 但是同样一个按钮 xff0c 同样代码 xff0c 贴到另外一个窗体 xff0c 却怎么也无
  • 窗体控件绑定数据库字段后的Value类型

    下面三张图展示了各种数据类型的字段绑定到窗体控件后的控件值类型 需要注意的是 xff0c 窗体类中是否使用Option Explicit xff0c 对于空值类型影响很大 xff0c 具体请看本人的另一篇文章 窗体类中慎用Option Ex
  • Dim 的陷阱

    代码一 xff1a Dim x 100 y 100 As Byte Call ReadBytes x Public Sub ReadBytes ByRef z As Byte 39 Do Nothing End Sub 对以上代码进行编译
  • 谨慎使用单精度/双精度数值类型

    前言 在近日几个帖子里面 xff0c 和QQ群的讨论里面 xff0c 我发现很多网友都遇到的问题都是因为不恰当地使用了单精度 双精度数值 因此想专门就这个话题谈一下 单精度和双精度数值类型最早出现在C语言中 xff08 比较通用的语言里面
  • Java的内存结构(Memory Structure)和垃圾收集(Garbage Collection)图解

    JVM 内存包含如下几个部分 xff1a Heap Memory 存放Java对象 Non Heap Memory 存放类加载信息和其它meta dataOther 存放JVM 自身代码等 在JVM启动时 xff0c 就已经保留了固定的内存
  • MD5加密的VB类模块源码

    在窗体中调用时如下 set c1 61 new class 39 class 为你存的类模快名 text1 text 61 md5 string calc sourcestring 类模块源码如下 Option Explicit 39 Vi
  • 四种整数数据类型的性能对比

    在我们写VBA程序的时候 xff0c 我们经常要面对数据类型定义的选择 xff0c 有的情况下 xff0c 业务本身对于数据类型有要求和限制 xff0c 那么我们并不难以选择 xff0c 有些时候却没有限制 xff0c 我们可以任意选用四种
  • VBA/VB获取硬盘序列号

    Private Declare Function GetVolumeInformation Lib 34 kernel32 dll 34 Alias 34 GetVolumeInformationA 34 ByVal lpRootPathN
  • .NET 4 on Windows7 / Mono 2.10.8.1 on Ubuntu 12.04 差异记录

    环境A xff1a NET 4 on Windows 7 环境B xff1a Mono 2 10 8 1 on Ubuntu 12 04 1 Socket Receive byte 当远程连接被断开时 xff1a A xff1a 立即返回0
  • 计算机视觉学习知识框架体系总结整理

    计算机视觉的三个基本任务 xff1a 1 xff09 对象检测 object detection 2 xff09 对象跟踪 object tracking 3 xff09 对象分割 object segmentation 一 xff1a F
  • VS Code 配置Java环境问题解决方式

    1 问题 1 1 改变插件的储存位置 1 2 Java环境变量配置 1 3 VS Code Java 工作区建立 1 4 code runner 运行输出为乱码 2 解决方法 2 1 储存位置更改 xff08 1 xff09 改变vs桌面快
  • YOLOv4-pytorch训练自己的数据集

    YOLOv4 pytorch训练自己的数据集 YOLOv4 pytorch介绍环境配置运行环境安装依赖包 准备工作Git clone YOLOv4准备数据集下载PascalVOC MSCOCO 2017数据集准备自己的数据集 下载权重文件
  • 【DEBUG日记】cannot import name ‘amp‘

    问题描述 xff1a 在使用WongKinYiu PyTorch YOLOv4进行训练时 xff0c 报错 xff1a Traceback span class token punctuation span most recent call
  • 【DUBUG日记】subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1.

    项目场景 xff1a 这是在编译FCOS 主要是其中基于maskrcnn benchmark部分 时报的错误 问题描述 xff1a 在执行 python setup py build develop no deps 时 xff0c 会Run
  • YOLOv5部署到Windows的C++(使用LibTorch)

    YOLOv5部署到Windows的C 43 43 xff08 使用LibTorch xff09 前言准备内容配置环境编译YOLOv5 检测可能遇到的问题 前言 由于项目需要 xff0c 我们要将YOLOv5部署到Windows上的C 43