Skip to content

Commit eed9543

Browse files
authored
Merge pull request #83 from laugh12321/dev
Major Refactor and Optimizations
2 parents 11e4768 + 85e77f5 commit eed9543

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+5489
-4592
lines changed

.gitignore

+18-26
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,28 @@
1-
# Build Cache
2-
.xmake/
1+
# Build and compilation directories
32
build/
4-
5-
# build libs
3+
bin/
64
lib/
7-
tensorrt_yolo/libs/
5+
libs/
6+
.xmake/
7+
dist/
8+
*.egg-info/
89

9-
# VSCode Cache
10-
.vscode
10+
# IDE and editor-specific files
11+
.vscode/
1112

12-
# Python Cache
13+
# Python cache and virtual environment
1314
__pycache__/
15+
.cache/
1416
venv/
1517

16-
# python package
17-
dist/
18-
tensorrt_yolo.egg-info/
19-
tensorrt_yolo/c_lib_wrap.py
20-
21-
# output Cache
18+
# Output and generated files
2219
output/
20+
outputs/
21+
*.pt
22+
*.onnx
23+
*.engine
2324

24-
# example images
25-
examples/**/*.jpg
26-
examples/**/*.jpeg
27-
examples/**/*.png
28-
examples/**/*.gif
29-
examples/**/*.bmp
30-
examples/**/*.tiff
31-
examples/**/*.webp
25+
# Miscellaneous
26+
images/
3227

33-
# example models
34-
examples/**/*.pt
35-
examples/**/*.onnx
36-
examples/**/*.engine
28+
python/tensorrt_yolo/c_lib_wrap.py

CMakeLists.txt

+86-68
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,50 @@
11
# 设置项目
2-
cmake_minimum_required(VERSION 3.15.0) # 设置CMake的最低版本要求
3-
cmake_policy(SET CMP0091 NEW) # 允许在CMake 3.10+中自动设置项目名作为二进制目录名
4-
cmake_policy(SET CMP0146 OLD) # 忽略对find_package的过时警告
5-
project(TensorRT-YOLO VERSION 5.1.1 LANGUAGES CXX CUDA) # 定义项目名称、版本和使用的编程语言(C++和CUDA)
2+
cmake_minimum_required(VERSION 3.12)
3+
cmake_policy(SET CMP0091 NEW)
4+
project(TensorRT-YOLO VERSION 6.0.0 LANGUAGES CXX CUDA)
65

76
# 设置 C++ 标准
8-
set(CMAKE_CXX_STANDARD 17) # 设置C++标准为17
9-
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 要求C++标准必须满足17
7+
set(CMAKE_CXX_STANDARD 17)
8+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
109

11-
# 添加编译规则
12-
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 生成编译数据库,便于代码分析工具使用
10+
# 生成编译数据库,便于代码分析工具使用
11+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
1312

1413
# 添加依赖项
15-
## CUDA
16-
find_package(CUDA REQUIRED) # 查找CUDA包
17-
set(CMAKE_CUDA_ARCHITECTURES native) # 自动检测最佳CUDA架构
18-
set(CUDA_PATH ${CUDA_TOOLKIT_ROOT_DIR}) # 缓存CUDA路径
19-
20-
## Pybind11
21-
set(PYBIND11_FINDPYTHON ON) # 开启寻找Python
22-
find_package(Python COMPONENTS Interpreter Development REQUIRED) # 查找Python解释器和开发组件
23-
find_package(pybind11 CONFIG REQUIRED) # 查找pybind11包
14+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18)
15+
find_package(CUDAToolkit REQUIRED)
16+
set(CUDA_INCLUDE_DIRS ${CUDAToolkit_INCLUDE_DIRS})
17+
set(CUDA_LIBRARIES ${CUDAToolkit_LIBRARIES})
18+
else()
19+
find_package(CUDA REQUIRED)
20+
endif()
21+
set(CMAKE_CUDA_ARCHITECTURES 89;86;75;70;61) # CUDA 架构版本 8.9, 8.6, 7.5, 7.0, 6.1
2422

