在VS2019环境下使用Opencv调用GPU版本YOLOv4算法的详细过程

以下是在VS2019环境下使用OpenCV调用GPU版本YOLOv4算法的详细攻略。

一、环境配置

  1. 安装Visual Studio 2019,选择C++工作负载并安装。
  2. 安装CUDA,推荐版本为CUDA 10.2。
  3. 安装cuDNN,需要与CUDA版本相对应。
  4. 安装OpenCV 4.x版本,需要包含CUDA、cuDNN的支持。
  5. 下载YOLOv4的代码和网络模型:https://github.com/AlexeyAB/darknet
  6. 下载相应配置文件yolov4.cfg和网络模型yolov4.weights,并放到darknet目录下。

二、VS2019项目配置

  1. 新建一个C++项目。在项目属性中进行如下设置:

  2. 将生成选项中的平台选项设置为x64。

  3. 配置属性->C/C++->常规->附加包含目录中,添加OpenCV和CUDA的include目录。
  4. 配置属性->连接器->常规->附加库目录中,添加OpenCV和CUDA的lib目录。
  5. 配置属性->连接器->输入->附加依赖项中,添加opencv_world4xx.lib、cudart_static.lib、cublas.lib、curand.lib、cudnn.lib、yolo_cpp_dll.lib。

  6. 将darknet目录下的src和include文件夹下所有源文件和头文件,添加到VS2019项目中,并在项目中生成yolo_cpp_dll.dll文件。

  7. 在项目中添加demo.cpp文件,并在其中编写调用YOLOv4算法的代码,以下为示例代码:

#include "YOLOv4.h"

int main()
{
    // 初始化YOLOv4
    YOLOv4 yolo;
    if (!yolo.Init())
        return -1;

    // 读取图片
    cv::Mat img = cv::imread("test_img.jpg");

    // 调用YOLOv4算法进行目标检测
    std::vector<BoundingBox> boxes = yolo.Detect(img);

    // 输出检测结果
    for (auto box : boxes)
    {
        std::cout << "class: " << box.class_id << ", confidence: " << box.confidence
            << ", bbox: (" << box.x << ", " << box.y << ", " << box.width << ", " << box.height << ")" << std::endl;
    }

    return 0;
}
  1. 在项目中添加YOLOv4.h和YOLOv4.cpp文件,以下为示例代码:

YOLOv4.h

#pragma once
#include <opencv2/opencv.hpp>
#include <vector>
#include <string>

struct BoundingBox
{
    int class_id;
    float x, y, width, height;
    float confidence;
};

class YOLOv4
{
public:
    bool Init();
    std::vector<BoundingBox> Detect(cv::Mat& img);
private:
    std::vector<std::string> m_class_names; // 目标类别的名称
};

YOLOv4.cpp

#include "YOLOv4.h"
#include "yolo_v4_class.hpp"
#include <iostream>

bool YOLOv4::Init()
{
    try
    {
        // 加载模型权重文件
        Detector detector("yolov4.cfg", "yolov4.weights");

        // 加载目标类别名称文件
        m_class_names = detector.get_names();

        return true;
    }
    catch (std::exception& e)
    {
        std::cerr << "Error: " << e.what() << std::endl;
        return false;
    }
}

std::vector<BoundingBox> YOLOv4::Detect(cv::Mat& img)
{
    std::vector<BoundingBox> boxes;

    try
    {
        // 调用算法进行目标检测
        Detector detector("yolov4.cfg", "yolov4.weights");
        auto results = detector.detect(img);

        // 处理检测结果
        for (auto result : results)
        {
            BoundingBox box;
            box.class_id = result.ClassID;
            box.x = result.Center.x - result.Width / 2;
            box.y = result.Center.y - result.Height / 2;
            box.width = result.Width;
            box.height = result.Height;
            box.confidence = result.Confidence;
            boxes.push_back(box);
        }
    }
    catch (std::exception& e)
    {
        std::cerr << "Error: " << e.what() << std::endl;
    }

    return boxes;
}

三、测试运行

