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

时间:2022-12-14 07:15:56


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

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

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

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

链接: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)

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

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

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

二、搭建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)

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

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

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

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)

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

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

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

测试一下vs2019使用opencv4.5库

#include<opencv2\opencv.hpp>
#include<iostream>
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)

三、搭建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)

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

上述两项是安装完成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)

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

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

测试是否安装成功~

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

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

四、然后解压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)

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

五、使用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)

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

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

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

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

六、解压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)

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

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

首先在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)

(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)

七、然后下载​​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)

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

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

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

方法二、将dirent.h文件导入系统的vc安装目录中,使用库文件<dirent.h>文件导入方式  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)

然后运行生成yolov5s.engine

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

同时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)

运行结果

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

结果产生在文件夹

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

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

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

测试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 <https://github.com/pypa/pip/issues/9617>
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 <https://github.com/pypa/pip/issues/9617>
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 <DIR> .
2021/04/30 14:51 <DIR> ..
2021/04/30 14:51 <DIR> bin
2021/04/30 14:51 <DIR> data
2021/04/30 14:51 <DIR> doc
2021/04/30 14:51 <DIR> graphsurgeon
2021/04/30 14:51 <DIR> include
2021/04/30 14:51 <DIR> lib
2021/04/30 14:51 <DIR> onnx_graphsurgeon
2021/04/30 14:51 <DIR> samples
2021/04/30 14:51 <DIR> 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 <https://github.com/pypa/pip/issues/9617>
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 <https://github.com/pypa/pip/issues/9617>
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)

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

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

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

比如RTX2060是支持的

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

而GTX1060是不支持的

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

建议以下下载使用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)

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

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

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

 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 <GLFW/glfw3.h>

#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>

#include <iostream>

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)

RTX5000测试

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

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

补充 如果使用clion 调用vulkan

cmake_minimum_required(VERSION 3.16)
project(untitled15)
set(CMAKE_CXX_STANDARD 20)


set(VULKAN_ROOT_DIR "C:/VulkanSDK/1.2.162.0/Third-Party" )
#### GLM
include_directories(${VULKAN_ROOT_DIR}/glm-master)

### GLFW

include_directories(${VULKAN_ROOT_DIR}/glfw-3.3.7.bin.WIN64/include)


add_library(glfw3 STATIC IMPORTED)
set_target_properties(glfw3 PROPERTIES IMPORTED_LOCATION ${VULKAN_ROOT_DIR}/glfw-3.3.7.bin.WIN64/lib-mingw-w64/libglfw3.a)

####Vulkan
include_directories(${Vulkan_INCLUDE_DIRS})
find_package(Vulkan REQUIRED)


add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} glfw3 Vulkan::Vulkan)

测试结果是一样的

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