在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日

相关文章

  • [转] 图像滤波 卷积 相关

    http://sunnysnow2004.blog.163.com/blog/static/5282482420085184017571/ 1 图像滤波的基本概念     图像常常被强度随机信号(也称为噪声)所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等.椒盐噪声含有随机出现的黑白强度值.而脉冲噪声则只含有随机的…

    卷积神经网络 2023年4月8日
    00
  • 【python实现卷积神经网络】定义训练和测试过程

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride、padding)的具体实现:https://www.cnblogs.com/xiximayou/p/12706576.html 激活函数的实现(sigmoid、softmax、tanh、relu、l…

    卷积神经网络 2023年4月8日
    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中的卷积核一般都是奇数

    为什么CNN中的卷积核一般都是奇数  为什么CNN中的卷积核一般都是奇奇数*奇数,没有偶数*偶数的? 咱们经常见到的多为 3 * 3、5*5;怎么从来没有见过 4*4,6*6 之类的卷积核?无论奇数 or 偶数,都是能够做卷积的呀 之前学习的时候真的没有想过这些问题,再复习时,觉得全是 Why?说明之前还是没有搞明白 从AlexNet模型的11*11、5*5…

    卷积神经网络 2023年4月8日
    00
  • Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2

    http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 2基础及源代码解析 2.1 Convolution Neural Network卷积神经网络基础知识 1)基础知识: 自行google,百度。基础方面的非常多,随便看看就能够,仅仅是非常多没有把细节说得清楚和明确; 能把细节…

    2023年4月6日
    00
  • 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导

      置顶 2019年08月24日 22:39:58 yyl424525 阅读数 1218更多 分类专栏: 深度学习   版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/yyl424525/article/details/100058264   文章目录 …

    2023年4月6日
    00
  • 自相关函数怎么理解,为什么定义中有共轭,卷积呢。定义中的卷积,共轭有什么意义?尤其是在信号处理方面

    知乎上有解答,相当经典:https://www.zhihu.com/question/24687047   简洁地解释如下: 1) 首先我们仅考虑实信号。 自相关的直观含义就是:把一个信号平移一段距离,跟原来有多相似。 于是就有了自相关的定义: 它代表了“移、乘、积”这三步操作。   如果只谈自相关,其实到此就可以结束了。 只不过,在信号处理领域中还有一个叫…

    2023年4月5日
    00
  • 手写数字识别-卷积神经网络cnn(06-2)

    卷积和池化在深度学习中的作用是对图像和文本信息提取特征的常用方式,特别是在分类领域 卷积:通过不同的卷积核与图像或文本数据矩阵 进行矩阵相乘,得到不同特征的若干组训练特征数据 池化:池化通常有两种最大池化(max-pooling)和平均池化,最大池化就是在一块矩阵区域(比如2X2,4个像素点),取最大的那个值作为输出,平均池化就是取四个像素点的平均值作为输出…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部