2523
# 添加编译选项
26-
option(TENSORRT_PATH "TensorRT Path. Example: /usr/local/tensorrt" "") # 添加编译选项,用于指定TensorRT路径
27-
# 检查 TensorRT 路径是否已设置
24+
option(TENSORRT_PATH "TensorRT Path. Example: /usr/local/tensorrt" "")
2825
if(NOT TENSORRT_PATH)
29-
message(FATAL_ERROR "TensorRT path is not set. Please specify the TensorRT path.") # 如果未设置,则报错
26+
message(FATAL_ERROR "TensorRT path is not set. Please specify the TensorRT path.")
3027
endif()
3128

32-
# 添加公共配置
29+
# 添加选项:是否编译Python版本
30+
option(BUILD_PYTHON "Build Python bindings" OFF)
31+
if(BUILD_PYTHON)
32+
message(STATUS "Python bindings will be built.")
33+
34+
# Pybind11 依赖
35+
set(PYBIND11_FINDPYTHON ON)
36+
find_package(Python COMPONENTS Interpreter Development REQUIRED)
37+
find_package(pybind11 CONFIG REQUIRED)
38+
else()
39+
message(STATUS "Python bindings will NOT be built.")
40+
endif()
41+
42+
# 配置CUDA和TensorRT的函数
3343
function(configure_cuda_trt target)
34-
# 添加CUDA定义、包含目录、链接库
3544
target_compile_definitions(${target} PRIVATE ${CUDA_DEFINITIONS})
3645
target_include_directories(${target} PRIVATE ${CUDA_INCLUDE_DIRS})
3746
target_link_libraries(${target} PRIVATE ${CUDA_cudart_LIBRARY})
3847

39-
# 添加TensorRT的包含目录、库目录、链接库
4048
target_include_directories(${target} PRIVATE ${TENSORRT_PATH}/include)
4149
target_link_directories(${target} PRIVATE ${TENSORRT_PATH}/lib)
4250
if(MSVC AND EXISTS ${TENSORRT_PATH}/lib/nvinfer_10.dll)
@@ -46,66 +54,76 @@ function(configure_cuda_trt target)
4654
endif()
4755
endfunction()
4856

