• YOLOV5 tensorRT部署以及问题解决办法


    TensorRT部署yolov5s参考博文:https://blog.csdn.net/weixin_39588099/article/details/119994675

    所有步骤几乎一样,需要记录几点:
    1、CMakeList.txt修改

    cmake_minimum_required(VERSION 2.6)
    project(yolov5)  
    set(OpenCV_DIR "F:\\yolov5_tensorRT\\opencv\\build")  #1
    set(OpenCV_INCLUDE_DIRS "F:\\yolov5_tensorRT\\opencv\\build\\include")  #2
    set(OpenCV_LIBS "F:\\yolov5_tensorRT\\opencv\\build\\x64\\vc15\\lib\\opencv_world454d.lib") #3
    set(TRT_DIR "F:\\yolov5_tensorRT\\TensorRT-8.0.3.4")  #4
    
    add_definitions(-std=c++11)
    add_definitions(-DAPI_EXPORTS)
    option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_BUILD_TYPE Debug)
    
    set(THREADS_PREFER_PTHREAD_FLAG ON)
    find_package(Threads)
    
    # setup CUDA
    find_package(CUDA REQUIRED)
    message(STATUS "    libraries: ${CUDA_LIBRARIES}")
    message(STATUS "    include path: ${CUDA_INCLUDE_DIRS}")
    
    include_directories(${CUDA_INCLUDE_DIRS})
    
    ####
    enable_language(CUDA)  # add this line, then no need to setup cuda path in vs
    ####
    include_directories(${PROJECT_SOURCE_DIR}/include)
    include_directories(${TRT_DIR}\\include)
    include_directories(F:\\yolov5_tensorRT\\tensorrtx\\include) #5
    
    
    #find_package(OpenCV)
    include_directories(${OpenCV_INCLUDE_DIRS})
    include_directories(${OpenCV_INCLUDE_DIRS}\\opencv2) #6
    
    
    # -D_MWAITXINTRIN_H_INCLUDED for solving error: identifier "__builtin_ia32_mwaitx" is undefined
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Ofast -D_MWAITXINTRIN_H_INCLUDED")
    
    # setup opencv
    find_package(OpenCV QUIET
        NO_MODULE
        NO_DEFAULT_PATH
        NO_CMAKE_PATH
        NO_CMAKE_ENVIRONMENT_PATH
        NO_SYSTEM_ENVIRONMENT_PATH
        NO_CMAKE_PACKAGE_REGISTRY
        NO_CMAKE_BUILDS_PATH
        NO_CMAKE_SYSTEM_PATH
        NO_CMAKE_SYSTEM_PACKAGE_REGISTRY
    )
    
    message(STATUS "OpenCV library status:")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
    
    include_directories(${OpenCV_INCLUDE_DIRS})
    link_directories(${TRT_DIR}\\lib) #7
    link_directories(${OpenCV_DIR}\\x64\\vc15\\lib) #8
    
    add_executable(yolov5 preprocess.cu preprocess.h ${PROJECT_SOURCE_DIR}/calibrator.cpp yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h)   #4
    target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin")   #9
    target_link_libraries(yolov5 ${OpenCV_LIBS})          #10
    target_link_libraries(yolov5 ${CUDA_LIBRARIES})   #11
    target_link_libraries(yolov5 Threads::Threads)       #12
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    2、在路径F:\yolov5_tensorRT\tensorrtx\yolov5添加preprocess.cu和preprocess.h文件
    下载链接:https://download.csdn.net/download/zhouzongzong/86340827

    3、Cmake生成文件后编译出现错误解决办法:在这里插入图片描述解决方案:
    设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Visual C++的min/max宏定义。
    vs工程属性中进行修改,“属性——c++——预处理器——预处理器定义”中加入NOMINMAX即可。

    4、重要的一点:生成引擎文件yolov5s.engine时候出现以下错误
    在这里插入图片描述
    需要更改cmake结果文件中的CLASS_NUM,和生成yolov5s.wts的python训练时候一致
    在这里插入图片描述结果展示:
    在这里插入图片描述
    [TRT] TensorRT was linked against cuBLAS/cuBLAS LT 11.5.1 but loaded cuBLAS/cuBLAS LT 11.4.2

    其中版本问题解决方案可以参考博文:
    https://blog.csdn.net/u013171226/article/details/119353781
    更改后:
    在这里插入图片描述

  • 相关阅读:
    [数据集][目标检测]旋风检测数据集VOC+YOLO格式157张1类别
    【网站架构】功能做完还要加班?性能、安全、可用性、扩展、弹缩
    【数据结构与算法】| 链表练习
    【毕业设计】基于单片机的测谎仪系统 -物联网 stm32 嵌入式
    MyBatis Generator 1.4.0 使用(基础篇)
    4、两个栈实现一个队列
    LeetCode中等题之使括号有效的最少添加
    # RocketMQ 实战:模拟电商网站场景综合案例(二)
    Bi-LSTM-Attention概述及torch实现
    Service和启动其他应用的功能和替换Fragment
  • 原文地址:https://blog.csdn.net/zhouzongzong/article/details/126212422