{"id":13643393,"url":"https://github.com/Monday-Leo/Yolov5_Tensorrt_Win10","last_synced_at":"2025-04-21T01:32:31.390Z","repository":{"id":38322345,"uuid":"477341692","full_name":"Monday-Leo/Yolov5_Tensorrt_Win10","owner":"Monday-Leo","description":"A simple implementation of tensorrt yolov5 python/c++🔥","archived":false,"fork":false,"pushed_at":"2022-08-05T10:27:30.000Z","size":3318,"stargazers_count":176,"open_issues_count":10,"forks_count":40,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-09T15:42:31.657Z","etag":null,"topics":["cpp","deployment","python","tensorrt","yolov5"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Monday-Leo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-04-03T12:56:12.000Z","updated_at":"2024-11-04T09:18:16.000Z","dependencies_parsed_at":"2022-07-12T17:24:46.503Z","dependency_job_id":null,"html_url":"https://github.com/Monday-Leo/Yolov5_Tensorrt_Win10","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Monday-Leo%2FYolov5_Tensorrt_Win10","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Monday-Leo%2FYolov5_Tensorrt_Win10/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Monday-Leo%2FYolov5_Tensorrt_Win10/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Monday-Leo%2FYolov5_Tensorrt_Win10/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Monday-Leo","download_url":"https://codeload.github.com/Monday-Leo/Yolov5_Tensorrt_Win10/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249982623,"owners_count":21355735,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","deployment","python","tensorrt","yolov5"],"created_at":"2024-08-02T01:01:46.800Z","updated_at":"2025-04-21T01:32:29.487Z","avatar_url":"https://github.com/Monday-Leo.png","language":"C++","funding_links":[],"categories":["Lighter and Deployment Frameworks","Applications"],"sub_categories":[],"readme":"## B站视频教程\n[https://www.bilibili.com/video/BV113411J7nk?p=1](https://www.bilibili.com/video/BV113411J7nk?p=1)\n\n## 项目简介\n\n- 基于**Tensorrt**加速**Yolov5 6.0**\n- 支持**Windows10**\n- 支持**Python/C++**\n\n## 环境说明\n\n- Tensorrt 8.2.1.8\n- Cuda 10.2 Cudnn 8.2.1(**特别注意需安装两个cuda10.2补丁**)\n- Opencv 3.4.6\n- Cmake 3.17.1\n- VS 2017\n- GTX1650\n\n## 运行案例(Windows)\n\n从[yolov5 release v6.0](https://github.com/ultralytics/yolov5/releases/tag/v6.0)下载.pt模型，这里以yolov5s.pt为例。下载yolov5 6.0源代码和本仓库代码\n\n```\ngit clone -b v6.0 https://github.com/ultralytics/yolov5.git\ngit clone https://github.com/Monday-Leo/Yolov5_Tensorrt_Win10\n```\n\n或直接到6.0页面download zip。\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/1.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n### 生成WTS模型\n\n将仓库中的**gen_wts.py**和刚才下载好的yolov5s.pt拷贝至yolov5 6.0的目录下\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/2.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n运行\n\n```\npython gen_wts.py -w yolov5s.pt -o yolov5s.wts\n```\n\n**-w参数为输入pt模型路径，-o参数为输出wts模型的路径。**\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/3.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n运行完毕后，yolov5目录下会生成wts模型，**这个模型用于之后转换为tensorrt专用的序列化模型。**\n\n### 配置C++依赖\n\n**Opencv**、**Tensorrt**如果已经安装完成，可以跳过下述步骤。\n\n#### Opencv配置方法\n\n1、在OpenCV官网下载适用于Windows平台的3.4.6版本 [下载地址](https://bj.bcebos.com/paddleseg/deploy/opencv-3.4.6-vc14_vc15.exe)\n\n2、运行下载的可执行文件，将OpenCV解压至指定目录，例如 `D:\\projects\\opencv`\n\n3、我的电脑-\u003e属性-\u003e高级系统设置-\u003e环境变量，在系统变量中找到Path（如没有，自行创建），并双击编辑，将opencv路径填入并保存，如`D:\\projects\\opencv\\build\\x64\\vc15\\bin`\n\n#### Tensorrt配置方法\n\n1、在tensorrt官网下载适用于Windows平台的版本 [下载地址](https://developer.nvidia.com/nvidia-tensorrt-download)\n\n2、将TensorRT/lib下所有lib复制到cuda/v10.2/lib/x64下，将TensorRT/lib下所有dll复制到cuda/v10.2/bin下,将TensorRT/include下所有.h文件复制到cuda/v10.2/include下\n\n3、我的电脑-\u003e属性-\u003e高级系统设置-\u003e环境变量，在系统变量中找到Path（如没有，自行创建），并双击编辑，将TensorRT/lib路径填入并保存，如`G:\\c++\\TensorRT-8.2.1.8\\lib`\n\n打开本仓库的**CMakeLists.txt**，修改**Opencv**、**Tensorrt**、**dirent.h**的目录，**其中dirent.h在本仓库的include中**，须**绝对路径**。修改`arch=compute_75;code=sm_75`，参考[https://developer.nvidia.com/zh-cn/cuda-gpus](https://developer.nvidia.com/zh-cn/cuda-gpus)，我的GPU为GTX1650，计算能力7.5，所以这边设置为`arch=compute_75;code=sm_75`。\n\n```\ncmake_minimum_required(VERSION 2.6)\n\nproject(yolov5) \n\n#change to your own path\n##################################################\nset(OpenCV_DIR \"G:\\\\c++\\\\paddle_test\\\\opencv\\\\build\")  \nset(TRT_DIR \"G:\\\\c++\\\\TensorRT-8.2.1.8\")  \nset(Dirent_INCLUDE_DIRS \"C:\\\\Users\\\\LHY\\\\Desktop\\\\yolov5\\\\tensorrt\\\\include\")\n##################################################\n\nadd_definitions(-std=c++11)\nadd_definitions(-DAPI_EXPORTS)\noption(CUDA_USE_STATIC_CUDA_RUNTIME OFF)\nset(CMAKE_CXX_STANDARD 11)\nset(CMAKE_BUILD_TYPE Debug)\n\nset(THREADS_PREFER_PTHREAD_FLAG ON)\nfind_package(Threads)\n\n# setup CUDA\nfind_package(CUDA REQUIRED)\nmessage(STATUS \"    libraries: ${CUDA_LIBRARIES}\")\nmessage(STATUS \"    include path: ${CUDA_INCLUDE_DIRS}\")\ninclude_directories(${CUDA_INCLUDE_DIRS})\ninclude_directories(${Dirent_INCLUDE_DIRS}) \n\n#change to your GPU own compute_XX\n###########################################################################################\nset(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-std=c++11;-g;-G;-gencode;arch=compute_75;code=sm_75)\n###########################################################################################\n\n####\nenable_language(CUDA)  # add this line, then no need to setup cuda path in vs\n####\ninclude_directories(${PROJECT_SOURCE_DIR}/include)\ninclude_directories(${TRT_DIR}\\\\include)\n\n# -D_MWAITXINTRIN_H_INCLUDED for solving error: identifier \"__builtin_ia32_mwaitx\" is undefined\nset(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Ofast -D_MWAITXINTRIN_H_INCLUDED\")\n\n# setup opencv\nfind_package(OpenCV QUIET\n    NO_MODULE\n    NO_DEFAULT_PATH\n    NO_CMAKE_PATH\n    NO_CMAKE_ENVIRONMENT_PATH\n    NO_SYSTEM_ENVIRONMENT_PATH\n    NO_CMAKE_PACKAGE_REGISTRY\n    NO_CMAKE_BUILDS_PATH\n    NO_CMAKE_SYSTEM_PATH\n    NO_CMAKE_SYSTEM_PACKAGE_REGISTRY\n)\n\nmessage(STATUS \"OpenCV library status:\")\nmessage(STATUS \"    version: ${OpenCV_VERSION}\")\nmessage(STATUS \"    libraries: ${OpenCV_LIBS}\")\nmessage(STATUS \"    include path: ${OpenCV_INCLUDE_DIRS}\")\n\ninclude_directories(${OpenCV_INCLUDE_DIRS})\nlink_directories(${TRT_DIR}\\\\lib)\n\nadd_executable(yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h ${PROJECT_SOURCE_DIR}/preprocess.cu) \n\ntarget_link_libraries(yolov5 \"nvinfer\" \"nvinfer_plugin\")  \ntarget_link_libraries(yolov5 ${OpenCV_LIBS})     \ntarget_link_libraries(yolov5 ${CUDA_LIBRARIES})  \ntarget_link_libraries(yolov5 Threads::Threads)     \n```\n\n### Cmake过程\n\n在本仓库目录下新建一个**build**文件夹\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/4.png\" width=\"800\"\u003e\n\u003c/div\u003e\n打开Cmake,选择本仓库目录，以及新建的**build**目录，再点击左下方**configure**按钮。\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/5.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n选择自己的Visual Studio版本，如2017，第二个框中选择x64，之后点击finish\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/6.png\" width=\"400\"\u003e\n\u003c/div\u003e\n\n会自动加载CMakeLists.txt，添加库，正常运行如下\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/7.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n若出现红色警告，则需要修改框中信息。例如，**未找到cuda目录，则需要点击上图红色框，添加上自己的cuda路径**，再点击configure。一切正常之后点击generate，最后点击open project。\n\n### 编译\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/8.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n打开项目后，在左侧解决方案资源管理器中，一次展开yolov5,header files,打开yololayer.h文件，特别注意修改文件中的\n\n```\nstatic constexpr int CLASS_NUM = 80;\nstatic constexpr int INPUT_H = 640;  // yolov5's input height and width must be divisible by 32.\nstatic constexpr int INPUT_W = 640;\n```\n\n**修改为自己的模型类别数，输入大小，若没有修改，会运行报错！！**\n\n将界面上方Debug改为Release，右键yolov5项目，点击重新生成。\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/9.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n编译成功，没有报错！编译成功后打开build/Release，可以看到生成的exe可执行文件。\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/10.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n### C++运行\n\n将第一步生成的yolov5s.wts模型复制到exe的文件夹中，在这个目录下打开cmd输入\n\n```\nyolov5 -s yolov5s.wts yolov5s.engine s\n```\n\n**我们这边使用的是s模型，最后则输入s，同理若为m模型，最后一个参数则需要改成m**\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/11.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n正常运行，此时程序在将wts转换为engine序列化模型，需要等待预计**10-20分钟**左右。生成engine完成后，会在文件夹下出现yolov5s.engine模型。将本仓库的**pictures文件夹复制到exe文件夹下**，尝试预测是否正确，输入：\n\n```\nyolov5 -d yolov5s.engine ./pictures\n```\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/12.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n查看保存的图片，受否输出正确的框。\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/13.jpg\" width=\"400\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/14.jpg\" width=\"800\"\u003e\n\u003c/div\u003e\n\n### Python部署\n\n在C++部署正确之后，尝试使用python部署。**C++的代码预测只能通过文件夹内的图片**，对于**视频流或摄像头**预测需要修改代码，且目前**很多项目都是基于python语言完成**，故本仓库提供了**python**的部署方法。在刚才的C++工程中右键yolov5，点击属性。\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/15.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n修改上述图片两行，都改为**DLL**，第一个需要手动输入。右键项目，重新生成，文件夹下会出现**yolov5.dll**，将本仓库的**python_trt.py**复制到dll文件夹下。\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/16.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n设置模型路径，**dll**路径和想要预测的图片路径，**特别注意模型路径需要加b''！！**\n\n```\ndet = Detector(model_path=b\"./yolov5s.engine\",dll_path=\"./yolov5.dll\")  # b'' is needed\nimg = cv2.imread(\"./pictures/zidane.jpg\")\n```\n\n直接运行**python_trt.py**即可，**python**预测的最大优势在于支持了**numpy**格式的图片，极易融合进项目中。\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"assets/17.png\" width=\"800\"\u003e\n\u003c/div\u003e\n\n## 参考资料\n\nhttps://github.com/wang-xinyu/tensorrtx/tree/master/yolov5\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMonday-Leo%2FYolov5_Tensorrt_Win10","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMonday-Leo%2FYolov5_Tensorrt_Win10","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMonday-Leo%2FYolov5_Tensorrt_Win10/lists"}