IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> windows11编译OpenCV4.5.0 with CUDA(附注意事项) -> 正文阅读

[人工智能]windows11编译OpenCV4.5.0 with CUDA(附注意事项)

windows11编译OpenCV4.5.0 with CUDA

在这里插入图片描述

从OpenCV4.2.0 版本开始允许使用 Nvidia GPU 来加速推理。本文介绍最近使用windows11系统编译带CUDA的OpenCV4.5.0的过程。

  • 文中使用【特别注意:…】为大家标识出容易出错的地方。
  • 安装成功后,使用CPU与GPU调用yolov4模型进行推理的耗时测试结果:
GPUCPU
4ms311ms
  • 从差距上看,还是值得花时间编译一下的:)
  • 耗时测试环境:
    • 调用笔记本自带摄像头获取视频
    • Notebook GTX3080显卡

1.准备环境

1.1 下载OpenCV4.5.0

  • 编译需要OpenCV4.5.0的源码
  • 下载地址(3项可选):

    https://opencv.org/releases/
    https://github.com/opencv/opencv/releases/tag/4.5.0
    https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-vc14_vc15.exe/download

  • 下载完成后是一个exe程序,双击即可解压,解压后:
    • source文件夹就是源码
    • build文件夹是编译好的不带CUDA加速的OpenCV4.5.0(本文不使用)

1.2 下载OpenCV4.5.0 contrib

  • Contrib Modules是OpenCV的扩展模块,包含了很多用于实现特定算法
  • 编译OpenCV需要用到contirb模块
  • 特别注意:务必下载与源码对应版本的contrib模块
  • 下载地址(第1个为官方下载地址,第2个为国内某同学搭建的下载库,速度较快):

    https://github.com/opencv/opencv_contrib/tags
    https://www.raoyunsoft.com/opencv/opencv_contrib/opencv_contrib-4.5.0.zip

1.3 准备.cache文件

  • 编译过程中需要联网下载一些依赖库,并存放于sourc.cache文件夹中
  • 特别注意:因要连到外网,因此速度比较慢,有时断网造成编译失败,所以可以提前准备好这些文件
  • OpenCV4.5.0的.cache文件下载地址:

    https://download.csdn.net/download/iracer/85695997

  • 使用方法:
    • 将.cache文件夹拷贝到source文件夹下,与原.cache文件夹合并

1.4 安装Visual Studio 2019

  • 安装CUDA需要vs,这里选择vs2019
  • 安装步提要:
  • Download Visual Studio 2019 Community Edition
  • Select Desktop Development with C++ option and click on install

1.5 安装CUDA和cuDNN

  • NVIDIA官方指南:

    https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#install-windows

  • 本次在windows11上安装的CUDA和cuDNN版本为:
  • CUDA 11.3:cuda_11.3.1_465.89_win10.exe
  • duDNN 8.4:cudnn-windows-x86_64-8.4.0.27_cuda11.6-archive.zip
  • 特别注意:zlib库需要下载并添加到系统环境变量path中,因为cdDNN需要调用该库。
  • zlib库下载地址:

    www.winimage.com/zLibDll/zlib123dllx64.zip
    下载完成后解压zip文件,并将zlibwapi.dll所在目录添加到系统环境变量path

  • 查看CUDA安装结果:
C:\Users\irace>nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:41:42_Pacific_Daylight_Time_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0

1.6 安装CMake

  • 本次是用的是3.22版本,3.19以上版本应该都可以(未逐一测试)
  • 下载地址:

    https://github.com/Kitware/CMake/releases/download/v3.22.5/cmake-3.22.5-windows-x86_64.msi

2. 编译

