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

相关文章

  • MATLAB中空间滤波卷积有什么作用 – @梅子

    MATLAB中空间滤波卷积有什么作用 空间的卷积相当于频域的乘积。 可以用来提取边缘,如利用sobel 拉普拉斯算子等,这种相当于频域中的高通滤波器。还有可以滤除噪声,如中值滤波,这种相当于频域中低通滤波器。 发表于 2009-12-25 14:23  @梅子  阅读(577)  评论(0)  编辑  收藏  举报  

    卷积神经网络 2023年4月8日
    00
  • python神经网络Inception ResnetV2模型复现详解

    以下是关于“Python 神经网络 Inception ResnetV2 模型复现详解”的完整攻略,其中包含两个示例说明。 示例1:使用 TensorFlow 复现 Inception ResnetV2 模型 步骤1:导入 TensorFlow 库 import tensorflow as tf 步骤2:定义 Inception ResnetV2 模型 de…

    卷积神经网络 2023年5月16日
    00
  • 使用TensorFlow的卷积神经网络识别手写数字(2)-训练篇

      1 2 import numpy as np 3 import tensorflow as tf 4 import matplotlib 5 import matplotlib.pyplot as plt 6 import matplotlib.cm as cm 7 from tensorflow.examples.tutorials.mnist imp…

    卷积神经网络 2023年4月6日
    00
  • 以CNN(卷积神经网络)为例做情感分类(二分类)

        我是在来到NLP实验室才接触的深度学习,我们实验室入门深度学习的门槛(可以说门槛吧),是写一个分类器,在刚开始的时候自己也是看了很多的文档以及我BOSS的代码,啃了好久,一直到现在接触了很多的任务,才慢慢的算是正式入门了。也提醒正在钻研深度学习的你,多做,多思考!下面我就以CNN作为模型来做一个情感分类(在这里是二分类,因为涉及情感有两个,0表示消极…

    2023年4月6日
    00
  • 用PyTorch微调预训练卷积神经网络

    转自:http://ruby.ctolib.com/article/wiki/77331 Fine-tune pretrained Convolutional Neural Networks with PyTorch. Features Gives access to the most popular CNN architectures pretrained…

    卷积神经网络 2023年4月8日
    00
  • tensorflow 1.0 学习:卷积层

    在tf1.0中,对卷积层重新进行了封装,比原来版本的卷积层有了很大的简化。 一、旧版本(1.0以下)的卷积函数:tf.nn.conv2d conv2d( input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None ) 该函数定义在tensorflow/…

    卷积神经网络 2023年4月6日
    00
  • 图像处理基本概念——卷积,滤波,平滑

    1.图像卷积(模板) (1).使用模板处理图像相关概念:           模板:矩阵方块,其数学含义是一种卷积运算。            卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)的每个元素对应相 乘,所有乘积之和作为区域中心像素的新值。     卷积核:卷积时使用到的权用一个矩阵表示,该矩阵是一个权矩阵。  …

    2023年4月5日
    00
  • 基于Python的卷积神经网络和特征提取

    用户1737318发表于人工智能头条订阅 224 在这篇文章中: Lasagne 和 nolearn 加载MNIST数据集 ConvNet体系结构与训练 预测和混淆矩阵 过滤器的可视化 Theano层的功能和特征提取 作者:Christian S.Peron 译者:刘帝伟 摘要:本文展示了如何基于nolearn使用一些卷积层和池化层来建立一个简单的ConvN…

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