首页 > 编程语言 >Win11系统下Yolov8的C++编译环境实践

Win11系统下Yolov8的C++编译环境实践

时间:2024-07-28 18:24:11浏览次数:14  
标签:std lib int C++ Yolov8 Win11 安装 cv

Date:2024年1月24日

概要说明

yolo简介及背景

        yolo(You Only Look Once)是目前一种普及性较高的人工智能目标检测方法,它将目标检测任务重新定义为单一的回归问题,从而实现了从图像像素到边界框坐标和类别概率的直接映射。在业界,Yolo的新应用层出不穷,其需求多样变化、源码结构复杂化、跨编程语言不成熟等问题依然存在,处于一个快速更迭的阶段。

开发需求

        本文的背景是需要在Windows 11(x64) 环境下,以时下最新,也最具检测能力的 yolov8 框架上,实现对OpenCV、Python和C++集成开发环境的部署。由于没有发现网上有较为详细的搭建指南,笔者根据工程需要进行整理,并提供过程中出现的部分错误与对应的解决方法。为了长期支持的考虑,本文采用的各个模块均为2年以内的稳定版本。

        阅读本文可以帮助读者完成yolov8基础编译环境的快速部署,以满足 yolov8 在C++工业应用上的工程化需要。

        本文所用到的环境版本如下:

        cmake 3.27.1

        libtorch 2.1.2 + cpu

        opencv 4.8.1

        vs 2017

正文

一、搭建Windows下python环境

小节概述

由于yolo默认支持于Windows/Linux环境下的python语言,且大部分算法实施与调优依靠此环境,因此给出目前通用的python下开发环境搭建过程。如仅需要C++的开发环境配置,请直接阅读本文正文部分的第二节:搭建Windows下C++环境.

本小节需要的素材有:

  •         Anaconda
  •         Pytorch
  •         Yolov8

搭建过程

1.Anaconda环境

        Anaconda是一个Python包管理软件,利用工具/命令conda来进行package和environment的管理,可以很方便地解决多版本Python并存、切换以及各种第三方包安装问题。在我们激活yolo进行训练任务前,对conda环境的配置是较为广泛易用的方法。

        我们选择 Anaconda/miniconda 两个版本中的一个进行下载。为了更好的兼容CUDA,建议选择3.8(也即后缀-py38_以上的版本,无需使用最新版),对于比较基础的功能使用,笔者推荐选择包体较小的 miniconda 即可。

        Anaconda:

https://www.anaconda.com/

        miniconda:

Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

        二者的下载均在清华大学公开源中下载即可,无需使用vpn,下面是以miniconda为例进行的安装操作,如需使用完整的Anaconda也可以同时操作。

        安装过程中,请点选使用conda的PATH环境变量支持

        安装完成后,在联网环境下创建一个新的虚拟环境,测试是否可以用conda分别管理多个项目的包支持。

1、打开Anaconda prompt

        PyPI镜像设置国内默认源,此操作可以将软件所需依赖转到国内下载

        输入命令:(参考pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

        pip config set global.index-url Simple Index

2、创建与激活环境【注意很多操作要在激活环境下完成】

        创建新的conda环境的命令:

        conda create -n yolov8test python=3.8

        其中 -n yolov8test 是笔者自定义的conda空间名,python=3.8是指定python的版本为v3.8版本

        回车,输入y,完成所需的安装,显示:Executing transaction: done 即成功

        激活conda环境的命令:

        conda activate yolov8test

2.安装pytorch

        在GPU工作环境下,安装pytorch需要 CUDA 的支持。如果只需要训练、简单推理,则无需单独安装CUDA,直接安装pytorch;如果有部署需求,例如导出TensorRT模型,则需要进行CUDA安装。由于显卡的CUDA版本各有不同,因此我们需要根据自己的 Cuda 版本,选择不同的 pytorch 版本

        1、查询本机显卡对应的 CUDA 版本

        打开cmd窗口,以 Nvidia Geforce 3060为例,

        输入命令,在图示位置找到 CUDA 版本信息:

        nvidia-smi

        2、下载Pytorch,选择对应的版本进行安装即可

PyTorch

需要注意:

1)安装CUDA不是必须项

2) 16XX 系列的Nvidia显卡,请固定安装cu102的版本,否则可能训练出现问题。

        30XX、40XX系列的Nvidia显卡,要安装【cu111以上】的版本,否则无法正常运行

