diff --git a/CMakeLists.txt b/CMakeLists.txt index a109c36..7392fd8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -207,9 +207,6 @@ target_link_libraries(test_shelfnet_mapillary tkDNN) add_executable(test_monodepth2 tests/monodepth2/monodepth2.cpp) target_link_libraries(test_monodepth2 tkDNN) -add_executable(test_monodepth2_new_format tests/monodepth2/monodepth2_new_format.cpp) -target_link_libraries(test_monodepth2_new_format tkDNN) - # DEMOS add_executable(test_rtinference tests/test_rtinference/rtinference.cpp) target_link_libraries(test_rtinference tkDNN) diff --git a/include/tkDNN/Layer.h b/include/tkDNN/Layer.h index 1e22216..daa27e5 100644 --- a/include/tkDNN/Layer.h +++ b/include/tkDNN/Layer.h @@ -33,7 +33,6 @@ enum layerType_t { LAYER_REGION, LAYER_YOLO, LAYER_PADDING, - LAYER_BATCHNORM }; #define TKDNN_BN_MIN_EPSILON 1e-5 @@ -90,7 +89,6 @@ public: case LAYER_REGION: return "Region"; case LAYER_YOLO: return "Yolo"; case LAYER_PADDING: return "Padding"; - case LAYER_BATCHNORM: return "BatchNorm"; default: return "unknown"; } } @@ -182,65 +180,6 @@ public: }; -class LayerBNWgs : public Layer { -public: - LayerBNWgs(Network* net, int input, int output, std::string fname_weights); - ~LayerBNWgs(); - - int inputs, outputs; - std::string weights_path; - - dnnType* bias_h, * bias_d; - dnnType* power_h = nullptr; - dnnType* scales_h = nullptr, * scales_d = nullptr; - dnnType* mean_h = nullptr, * mean_d = nullptr; - dnnType* variance_h = nullptr, * variance_d = nullptr; - - __half* bias16_h = nullptr, * bias16_d = nullptr; - __half* power16_h = nullptr, * power16_d = nullptr; - __half* scales16_h = nullptr, * scales16_d = nullptr; - __half* mean16_h = nullptr, * mean16_d = nullptr; - __half* variance16_h = nullptr, * variance16_d = nullptr; - - - void releaseHost(bool release32 = true, bool release16 = true) { - if (release32) { - if (bias_h != nullptr) { delete[] bias_h; bias_h = nullptr; } - if (scales_h != nullptr) { delete[] scales_h; scales_h = nullptr; } - if (mean_h != nullptr) { delete[] mean_h; mean_h = nullptr; } - if (variance_h != nullptr) { delete[] variance_h; variance_h = nullptr; } - if (power_h != nullptr) { delete[] power_h; power_h = nullptr; } - } - if (net->fp16 && release16) { - if (bias16_h != nullptr) { delete[] bias16_h; bias16_h = nullptr; } - if (scales16_h != nullptr) { delete[] scales16_h; scales16_h = nullptr; } - if (mean16_h != nullptr) { delete[] mean16_h; mean16_h = nullptr; } - if (variance16_h != nullptr) { delete[] variance16_h; variance16_h = nullptr; } - if (power16_h != nullptr) { delete[] power16_h; power16_h = nullptr; } - - } - } - - void releaseDevice(bool release32 = true, bool release16 = true) { - if (release32) { - if (bias_d != nullptr) { cudaFree(bias_d); bias_d = nullptr; } - if (scales_d != nullptr) { cudaFree(scales_d); scales_d = nullptr; } - if (mean_d != nullptr) { cudaFree(mean_d); mean_d = nullptr; } - if (variance_d != nullptr) { cudaFree(variance_d); variance_d = nullptr; } - } - if (net->fp16 && release16) { - if (bias16_d != nullptr) { cudaFree(bias16_d); bias16_d = nullptr; } - if (scales16_d != nullptr) { cudaFree(scales16_d); scales16_d = nullptr; } - if (mean16_d != nullptr) { cudaFree(mean16_d); mean16_d = nullptr; } - if (variance16_d != nullptr) { cudaFree(variance16_d); variance16_d = nullptr; } - if (power16_d != nullptr) { cudaFree(power16_d); power16_d = nullptr; } - } - } - - - -}; - /** Input layer (it doesn't need weights) */ @@ -606,24 +545,7 @@ public: }; -class BatchNorm : public LayerBNWgs { -public: - BatchNorm(Network *net,int output,std::string fname_weights); - virtual ~BatchNorm(); - virtual layerType_t getLayerType(){return LAYER_BATCHNORM;}; - virtual dnnType* infer(dataDim_t& dim,dnnType* srcData); - std::string weights_bin; -protected: - cudnnFilterDescriptor_t filterDesc; - cudnnConvolutionFwdAlgoPerf_t algo; - cudnnConvolutionBwdDataAlgoPerf_t bwAlgo; - cudnnTensorDescriptor_t biasTensorDesc; - void initCUDNN(); - void inferCUDNN(dnnType* srcData); - void* workSpace; - size_t ws_sizeInBytes; -}; /** Softmax layer */ diff --git a/src/BatchNorm.cpp b/src/BatchNorm.cpp deleted file mode 100644 index b406011..0000000 --- a/src/BatchNorm.cpp +++ /dev/null @@ -1,67 +0,0 @@ -#include - -#include "Layer.h" - -namespace tk { namespace dnn { - void BatchNorm::initCUDNN(){ - cudnnTensorDescriptor_t srcTensor = srcTensorDesc; - cudnnTensorDescriptor_t dstTensor = dstTensorDesc; - dataDim_t idim,odim; - idim = input_dim; - odim = output_dim; - - checkCUDNN( cudnnSetTensor4dDescriptor(srcTensor, - net->tensorFormat, net->dataType, idim.n, idim.c, idim.h, idim.w) ); - - checkCUDNN( cudnnCreateTensorDescriptor(&biasTensorDesc) ); - - checkCUDNN( cudnnSetTensor4dDescriptor(dstTensor, - net->tensorFormat, net->dataType, odim.n, odim.c, odim.h, odim.w) ); - - checkCUDNN( cudnnSetTensor4dDescriptor(biasTensorDesc, - net->tensorFormat, net->dataType, - 1, output_dim.c, 1, 1) ); - - - } - - void BatchNorm::inferCUDNN(float *srcData){ - dnnType alpha = dnnType(1); - dnnType beta = dnnType(0); - - alpha = dnnType(1); - beta = dnnType(1); - checkCUDNN( cudnnAddTensor(net->cudnnHandle, - &alpha, biasTensorDesc, bias_d, - &beta, dstTensorDesc, dstData) ); - alpha = dnnType(1); - beta = dnnType(0); - checkCUDNN( cudnnBatchNormalizationForwardInference(net->cudnnHandle, - CUDNN_BATCHNORM_SPATIAL, &alpha, &beta, - dstTensorDesc, dstData, dstTensorDesc, - dstData, biasTensorDesc, //same tensor descriptor as bias - scales_d, bias_d, mean_d, variance_d, - TKDNN_BN_MIN_EPSILON) ); - } - - BatchNorm::BatchNorm(Network *net,int output,std::string fname_weights) : - LayerBNWgs(net,net->getOutputDim().c,output,fname_weights){ - output_dim = input_dim; - initCUDNN(); - checkCuda( cudaMalloc(&dstData, output_dim.tot()*sizeof(dnnType)) ); - - } - - dnnType* BatchNorm::infer(dataDim_t &dim,dnnType* srcData){ - inferCUDNN(srcData); - - dim = output_dim; - return dstData; - } - - BatchNorm::~BatchNorm(){ - checkCUDNN( cudnnDestroyTensorDescriptor(biasTensorDesc) ); - checkCuda( cudaFree(dstData) ); - } - -}} \ No newline at end of file diff --git a/src/LayerBNWgs.cpp b/src/LayerBNWgs.cpp deleted file mode 100644 index 7414ef3..0000000 --- a/src/LayerBNWgs.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include -#include - -#include "Layer.h" -#include "kernels.h" - -namespace tk { namespace dnn { - LayerBNWgs::LayerBNWgs(Network* net, int input, int output, std::string fname_weights) : Layer(net) { - this->inputs = inputs; - this->outputs = output; - this->weights_path = fname_weights; - - std::cout << "Reading BatchNorm O = " << outputs << std::endl; - int seek = 0; - readBinaryFile(weights_path.c_str(), outputs, &bias_h, &bias_d, seek); - seek += outputs; - readBinaryFile(weights_path.c_str(), outputs, &scales_h, &scales_d, seek); - seek += outputs; - readBinaryFile(weights_path.c_str(), outputs, &mean_h, &mean_d, seek); - seek += outputs; - readBinaryFile(weights_path.c_str(), outputs, &variance_h, &variance_d, seek); - seek += outputs; - - float eps = TKDNN_BN_MIN_EPSILON; - - power_h = new dnnType[outputs]; - for (int i = 0; i < outputs; i++) power_h[i] = 1.0f; - - for (int i = 0; i < outputs; i++) - mean_h[i] = mean_h[i] / -sqrt(eps + variance_h[i]); - - for (int i = 0; i < outputs; i++) - variance_h[i] = 1.0f / sqrt(eps + variance_h[i]); - - if (!net->fp16) - return; - - int b_size = outputs; - bias16_h = new __half[b_size]; - cudaMalloc(&bias16_d, b_size * sizeof(__half)); - float2half(bias_d, bias16_d, b_size); - cudaMemcpy(bias16_h, bias16_d, b_size * sizeof(__half), cudaMemcpyDeviceToHost); - - power16_h = new __half[b_size]; - mean16_h = new __half[b_size]; - variance16_h = new __half[b_size]; - scales16_h = new __half[b_size]; - - cudaMalloc(&power16_d, b_size * sizeof(__half)); - cudaMalloc(&mean16_d, b_size * sizeof(__half)); - cudaMalloc(&variance16_d, b_size * sizeof(__half)); - cudaMalloc(&scales16_d, b_size * sizeof(__half)); - - //temporary buffers - float* tmp_d; - cudaMalloc(&tmp_d, b_size * sizeof(float)); - - //init power array of ones - cudaMemcpy(tmp_d, power_h, b_size * sizeof(float), cudaMemcpyHostToDevice); - float2half(tmp_d, power16_d, b_size); - cudaMemcpy(power16_h, power16_d, b_size * sizeof(__half), cudaMemcpyDeviceToHost); - - //mean array - cudaMemcpy(tmp_d, mean_h, b_size * sizeof(float), cudaMemcpyHostToDevice); - float2half(tmp_d, mean16_d, b_size); - cudaMemcpy(mean16_h, mean16_d, b_size * sizeof(__half), cudaMemcpyDeviceToHost); - - //convert variance - - cudaMemcpy(tmp_d, variance_h, b_size * sizeof(float), cudaMemcpyHostToDevice); - float2half(tmp_d, variance16_d, b_size); - cudaMemcpy(variance16_h, variance16_d, b_size * sizeof(__half), cudaMemcpyDeviceToHost); - - //convert scales - float2half(scales_d, scales16_d, b_size); - cudaMemcpy(scales16_h, scales16_d, b_size * sizeof(__half), cudaMemcpyDeviceToHost); - - cudaFree(tmp_d); - - - } - - LayerBNWgs::~LayerBNWgs() { - releaseHost(); - releaseDevice(); - } - -} } \ No newline at end of file diff --git a/tests/monodepth2/monodepth2_new_format.cpp b/tests/monodepth2/monodepth2_new_format.cpp deleted file mode 100644 index 313978c..0000000 --- a/tests/monodepth2/monodepth2_new_format.cpp +++ /dev/null @@ -1,306 +0,0 @@ -#include -#include -#include -#include -#include - -const char* encoder_conv1_bin = "monodepth2/layers/encoder/encoder-conv1.bin"; -const char* encoder_bn1_bin = "monodepth2/layers/encoder/encoder-bn1.bin"; - -const char* encoder_layer1_conv_bin[] = { - "monodepth2/layers/encoder/encoder-layer1-0-conv1.bin", - "monodepth2/layers/encoder/encoder-layer1-0-conv2.bin", - "monodepth2/layers/encoder/encoder-layer1-1-conv1.bin", - "monodepth2/layers/encoder/encoder-layer1-1-conv2.bin", -}; - -const char* encoder_layer1_bn_bin[] = { - "monodepth2/layers/encoder/encoder-layer1-0-bn1.bin", - "monodepth2/layers/encoder/encoder-layer1-0-bn2.bin", - "monodepth2/layers/encoder/encoder-layer1-1-bn1.bin", - "monodepth2/layers/encoder/encoder-layer1-1-bn2.bin", -}; - - - -const char* encoder_layer2_conv_bin[] = { - "monodepth2/layers/encoder/encoder-layer2-0-conv1.bin", - "monodepth2/layers/encoder/encoder-layer2-0-conv2.bin", - "monodepth2/layers/encoder/encoder-layer2-0-downsample-0.bin", - "monodepth2/layers/encoder/encoder-layer2-1-conv1.bin", - "monodepth2/layers/encoder/encoder-layer2-1-conv2.bin" -}; - -const char* encoder_layer2_bn_bin[] = { - "monodepth2/layers/encoder/encoder-layer2-0-bn1.bin", - "monodepth2/layers/encoder/encoder-layer2-0-bn2.bin", - "monodepth2/layers/encoder/encoder-layer2-0-downsample-1.bin", - "monodepth2/layers/encoder/encoder-layer2-1-bn1.bin", - "monodepth2/layers/encoder/encoder-layer2-1-bn2.bin" -}; - -const char* encoder_layer3_conv_bin[]={ - "monodepth2/layers/encoder/encoder-layer3-0-conv1.bin", - "monodepth2/layers/encoder/encoder-layer3-0-conv2.bin", - "monodepth2/layers/encoder/encoder-layer3-0-downsample-0.bin", - "monodepth2/layers/encoder/encoder-layer3-1-conv1.bin", - "monodepth2/layers/encoder/encoder-layer3-1-conv2.bin" -}; - -const char* encoder_layer3_bn_bin[]={ - "monodepth2/layers/encoder/encoder-layer3-0-bn1.bin", - "monodepth2/layers/encoder/encoder-layer3-0-bn2.bin", - "monodepth2/layers/encoder/encoder-layer3-0-downsample-1.bin", - "monodepth2/layers/encoder/encoder-layer3-1-bn1.bin", - "monodepth2/layers/encoder/encoder-layer3-1-bn2.bin" -}; - -const char* encoder_layer4_conv_bin[] = { - "monodepth2/layers/encoder/encoder-layer4-0-conv1.bin", - "monodepth2/layers/encoder/encoder-layer4-0-conv2.bin", - "monodepth2/layers/encoder/encoder-layer4-0-downsample-0.bin", - "monodepth2/layers/encoder/encoder-layer4-1-conv1.bin", - "monodepth2/layers/encoder/encoder-layer4-1-conv2.bin" -}; - -const char* encoder_layer4_bn_bin[] = { - "monodepth2/layers/encoder/encoder-layer4-0-bn1.bin", - "monodepth2/layers/encoder/encoder-layer4-0-bn2.bin", - "monodepth2/layers/encoder/encoder-layer4-0-downsample-1.bin", - "monodepth2/layers/encoder/encoder-layer4-1-bn1.bin", - "monodepth2/layers/encoder/encoder-layer4-1-bn2.bin" -}; - -const char* decoder_layer_bin[] = { - "monodepth2/layers/depth_decoder/decoder-0-conv-conv.bin", - "monodepth2/layers/depth_decoder/decoder-1-conv-conv.bin", - "monodepth2/layers/depth_decoder/decoder-2-conv-conv.bin", - "monodepth2/layers/depth_decoder/decoder-3-conv-conv.bin", - "monodepth2/layers/depth_decoder/decoder-4-conv-conv.bin", - "monodepth2/layers/depth_decoder/decoder-5-conv-conv.bin", - "monodepth2/layers/depth_decoder/decoder-6-conv-conv.bin", - "monodepth2/layers/depth_decoder/decoder-7-conv-conv.bin", - "monodepth2/layers/depth_decoder/decoder-8-conv-conv.bin", - "monodepth2/layers/depth_decoder/decoder-9-conv-conv.bin" -}; - -const char* decoder_dispconv_layer_bin[] = { - "monodepth2/layers/depth_decoder/decoder-10-conv.bin", - "monodepth2/layers/depth_decoder/decoder-11-conv.bin", - "monodepth2/layers/depth_decoder/decoder-12-conv.bin", - "monodepth2/layers/depth_decoder/decoder-13-conv.bin" -}; - -const char* output_bin[] = { - "monodepth2/debug/outputs/output-disp-0.bin", - "monodepth2/debug/outputs/output-disp-1.bin", - "monodepth2/debug/outputs/output-disp-2.bin", - "monodepth2/debug/outputs/output-disp-3.bin" -}; - -const char* input_monodepth2_bin[] = {"monodepth2/debug/input.bin","monodepth2/debug/input2.bin"}; - -int main(){ - tk::dnn::dataDim_t dim(1,3,192,640,1); - tk::dnn::Network net(dim); - tk::dnn::Layer* encoder_conv = new tk::dnn::Conv2d(&net,64,7,7,2,2,3,3,encoder_conv1_bin); - tk::dnn::Layer* encoder_bn = new tk::dnn::BatchNorm(&net,64,encoder_bn1_bin); - tk::dnn::Layer* encoder_relu = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_maxpool = new tk::dnn::Pooling(&net,3,3,2,2,1,1,tk::dnn::POOLING_MAX); - - //layer-1 - tk::dnn::Layer* encoder_layer_1_0_conv_1 = new tk::dnn::Conv2d(&net,64,3,3,1,1,1,1,encoder_layer1_conv_bin[0]); - tk::dnn::Layer* encoder_layer_1_0_bn_1 = new tk::dnn::BatchNorm(&net,64,encoder_layer1_bn_bin[0]); - tk::dnn::Layer* encoder_relu_1 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_1_0_conv_2 = new tk::dnn::Conv2d(&net,64,3,3,1,1,1,1,encoder_layer1_conv_bin[1]); - tk::dnn::Layer* encoder_layer_1_0_bn_2 = new tk::dnn::BatchNorm(&net,64,encoder_layer1_bn_bin[1]); - tk::dnn::Layer* encoder_layer_1_0_shortcut_1 = new tk::dnn::Shortcut(&net,encoder_maxpool); - tk::dnn::Layer* encoder_relu_2 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_1_1_conv_1 = new tk::dnn::Conv2d(&net,64,3,3,1,1,1,1,encoder_layer1_conv_bin[2]); - tk::dnn::Layer* encoder_layer_1_1_bn_1 = new tk::dnn::BatchNorm(&net,64,encoder_layer1_bn_bin[2]); - tk::dnn::Layer* encoder_relu_3 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_1_1_conv_2 = new tk::dnn::Conv2d(&net,64,3,3,1,1,1,1,encoder_layer1_conv_bin[3]); - tk::dnn::Layer* encoder_layer_1_1_bn_2 = new tk::dnn::BatchNorm(&net,64,encoder_layer1_bn_bin[3]); - tk::dnn::Layer* encoder_layer_1_1_shortcut_1 = new tk::dnn::Shortcut(&net,encoder_relu_2); - tk::dnn::Layer* encoder_relu_4 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - - //layer-2 - tk::dnn::Layer* encoder_layer_2_0_conv_1 = new tk::dnn::Conv2d(&net,128,3,3,2,2,1,1,encoder_layer2_conv_bin[0]); - tk::dnn::Layer* encoder_layer_2_0_bn_1 = new tk::dnn::BatchNorm(&net,128,encoder_layer2_bn_bin[0]); - tk::dnn::Layer* encoder_relu_5 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_2_0_conv_2 = new tk::dnn::Conv2d(&net,128,3,3,1,1,1,1,encoder_layer2_conv_bin[1]); - tk::dnn::Layer* encoder_layer_2_0_bn_2 = new tk::dnn::BatchNorm(&net,128,encoder_layer2_bn_bin[1]); - tk::dnn::Layer* encoder_layer_2_0_route = new tk::dnn::Route(&net,&encoder_relu_4,1); - tk::dnn::Layer* encoder_layer_2_0_downsample_conv = new tk::dnn::Conv2d(&net,128,1,1,2,2,0,0,encoder_layer2_conv_bin[2]); - tk::dnn::Layer* encoder_layer_2_0_downsample_bn = new tk::dnn::BatchNorm(&net,128,encoder_layer2_bn_bin[2]); - tk::dnn::Layer* encoder_layer_2_0_shortcut = new tk::dnn::Shortcut(&net,encoder_layer_2_0_downsample_bn); - tk::dnn::Layer* encoder_relu_6 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_2_1_conv_1 = new tk::dnn::Conv2d(&net,128,3,3,1,1,1,1,encoder_layer2_conv_bin[3]); - tk::dnn::Layer* encoder_layer_2_1_bn_1 = new tk::dnn::BatchNorm(&net,128,encoder_layer2_bn_bin[3]); - tk::dnn::Layer* encoder_relu_7 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_2_1_conv_2 = new tk::dnn::Conv2d(&net,128,3,3,1,1,1,1,encoder_layer2_conv_bin[4]); - tk::dnn::Layer* encoder_layer_2_1_bn_2 = new tk::dnn::BatchNorm(&net,128,encoder_layer2_bn_bin[4]); - tk::dnn::Layer* encoder_layer_2_1_shortcut = new tk::dnn::Shortcut(&net,encoder_relu_6); - tk::dnn::Layer* encoder_relu_8 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - - //layer-3 - tk::dnn::Layer* encoder_layer_3_0_conv_1 = new tk::dnn::Conv2d(&net,256,3,3,2,2,1,1,encoder_layer3_conv_bin[0]); - tk::dnn::Layer* encoder_layer_3_0_bn_1 = new tk::dnn::BatchNorm(&net,256,encoder_layer3_bn_bin[0]); - tk::dnn::Layer* encoder_relu_9 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_3_0_conv_2 = new tk::dnn::Conv2d(&net,256,3,3,1,1,1,1,encoder_layer3_conv_bin[1]); - tk::dnn::Layer* encoder_layer_3_0_bn_2 = new tk::dnn::BatchNorm(&net,256,encoder_layer3_bn_bin[1]); - tk::dnn::Layer* encoder_layer_3_0_route = new tk::dnn::Route(&net,&encoder_relu_8,1); - tk::dnn::Layer* encoder_layer_3_0_downsample_conv = new tk::dnn::Conv2d(&net,256,1,1,2,2,0,0,encoder_layer3_conv_bin[2]); - tk::dnn::Layer* encoder_layer_3_0_downsample_bn = new tk::dnn::BatchNorm(&net,256,encoder_layer3_bn_bin[2]); - tk::dnn::Layer* encoder_layer_3_0_shortcut = new tk::dnn::Shortcut(&net,encoder_layer_3_0_bn_2); - tk::dnn::Layer* encoder_relu_10 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_3_1_conv_1 = new tk::dnn::Conv2d(&net,256,3,3,1,1,1,1,encoder_layer3_conv_bin[3]); - tk::dnn::Layer* encoder_layer_3_1_bn_1 = new tk::dnn::BatchNorm(&net,256,encoder_layer3_bn_bin[3]); - tk::dnn::Layer* encoder_relu_11 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_3_1_conv_2 = new tk::dnn::Conv2d(&net,256,3,3,1,1,1,1,encoder_layer3_conv_bin[4]); - tk::dnn::Layer* encoder_layer_3_1_bn_2 = new tk::dnn::BatchNorm(&net,256,encoder_layer3_bn_bin[4]); - tk::dnn::Layer* encoder_layer_3_1_shortcut = new tk::dnn::Shortcut(&net,encoder_relu_10); - tk::dnn::Layer* encoder_relu_12 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - - //layer-4 - tk::dnn::Layer* encoder_layer_4_0_conv_1 = new tk::dnn::Conv2d(&net,512,3,3,2,2,1,1,encoder_layer4_conv_bin[0]); - tk::dnn::Layer* encoder_layer_4_0_bn_1 = new tk::dnn::BatchNorm(&net,512,encoder_layer4_bn_bin[0]); - tk::dnn::Layer* encoder_relu_13 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_4_0_conv_2 = new tk::dnn::Conv2d(&net,512,3,3,1,1,1,1,encoder_layer4_conv_bin[1]); - tk::dnn::Layer* encoder_layer_4_0_bn_2 = new tk::dnn::BatchNorm(&net,512,encoder_layer4_bn_bin[1]); - tk::dnn::Layer* encoder_layer_4_0_route = new tk::dnn::Route(&net,&encoder_relu_12,1); - tk::dnn::Layer* encoder_layer_4_0_downsample_conv = new tk::dnn::Conv2d(&net,512,1,1,2,2,0,0,encoder_layer4_conv_bin[2]); - tk::dnn::Layer* encoder_layer_4_0_downsample_bn = new tk::dnn::BatchNorm(&net,512,encoder_layer4_bn_bin[2]); - tk::dnn::Layer* encoder_layer_4_0_shortcut = new tk::dnn::Shortcut(&net,encoder_layer_4_0_bn_2); - tk::dnn::Layer* encoder_relu_14 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_4_1_conv_1 = new tk::dnn::Conv2d(&net,512,3,3,1,1,1,1,encoder_layer4_conv_bin[3]); - tk::dnn::Layer* encoder_layer_4_1_bn_1 = new tk::dnn::BatchNorm(&net,512,encoder_layer4_bn_bin[3]); - tk::dnn::Layer* encoder_relu_15 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - tk::dnn::Layer* encoder_layer_4_1_conv_2 = new tk::dnn::Conv2d(&net,512,3,3,1,1,1,1,encoder_layer4_conv_bin[4]); - tk::dnn::Layer* encoder_layer_4_1_bn_2 = new tk::dnn::BatchNorm(&net,512,encoder_layer4_bn_bin[4]); - tk::dnn::Layer* encoder_layer_4_1_shortcut = new tk::dnn::Shortcut(&net,encoder_relu_14); - tk::dnn::Layer* encoder_relu_16 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_RELU); - - - //decoder - tk::dnn::Layer* decoder_reflection_padding_2d = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_4_0 = new tk::dnn::Conv2d(&net,256,3,3,1,1,0,0,decoder_layer_bin[0]); - tk::dnn::Layer* decoder_elu = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_upsampling_2d = new tk::dnn::Upsample(&net,2); - tk::dnn::Layer* concatenate_layer[2] = {decoder_upsampling_2d,encoder_relu_12}; - tk::dnn::Layer* decoder_concatenate = new tk::dnn::Route(&net,concatenate_layer,2); - tk::dnn::Layer* decoder_reflection_padding_2d_1 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_4_1 = new tk::dnn::Conv2d(&net,256,3,3,1,1,0,0,decoder_layer_bin[1]); - tk::dnn::Layer* decoder_elu_1 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_reflection_padding_2d_2 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_3_0 = new tk::dnn::Conv2d(&net,128,3,3,1,1,0,0,decoder_layer_bin[2]); - tk::dnn::Layer* decoder_elu_2 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_upsampling_2d_1 = new tk::dnn::Upsample(&net,2); - tk::dnn::Layer* concatenate_layer_1[2] = {decoder_upsampling_2d_1,encoder_relu_8}; - tk::dnn::Layer* decoder_concatenate_layer_1 = new tk::dnn::Route{&net,concatenate_layer_1,2}; - tk::dnn::Layer* decoder_reflection_padding_2d_3 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_3_1 = new tk::dnn::Conv2d(&net,128,3,3,1,1,0,0,decoder_layer_bin[3]); - tk::dnn::Layer* decoder_elu_3 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_reflection_padding_2d_5 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_2_0 = new tk::dnn::Conv2d(&net,64,3,3,1,1,0,0,decoder_layer_bin[4]); - tk::dnn::Layer* decoder_elu_4 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_upsampling_2d_2 = new tk::dnn::Upsample(&net,2); - tk::dnn::Layer* concatenate_layer_2[2] = {decoder_upsampling_2d_2,encoder_relu_4}; - tk::dnn::Layer* decoder_concatenate_layer_2 = new tk::dnn::Route(&net,concatenate_layer_2,2); - tk::dnn::Layer* decoder_reflection_padding_2d_6 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_2_1 = new tk::dnn::Conv2d(&net,64,3,3,1,1,0,0,decoder_layer_bin[5]); - tk::dnn::Layer* decoder_elu_5 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_reflection_padding_2d_8 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_1_0 = new tk::dnn::Conv2d(&net,32,3,3,1,1,0,0,decoder_layer_bin[6]); - tk::dnn::Layer* decoder_elu_6 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_upsampling_2d_3 = new tk::dnn::Upsample(&net,2); - tk::dnn::Layer* concatenate_layer_3[2] = {decoder_upsampling_2d_3,encoder_relu}; - tk::dnn::Layer* decoder_concatenate_layer_3 = new tk::dnn::Route(&net,concatenate_layer_3,2); - tk::dnn::Layer* decoder_reflection_padding_2d_9 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_1_1 = new tk::dnn::Conv2d(&net,32,3,3,1,1,0,0,decoder_layer_bin[7]); - tk::dnn::Layer* decoder_elu_7 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_reflection_padding_2d_11 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_0_0 = new tk::dnn::Conv2d(&net,16,3,3,1,1,0,0,decoder_layer_bin[8]); - tk::dnn::Layer* decoder_elu_8 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_upsampling_2d_4 = new tk::dnn::Upsample(&net,2); - tk::dnn::Layer* decoder_reflection_padding_2d_12 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_upconv_0_1 = new tk::dnn::Conv2d(&net,16,3,3,1,1,0,0,decoder_layer_bin[9]); - tk::dnn::Layer* decoder_elu_9 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_ELU); - tk::dnn::Layer* decoder_reflection_padding_2d_13 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_dispconv_0 = new tk::dnn::Conv2d(&net,1,3,3,1,1,0,0,decoder_dispconv_layer_bin[0]); - tk::dnn::Layer* disp0 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_SIGMOID); - disp0->setFinal(); - - tk::dnn::Layer* route_elu_7 = new tk::dnn::Route(&net,&decoder_elu_7,1); - tk::dnn::Layer* decoder_reflection_padding_2d_10 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_dispconv_1 = new tk::dnn::Conv2d(&net,1,3,3,1,1,0,0,decoder_dispconv_layer_bin[1]); - tk::dnn::Layer* disp1 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_SIGMOID); - disp1->setFinal(); - - tk::dnn::Layer* route_elu_5 = new tk::dnn::Route(&net,&decoder_elu_5,1); - tk::dnn::Layer* decoder_reflection_padding_2d_7 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_dispconv_2 = new tk::dnn::Conv2d(&net,1,3,3,1,1,0,0,decoder_dispconv_layer_bin[2]); - tk::dnn::Layer* disp2 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_SIGMOID); - disp2->setFinal(); - - tk::dnn::Layer* route_elu_3 = new tk::dnn::Route(&net,&decoder_elu_3,1); - tk::dnn::Layer* decoder_reflection_padding_2d_4 = new tk::dnn::Padding(&net,1,1,tk::dnn::PADDING_MODE_REFLECTION); - tk::dnn::Layer* decoder_dispconv_3 = new tk::dnn::Conv2d(&net,1,3,3,1,1,0,0,decoder_dispconv_layer_bin[3]); - tk::dnn::Layer* disp3 = new tk::dnn::Activation(&net,CUDNN_ACTIVATION_SIGMOID); - disp3->setFinal(); - - dnnType *data; - dnnType *input_H; - readBinaryFile(input_monodepth2_bin[1],dim.tot(),&input_H,&data); - std::cout<<"INPUT DIMENSIONS : "<output_dim.print(); - int ret_cudnn = 0, ret_tensorrt = 0, ret_cudnn_tensorrt = 0; - for(int i=0;i<4;i++){ - printCenteredTitle((std::string("MONODEPTH2 CHECK RESULTS ") + std::to_string(i) + " ").c_str(), '=', 30); - outs[i]->output_dim.print(); - - dnnType *out, *out_h; - int odim = outs[i]->output_dim.tot(); - readBinaryFile(output_bin[i], odim, &out_h, &out); - - dnnType *cudnn_out, *rt_out; - cudnn_out = outs[i]->dstData; - rt_out = (dnnType *)netRT.buffersRT[i]; - std::cout<<"CUDNN vs correct"; - ret_cudnn |= checkResult(odim, cudnn_out, out) == 0 ? 0: ERROR_CUDNN; - std::cout<<"TRT vs correct"; - ret_tensorrt |= checkResult(odim, rt_out, out) == 0 ? 0 : ERROR_TENSORRT; - std::cout<<"CUDNN vs TRT "; - ret_cudnn_tensorrt |= checkResult(odim, cudnn_out, rt_out) == 0 ? 0 : ERROR_CUDNNvsTENSORRT; - } - - - return ret_cudnn | ret_tensorrt | ret_cudnn_tensorrt; - -} \ No newline at end of file