编译并运行项目,在控制台中可以看到目标检测的结果。使用相应的配置文件和网络模型,可进行不同类别的物体检测。

以上便是在VS2019环境下使用OpenCV调用GPU版本YOLOv4算法的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在VS2019环境下使用Opencv调用GPU版本YOLOv4算法的详细过程 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 卷积神经网络–padding

        1. 当padding 为VALID时:              输出宽和高的公式代码为:              output_width = (input_width – filter_width + 1) / strides_width;        (结果向上取整)              output_height = (input…

    卷积神经网络 2023年4月6日
    00
  • 经典网络LeNet5看卷积神经网络各层的维度变化

      本文介绍以下几个CNN经典模型:Lenet(1986年)、Alexnet(2012年)、GoogleNet(2014年)、VGG(2014年)、Deep Residual Learning(2015年) 1.LeNet-5        Lenet-5是一个经典的CNN网络模型,几乎所有讲CNN的资料都会提到该模型;该模型是为了识别手写字体和计算机打印字…

    2023年4月5日
    00
  • 卷积理论 & 高维FWT学习笔记

    之前做了那么多生成函数和多项式卷积的题目,结果今天才理解了优化卷积算法的实质。 首先我们以二进制FWT or作为最简单的例子入手。 我们发现正的FWT or变换就是求$\hat{a}_j=\sum_{i\in j}a_i$,即子集和,那这个是怎么来的呢? 我们假设$a$到$\hat{a}$的转移矩阵为$X$,则 $$(\sum_{j}X_{i,j}a_j)*…

    卷积神经网络 2023年4月8日
    00
  • 卷积神经网络2 tensorflow学习笔记五:mnist实例–卷积神经网络(CNN)

      mnist的卷积神经网络例子和上一篇博文中的神经网络例子大部分是相同的。但是CNN层数要多一些,网络模型需要自己来构建。 程序比较复杂,我就分成几个部分来叙述。 首先,下载并加载数据: import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_data as inpu…

    卷积神经网络 2023年4月6日
    00
  • 对卷积(convolution)的理解 – oliverPP

    对卷积(convolution)的理解 参考文章 https://www.jianshu.com/p/daaaeb718aed https://blog.csdn.net/bitcarmanlee/article/details/54729807  https://www.zhihu.com/question/22298352 —-这个是重点   num…

    2023年4月8日
    00
  • 卷积神经网络(CNN)的细节问题(滤波器的大小选择)

    0. 滤波器的大小选择 大部分卷积神经网络都会采用逐层递增(1⇒ 3 ⇒ 5 ⇒ 7)的方式。 每经过一次池化层,卷积层过滤器的深度都会乘以 2; 1. 权值共享:减轻过拟合 & 降低计算量 一个卷积层(Wx+b ⇒ ReLU ⇒ maxpooling)可以有多个不同的卷积核,而每一个卷积核都对应一个滤波后映射出的新图像,同一个新图像中的每一个像素都…

    卷积神经网络 2023年4月8日
    00
  • 华为PixLab V1怎么样 华为PixLab V1体验评测

    华为PixLab V1怎么样:体验评测 华为PixLab V1是华为公司推出的一款较新的智能摄像头产品,它搭载了麒麟芯片和AI技术,可以实现人脸识别、运动追踪、留言等多种智能功能。下面我们来详细评测一下这款智能摄像头的使用体验。 产品外观 PixLab V1的外形设计简洁美观,半球形的机身采用了白色的抛光材质,具有优美的线条感。摄像头的底座可以进行360度旋…

    卷积神经网络 2023年5月15日
    00
  • TensorFlow2.X结合OpenCV 实现手势识别功能

    下面我将详细讲解“TensorFlow2.X结合OpenCV 实现手势识别功能”的完整攻略,包括两条示例说明。 简介 手势识别是计算机视觉中的一项重要技术,能够实现通过手势控制计算机进行操作的功能。本文将介绍如何使用TensorFlow2.X结合OpenCV实现手势识别功能。 示例1:使用OpenCV进行手势检测 步骤如下: 读取视频流和模型数据 “`py…

    卷积神经网络 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部