41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)

基本思想:随手记录一下在window10系统上部署TensorRT+YOLO5,尽量详细一些;

注意:驱动版本全部更新到11.1,否则在跑类似的实例分割,存在cuda和torch版本不匹配问题,安装过程根据自己实际安装版本设置路径

首先提供一下本环境安装的安装包

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第1张图片

链接:https://pan.baidu.com/s/1M6ynp6soWRFTH0JzbmDJ5g 
提取码:8cc4 
复制这段内容后打开百度网盘手机App,操作更方便哦

一、【Visual Studio下载】2021年最新官方正式版Visual Studio免费下载 - 腾讯软件中心官网 去腾讯软件中心下载vs2019进行安装

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第2张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第3张图片

安装完成之后,先写一个hello world 试试是否可以使用~ 

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第4张图片

二、搭建OpenCV库 Download OpenCV from SourceForge.net

(1)安装opencv之后进行解压到C盘,在创建的工程项目名字下点击属性选项--》添加一下配置(X64)

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第5张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第6张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第7张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第8张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第9张图片

(2)然后设置一下调试的选项卡

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第10张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第11张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第12张图片

(3)opencv文件目录下的\opencv\build\x64\vc15\bin中的三个dll文件,拷贝到C:\Windows\System32 中

测试一下vs2019使用opencv4.5库

