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

windows11-yolov8,自己搭建环境过程回顾(已经踩过坑了,在此拒绝踩坑) 创建一个虚拟环境(解释一下:yolov8是自己创建的虚拟环境(空间)的名字,后面python是限定其内部python版本,不用怎么修改,直接复制粘贴即可。进入后,找到想对应的cuda版本,如图所示,假设cuda版本为11.6,那么请选择pip下载,下载速度稍微快一点。在这里就开始有所不同了,如果你的电脑带有英伟达显卡,那么首先恭喜你,你可以使用更为快速的GPU训练和推理了。你的环境已经成功搭建,来点快乐,水先休息一会,准备着手训练数据集吧。GPU加速推理安装的视频,大家也可以网上进行查阅。 阅读详情
AI摘要

本文详细介绍了如何在Windows 11环境下,使用最新的YOLOv8框架,针对OpenCV、Python和C++进行集成开发环境的搭建。包括Anaconda、PyTorch、OpenCV等关键组件的配置,以及解决过程中遇到的常见问题。

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:

GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

        下载完成后,

        打开cmd,通过以下命令进入到 ultralytics-main 源码目录下(请注意,路径请选用自己实际的yolo源码放置路径)

        cd /d D:\3_yolov8\01_envPrepare\ultralytics-main\ultralytics-main

        安装源码:

        pip install -e .

        安装成功后,对该代码进行检查

        pip list

        如果在列表中看到 ultralytics 则成功

二、搭建Windows下C++环境()

        yolo默认支持于Linux环境下的python语言,其x86环境下的C++工具链需要手动配置。本文以Visual Studio 2017为开发C++程序的IDE进行配置,如需更高的Visual Studio可以自行切换

        本小节需要的素材有:

  •         Cmake
  •         OpenCV(若无特别需求,务必使用 OpenCV 4.8.1版本)
  •         Visual Studio
  •         Yolov8
1.安装 Cmake

        下载Cmake,由于外网限制,这里直接给出国内源镜像版本

Index of /files/PreviousRelease

        笔者选择 cmake-3.27.1-windows-i386.msi 这个版本,进行可执行程序安装、

        安装完成后,进入Windows系统环境变量设置对话框,如下图所示。可以看到,由于刚才的设置CMake已经自动将其安装路径“D:\Program Files\CMake\bin” 写入环境变量Path中。

2.安装 Libtorch

        Libtorch实际上是pytorch的C++支持库,这个直接在 pytorch 的官网 PyTorch 下载即可。

        建议选择 debug 版本

3.安装 OpenCV 4.8.1

        OpenCV的源码url在Github,这里给出国内容易访问的 Gitlab 镜像仓库

OpenCV / opencv · GitCode

        我们不使用 source package,找到可供下载的安装包,直接 binary 安装。

        由于OpenCV安装没有坑,只有版本非常严格,全部使用默认选项完成安装过程即可

4.安装 Visual Studio 2017 并配置

        Visual Studio 是笔者使用的IDE,安装时需要安装所有与Python和C++开发的项目框架。版本差别并不明显,读者可以按自己的习惯使用2017以上的其他版本。

        之后,请参照以下视频,注意工程上选择 x64-debug版本进行安装

Yolo在C++下部署运行+Libtorch+Opencv_哔哩哔哩_bilibili

        其中主要的配置是对VS2017IDE的工程路径设置,笔者自行设置的完成结果可以参考如下:

        属性管理器,Debug | x64,右键属性,VC++目录,包含目录

        C:\Users\xiaoze\Desktop\work1_yolov8Build\用于C++的libtorch\2 libtorch\include\torch\csrc\api\include

        C:\Users\xiaoze\Desktop\work1_yolov8Build\用于C++的libtorch\2 libtorch\include

        C:\Users\xiaoze\Desktop\work1_yolov8Build\用于C++的libtorch\3 opencv\opencv\build\include

        C:\Users\xiaoze\Desktop\work1_yolov8Build\用于C++的libtorch\3 opencv\opencv\build\include\opencv2

属性管理器,Debug | x64,右键属性,VC++目录,包含库目录

        C:\Users\xiaoze\Desktop\work1_yolov8Build\用于C++的libtorch\3 opencv\opencv\build\x64\vc16\lib

        C:\Users\xiaoze\Desktop\work1_yolov8Build\用于C++的libtorch\2 libtorch\lib

属性管理器,Debug | x64,右键属性,链接器,输入,附加依赖项(包含-lib)

其中第1项来自于OpenCV,自第2项至最后一项均来自于Libtorch。

opencv_world481d.lib

asmjit.lib

c10.lib

clog.lib

cpuinfo.lib

dnnl.lib

fbgemm.lib

fbjni.lib

fmt.lib

kineto.lib

libprotobuf-lite.lib

libprotobuf.lib

libprotoc.lib

pthreadpool.lib

pytorch_jni.lib

torch.lib

torch_cpu.lib

XNNPACK.lib

请自查依赖的路径和lib库路径数量是否与上述一致,如果少添加了其中的某个库路径,C++程序在编译过程会产生错误。

5.运行最小程序,进行yolo推理测试

文章至此,libtorch和opencv安装,以及VS2017 IDE的环境配置均已完成。如有问题,参考下一部分:《6.过程问题解决》

1、回到Yolov8,首先打开conda prompt,查看目前的虚拟空间

        conda info --envs

        选择对应的conda版本

        conda activate yolov8test

2、通过模型由.pt转换成.onnx格式

        参考:yolov8 opencv模型部署(C++版)_yolov8 c++-优快云博客

        一般成功以后会看到:

        ONNX: export success 20.1s, saved as 'yolov8stest.onnx' (42.7 MB)

        之后转换成功的 .onnx 文件会出现在根目录里

3、Last Step,调试代码,请参考如下链接:

yolov8 opencv模型部署(C++版)_yolov8 c++-优快云博客

        请读者自行参考文末的《附录C++ 推理代码》,在VS2017环境中建立工程项目进行测试

三、过程中意料之外的问题解决

1、缺少运行库CRuntime.dll

提示:

"由于找不到vcruntime140_1D.dll,无法继续执行代码。重新安装程序可能会解决此问题。"

这是Microsoft® C Runtime Library 中的一个运行时环境库,不是什么致命问题。此时需要对缺失的dll文件进行下载,请跳转至此页面进行下载:

免费下载缺失的 DLL 文件 | DLL‑files.com

2、opencv_highgui_gtk481_64.dll 报错

中途会出现报错:

libraryLoad load C:\Windows\SYSTEM32\opencv_highgui_gtk481_64.dll => FAILED

处理的方法是禁用WTK

经研究后发现,需要在opencv安装目录下,opencv\source\CMakeList.txt关闭,找到以下词条,将后面的ON改为OFF

OCV_OPTION(WITH_GTK "Include GTK support" OFF

若配置仍无效,则多半为Log打印问题,可以忽视

3、VS2017编译报错:You need C++17 to compile PyTorch

打开Visual Studio,然后打开要设置的项目。

在“解决方案资源管理器”中,右键单击项目,然后选择“属性”。

在项目属性窗口中,展开“配置属性” > “C/C++”,然后选择“语言”。

在右侧的“C++语言标准”下拉菜单中,选择“ISO C++17标准 (/std:c++17)”。

单击“应用”按钮,然后单击“确定”按钮保存更改。

4、VS2017编译报错:c2872 std 不明确的符号

将 属性→ C/C++ → 语言 → 符合模式 改为否,问题解决。

5、VS2017执行报错:由于找不到c10.dll(以及torch_cpu.dll),无法继续执行代码

这是因为执行程序无法找到libtorch/lib下的这些外部动态库,这些库并不是没有,而是程序无法找到他。

最简单粗暴的解决方法就是将你之前下载的libtorch库的libtorch/lib文件夹中的对应.dll文件复制到你目前工程的Example\build\Release

另外,一个有效且简易的方法,就是在属性界面的 调试=>环境 里添加libtorch动态库的路径:

PATH=D:\Code_Lib\libtorch\lib;%PATH%

应用后保存,问题解决。

6、示例程序中,Inference inf("../yolov8n.onnx", cv::Size(640, 480), "classes.txt", runOnGPU); 报错

此处报错有几种可能会导致模型加载错误:

1、模型path错误 --> 检查修改path的绝对路径

2、选择图片path错误 --> 检查修改path的绝对路径

3、c10.dll错误。 --> 检查在vs中修改项目的PATH变量

附录:C++ 推理代码

main.cpp

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include "inference.h"
using namespace std;
using namespace cv;

int main(int argc, char **argv)
{
    bool runOnGPU = false;

    // 1. 设置你的onnx模型
    // Note that in this example the classes are hard-coded and 'classes.txt' is a place holder.
    Inference inf("../yolov8n.onnx", cv::Size(640, 480), "classes.txt", runOnGPU); // classes.txt 可以缺失

    // 2. 设置你的输入图片
    std::vector<std::string> imageNames;
    imageNames.push_back("../1.jpeg");
    //imageNames.push_back("zidane.jpg");

    for (int i = 0; i < imageNames.size(); ++i)
    {
        cv::Mat frame = cv::imread(imageNames[i]);

        // Inference starts here...
        std::vector<Detection> output = inf.runInference(frame);

        int detections = output.size();
        std::cout << "Number of detections:" << detections << std::endl;

        
        // 若矩形框位置不对,下面这行可能需要
        //cv::resize(frame, frame, cv::Size(480, 640));

        for (int i = 0; i < detections; ++i)
        {
            Detection detection = output[i];

            cv::Rect box = detection.box;
            cv::Scalar color = detection.color;

            // Detection box
            cv::rectangle(frame, box, color, 2);

            // Detection box text
            std::string classString = detection.className + ' ' + std::to_string(detection.confidence).substr(0, 4);
            cv::Size textSize = cv::getTextSize(classString, cv::FONT_HERSHEY_DUPLEX, 1, 2, 0);
            cv::Rect textBox(box.x, box.y - 40, textSize.width + 10, textSize.height + 20);

            cv::rectangle(frame, textBox, color, cv::FILLED);
            cv::putText(frame, classString, cv::Point(box.x + 5, box.y - 10), cv::FONT_HERSHEY_DUPLEX, 1, cv::Scalar(0, 0, 0), 2, 0);
        }
        cv::imwrite("Inference.jpg", frame);
    }
}

inference.h

#ifndef INFERENCE_H
#define INFERENCE_H

// Cpp native
#include <fstream>
#include <vector>
#include <string>
#include <random>

// OpenCV / DNN / Inference
#include <opencv2/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>

struct Detection
{
    int class_id{0};
    std::string className{};
    float confidence{0.0};
    cv::Scalar color{};
    cv::Rect box{};
};

class Inference
{
public:
    Inference(const std::string &onnxModelPath, const cv::Size &modelInputShape = {640, 640}, const std::string &classesTxtFile = "", const bool &runWithCuda = true);
    std::vector<Detection> runInference(const cv::Mat &input);

private:
    void loadClassesFromFile();
    void loadOnnxNetwork();
    cv::Mat formatToSquare(const cv::Mat &source);

    std::string modelPath{};
    std::string classesPath{};
    bool cudaEnabled{};

    std::vector<std::string> classes{"person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush"};

    cv::Size2f modelShape{};

    float modelConfidenceThreshold {0.25};
    float modelScoreThreshold      {0.45};
    float modelNMSThreshold        {0.50};

    bool letterBoxForSquare = true;

    cv::dnn::Net net;
};

#endif // INFERENCE_H

inference.cpp

#include "inference.h"

Inference::Inference(const std::string &onnxModelPath, const cv::Size &modelInputShape, const std::string &classesTxtFile, const bool &runWithCuda)
{
    modelPath = onnxModelPath;
    modelShape = modelInputShape;
    classesPath = classesTxtFile;
    cudaEnabled = runWithCuda;

    loadOnnxNetwork();
    // loadClassesFromFile(); The classes are hard-coded for this example
}

std::vector<Detection> Inference::runInference(const cv::Mat &input)
{
    cv::Mat modelInput = input;
    if (letterBoxForSquare && modelShape.width == modelShape.height)
        modelInput = formatToSquare(modelInput);

    cv::Mat blob;
    cv::dnn::blobFromImage(modelInput, blob, 1.0/255.0, modelShape, cv::Scalar(), true, false);
    net.setInput(blob);

    std::vector<cv::Mat> outputs;
    net.forward(outputs, net.getUnconnectedOutLayersNames());

    int rows = outputs[0].size[1];
    int dimensions = outputs[0].size[2];

    bool yolov8 = false;
    // yolov5 has an output of shape (batchSize, 25200, 85) (Num classes + box[x,y,w,h] + confidence[c])
    // yolov8 has an output of shape (batchSize, 84,  8400) (Num classes + box[x,y,w,h])
    if (dimensions > rows) // Check if the shape[2] is more than shape[1] (yolov8)
    {
        yolov8 = true;
        rows = outputs[0].size[2];
        dimensions = outputs[0].size[1];

        outputs[0] = outputs[0].reshape(1, dimensions);
        cv::transpose(outputs[0], outputs[0]);
    }
    float *data = (float *)outputs[0].data;

    float x_factor = modelInput.cols / modelShape.width;
    float y_factor = modelInput.rows / modelShape.height;
    //std::cout<<modelInput.cols <<" "<<modelShape.width<<" "<<modelInput.rows<<" "<<modelShape.height<<std::endl;

    std::vector<int> class_ids;
    std::vector<float> confidences;
    std::vector<cv::Rect> boxes;
    std::cout<<yolov8<<std::endl;
    for (int i = 0; i < rows; ++i)
    {
        if (yolov8)
        {
            float *classes_scores = data+4;

            cv::Mat scores(1, classes.size(), CV_32FC1, classes_scores);
            cv::Point class_id;
            double maxClassScore;

            minMaxLoc(scores, 0, &maxClassScore, 0, &class_id);

            if (maxClassScore > modelScoreThreshold)
            {
                confidences.push_back(maxClassScore);
                class_ids.push_back(class_id.x);

                float x = data[0];
                float y = data[1];
                float w = data[2];
                float h = data[3];

                int left = int((x - 0.5 * w) * x_factor);
                int top = int((y - 0.5 * h) * y_factor);

                int width = int(w * x_factor);
                int height = int(h * y_factor);
        //std::cout<<left<<" "<<top<<" "<<width<<" "<<height<<std::endl;

                boxes.push_back(cv::Rect(left, top, width, height));
            }
        }
        else // yolov5
        {
            float confidence = data[4];

            if (confidence >= modelConfidenceThreshold)
            {
                float *classes_scores = data+5;

                cv::Mat scores(1, classes.size(), CV_32FC1, classes_scores);
                cv::Point class_id;
                double max_class_score;

                minMaxLoc(scores, 0, &max_class_score, 0, &class_id);

                if (max_class_score > modelScoreThreshold)
                {
                    confidences.push_back(confidence);
                    class_ids.push_back(class_id.x);

                    float x = data[0];
                    float y = data[1];
                    float w = data[2];
                    float h = data[3];

                    int left = int((x - 0.5 * w) * x_factor);
                    int top = int((y - 0.5 * h) * y_factor);

                    int width = int(w * x_factor);
                    int height = int(h * y_factor);

                    boxes.push_back(cv::Rect(left, top, width, height));
                }
            }
        }

        data += dimensions;
    }

    std::vector<int> nms_result;
    cv::dnn::NMSBoxes(boxes, confidences, modelScoreThreshold, modelNMSThreshold, nms_result);

    std::vector<Detection> detections{};
    for (unsigned long i = 0; i < nms_result.size(); ++i)
    {
        int idx = nms_result[i];

        Detection result;
        result.class_id = class_ids[idx];
        result.confidence = confidences[idx];

        std::random_device rd;
        std::mt19937 gen(rd());
        std::uniform_int_distribution<int> dis(100, 255);
        result.color = cv::Scalar(dis(gen),
                                  dis(gen),
                                  dis(gen));

        result.className = classes[result.class_id];
        result.box = boxes[idx];

        detections.push_back(result);
    }

    return detections;
}

void Inference::loadClassesFromFile()
{
    std::ifstream inputFile(classesPath);
    if (inputFile.is_open())
    {
        std::string classLine;
        while (std::getline(inputFile, classLine))
            classes.push_back(classLine);
        inputFile.close();
    }
}

void Inference::loadOnnxNetwork()
{
    net = cv::dnn::readNetFromONNX(modelPath);
    if (cudaEnabled)
    {
        std::cout << "\nRunning on CUDA" << std::endl;
        net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
        net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
    }
    else
    {
        std::cout << "\nRunning on CPU" << std::endl;
        net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
        net.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);
    }
}

cv::Mat Inference::formatToSquare(const cv::Mat &source)
{
    int col = source.cols;
    int row = source.rows;
    int _max = MAX(col, row);
    cv::Mat result = cv::Mat::zeros(_max, _max, CV_8UC3);
    source.copyTo(result(cv::Rect(0, 0, col, row)));
    return result;
}

Windows11下pytorch环境运行测试YOLOV5 python detect.py --source ./data/images/testfiles --weights ./weights/目标检测模型/yolov5x.pt。不过要注意,自己的数据集不建议放在这个路径下面,建议把数据集放到YOLOv5项目的同级目录下面。注意:安装依赖时要在自己创建的虚拟环境中安装,并路径要切到requirements.txt文件的项目路径中。以上就是搭建相关环境对yolov5进行运行测试,后续可以在yolov5模型的基础上做自己的数据集并进行训练。// 安装所需要的库。 阅读详情

相关推荐

Win系统下Yolov8的C++的编译实战

Yolov8在win系统系统下的C++编译操作实践

wangzhijun1987的博客 1089

Yolov8从入门到上瘾(windows11+anaconda+CUDA+cuDNN+红绿灯数据集训练功能实现)

历时3天,在7位大神调教之下,从零开始完成了YOLOV8的搭建和windows11+anaconda+CUDA+cuDNN+红绿灯自定义数据集训练,特此记录如下,希望后来者少走弯路,弯道超车。

tingwhere的博客 6839

WIN10+VS2019+CUDA11.8 使用TensorRT部署 yolov5-5.0

将下载的《yolov5加速包》中所有文件,复制粘贴到已下载《tensorrtx-yolov5》解压tensorrtx-yolov5-v5.0\yolov5目录下,其中的CMakeLists.txt选择替换原有文件。将《tensorrtx-yolov5》文件下的gen_wts.py文件复制到《yolov5-5.0》目录下,按照下图操作。将转出的wts模型,复制到3.3所生成的yolov5.exe同级目录下。编译过程中出现如下图的错误是可以不用管的。TensorRT配置成功。

weixin_45560674的博客 1290

超详细-使用Win11+Visual Studio 2022 Cmake工程部署YOLOv8+CPP+OnnxRuntime-GPU 适用于YOLOv11

超详细-使用Win11+Visual Studio 2022 Cmake工程部署YOLOv8+CPP+OnnxRuntime-GPU 适用于YOLOv11

小叶MW 的博客 1750

Win10系统下YOLOv8从环境搭建到TensorRT加速部署全流程实战

本文详细介绍了在Win10系统下从环境搭建到TensorRT加速部署YOLOv8的全流程实战指南。内容包括Python虚拟环境配置、CUDA和cuDNN安装、基础推理实战、模型训练与优化、ONNX转换及TensorRT加速部署技巧,帮助开发者快速掌握YOLOv8在目标检测中的应用与性能优化。

weixin_33675507的博客 518

模型实战(11)之win10下Opencv+CUDA部署yolov5、yolov8算法

win10下Opencv+CUDA部署yolov5、yolov8算法

yohnyang的博客 2327

win10下 yolov8 tensorrt模型部署

win10下yolov8 tensorrt加速部署:《TensorRT-Alpha》:https://github.com/FeiYull/TensorRT-Alpha。支持YOLOv8, YOLOv7, YOLOv6, YOLOv5, YOLOv4, YOLOv3, YOLOX, YOLOR,pphumanseg,u2net,EfficientDet。

整理ing 2万+

OpenCV3.2 vc12编译的Lib,Dll

VS2013(vc12)编译的OpenCV3.2.0,Release版本,x86和x64 动态库和lib文件。 单一文件编译 opencv_world320.lib 不包含扩展模块 压缩包文件列表 \vc12 的目录 2018/12/07 11:39 . 2018/12/07 11:39 .. 2018/12/07 11:38 dll 2018/12/07 11:38 include 2018/12/07 11:38 lib 0 个文件 0 字节 \vc12\dll 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 x64 2018/12/07 11:38 x86 0 个文件 0 字节 \vc12\dll\x64 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 Release 0 个文件 0 字节 \vc12\dll\x64\Release 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/11/22 13:20 17,397,760 opencv_ffmpeg320_64.dll 2018/11/22 13:20 43,249,664 opencv_world320.dll 2 个文件 60,647,424 字节 \vc12\dll\x86 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 Release 0 个文件 0 字节 \vc12\dll\x86\Release 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/11/22 10:45 16,480,768 opencv_ffmpeg320.dll 2018/11/22 10:45 35,699,200 opencv_world320.dll 2 个文件 52,179,968 字节 \vc12\include 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 opencv 2018/12/07 11:38 opencv2 0 个文件 0 字节 \vc12\include\opencv 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2016/12/21 18:37 3,226 cv.h 2016/12/21 18:37 2,709 cv.hpp 2016/12/21 18:37 2,580 cvaux.h 2016/12/21 18:37 2,426 cvaux.hpp 2016/12/21 18:37 2,222 cvwimage.h 2016/12/21 18:37 2,476 cxcore.h 2016/12/21 18:37 2,496 cxcore.hpp 2016/12/21 18:37 2,305 cxeigen.hpp 2016/12/21 18:37 137 cxmisc.h 2016/12/21 18:37 2,274 highgui.h 2016/12/21 18:37 2,192 ml.h 11 个文件 25,043 字节 \vc12\include\opencv2 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2016/12/21 18:37 4,582 opencv.hpp 1 个文件 4,582 字节 \vc12\lib 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 x64 2018/12/07 11:38 x86 0 个文件 0 字节 \vc12\lib\x64 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 Release 0 个文件 0 字节 \vc12\lib\x64\Release 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/11/22 13:21 14,772,142 opencv_ts320.lib 2018/11/22 13:20 1,813,572 opencv_world320.lib 2 个文件 16,585,714 字节 \vc12\lib\x86 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 Release 0 个文件 0 字节 \vc12\lib\x86\Release 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/11/22 10:45 11,947,150 opencv_ts320.lib 2018/11/22 10:45 1,778,850 opencv_world320.lib 2 个文件 13,726,000 字节 所列文件总数: 23 个文件 143,169,073 字节 44 个目录 768,389,644,288 可用字节

linux下 yolov8 tensorrt模型部署

基于TensorRT cuda c++实现模型end2end的gpu加速,支持win10、linux,在2023年已经更新模型:YOLOv8, YOLOv7, YOLOv6, YOLOv5, YOLOv4, YOLOv3, YOLOX, YOLOR,pphumanseg,u2net,EfficientDet。Windows10教程正在制作,可以关注仓库:https://github.com/FeiYull/TensorRT-Alpha。

整理ing 1万+

告别迷茫!用ETAS RTA-OS配置你的第一个AUTOSAR OS任务(含VRTA虚拟ECU实战)

本文详细介绍了如何使用ETAS RTA-OS工具链在VRTA虚拟ECU上配置和运行第一个AUTOSAR OS任务。通过从XML配置到任务调度的全流程实战,帮助开发者快速掌握嵌入式操作系统开发的核心步骤,特别适合刚接触AUTOSAR的开发者快速上手。

weixin_42533622的博客 418

【VeriStand】从零构建HIL测试平台:核心概念、硬件选型与实战配置指南

本文详细介绍了如何从零构建HIL测试平台,涵盖核心概念、硬件选型与实战配置指南。重点解析了VeriStand生态系统的优势,包括开箱即用特性、与LabVIEW的黄金搭档配合及Python支持。通过实战案例和硬件选型建议,帮助工程师高效搭建可靠的HIL测试平台,提升测试效率与安全性。

weixin_29250573的博客 329

Windows11 下 YOLOv8 TensorRT部署

安装Visual Studio 2019、Nvidia驱动安装cuda11.8,cudnn8.x、opencv4.8.0、TensorRT-8.5.2.2并进行相应的环境配置。

weixin_44098687的博客 1578

Ferry工单平台部署

ferry工单平台部署

运维求生之路 1897

yolo C++ win11环境搭建

2、Libtorch实际上是pytorch的C++支持库,这个直接在 pytorch 的官网下载即可。选择win,LibTorch,C++,CPU,debug在 pytorch 的官网下载3、部署Yolo在C++下部署运行+Libtorch+Opencv_哔哩哔哩_bilibili其中主要的配置是对VS2017IDE的工程路径设置,笔者自行设置的完成结果可以参考如下:属性管理器,Debug | x64,右键属性,VC++目录,包含目录。

weixin_45109797的博客 846

OpenCV安装配置教程VS2022(超级顺利)

博主最开始没打算写这篇博客,只是想简单的在网上找一下最新版的OpenCV的安装配置教程,适用于VS2022的,但是我搜了一早上,也没搜到一个能让我成功安装配置的,看了很多很多文章,根本就没有几篇有用的。所以没办法了,只能自己研究了,于是就整理了这篇博客,希望能帮到和我一样的人,这就是博主一直信奉的利他精神!

weixin_47367099的博客 5万+

ESP-SPARKBOT AI 智能机器人:v1.2 全流程复刻指南

本文介绍 ESP-SPARKBOT AI 智能机器人 v1.2 版本的全流程复刻,包含 PCB 、3D 打印、固件烧录、常见问题解决、参考资料等

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 9248

YOLOv8 Windows c++推理

添加一个**yolov8\_。onx **和/或**yolov5\_。Onnx **模型(s)到ultralytics文件夹。#编辑**main.cpp**来改变**projectBasePath**来匹配你的用户。#请注意,默认情况下,CMake文件将尝试导入CUDA库以与opencv dnn (cuDNN) GPU推理一起使用。#如果你的OpenCV构建不使用CUDA/cuDNN,你可以删除该导入调用并在CPU上运行示例。

Dneccc的博客 1302

39-高级优化技术:指令调度与乱序执行 - 手把手教你手写CPU

本文介绍了现代处理器设计中提高指令级并行性(ILP)的两种关键技术:指令调度和乱序执行。指令调度分为静态调度(由编译器完成)和动态调度(由硬件完成),后者能更好适应运行时情况但复杂度更高。乱序执行通过动态重排指令顺序提高硬件利用率,其核心组件包括重排序缓冲区、保留站和寄存器重命名。文章提供了保留站的Verilog实现示例,并分析了不同优化技术在性能、硬件开销和功耗方面的权衡。最终指出,CPU设计需根据性能、功耗等需求选择合适的优化技术。

2301_79143213的博客 85

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。

yolov7的win10 cuda11.4.3 cudnn8.2 tensorrt8.2.1.8 c++推理

vokxchh的博客 1996

【ESP 保姆级教程】玩转emqx数据集成篇④ ——数据桥接之HTTP服务

主要是学习数据桥接功能以及构建自己的http服务器,这是一个非常有用的功能。包括各种传感器上报基本上都需要数据桥接功能支持,所以还是希望认真学习这一块开发,然后结合数据库存储等等知识点进行进一步学习。

单片机菜鸟哥的博客 1306

V90伺服 EPOS模式下回原(详细配置+SCL源代码)

/ 输出上限 100.0%rSetPoint : Real;// 设置目标值工程量。// 通道转换参考值。Td : Real;

RXXW_Dor的博客 2662

win10下yolov7 tensorrt模型部署

win10下,yolov7 tensorrt模型部署

整理ing 2954

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10下yolov5 tensorrt模型部署

win10下,yolov5 tensorrt模型部署

整理ing 956

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

YOLOv5+TensorRT+Win11(Python版)

YOLOv5+TensorRT+Win11(Python版)

weixin_41068924的博客 4986

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

工控机还在用Win7?这套开源YOLOv8/YOLO11 SDK,解压就能跑

【开源】面向Win7工控机的轻量级YOLO目标检测SDK lw.OpenCVDNN.YOLOv8发布 针对工业现场Windows7系统难升级、依赖受限的实际需求,本项目提供了一套纯CPU运行的YOLOv8/YOLO11目标检测解决方案,主要特点: 支持Win7 SP1及以上系统,提供x64/x86双版本动态库 零依赖部署:无需Python/CUDA/OpenCV运行时,静态链接所有组件 提供C API接口和.NET Framework 3.5完整示例项目 支持原生C++调用和标准WinForms集成 实测在

.NET 人工智能实践 464
上一篇: VSCode运行C++代码环境搭建(2024)
下一篇: 机器学习笔记-01-初识基础(问题-解答自查版)
睡不醒的小泽
博客等级 码龄11年 1426粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值