2.1 CMake生成解决方案

  • 双击解压OpenCV4.5.0.exe,解压后的source目录即OpenCV4.5.0的源码

  • 解压opencv_contrib-4.5.0

  • 新建一个编译目录

    D:\opencv\oepncv4.5.0cuda\build

  • 打开CMake

  • 配置source code:

    D:/opencv/opencv4.5.0/sources

  • 配置目标目录:

    D:\opencv\oepncv4.5.0cuda\build

  • 第1次点击[Configure]

  • 弹出窗口选择vs2019作为编译器:

    Visual Studio 16 2019

  • generate平台选择x64

  • 第2次点击[Configure]后,搜cuda带cuda的都勾选,

    • BUILD_CUDA_STUBS
    • BUILD_opencv_cudaarithm
    • BUILD_opencv_cudabgsegm
    • BUILD_opencv_cudacodec
    • BUILD_opencv_cudafeatures2d
    • BUILD_opencv_cudafilters
    • BUILD_opencv_cudaimgproc
    • BUILD_opencv_cudalegacy
    • BUILD_opencv_cudaobjdetect
    • BUILD_opencv_cudaoptflow
    • BUILD_opencv_cudastereo
    • BUILD_opencv_cudawarping
    • 除此之外此外以下两项数学加速选项也勾选:
    • CUDA_FAST_MATH
    • ENABLE_FAST_MATH勾选好后
    • CMake界面上Search栏搜modules,设置contrib模块路径

    D:\opencv\oepncv4.5.0cuda\opencv_contrib-4.5.0\modules

  • 第3次点击[Configure],完成后,再次搜索cuda,配置CUDA_ARCH_BIN中将显卡的算力内容改成自己显卡的算力,t如下网址查询自己显卡的算力,我保留了7.5;8.0;8.6

    GeForce 笔记本

    GPUCompute Capability
    GeForce RTX 30808.6
    GeForce RTX 30708.6
    GeForce RTX 30608.6
    GeForce RTX 3050 Ti8.6
    GeForce RTX 30508.6
    Geforce RTX 20807.5
    Geforce RTX 20707.5
    Geforce RTX 20607.5
    GeForce GTX 10806.1
    GeForce GTX 10706.1
    GeForce GTX 10606.1

    GeForce and TITAN 台式机

    GPUCompute Capability
    Geforce RTX 3060 Ti8.6
    Geforce RTX 30608.6
    GeForce RTX 30908.6
    GeForce RTX 30808.6
    GeForce RTX 30708.6
    GeForce GTX 1650 Ti7.5
    NVIDIA TITAN RTX7.5
    Geforce RTX 2080 Ti7.5
    Geforce RTX 20807.5
    Geforce RTX 20707.5
    Geforce RTX 20607.5
    NVIDIA TITAN V7.0
  • 搜索并勾选

    BUILD_opencv_world,可生成一个整的dll方便使用

    OPENCV_ENABLE_NONFREF

  • 解压.cache.rar,将.cache目录拷贝到source目录:

    D:\opencv\oepncv4.5.0\source\.cache >![将下载的.cache目录与source中的.cache目录合并](https://img-blog.csdnimg.cn/

  • 第4次点击[Configure]

  • 完成后,点击[Generate],完美生成:

    配置完成
    配置完成后CMake log中显示找到了CUDA和cuDNN:

    NVIDIA CUDA: YES (ver 11.3, CUFFT CUBLAS FAST_MATH)

    NVIDIA GPU arch: 75 80 86

    NVIDIA PTX archs:

    cuDNN: YES (ver 8.4.0)

  • 点击[Open Project],会自动打开vs2019,开始编译

2.2 VS2019编译OpenCV

  • 使用VS2019打开刚刚编译工程后,等待左下角显示的项全部加载完毕才可以继续操作

  • 选择Release x64版本

    在这里插入图片描述

  • 找到解决方案资源管理器中的“CmakeTargets”下的“ALL_BUILD”,右键→“生成”,然后开始漫长的等待……

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNqwu0Ta-1655631459263)(E:\software\opencv\opencv编译GPU\image-20220616221804612.png)]

  • 解决方案资源管理器—>CMakeTargets—>INSTALL—>生成”然后又是等,好在这次时间很短。完成后你的build文件夹中会出现一个install文件夹,这就是完成了。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fVI9AP2K-1655631459263)(E:\software\opencv\opencv编译GPU\image-20220617072231198.png)]

2.3 生成文件

  • 生成完成后会出现如下文件夹

    D:\opencv\oepncv4.5.0cuda\build\install

  • build/install目录的目录结构(部分)
    ├─etc
    ├─include
    │ └─opencv2
    │ ├─core
    │ ├─cudalegacy
    │ ├─cudev
    │ ├─datasets
    │ ├─dnn
    │ ├─face
    │ ├─features2d
    └─x64
    └─vc16
    ├─bin
    └─lib

  • tips:在当前目录中运行cmd,使用tree命令,即可生成目录树

D:\opencv\oepncv4.5.0cuda\build\install>tree

3. 测试

3.1 配置OpenCV with cuda

3.2 YOLOv4 示例程序

#include<opencv2\opencv.hpp>
#include<opencv2\dnn.hpp>
#include<fstream>
#include<iostream>

using namespace std;
// 检测结果后处理
void postProcess(
	cv::dnn::Net& net,
	cv::Mat& frame,
	const vector<cv::Mat>& outs,
	vector<cv::Rect>& boxes,
	vector<int>& classIds,
	vector<int>& indices,
	double confThreshold,
	double nmsThreshold
);

// 检测绘制结果
void drawPred(
	cv::Mat& frame,
	vector<cv::Rect>& boxes,
	vector<int>& classIds,
	vector<int>& indices,
	vector<string>& classNamesVec);

// 程序设置
bool USE_IMAGE = false;  // true: 测试图像; false: 测试视频
bool USE_YOLOv4 = true; // true: YOLOv4;   false: YOLOv4_tiny
bool USE_CUDA = true; // true: GPU, false: CPU

float confidenceThreshold = 0.3; // 置信度设置
float nmsThreshold = 0.2; 		  // 置信MNS门限

int main()
{
	// [1]模型文件路径设置
	cv::String model, config;
	if (USE_YOLOv4)
	{
		model = "D:/models/yolov4/yolov4.weights"; // 模型权重文件
		config = "D:/models/yolov4/yolov4.cfg";    // 模型配置文件 
	}
	else // use yolov4-tiny
	{
		model = "D:/models/yolov4/yolov4-tiny.weights";
		config = "D:/models/yolov4/yolov4-tiny.cfg";
	}
	cv::String framework = "Darknet";                     // 深度学习框架
	cv::String label_file = "D:/models/yolov4/coco.names";// 类别标签文件

	//[2] 加载类别
	ifstream classNamesFile(label_file);
	vector<string> classNamesVec;
	if (classNamesFile.is_open())
	{
		string className = "";
		while (std::getline(classNamesFile, className))
		{
			classNamesVec.push_back(className);
		}
	}
	// [3]载入模型
	cv::dnn::Net net = cv::dnn::readNet(config, model, framework);

	if (USE_CUDA)
	{
		net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
		net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
	}
	else
	{		
		net.setPreferableTarget(cv::dnn::DNN_TARGET_OPENCL);
		net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
	}

	// ...
	}

4. 相关链接

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-06-21 21:26:11  更:2022-06-21 21:26:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 1:29:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码