wang-xinyu / tensorrtx

Implementation of popular deep learning networks with TensorRT network definition API
MIT License
7.02k stars 1.78k forks source link

不使用cmake搭建环境 #1521

Open arkerman opened 6 months ago

arkerman commented 6 months ago

Env

About this repo

yolov5

Your problem

能不能使用vs2019新建一个空项目,单独在解决方案属性中的debug和release模式下配置环境?

我这样尝试了。


VC++目录   -->  包含目录  -->  D:\libtorch_opencv_cuda\opencv460\opencv\build\include\opencv2
                         -->  D:\libtorch_opencv_cuda\opencv460\opencv\build\include
                         -->  D:\libtorch_opencv_cuda\v11.3\include
                         -->  D:\libtorch_opencv_cuda\tensorrt\include

          -->  库目录  -->  D:\libtorch_opencv_cuda\opencv460\opencv\build\x64\vc15\lib
                      -->  D:\libtorch_opencv_cuda\v11.3\lib\x64
                      -->  D:\libtorch_opencv_cuda\tensorrt\lib

连接器         -->   输入     -->   nvinfer.lib
                                   nvinfer_plugin.lib
                                   nvonnxparser.lib
                                   nvparsers.lib
                                   cublas.lib
                                   cublasLt.lib
                                   cuda.lib
                                   cudadevrt.lib
                                   cudart.lib
                                   cudart_static.lib
                                   cudnn.lib
                                   cudnn64_8.lib
                                   cudnn_adv_infer.lib
                                   cudnn_adv_infer64_8.lib
                                   cudnn_adv_train.lib
                                   cudnn_adv_train64_8.lib
                                   cudnn_cnn_infer.lib
                                   cudnn_cnn_infer64_8.lib
                                   cudnn_cnn_train.lib
                                   cudnn_cnn_train64_8.lib
                                   cudnn_ops_infer.lib
                                   cudnn_ops_infer64_8.lib
                                   cudnn_ops_train.lib
                                   cudnn_ops_train64_8.lib
                                   cufft.lib
                                   cufftw.lib
                                   curand.lib
                                   cusolver.lib
                                   cusolverMg.lib
                                   cusparse.lib
                                   nppc.lib
                                   nppial.lib
                                   nppicc.lib
                                   nppidei.lib
                                   nppif.lib
                                   nppig.lib
                                   nppim.lib
                                   nppist.lib
                                   nppisu.lib
                                   nppitc.lib
                                   npps.lib
                                   nvblas.lib
                                   nvjpeg.lib
                                   nvml.lib
                                   nvptxcompiler_static.lib
                                   nvrtc.lib
                                   OpenCL.lib
                                   opencv_world460d.lib
                                   D:\libtorch_opencv_cuda\NVIDIA Corporation\NvToolsExt\lib\x64\nvToolsExt64_1.lib

然后我把源文件和头文件加了进来

头文件-->calibrator.h
           -->config.h
           -->cuda_utils.h
           -->dirent.h
           -->logging.h
           -->macros.h
           -->model.h
           -->postprocess.h
           -->preprocess.h
           -->types.h
           -->utils.h
           -->yololayer.h

源文件-->calibrator.cpp
           -->model.cpp
           -->postprocess.cpp
           -->preprocess.cu
           -->yololayer.cu
           -->yolov5_det.cpp

但是还是会产生报错:

严重性 代码  说明  项目  文件  行   禁止显示状态
错误  MSB3721 命令“"D:\libtorch_opencv_cuda\v11.3\bin\nvcc.exe" -gencode=arch=compute_86,code=\"sm_86,compute_86\" --use-local-env -ccbin "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64" -x cu   -ID:\libtorch_opencv_cuda\v11.3\include -ID:\libtorch_opencv_cuda\v11.3\include  -G   --keep-dir x64\Debug  -maxrregcount=0  --machine 64 --compile -cudart static  -g  -D_DEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /Od /Fdx64\Debug\vc142.pdb /FS /Zi /RTC1 /MDd " -o x64\Debug\yololayer.cu.obj "E:\dl\c++\yolov5_trtx\yolov5_trtx\yololayer.cu"”已退出,返回代码为 1。 yolov5_trtx C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 11.3.targets  785 

我这是哪里搭建错了吗?希望得到指点

arkerman commented 6 months ago

还有三处关于yololayer的plugin的报错

严重性 代码  说明  项目  文件  行   禁止显示状态
错误      cannot define dllimport entity  yolov5_trtx E:\dl\c++\yolov5_trtx\yolov5_trtx\yololayer.cu  234 

