From aa5927d8a168b44f32a13dfa0551d78594e9fe33 Mon Sep 17 00:00:00 2001 From: Francesco Gatti Date: Wed, 6 Nov 2019 14:04:23 +0100 Subject: [PATCH 1/5] findCUDNN --- CMakeLists.txt | 12 +++--------- cmake/FindCUDNN.cmake | 33 +++++++++++++++++++++++++++++++++ cmake/tkDNNConfig.cmake | 16 +++++----------- 3 files changed, 41 insertions(+), 20 deletions(-) create mode 100644 cmake/FindCUDNN.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 467e823..b4b3c38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,17 +18,11 @@ find_package(CUDA 9.0 REQUIRED) SET(CUDA_SEPARABLE_COMPILATION ON) #set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -arch=sm_30 --compiler-options '-fPIC'") -# compile Discovery only if TensorRT is installed -find_library(NVINFER NAMES nvinfer) -if(NVINFER STREQUAL "NVINFER-NOTFOUND") - set(NVINFER_INCLUDES "/usr/local/nvidia/tensorrt/include/") - link_directories(/usr/local/nvidia/tensorrt/targets/x86_64-linux-gnu/lib/ - /usr/local/cuda/targets/x86_64-linux/lib/) -endif() +find_package(CUDNN REQUIRED) # compile file(GLOB tkdnn_CUSRC "src/kernels/*.cu") -cuda_include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} ${NVINFER_INCLUDES}) +cuda_include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} ${CUDNN_INCLUDE_DIRS}) cuda_add_library(kernels SHARED ${tkdnn_CUSRC}) @@ -43,7 +37,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DOPENCV") # Build Libraries #------------------------------------------------------------------------------- file(GLOB tkdnn_SRC "src/*.cpp") -set(tkdnn_LIBS kernels ${CUDA_LIBRARIES} ${CUDA_CUBLAS_LIBRARIES} -lcudnn -lnvinfer ${OpenCV_LIBS}) +set(tkdnn_LIBS kernels ${CUDA_LIBRARIES} ${CUDA_CUBLAS_LIBRARIES} ${CUDNN_LIBRARIES} ${OpenCV_LIBS}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} ${OPENCV_INCLUDE_DIRS} ${NVINFER_INCLUDES}) diff --git a/cmake/FindCUDNN.cmake b/cmake/FindCUDNN.cmake new file mode 100644 index 0000000..0e99052 --- /dev/null +++ b/cmake/FindCUDNN.cmake @@ -0,0 +1,33 @@ +# Find the header files + +find_path(CUDNN_INCLUDE_DIR + ${CMAKE_SYSROOT}/usr/local/include + ${CMAKE_SYSROOT}/usr/include + /usr/local/nvidia/tensorrt/include/ + NO_DEFAULT_PATH +) + +set(OLD_ROOT ${CMAKE_FIND_ROOT_PATH}) +list(APPEND CMAKE_FIND_ROOT_PATH /) +list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.7) +list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.5) +find_library(CUDNN_LIB + NAMES cudnn + PATHS + /usr/local/driveworks-2.0/targets/${CMAKE_SYSTEM_PROCESSOR}-Linux/lib + /usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/ + NO_DEFAULT_PATH +) +find_library(CUDNN_NVLIB + NAMES "nvinfer" + PATHS + /usr/local/driveworks-2.0/targets/${CMAKE_SYSTEM_PROCESSOR}-Linux/lib + /usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/ + NO_DEFAULT_PATH +) +set(CMAKE_FIND_ROOT_PATH ${OLD_ROOT}) + +set(CUDNN_LIBRARIES ${CUDNN_LIB} ${CUDNN_NVLIB}) +message("-- Found CUDNN: " ${CUDNN_LIB}) +message("-- Found NVINFER: " ${CUDNN_NVLIB}) +set(CUDNN_FOUND true) diff --git a/cmake/tkDNNConfig.cmake b/cmake/tkDNNConfig.cmake index fd06286..4dbaf21 100644 --- a/cmake/tkDNNConfig.cmake +++ b/cmake/tkDNNConfig.cmake @@ -4,27 +4,21 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 -fPIC") find_package(CUDA REQUIRED) find_package(OpenCV REQUIRED) -find_library(NVINFER NAMES nvinfer) -if(NVINFER STREQUAL "NVINFER-NOTFOUND") - set(NVINFER_INCLUDES "/usr/local/nvidia/tensorrt/include/") - link_directories(/usr/local/nvidia/tensorrt/targets/x86_64-linux-gnu/lib/ - /usr/local/cuda/targets/x86_64-linux/lib/) -endif() +find_package(CUDNN REQUIRED) set(tkDNN_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS} ${OPENCV_INCLUDE_DIRS} - ${NVINFER_INCLUDES} + ${CUDNN_INCLUDE_DIRS} ) set(tkDNN_LIBRARIES tkDNN kernels ${CUDA_LIBRARIES} - ${CUDA_CUBLAS_LIBRARIES} - -lcudnn - -lnvinfer - ${OpenCV_LIBS} + ${CUDA_CUBLAS_LIBRARIES} + ${CUDNN_LIBRARIES} + ${OpenCV_LIBS} ) set(tkDNN_FOUND true) From b218b18a02b19c4e84ef85fd312c8085b46bbdce Mon Sep 17 00:00:00 2001 From: Francesco Gatti Date: Mon, 2 Dec 2019 20:24:12 +0100 Subject: [PATCH 2/5] readme update --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index b166f63..93a7574 100644 --- a/README.md +++ b/README.md @@ -48,5 +48,3 @@ this will genereate a yolo3_berkeley.rt file that can be used for live detection ./yolo3_demo # launch detection on a demo video ./yolo3_demo yolo3_berkeley.rt /dev/video0 # launch detection on device 0 ``` - - From 6bf9179acc1f8430b5b4b3cb3f96c69f6332f84e Mon Sep 17 00:00:00 2001 From: mbosi <205839@studenti.unimore.it> Date: Thu, 12 Dec 2019 12:30:24 +0100 Subject: [PATCH 3/5] fix to drivework global path --- cmake/FindCUDNN.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/FindCUDNN.cmake b/cmake/FindCUDNN.cmake index 0e99052..f240fcb 100644 --- a/cmake/FindCUDNN.cmake +++ b/cmake/FindCUDNN.cmake @@ -14,14 +14,14 @@ list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES .so.5) find_library(CUDNN_LIB NAMES cudnn PATHS - /usr/local/driveworks-2.0/targets/${CMAKE_SYSTEM_PROCESSOR}-Linux/lib + /usr/local/driveworks/targets/${CMAKE_SYSTEM_PROCESSOR}-Linux/lib /usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/ NO_DEFAULT_PATH ) find_library(CUDNN_NVLIB NAMES "nvinfer" PATHS - /usr/local/driveworks-2.0/targets/${CMAKE_SYSTEM_PROCESSOR}-Linux/lib + /usr/local/driveworks/targets/${CMAKE_SYSTEM_PROCESSOR}-Linux/lib /usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/ NO_DEFAULT_PATH ) From 57d7743f7e950a9d72870ea811758cd156775403 Mon Sep 17 00:00:00 2001 From: xavier Date: Wed, 15 Jan 2020 09:55:10 +0100 Subject: [PATCH 4/5] Change opencv funcion call (due to OpenCV 4) Signed-off-by: xavier --- demo/demo/demo.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/demo/demo/demo.cpp b/demo/demo/demo.cpp index ac6c63d..3a9ef6e 100644 --- a/demo/demo/demo.cpp +++ b/demo/demo/demo.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include "Yolo3Detection.h" @@ -46,9 +47,9 @@ int main(int argc, char *argv[]) { cv::VideoWriter resultVideo; if(SAVE_RESULT) { - int w = cap.get(CV_CAP_PROP_FRAME_WIDTH); - int h = cap.get(CV_CAP_PROP_FRAME_HEIGHT); - resultVideo.open("result.mp4", CV_FOURCC('M','P','4','V'), 30, cv::Size(w, h)); + int w = cap.get(cv::CAP_PROP_FRAME_WIDTH); + int h = cap.get(cv::CAP_PROP_FRAME_HEIGHT); + resultVideo.open("result.mp4", cv::VideoWriter::fourcc('M','P','4','V'), 30, cv::Size(w, h)); } cv::Mat frame; From c32a0be257acb29cbe4f4ef20be1bc80027a3475 Mon Sep 17 00:00:00 2001 From: xavier Date: Wed, 15 Jan 2020 18:06:02 +0100 Subject: [PATCH 5/5] Batchnorm eps fix, works on jetpack 4.3 --- README.md | 7 ++++--- include/tkDNN/Layer.h | 2 ++ src/Conv2d.cpp | 2 +- src/LayerWgs.cpp | 2 +- src/Network.cpp | 9 +++++---- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 93a7574..3b16ec3 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,10 @@ tkDNN is a Deep Neural Network library built with cuDNN primitives specifically The main scope is to do high performance inference on already trained models. this branch actually work on every NVIDIA GPU that support the dependencies: -* CUDA 9 -* CUDNN 7.105 -* TENSORRT 4.02 +* CUDA 10.0 +* CUDNN 7.603 +* TENSORRT 6.01 +* OPENCV 4.1 ## Workflow The recommended workflow follow these step: diff --git a/include/tkDNN/Layer.h b/include/tkDNN/Layer.h index c6bee42..ee73109 100644 --- a/include/tkDNN/Layer.h +++ b/include/tkDNN/Layer.h @@ -24,6 +24,8 @@ enum layerType_t { LAYER_YOLO }; +#define TKDNN_BN_MIN_EPSILON 1e-5 + /** Simple layer Father class */ diff --git a/src/Conv2d.cpp b/src/Conv2d.cpp index 3dfdce6..b275198 100644 --- a/src/Conv2d.cpp +++ b/src/Conv2d.cpp @@ -117,7 +117,7 @@ dnnType* Conv2d::infer(dataDim_t &dim, dnnType* srcData) { dstTensorDesc, dstData, dstTensorDesc, dstData, biasTensorDesc, //same tensor descriptor as bias scales_d, bias_d, mean_d, variance_d, - CUDNN_BN_MIN_EPSILON); + TKDNN_BN_MIN_EPSILON); } //update data dimensions dim = output_dim; diff --git a/src/LayerWgs.cpp b/src/LayerWgs.cpp index f27da0f..7851164 100644 --- a/src/LayerWgs.cpp +++ b/src/LayerWgs.cpp @@ -29,7 +29,7 @@ LayerWgs::LayerWgs(Network *net, int inputs, int outputs, seek += outputs; readBinaryFile(weights_path.c_str(), outputs, &variance_h, &variance_d, seek); - float eps = CUDNN_BN_MIN_EPSILON; + float eps = TKDNN_BN_MIN_EPSILON; power_h = new dnnType[outputs]; for(int i=0; i