#include
#include
using namespace std;
using namespace cv;
int main()
{
	Mat src = imread("C:\\Users\\Administrator\\Desktop\\0.jpg");
	if (src.empty())
	{
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("opencv setup demo", WINDOW_AUTOSIZE);
	imshow("opencv setup demo", src);
	namedWindow("output window", WINDOW_AUTOSIZE);
	Mat output_image;
	cvtColor(src, output_image, COLOR_BGR2HLS);
	imshow("output window", output_image);
	imwrite("C:/Users/asus/Desktop/tupian/3.jpg", output_image);
	waitKey(0);
	return 0;

}

效果图

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第13张图片

三、搭建CUDA和cuDNN环境  https://developer.nvidia.com/zh-cn/cuda-downloads

(1)先打开【控制面板】卸载掉cuda**.0 ,
只保留 【NVIDIA的图形驱动程序、NVIDIA Physx系统软件,NVIDIA GeForce Experience】,如果你有这3个软件,就别卸载。

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第14张图片

选择精简模式直接点击安装即可~

上述两项是安装完成Cuda后,已自动生成的环境变量的配置,我们需要自行添加的下述变量:

CUDA_BIN_PATH: %CUDA_PATH%\bin
CUDA_LIB_PATH: %CUDA_PATH%\lib\x64
CUDA_SDK_PATH: C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.1
CUDA_SDK_BIN_PATH: %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH: %CUDA_SDK_PATH%\common\lib\x64
并在系统变量Path中,添加一下四个信息:

%CUDA_BIN_PATH%
%CUDA_LIB_PATH%
%CUDA_SDK_BIN_PATH%
%CUDA_SDK_LIB_PATH%
 

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第15张图片

在cmd中进行命令行验证一下

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第16张图片

测试是否安装成功~

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第17张图片

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第18张图片

四、然后解压cudnn文件,复制到对应的cuda文件夹中,将cudnn文件夹合并cuda中,并添加环境变量

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib\x64

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第19张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第20张图片

五、使用Visual studio 2019 测试

#include "stdio.h"

/*
修饰符__global__表明这个函数是将会从CPU中调用,在GPU中进行执行。
并借此函数来启动内核函数。
*/
__global__ void hello_world_from_gpu(void)
{
	printf("Hello World from GPU\n");
	return;
}

int main(void)
{
	printf("Hello World from CPU\n");

	hello_world_from_gpu <<<1, 5 >>> ();
	/*
	三重尖括号里的参数表明的是相关的执行配置,用来表明使用多少线程来执行内核函数,
	在本例子中有5个GPU线程被系统所调用。
	*/
	cudaDeviceReset();
	/*
	执行完成后调用cudaDeviceReset()函数释放和清空与当前进程运行相关的资源。
	*/
	return 0;
}

(1)工具–>选项–>文本编辑器–>文件拓展名, 新增扩展名 .cu 并将编辑器设置为:Microsoft Visual C++。

(2)工具–>选项–>项目和解决方案–>VC++项目设置,添加要包括的扩展名".cu"。

##############

如果没有列表中没有,点击 “查找现有的”。   在cuda的安装目录下:

默认安装的,一般在: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\extras\visual_studio_integration\MSBuildExtensions

添加进来就行, 然后选择,确定。

或者在 工具=》选项=》项目和解决方案=》vc++项目设置=》生成自定义搜索路径 填上 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\extras\visual_studio_integration\MSBuildExtensions

############

(3)配置生成自定义:右键打开的项目–>生成依赖项–>生成自定义–>勾选CUDA v11.0。(右击 项目名 project1 )(注意要写英文文件名.cpp)

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第21张图片

(4)配置.cu文件的配置属性:右键点击.cu文件–>将该类型文件的属性设置为 CUDA c/c++。(右击 源.cpp)(注意要写英文文件名.cpp)

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第22张图片

测试成功(注意工程名和源文件名字不要含有中文,我写的中文无法编译,改成英文就可以了~)

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第23张图片

六、解压tensorRT 到C盘,添加环境变量,同时将tensorRT对应lib下的.dll拷贝到CUDA的目录下 https://developer.nvidia.com/nvidia-tensorrt-download

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第24张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第25张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第26张图片

首先在cmd命令窗口执行

cd /TensorRT-7.0.0.11/data/mnist

python download_pgms.py

然后使用vs2019 打开

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第27张图片

(1)将D:\TensorRT-7.2.3.4\include加入C/C++ --> 常规 --> 包含目录

  (2)    将D:\TensorRT-7.2.3.4\lib加入 VC++目录–>库目录

 (3)   将下述lib文件名字加入链接器–>输入–>附加依赖项

nvinfer.lib
nvinfer_plugin.lib
nvonnxparser.lib
nvparsers.lib
cudart.lib
cudart_static.lib

执行即可~

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第28张图片

七、然后下载GitHub - wang-xinyu/tensorrtx: Implementation of popular deep learning networks with TensorRT network definition API

 将核心文件拖到我们创建的工程中(能支持测试CUDA程序的工程中(第一到第五步),配置一下tensorRT即可)

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第29张图片

编译过程中遇到三个问题:

(1)缺少dirent.h文件 “dirent.h”:No such file or directory

方法一、去http://github.com/tronkko/dirent下载,导入头文件中,修改代码为“dirent.h” 本地搜索模式

方法二、将dirent.h文件导入系统的vc安装目录中,使用库文件文件导入方式  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include

(2) 方法一、遇到一个common.hpp头文件,std::max 报错的问题,直接改成了c++三目表达式就ok了

        (推荐)方法二、 项目属性   ——> C/C++ ——> 预处理器 ——> 预处理器定义 (此处添加预定义编译开关   NOMINMAX)

例如,在github上存在个别的tensorRT yolo5工程存在std::max 报错的问题,可以参考下面的方法改,如果参考工程没有报错,就不用管了(比如参考本文)

float iou(float lbox[4], float rbox[4]) {
    float interBox[] = {
        std::max(lbox[0] - lbox[2]/2.f , rbox[0] - rbox[2]/2.f), //left
        std::min(lbox[0] + lbox[2]/2.f , rbox[0] + rbox[2]/2.f), //right
        std::max(lbox[1] - lbox[3]/2.f , rbox[1] - rbox[3]/2.f), //top
        std::min(lbox[1] + lbox[3]/2.f , rbox[1] + rbox[3]/2.f), //bottom
    };

    if(interBox[2] > interBox[3] || interBox[0] > interBox[1])
        return 0.0f;

    float interBoxS =(interBox[1]-interBox[0])*(interBox[3]-interBox[2]);
    return interBoxS/(lbox[2]*lbox[3] + rbox[2]*rbox[3] -interBoxS);
}

修改完

float iou(float lbox[4], float rbox[4]) {
    float x0 =  lbox[0] - lbox[2] / 2.f> rbox[0] - rbox[2] / 2.f? lbox[0] - lbox[2] / 2.f: rbox[0] - rbox[2] / 2.f;
    float x1 = lbox[0] + lbox[2] / 2.f>rbox[0] + rbox[2] / 2.f ? rbox[0] + rbox[2] / 2.f : lbox[0] + lbox[2] / 2.f;
    float x2= lbox[1] - lbox[3] / 2.f>rbox[1] - rbox[3] / 2.f / 2.f ? lbox[1] - lbox[3] / 2.f : rbox[1] - rbox[3] / 2.f ;
    float x3 = lbox[1] + lbox[3] / 2.f> rbox[1] + rbox[3] / 2.f ? rbox[1] + rbox[3] / 2.f : lbox[1] + lbox[3] / 2.f;
    float interBox[] = {
        x0, //left
        x1, //right
        x2, //top
        x3, //bottom
    };

    if(interBox[2] > interBox[3] || interBox[0] > interBox[1])
        return 0.0f;

    float interBoxS =(interBox[1]-interBox[0])*(interBox[3]-interBox[2]);
    return interBoxS/(lbox[2]*lbox[3] + rbox[2]*rbox[3] -interBoxS);
}

(3)遇到loggin.h文件中的 localtime 报错====》 C4996'localtime': This function or variable may be unsafe

在文件开头填入 #pragma warning(disable:4996) 就ok了

八、然后在 visual studio 2019 中设置参数:

Project ==> Properties ==> Configuration Properties ==> Debugging ==> Command Arguments

项目=>属性=>配置属性==>调试==>命令参数

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第30张图片

然后运行生成yolov5s.engine

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第31张图片

同时window10本地存在simples文件夹,我们愉快地检测吧;

九、再次在 visual studio 2019 中设置参数:

Project ==> Properties ==> Configuration Properties ==> Debugging ==> Command Arguments

项目=>属性=>配置属性==>调试==>命令参数

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第32张图片

运行结果

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第33张图片

结果产生在文件夹

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第34张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第35张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第36张图片

测试yolo5代码,首先安装torch-gpu和torchvision

pip3 install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

然后在安装tensorrt

D:\TensorRT-7.2.3.4\uff>pip3 install uff-0.6.9-py2.py3-none-any.whl
WARNING: Value for scheme.headers does not match. Please report this to 
distutils: c:\python\Include\UNKNOWN
sysconfig: c:\python\Include
WARNING: Additional context:
user = False
home = None
root = None
prefix = None
Processing c:\tensorrt-7.2.3.4\uff\uff-0.6.9-py2.py3-none-any.whl
Requirement already satisfied: numpy>=1.11.0 in c:\python\lib\site-packages (from uff==0.6.9) (1.19.5)
Requirement already satisfied: protobuf>=3.3.0 in c:\python\lib\site-packages (from uff==0.6.9) (3.15.8)
Requirement already satisfied: six>=1.9 in c:\python\lib\site-packages (from protobuf>=3.3.0->uff==0.6.9) (1.15.0)
Installing collected packages: uff
WARNING: Value for scheme.headers does not match. Please report this to 
distutils: c:\python\Include\UNKNOWN
sysconfig: c:\python\Include
WARNING: Additional context:
user = False
home = None
root = None
prefix = None
Successfully installed uff-0.6.9

D:\TensorRT-7.2.3.4\uff>cd ..
D:\TensorRT-7.2.3.4>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 D63A-D659

D:\TensorRT-7.2.3.4 的目录

2021/04/30  14:51              .
2021/04/30  14:51              ..
2021/04/30  14:51              bin
2021/04/30  14:51              data
2021/04/30  14:51              doc
2021/04/30  14:51              graphsurgeon
2021/04/30  14:51              include
2021/04/30  14:51              lib
2021/04/30  14:51              onnx_graphsurgeon
2021/04/30  14:51              samples
2021/04/30  14:51              uff
               0 个文件              0 字节
              11 个目录 404,195,282,944 可用字节
D:\TensorRT-7.2.3.4>cd graphsurgeon

D:\TensorRT-7.2.3.4\graphsurgeon>pip3 install graphsurgeon-0.4.5-py2.py3-none-any.whl
WARNING: Value for scheme.headers does not match. Please report this to 
distutils: c:\python\Include\UNKNOWN
sysconfig: c:\python\Include
WARNING: Additional context:
user = False
home = None
root = None
prefix = None
Processing c:\tensorrt-7.2.3.4\graphsurgeon\graphsurgeon-0.4.5-py2.py3-none-any.whl
Installing collected packages: graphsurgeon
WARNING: Value for scheme.headers does not match. Please report this to 
distutils: c:\python\Include\UNKNOWN
sysconfig: c:\python\Include
WARNING: Additional context:
user = False
home = None
root = None
prefix = None
Successfully installed graphsurgeon-0.4.5

选中根目录的安装的python可这执行程序目录&测试

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第37张图片41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第38张图片

首先下载GPU-z查看一下,本机GPU显卡是否支持vulkan

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第39张图片

比如RTX2060是支持的

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第40张图片

而GTX1060是不支持的

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第41张图片

建议以下下载使用motrix工具下载~

下载vulkan: https://sdk.lunarg.com/sdk/download/1.2.176.1/windows/VulkanSDK-1.2.176.1-Installer.exe

下载glfw :Download | GLFW

下载glm https://codeload.github.com/g-truc/glm/zip/refs/heads/master

下载上述三个文件包

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第42张图片

glm和glfw解压 -> vulkan目录的Third-Party中,使用VS2019 进行测试一下~

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第43张图片

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第44张图片

 VC++目录 --> 包含目录

C:\VulkanSDK\1.2.176.1\Include
C:\VulkanSDK\1.2.176.1\Third-Party\glm-master
C:\VulkanSDK\1.2.176.1\Third-Party\glfw-3.3.4.bin.WIN64\include

VC++目录--->库目录

C:\VulkanSDK\1.2.176.1\Lib
C:\VulkanSDK\1.2.176.1\Third-Party\glfw-3.3.4.bin.WIN64\lib-vc2019

链接器 -> 输入 -> 附加依赖项

glfw3.lib
vulkan-1.lib

GTX1650测试vulkan

代码

#define GLFW_INCLUDE_VULKAN
#include 

#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include 
#include 

#include 

int main() {
    glfwInit();

    glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
    GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr);

    uint32_t extensionCount = 0;
    vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);

    std::cout << extensionCount << " extensions supported" << std::endl;

    glm::mat4 matrix;
    glm::vec4 vec;
    auto test = matrix * vec;

    while (!glfwWindowShouldClose(window)) {
        glfwPollEvents();
    }

    glfwDestroyWindow(window);

    glfwTerminate();

    return 0;
}

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第45张图片

RTX5000测试

41、window10 +visual Studio 2019+CUDA11.1+cudnn11.1+TensorRT7.2.3.4+YOLO5(含安装vulkan)_第46张图片

测试可用,NCNN可以使用vulkan了

你可能感兴趣的:(C/C++基础知识,visual,studio,opencv,计算机视觉)