Merge with master, works with Jetpack 4.3

Signed-off-by: xavier <micaelaverucchi@gmail.com>
This commit is contained in:
xavier
2020-01-15 19:24:19 +01:00
10 changed files with 59 additions and 35 deletions
+3 -9
View File
@@ -18,17 +18,11 @@ find_package(CUDA 9.0 REQUIRED)
SET(CUDA_SEPARABLE_COMPILATION ON) SET(CUDA_SEPARABLE_COMPILATION ON)
#set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -arch=sm_30 --compiler-options '-fPIC'") #set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -arch=sm_30 --compiler-options '-fPIC'")
# compile Discovery only if TensorRT is installed find_package(CUDNN 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()
# compile # compile
file(GLOB tkdnn_CUSRC "src/kernels/*.cu") 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}) cuda_add_library(kernels SHARED ${tkdnn_CUSRC})
@@ -43,7 +37,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DOPENCV")
# Build Libraries # Build Libraries
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
file(GLOB tkdnn_SRC "src/*.cpp") 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") 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}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} ${OPENCV_INCLUDE_DIRS} ${NVINFER_INCLUDES})
+4 -5
View File
@@ -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. 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: this branch actually work on every NVIDIA GPU that support the dependencies:
* CUDA 9 * CUDA 10.0
* CUDNN 7.105 * CUDNN 7.603
* TENSORRT 4.02 * TENSORRT 6.01
* OPENCV 4.1
## Workflow ## Workflow
The recommended workflow follow these step: The recommended workflow follow these step:
@@ -48,5 +49,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 # launch detection on a demo video
./yolo3_demo yolo3_berkeley.rt /dev/video0 # launch detection on device 0 ./yolo3_demo yolo3_berkeley.rt /dev/video0 # launch detection on device 0
``` ```
+33
View File
@@ -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/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/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)
+5 -11
View File
@@ -4,27 +4,21 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 -fPIC")
find_package(CUDA REQUIRED) find_package(CUDA REQUIRED)
find_package(OpenCV REQUIRED) find_package(OpenCV REQUIRED)
find_library(NVINFER NAMES nvinfer) find_package(CUDNN REQUIRED)
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()
set(tkDNN_INCLUDE_DIRS set(tkDNN_INCLUDE_DIRS
${CUDA_INCLUDE_DIRS} ${CUDA_INCLUDE_DIRS}
${OPENCV_INCLUDE_DIRS} ${OPENCV_INCLUDE_DIRS}
${NVINFER_INCLUDES} ${CUDNN_INCLUDE_DIRS}
) )
set(tkDNN_LIBRARIES set(tkDNN_LIBRARIES
tkDNN tkDNN
kernels kernels
${CUDA_LIBRARIES} ${CUDA_LIBRARIES}
${CUDA_CUBLAS_LIBRARIES} ${CUDA_CUBLAS_LIBRARIES}
-lcudnn ${CUDNN_LIBRARIES}
-lnvinfer ${OpenCV_LIBS}
${OpenCV_LIBS}
) )
set(tkDNN_FOUND true) set(tkDNN_FOUND true)
+4 -3
View File
@@ -7,6 +7,7 @@
#include <opencv2/core/core.hpp> #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp> #include <opencv2/highgui/highgui.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/imgproc/imgproc.hpp>
#include "Yolo3Detection.h" #include "Yolo3Detection.h"
@@ -46,9 +47,9 @@ int main(int argc, char *argv[]) {
cv::VideoWriter resultVideo; cv::VideoWriter resultVideo;
if(SAVE_RESULT) { if(SAVE_RESULT) {
int w = cap.get(CV_CAP_PROP_FRAME_WIDTH); int w = cap.get(cv::CAP_PROP_FRAME_WIDTH);
int h = cap.get(CV_CAP_PROP_FRAME_HEIGHT); int h = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
resultVideo.open("result.mp4", CV_FOURCC('M','P','4','V'), 30, cv::Size(w, h)); resultVideo.open("result.mp4", cv::VideoWriter::fourcc('M','P','4','V'), 30, cv::Size(w, h));
} }
cv::Mat frame; cv::Mat frame;
+2
View File
@@ -26,6 +26,8 @@ enum layerType_t {
LAYER_YOLO LAYER_YOLO
}; };
#define TKDNN_BN_MIN_EPSILON 1e-5
/** /**
Simple layer Father class Simple layer Father class
*/ */
+1 -1
View File
@@ -113,7 +113,7 @@ void Conv2d::inferCUDNN(dnnType* srcData, bool back) {
dstTensorDesc, dstData, dstTensorDesc, dstTensorDesc, dstData, dstTensorDesc,
dstData, biasTensorDesc, //same tensor descriptor as bias dstData, biasTensorDesc, //same tensor descriptor as bias
scales_d, bias_d, mean_d, variance_d, scales_d, bias_d, mean_d, variance_d,
CUDNN_BN_MIN_EPSILON) ); TKDNN_BN_MIN_EPSILON) );
} }
} }
+1 -1
View File
@@ -124,7 +124,7 @@ dnnType* DeformConv2d::infer(dataDim_t &dim, dnnType* srcData) {
dstTensorDesc, dstData, dstTensorDesc, dstTensorDesc, dstData, dstTensorDesc,
dstData, biasTensorDesc, //same tensor descriptor as bias dstData, biasTensorDesc, //same tensor descriptor as bias
scales_d, bias_d, mean_d, variance_d, scales_d, bias_d, mean_d, variance_d,
CUDNN_BN_MIN_EPSILON) ); TKDNN_BN_MIN_EPSILON) );
} }
//update data dimensions //update data dimensions
+1 -1
View File
@@ -35,7 +35,7 @@ LayerWgs::LayerWgs(Network *net, int inputs, int outputs,
seek += outputs; seek += outputs;
readBinaryFile(weights_path.c_str(), outputs, &variance_h, &variance_d, seek, net->dontLoadWeights); readBinaryFile(weights_path.c_str(), outputs, &variance_h, &variance_d, seek, net->dontLoadWeights);
float eps = CUDNN_BN_MIN_EPSILON; float eps = TKDNN_BN_MIN_EPSILON;
power_h = new dnnType[outputs]; power_h = new dnnType[outputs];
for(int i=0; i<outputs; i++) power_h[i] = 1.0f; for(int i=0; i<outputs; i++) power_h[i] = 1.0f;
+5 -4
View File
@@ -18,10 +18,6 @@ Network::Network(dataDim_t input_dim) {
dataType = CUDNN_DATA_FLOAT; dataType = CUDNN_DATA_FLOAT;
tensorFormat = CUDNN_TENSOR_NCHW; tensorFormat = CUDNN_TENSOR_NCHW;
dontLoadWeights = false; dontLoadWeights = false;
checkCUDNN( cudnnCreate(&cudnnHandle) );
checkERROR( cublasCreate(&cublasHandle) );
num_layers = 0; num_layers = 0;
fp16 = false; fp16 = false;
@@ -39,6 +35,11 @@ Network::Network(dataDim_t input_dim) {
std::cout<<COL_REDB<<"!! FP16 INERENCE ENABLED !!"<<COL_END<<"\n"; std::cout<<COL_REDB<<"!! FP16 INERENCE ENABLED !!"<<COL_END<<"\n";
if(dla) if(dla)
std::cout<<COL_GREENB<<"!! DLA INERENCE ENABLED !!"<<COL_END<<"\n"; std::cout<<COL_GREENB<<"!! DLA INERENCE ENABLED !!"<<COL_END<<"\n";
checkCUDNN( cudnnCreate(&cudnnHandle) );
checkERROR( cublasCreate(&cublasHandle) );
} }
Network::~Network() { Network::~Network() {