57+
# 添加源文件的函数
4958
function(add_compile_files target)
50-
# 添加头文件搜索路径
51-
include_directories(${PROJECT_SOURCE_DIR}/include)
59+
include_directories(${PROJECT_SOURCE_DIR})
5260
file(GLOB_RECURSE SOURCES
53-
${PROJECT_SOURCE_DIR}/source/deploy/core/*.cpp
54-
${PROJECT_SOURCE_DIR}/source/deploy/utils/*.cpp
55-
${PROJECT_SOURCE_DIR}/source/deploy/vision/*.cpp
56-
${PROJECT_SOURCE_DIR}/source/deploy/vision/*.cu
61+
${PROJECT_SOURCE_DIR}/deploy/core/*.cpp
62+
${PROJECT_SOURCE_DIR}/deploy/utils/*.cpp
63+
${PROJECT_SOURCE_DIR}/deploy/infer/*.cpp
64+
${PROJECT_SOURCE_DIR}/deploy/infer/*.cu
65+
${PROJECT_SOURCE_DIR}/deploy/model.cpp
5766
)
58-
# 添加源文件
59-
target_sources(${target} PRIVATE ${SOURCES})
67+
target_sources(${target} PRIVATE ${SOURCES})
6068
endfunction()
6169

70+
# 设置编译选项的函数
6271
function(set_compile_options target)
63-
6472
if(MSVC)
65-
target_compile_options(${target} PRIVATE $<$<CONFIG:Release>:-O2>) # 对于MSVC,在Release模式下使用-O2优化
66-
set_property(TARGET ${target} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") # 设置MSVC运行时库
73+
target_compile_options(${target} PRIVATE $<$<CONFIG:Release>:-O2>)
74+
set_property(TARGET ${target} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
6775
else()
68-
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-O3 -flto=auto>) # 对于非MSVC,使用-O3优化和自动LTO
69-
target_link_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-O3 -flto=auto>) # 链接时同样使用-O3优化和自动LTO
76+
target_compile_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-O3 -flto=auto>)
77+
target_link_options(${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-O3 -flto=auto>)
7078
endif()
71-
7279
endfunction()
7380

7481
# 添加子目录
75-
add_subdirectory(${PROJECT_SOURCE_DIR}/plugin) # 添加插件目录
82+
add_subdirectory(${PROJECT_SOURCE_DIR}/plugin)
7683

7784
# 定义目标 deploy
78-
add_library(deploy SHARED) # 创建共享库
79-
add_compile_files(deploy) # 添加源文件
80-
configure_cuda_trt(deploy) # 配置CUDA和TensorRT
81-
set_compile_options(deploy) # 设置编译选项
82-
set_target_properties(deploy PROPERTIES OUTPUT_NAME deploy) # 设置输出名称
83-
if(MSVC)
84-
set_target_properties(deploy PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/lib) # 设置Release模式下输出目录
85-
set_target_properties(deploy PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/lib)
86-
set_target_properties(deploy PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/lib) # 设置Debug模式下输出目录
87-
set_target_properties(deploy PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/lib)
88-
else()
89-
set_target_properties(deploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib) # 设置库文件输出目录
90-
endif()
85+
add_library(deploy SHARED)
86+
add_compile_files(deploy)
87+
configure_cuda_trt(deploy)
88+
set_compile_options(deploy)
89+
set_target_properties(deploy PROPERTIES OUTPUT_NAME deploy)
9190

92-
# 定义目标 pydeploy
93-
pybind11_add_module(pydeploy ${PROJECT_SOURCE_DIR}/source/deploy/pybind/deploy.cpp) # 创建pybind11模块
94-
add_compile_files(pydeploy) # 添加源文件
95-
configure_cuda_trt(pydeploy) # 配置CUDA和TensorRT
96-
set_compile_options(pydeploy) # 设置编译选项
97-
set_target_properties(pydeploy PROPERTIES OUTPUT_NAME pydeploy) # 设置输出名称
9891
if(MSVC)
99-
set_target_properties(pydeploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/tensorrt_yolo/libs) # 设置Release模式下输出目录
100-
set_target_properties(pydeploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/tensorrt_yolo/libs) # 设置Debug模式下输出目录
92+
set_target_properties(deploy PROPERTIES
93+
RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/lib
94+
ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/lib
95+
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/lib
96+
ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/lib
97+
)
10198
else()
102-
set_target_properties(pydeploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/tensorrt_yolo/libs) # 设置库文件输出目录
99+
set_target_properties(deploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
103100
endif()
104-
set_target_properties(pydeploy PROPERTIES
105-
COMPILE_DEFINITIONS "CUDA_PATH=\"${CUDA_TOOLKIT_ROOT_DIR}\""
106-
COMPILE_DEFINITIONS "TENSORRT_PATH=\"${TENSORRT_PATH}\""
107-
) # 设置编译定义
108-
configure_file(
109-
${CMAKE_SOURCE_DIR}/tensorrt_yolo/c_lib_wrap.py.in
110-
${CMAKE_SOURCE_DIR}/tensorrt_yolo/c_lib_wrap.py
111-
) # 配置文件
101+
102+
# 定义目标 pydeploy(仅在BUILD_PYTHON为ON时编译)
103+
if(BUILD_PYTHON)
104+
pybind11_add_module(pydeploy ${PROJECT_SOURCE_DIR}/deploy/pybind.cpp)
105+
add_compile_files(pydeploy)
106+
configure_cuda_trt(pydeploy)
107+
set_compile_options(pydeploy)
108+
set_target_properties(pydeploy PROPERTIES OUTPUT_NAME pydeploy)
109+
110+
if(MSVC)
111+
set_target_properties(pydeploy PROPERTIES
112+
LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/python/tensorrt_yolo/libs
113+
LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/python/tensorrt_yolo/libs
114+
)
115+
else()
116+
set_target_properties(pydeploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/python/tensorrt_yolo/libs)
117+
endif()
118+
119+
set_target_properties(pydeploy PROPERTIES
120+
COMPILE_DEFINITIONS "CUDA_PATH=\"${CUDA_TOOLKIT_ROOT_DIR}\""
121+
COMPILE_DEFINITIONS "TENSORRT_PATH=\"${TENSORRT_PATH}\""
122+
)
123+
124+
# 配置文件
125+
configure_file(
126+
${CMAKE_SOURCE_DIR}/python/tensorrt_yolo/c_lib_wrap.py.in
127+
${CMAKE_SOURCE_DIR}/python/tensorrt_yolo/c_lib_wrap.py
128+
)
129+
endif()

0 commit comments

Comments
 (0)