Open arkerman opened 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
这几天找了些资料尝试了下,总结了下面的步骤能不借助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
。
这几天找了些资料尝试了下,总结了下面的步骤能不借助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中使用这个吗
@ningjianfeng 对的
@ningjianfeng 对的
你是不使用cmake命令配置然后也能转engine并使用吗
@ningjianfeng 对的
你是不使用cmake命令配置然后也能转engine并使用吗
转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境
@ningjianfeng 对的
你是不使用cmake命令配置然后也能转engine并使用吗
转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境
奥奥,这几天我是一直按照cmake形式编译,但是没有makefile文件产生,导致无法使用make编译。不知道怎么搞了,还有,您使用的那个项目能给我一份吗?我参照着改一下我的项目,通过您这种方式。
@ningjianfeng 对的
你是不使用cmake命令配置然后也能转engine并使用吗
转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境
奥奥,这几天我是一直按照cmake形式编译,但是没有makefile文件产生,导致无法使用make编译。不知道怎么搞了,还有,您使用的那个项目能给我一份吗?我参照着改一下我的项目,通过您这种方式。
我那个项目删除了。你可以按照我这个issue的步骤配一下环境,基本能成功,我这个一步一步写的挺清楚的。
@ningjianfeng 对的
你是不使用cmake命令配置然后也能转engine并使用吗
转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境
奥奥,这几天我是一直按照cmake形式编译,但是没有makefile文件产生,导致无法使用make编译。不知道怎么搞了,还有,您使用的那个项目能给我一份吗?我参照着改一下我的项目,通过您这种方式。
我那个项目删除了。你可以按照我这个issue的步骤配一下环境,基本能成功,我这个一步一步写的挺清楚的。
ok
@ningjianfeng 对的
你是不使用cmake命令配置然后也能转engine并使用吗
转engine文件CMAKE没啥关系吧。得到engine不是由pt->wts->engine么。cmake只是搭建好C++工程环境
奥奥,这几天我是一直按照cmake形式编译,但是没有makefile文件产生,导致无法使用make编译。不知道怎么搞了,还有,您使用的那个项目能给我一份吗?我参照着改一下我的项目,通过您这种方式。
我那个项目删除了。你可以按照我这个issue的步骤配一下环境,基本能成功,我这个一步一步写的挺清楚的。
ok
对了,大佬,您这是通过这种方式运行程序,您知道如果使用cmake方式进行编译,没有makefile生成的原因吗?还是说在windows中这个方式不能使用,您才采用这个不使用cmake的方式。
这个我不太清楚,之前我也用过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)
这个我不太清楚,之前我也用过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时显示网络结构有错,您是怎么解决的?另外这个如何让他能够使用摄像头检测?
你用的什么模型?
你用的什么模型? yolov5
我猜你没有把模型的大小参数加上去
./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_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
那我就不清楚了
那我就不清楚了
好吧 谢谢鸡哥
鸡哥,我在winddows部署的效果感觉是c++的版本,因为不能使用这个开源代码的yolov5trt.py文件。只能使用特定的命令,并且不能使用摄像头实时监测。
@ningjianfeng 我觉得你可能需要了解下tensortRT部署的流程,包括python代码和C++代码; 关于使用摄像头实时检测,你可以使用opencv里面的camcapture函数(是不是这个函数名我忘了,你可以搜一搜); 还有就是你需要学会去debugC++的代码,将命令行中的参数写死在代码里,这样可以摆脱特定命令行
@ningjianfeng 我觉得你可能需要了解下tensortRT部署的流程,包括python代码和C++代码; 关于使用摄像头实时检测,你可以使用opencv里面的camcapture函数(是不是这个函数名我忘了,你可以搜一搜); 还有就是你需要学会去debugC++的代码,将命令行中的参数写死在代码里,这样可以摆脱特定命令行
ok
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.
Env
About this repo
yolov5
Your problem
能不能使用vs2019新建一个空项目,单独在解决方案属性中的debug和release模式下配置环境?
我这样尝试了。
然后我把源文件和头文件加了进来
但是还是会产生报错:
我这是哪里搭建错了吗?希望得到指点