严重性 代码  说明  项目  文件  行   禁止显示状态
错误      member "nvinfer1::YoloPluginCreator::mFC" may not be initialized    yolov5_trtx E:\dl\c++\yolov5_trtx\yolov5_trtx\yololayer.cu  234 

严重性 代码  说明  项目  文件  行   禁止显示状态
错误      cannot define dllimport entity  yolov5_trtx E:\dl\c++\yolov5_trtx\yolov5_trtx\yololayer.cu  235 
arkerman commented 6 months ago

这几天找了些资料尝试了下,总结了下面的步骤能不借助CMake就能编译通过并跑通;希望对大家有用。

ningjianfeng commented 6 months ago

这几天找了些资料尝试了下,总结了下面的步骤能不借助CMake就能编译通过并跑通;希望对大家有用。

  • 先把tensorrtx库中yolov5的代码下载下来,包括.h文件、cpp文件和.cu文件;
  • 新建一个空的C++项目,按头文件和源文件把上面下载的代码文件按现有项添加进项目;
  • 按照debug和release模式配置opencv、tensorrt和cuda环境;
  • 右击项目名称,选择生成依赖项===>生成自定义CUDA11.3target勾选上;
  • 把带有cuda代码的.cpp文件和.cu文件右击属性===>项类型===>选择CUDA C/C++
  • 右击项目名称,C/C++===>命令行添加/D _CRT_SECURE_NO_WARNINGS
  • 选择CUDA C/C++===>命令行添加%(AdditionalOptions) -std=c++11 -Xcompiler="/EHsc -Ob2"%(AdditionalOptions) -DAPI_EXPORTS
  • 链接器===>命令行添加%(AdditionalOptions) /machine:x64
  • CUDA Linker===>命令行添加-forward-unknown-to-host-compiler -Wno-deprecated-gpu-targets。 你是在windows中使用这个吗
arkerman commented 6 months ago

@ningjianfeng 对的

ningjianfeng commented 6 months ago

@ningjianfeng 对的

你是不使用cmake命令配置然后也能转engine并使用吗

arkerman commented 6 months ago

@ningjianfeng 对的

你是不使用cmake命令配置然后也能转engine并使用吗

转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境

ningjianfeng commented 6 months ago

@ningjianfeng 对的

你是不使用cmake命令配置然后也能转engine并使用吗

转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境

奥奥,这几天我是一直按照cmake形式编译,但是没有makefile文件产生,导致无法使用make编译。不知道怎么搞了,还有,您使用的那个项目能给我一份吗?我参照着改一下我的项目,通过您这种方式。

arkerman commented 6 months ago

@ningjianfeng 对的

你是不使用cmake命令配置然后也能转engine并使用吗

转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境

奥奥,这几天我是一直按照cmake形式编译,但是没有makefile文件产生,导致无法使用make编译。不知道怎么搞了,还有,您使用的那个项目能给我一份吗?我参照着改一下我的项目,通过您这种方式。

我那个项目删除了。你可以按照我这个issue的步骤配一下环境,基本能成功,我这个一步一步写的挺清楚的。

ningjianfeng commented 6 months ago

@ningjianfeng 对的

你是不使用cmake命令配置然后也能转engine并使用吗

转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境

奥奥,这几天我是一直按照cmake形式编译,但是没有makefile文件产生,导致无法使用make编译。不知道怎么搞了,还有,您使用的那个项目能给我一份吗?我参照着改一下我的项目,通过您这种方式。

我那个项目删除了。你可以按照我这个issue的步骤配一下环境,基本能成功,我这个一步一步写的挺清楚的。

ok

ningjianfeng commented 6 months ago

@ningjianfeng 对的

你是不使用cmake命令配置然后也能转engine并使用吗

转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境

奥奥,这几天我是一直按照cmake形式编译,但是没有makefile文件产生,导致无法使用make编译。不知道怎么搞了,还有,您使用的那个项目能给我一份吗?我参照着改一下我的项目,通过您这种方式。

我那个项目删除了。你可以按照我这个issue的步骤配一下环境,基本能成功,我这个一步一步写的挺清楚的。

ok

对了,大佬,您这是通过这种方式运行程序,您知道如果使用cmake方式进行编译,没有makefile生成的原因吗?还是说在windows中这个方式不能使用,您才采用这个不使用cmake的方式。

arkerman commented 6 months ago

这个我不太清楚,之前我也用过CMAKE在windows上编译成功过。这是我当时的cmakelist,你参考下:

cmake_minimum_required(VERSION 2.6)

project(yolov5) 

