Git Product home page Git Product logo

Comments (21)

arkerman avatar arkerman commented on May 27, 2024 4

这几天找了些资料尝试了下,总结了下面的步骤能不借助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

from tensorrtx.

arkerman avatar arkerman commented on May 27, 2024

还有三处关于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	

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

这几天找了些资料尝试了下,总结了下面的步骤能不借助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中使用这个吗

from tensorrtx.

arkerman avatar arkerman commented on May 27, 2024

@ningjianfeng 对的

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

@ningjianfeng 对的

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

from tensorrtx.

arkerman avatar arkerman commented on May 27, 2024

@ningjianfeng 对的

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

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

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

@ningjianfeng 对的

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

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

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

from tensorrtx.

arkerman avatar arkerman commented on May 27, 2024

@ningjianfeng 对的

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

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

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

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

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

@ningjianfeng 对的

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

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

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

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

ok

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

@ningjianfeng 对的

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

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

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

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

ok

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

from tensorrtx.

arkerman avatar arkerman commented on May 27, 2024

这个我不太清楚,之前我也用过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)     

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

这个我不太清楚,之前我也用过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时显示网络结构有错,您是怎么解决的?另外这个如何让他能够使用摄像头检测?

from tensorrtx.

arkerman avatar arkerman commented on May 27, 2024

你用的什么模型?

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

你用的什么模型?
yolov5

from tensorrtx.

arkerman avatar arkerman commented on May 27, 2024

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

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

我猜你没有把模型的大小参数加上去 ./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

from tensorrtx.

arkerman avatar arkerman commented on May 27, 2024

那我就不清楚了

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

那我就不清楚了

好吧 谢谢鸡哥

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

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

from tensorrtx.

arkerman avatar arkerman commented on May 27, 2024

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

from tensorrtx.

ningjianfeng avatar ningjianfeng commented on May 27, 2024

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

ok

from tensorrtx.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.