3、激活conda环境,在Anaconda prompt下输入指令:

        conda activate yolov8test

        (再次提醒,“yolov8test”是个人自定义的conda空间名称,此处请使用你自己的conda空间)

4、进行指定版本的pytorch和cuda工具链的安装

        笔者在这里使用了 v1.13.0 版本安装未成功,推荐使用 v1.12.0 及以下版本。

        输入指令:

        conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch

        出现 Proceed ([y]/n)? 信息,输入y

        等一阵子以后,会有一个进度条卡在(more hidden),稍等一下即可完成安装

3.源码安装Yolov8

        首先获取yolov8源码,从github上进行clone:

std,lib,int,C++,Yolov8,Win11,安装,cv
From: https://blog.csdn.net/qq_29068607/article/details/140670973

相关文章

  • C++ 数据结构体解析
    文章目录1.定义结构体2. 访问结构成员3. 结构作为函数参数4. 指向结构的指针5. typedef关键字1.定义结构体C/C++数组允许定义可存储相同类型数据项的变量,但是结构是C++中另一种用户自定义的可用的数据类型,它允许存储不同类型的数据项。结构用于表示一条记......
  • C++和R穿刺针吸活检肿瘤算法模型模拟和进化动力学量化差异模型
    ......
  • C++自学笔记29(多维数组)
    我们在之前的笔记中知道数组解决了重复变量的赋值问题,也知道数组就是指针可以用指针的方式修改内容。现在有一个数组对50个变量赋值a[50],我们有50个这样的数组a[50][50],对于这样的数组我们还有50个a[50][50][50]。这就是一维数组、二维数组、三维数组......我们拿堆上建立......
  • C++自学笔记30(类型双关)
    上栗子#include<iostream>intmian(){inta=50;doublever=a;std::cout<<ver<<std::endl;std::cin.get();}a是一个占据4字节的数据,将a复制给ver并转换为double8个字节。这其中就是隐式的类型转换。第一个是int类型的50,第二个是类型转换后的......
  • RuntimeError:给定 groups=1,预期权重在维度 0 处至少为 1,但在 YOLOv8 模型训练中得到的
    我正在尝试使用yolov8n-pose.pt预训练模型来训练YOLOv8模型,并在config.yaml中使用以下配置:#Datapath:C:\Users\Denis\OneDrive\Documents\Project\WorkoutAssistant\datatrain:images/train#trainimages(relativeto'path')val:images/val#valima......
  • 【C++】实验五
    题目:1、五角数被定义为n(3n-1)/2,n=1,2,……,以此类推。因此最初的几个五角数为1,5,12,22,……,请使用下面的函数头编写函数,返回五角数:intgetPentagonaNumber(intn)编写程序,使用这个程序展示前20个五角数,每行打印5个。思路:首先需要编写一个返回五角数的函数,输出20个数需要在主函数......
  • C++中 cin、cin.get()、cin.getline()、getline() 的区别
    cin我们先介绍c++中最常用的输入流对象cin我们常用 cin>>num 来从缓冲区中读取数据到 num 中,num 的变量类型可以是多种类型,最常用的有 int、string、char、double、float等等voidcin_test(){std::cout<<"-----------cintest---------"<<std::endl;st......
  • 【C++软件调试技术】使用 Windbg 分析软件异常时的诸多细节与技巧总结
    目录1、dump文件1.1、dump文件的生成方式1.2、dump文件的大小2、pdb符号文件2.1、pdb文件的路径设置2.2、pdb文件的时间戳与名称问题2.3、如何确定要找哪些pdb文件?3、使用Windbg静态分析dump文件以及动态调试程序的一般步骤4、确定发生异常或崩溃的业务模块,到业务模块......
  • 【C++进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解
    前言:在前面,我们已经学习了很多存储机构,包括线性存储、树性存储等,并学习了多种拓展结构,效率也越来越高,但是是否有一种存储结构可以在大部分问题中都一次找到目标值呢?哈希可能能实现目录一、哈希的概念二、哈希冲突三、哈希冲突解决3.1开放寻址法节点结构插入操作查......
  • 使用yolov8训练时如何解决“内核......似乎已经死亡”?
    我想用yolov8训练我的模型,但开始训练后出现此错误:ultralytics/datasets/lollipop/Untitled.ipynb的内核似乎已死亡。它将自动重新启动。我有GTX1650,内存为4GB,这是我的代码:importtorchfromultralyticsimportYOLO#Loadthemodelmodel=YOLO('yolov......