#change to your own path
##################################################
set(OpenCV_DIR "D:\\opencv460\\opencv\\build")  
set(TRT_DIR "E:\\TensorRT-8.2.1.1\\TensorRT-8.2.2.1")  
set(Dirent_INCLUDE_DIRS "E:\\DL_file\\Yolov5_Tensorrt_Win10-master\\include")
##################################################

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})
include_directories(${Dirent_INCLUDE_DIRS}) 

#change to your GPU own compute_XX
###########################################################################################
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-std=c++11;-g;-G;-gencode;arch=compute_86;code=sm_86)
###########################################################################################

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

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

add_executable(yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h ${PROJECT_SOURCE_DIR}/preprocess.cu) 

target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin")  
target_link_libraries(yolov5 ${OpenCV_LIBS})     
target_link_libraries(yolov5 ${CUDA_LIBRARIES})  
target_link_libraries(yolov5 Threads::Threads)     
ningjianfeng commented 6 months ago

这个我不太清楚,之前我也用过CMAKE在windows上编译成功过。这是我当时的cmakelist,你参考下:

cmake_minimum_required(VERSION 2.6)

project(yolov5) 

#change to your own path
##################################################
set(OpenCV_DIR "D:\\opencv460\\opencv\\build")  
set(TRT_DIR "E:\\TensorRT-8.2.1.1\\TensorRT-8.2.2.1")  
set(Dirent_INCLUDE_DIRS "E:\\DL_file\\Yolov5_Tensorrt_Win10-master\\include")
##################################################

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})
include_directories(${Dirent_INCLUDE_DIRS}) 

#change to your GPU own compute_XX
###########################################################################################
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-std=c++11;-g;-G;-gencode;arch=compute_86;code=sm_86)
###########################################################################################

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

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

add_executable(yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h ${PROJECT_SOURCE_DIR}/preprocess.cu) 

target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin")  
target_link_libraries(yolov5 ${OpenCV_LIBS})     
target_link_libraries(yolov5 ${CUDA_LIBRARIES})  
target_link_libraries(yolov5 Threads::Threads)     

你好,楼主,我使用您的这个代码完成了部署,但是只能使用yolov5s.pt模型,使用我自己.pt模型在wts转engine时显示网络结构有错,您是怎么解决的?另外这个如何让他能够使用摄像头检测?

arkerman commented 6 months ago

你用的什么模型?

ningjianfeng commented 6 months ago

你用的什么模型? yolov5

arkerman commented 6 months ago

我猜你没有把模型的大小参数加上去 ./yolov5_det -s [.wts] [.engine] [n/s/m/l/x/n6/s6/m6/l6/x6 or c/c6 gd gw] 这是生成engine的命令行,最后需要选一下模型大小的参数

ningjianfeng commented 6 months ago

我猜你没有把模型的大小参数加上去 ./yolov5_det -s [.wts] [.engine] [n/s/m/l/x/n6/s6/m6/l6/x6 or c/c6 gd gw] 这是生成engine的命令行,最后需要选一下模型大小的参数

我猜你没有把模型的大小参数加上去 ./yolov5_det -s [.wts] [.engine] [n/s/m/l/x/n6/s6/m6/l6/x6 or c/c6 gd gw] 这是生成engine的命令行,最后需要选一下模型大小的参数

应该不是这个我的生成命令yolov5 -s best.wts best.engine s

arkerman commented 6 months ago

那我就不清楚了

ningjianfeng commented 6 months ago

那我就不清楚了

好吧 谢谢鸡哥

ningjianfeng commented 6 months ago

鸡哥,我在winddows部署的效果感觉是c++的版本,因为不能使用这个开源代码的yolov5trt.py文件。只能使用特定的命令,并且不能使用摄像头实时监测。

arkerman commented 6 months ago

@ningjianfeng 我觉得你可能需要了解下tensortRT部署的流程,包括python代码和C++代码; 关于使用摄像头实时检测,你可以使用opencv里面的camcapture函数(是不是这个函数名我忘了,你可以搜一搜); 还有就是你需要学会去debugC++的代码,将命令行中的参数写死在代码里,这样可以摆脱特定命令行

ningjianfeng commented 6 months ago

@ningjianfeng 我觉得你可能需要了解下tensortRT部署的流程,包括python代码和C++代码; 关于使用摄像头实时检测,你可以使用opencv里面的camcapture函数(是不是这个函数名我忘了,你可以搜一搜); 还有就是你需要学会去debugC++的代码,将命令行中的参数写死在代码里,这样可以摆脱特定命令行

ok

stale[bot] commented 2 months ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.