Merge with master, works with Jetpack 4.3
Signed-off-by: xavier <micaelaverucchi@gmail.com>
This commit is contained in:
+3
-9
@@ -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})
|
||||||
|
|||||||
@@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
+4
-10
@@ -4,17 +4,12 @@ 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
|
||||||
@@ -22,9 +17,8 @@ set(tkDNN_LIBRARIES
|
|||||||
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
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user