From 02936fa928a78d249549709dc8de281f97262900 Mon Sep 17 00:00:00 2001 From: Davide Sapienza Date: Tue, 29 Oct 2019 17:21:31 +0100 Subject: [PATCH] ResNet working --- include/tkDNN/Layer.h | 5 +- src/LayerWgs.cpp | 18 -- src/NetworkRT.cpp | 8 +- src/Route.cpp | 7 +- tests/resnet101/resnet101.cpp | 521 +++++++++++++++------------------- 5 files changed, 242 insertions(+), 317 deletions(-) diff --git a/include/tkDNN/Layer.h b/include/tkDNN/Layer.h index cec213f..bab723d 100644 --- a/include/tkDNN/Layer.h +++ b/include/tkDNN/Layer.h @@ -225,6 +225,7 @@ public: int winH, winW; int strideH, strideW; int paddingH, paddingW; + tkdnnPoolingMode_t pool_mode; Pooling(Network *net, int winH, int winW, int strideH, int strideW, @@ -238,7 +239,6 @@ public: protected: cudnnPoolingDescriptor_t poolingDesc; - tkdnnPoolingMode_t pool_mode; dnnType *tmpInputData, *tmpOutputData; bool poolOn3d; }; @@ -270,7 +270,8 @@ public: virtual dnnType* infer(dataDim_t &dim, dnnType* srcData); public: - Layer **layers; //ids of layers to be merged + static const int MAX_INPUT_LAYERS = 16; + Layer *layers[MAX_INPUT_LAYERS]; //ids of layers to be merged int layers_n; //number of layers }; diff --git a/src/LayerWgs.cpp b/src/LayerWgs.cpp index dfdde70..8219e26 100644 --- a/src/LayerWgs.cpp +++ b/src/LayerWgs.cpp @@ -20,13 +20,6 @@ LayerWgs::LayerWgs(Network *net, int inputs, int outputs, seek += inputs*outputs*kh*kw*kl; readBinaryFile(weights_path.c_str(), outputs, &bias_h, &bias_d, seek); -std::cout<<"w:\n"; - printDeviceVector(64, data_d, true); - -std::cout<<"b:\n"; - printDeviceVector(64, bias_d, true); -std::cout<<"step----------------------------------------\n"; - this->batchnorm = batchnorm; if(batchnorm) { seek += outputs; @@ -36,17 +29,6 @@ std::cout<<"step----------------------------------------\n"; seek += outputs; readBinaryFile(weights_path.c_str(), outputs, &variance_h, &variance_d, seek); -std::cout<<"s:\n"; - printDeviceVector(64, scales_d, true); - -std::cout<<"m:\n"; - printDeviceVector(64, mean_d, true); - -std::cout<<"v:\n"; - printDeviceVector(64, variance_d, true); - - std::cout<<"END----------------------------------------\n"; - float eps = CUDNN_BN_MIN_EPSILON; power_h = new dnnType[outputs]; diff --git a/src/NetworkRT.cpp b/src/NetworkRT.cpp index 7430b6f..2b3319c 100644 --- a/src/NetworkRT.cpp +++ b/src/NetworkRT.cpp @@ -263,10 +263,16 @@ ILayer* NetworkRT::convert_layer(ITensor *input, Conv2d *l) { ILayer* NetworkRT::convert_layer(ITensor *input, Pooling *l) { //std::cout<<"convert Pooling\n"; + PoolingType ptype; + if(l->pool_mode == tkdnnPoolingMode_t::POOLING_MAX) ptype = PoolingType::kMAX; + if(l->pool_mode == tkdnnPoolingMode_t::POOLING_AVERAGE) ptype = PoolingType::kAVERAGE; + if(l->pool_mode == tkdnnPoolingMode_t::POOLING_AVERAGE_EXCLUDE_PADDING) ptype = PoolingType::kMAX_AVERAGE_BLEND; + IPoolingLayer *lRT = networkRT->addPooling(*input, - PoolingType::kMAX, DimsHW{l->winH, l->winW}); + ptype, DimsHW{l->winH, l->winW}); checkNULL(lRT); lRT->setStride(DimsHW{l->strideH, l->strideW}); + lRT->setPadding(DimsHW{l->paddingH, l->paddingW}); return lRT; } diff --git a/src/Route.cpp b/src/Route.cpp index f61335e..7a95532 100644 --- a/src/Route.cpp +++ b/src/Route.cpp @@ -7,9 +7,12 @@ namespace tk { namespace dnn { Route::Route(Network *net, Layer **layers, int layers_n) : Layer(net) { - this->layers = layers; this->layers_n = layers_n; - + if(layers_n > MAX_INPUT_LAYERS) + FatalError("Route: MAX INPUT LAYERS overload"); + for(int i=0; ilayers[i] = layers[i]; + //get dims output_dim.l = 1; output_dim.c = 0; diff --git a/tests/resnet101/resnet101.cpp b/tests/resnet101/resnet101.cpp index 26fb3dd..c0d1c5f 100644 --- a/tests/resnet101/resnet101.cpp +++ b/tests/resnet101/resnet101.cpp @@ -5,150 +5,155 @@ const char *input_bin = "../tests/resnet101/debug/input.bin"; const char *conv1_bin = "../tests/resnet101/layers/conv1.bin"; //layer1 -const char *layer1_0_conv1_bin = "../tests/resnet101/layers/layer1-0-conv1.bin"; -const char *layer1_0_conv2_bin = "../tests/resnet101/layers/layer1-0-conv2.bin"; -const char *layer1_0_conv3_bin = "../tests/resnet101/layers/layer1-0-conv3.bin"; -const char *layer1_0_downsample_0_bin = "../tests/resnet101/layers/layer1-0-downsample-0.bin"; +const char *layer1_bin[]={ +"../tests/resnet101/layers/layer1-0-conv1.bin", +"../tests/resnet101/layers/layer1-0-conv2.bin", +"../tests/resnet101/layers/layer1-0-conv3.bin", +"../tests/resnet101/layers/layer1-0-downsample-0.bin", -const char *layer1_1_conv1_bin = "../tests/resnet101/layers/layer1-1-conv1.bin"; -const char *layer1_1_conv2_bin = "../tests/resnet101/layers/layer1-1-conv2.bin"; -const char *layer1_1_conv3_bin = "../tests/resnet101/layers/layer1-1-conv3.bin"; +"../tests/resnet101/layers/layer1-1-conv1.bin", +"../tests/resnet101/layers/layer1-1-conv2.bin", +"../tests/resnet101/layers/layer1-1-conv3.bin", -const char *layer1_2_conv1_bin = "../tests/resnet101/layers/layer1-2-conv1.bin"; -const char *layer1_2_conv2_bin = "../tests/resnet101/layers/layer1-2-conv2.bin"; -const char *layer1_2_conv3_bin = "../tests/resnet101/layers/layer1-2-conv3.bin"; +"../tests/resnet101/layers/layer1-2-conv1.bin", +"../tests/resnet101/layers/layer1-2-conv2.bin", +"../tests/resnet101/layers/layer1-2-conv3.bin"}; + //layer2 -const char *layer2_0_conv1_bin = "../tests/resnet101/layers/layer2-0-conv1.bin"; -const char *layer2_0_conv2_bin = "../tests/resnet101/layers/layer2-0-conv2.bin"; -const char *layer2_0_conv3_bin = "../tests/resnet101/layers/layer2-0-conv3.bin"; -const char *layer2_0_downsample_0_bin = "../tests/resnet101/layers/layer2-0-downsample-0.bin"; +const char *layer2_bin[]={ +"../tests/resnet101/layers/layer2-0-conv1.bin", +"../tests/resnet101/layers/layer2-0-conv2.bin", +"../tests/resnet101/layers/layer2-0-conv3.bin", +"../tests/resnet101/layers/layer2-0-downsample-0.bin", -const char *layer2_1_conv1_bin = "../tests/resnet101/layers/layer2-1-conv1.bin"; -const char *layer2_1_conv2_bin = "../tests/resnet101/layers/layer2-1-conv2.bin"; -const char *layer2_1_conv3_bin = "../tests/resnet101/layers/layer2-1-conv3.bin"; +"../tests/resnet101/layers/layer2-1-conv1.bin", +"../tests/resnet101/layers/layer2-1-conv2.bin", +"../tests/resnet101/layers/layer2-1-conv3.bin", -const char *layer2_2_conv1_bin = "../tests/resnet101/layers/layer2-2-conv1.bin"; -const char *layer2_2_conv2_bin = "../tests/resnet101/layers/layer2-2-conv2.bin"; -const char *layer2_2_conv3_bin = "../tests/resnet101/layers/layer2-2-conv3.bin"; - -const char *layer2_3_conv1_bin = "../tests/resnet101/layers/layer2-3-conv1.bin"; -const char *layer2_3_conv2_bin = "../tests/resnet101/layers/layer2-3-conv2.bin"; -const char *layer2_3_conv3_bin = "../tests/resnet101/layers/layer2-3-conv3.bin"; +"../tests/resnet101/layers/layer2-2-conv1.bin", +"../tests/resnet101/layers/layer2-2-conv2.bin", +"../tests/resnet101/layers/layer2-2-conv3.bin", +"../tests/resnet101/layers/layer2-3-conv1.bin", +"../tests/resnet101/layers/layer2-3-conv2.bin", +"../tests/resnet101/layers/layer2-3-conv3.bin" +}; //layer3 -const char *layer3_0_conv1_bin = "../tests/resnet101/layers/layer3-0-conv1.bin"; -const char *layer3_0_conv2_bin = "../tests/resnet101/layers/layer3-0-conv2.bin"; -const char *layer3_0_conv3_bin = "../tests/resnet101/layers/layer3-0-conv3.bin"; -const char *layer3_0_downsample_0_bin = "../tests/resnet101/layers/layer3-0-downsample-0.bin"; +const char *layer3_bin[]={ +"../tests/resnet101/layers/layer3-0-conv1.bin", +"../tests/resnet101/layers/layer3-0-conv2.bin", +"../tests/resnet101/layers/layer3-0-conv3.bin", +"../tests/resnet101/layers/layer3-0-downsample-0.bin", -const char *layer3_1_conv1_bin = "../tests/resnet101/layers/layer3-1-conv1.bin"; -const char *layer3_1_conv2_bin = "../tests/resnet101/layers/layer3-1-conv2.bin"; -const char *layer3_1_conv3_bin = "../tests/resnet101/layers/layer3-1-conv3.bin"; +"../tests/resnet101/layers/layer3-1-conv1.bin", +"../tests/resnet101/layers/layer3-1-conv2.bin", +"../tests/resnet101/layers/layer3-1-conv3.bin", -const char *layer3_2_conv1_bin = "../tests/resnet101/layers/layer3-2-conv1.bin"; -const char *layer3_2_conv2_bin = "../tests/resnet101/layers/layer3-2-conv2.bin"; -const char *layer3_2_conv3_bin = "../tests/resnet101/layers/layer3-2-conv3.bin"; +"../tests/resnet101/layers/layer3-2-conv1.bin", +"../tests/resnet101/layers/layer3-2-conv2.bin", +"../tests/resnet101/layers/layer3-2-conv3.bin", -const char *layer3_3_conv1_bin = "../tests/resnet101/layers/layer3-3-conv1.bin"; -const char *layer3_3_conv2_bin = "../tests/resnet101/layers/layer3-3-conv2.bin"; -const char *layer3_3_conv3_bin = "../tests/resnet101/layers/layer3-3-conv3.bin"; +"../tests/resnet101/layers/layer3-3-conv1.bin", +"../tests/resnet101/layers/layer3-3-conv2.bin", +"../tests/resnet101/layers/layer3-3-conv3.bin", -const char *layer3_4_conv1_bin = "../tests/resnet101/layers/layer3-4-conv1.bin"; -const char *layer3_4_conv2_bin = "../tests/resnet101/layers/layer3-4-conv2.bin"; -const char *layer3_4_conv3_bin = "../tests/resnet101/layers/layer3-4-conv3.bin"; +"../tests/resnet101/layers/layer3-4-conv1.bin", +"../tests/resnet101/layers/layer3-4-conv2.bin", +"../tests/resnet101/layers/layer3-4-conv3.bin", -const char *layer3_5_conv1_bin = "../tests/resnet101/layers/layer3-5-conv1.bin"; -const char *layer3_5_conv2_bin = "../tests/resnet101/layers/layer3-5-conv2.bin"; -const char *layer3_5_conv3_bin = "../tests/resnet101/layers/layer3-5-conv3.bin"; +"../tests/resnet101/layers/layer3-5-conv1.bin", +"../tests/resnet101/layers/layer3-5-conv2.bin", +"../tests/resnet101/layers/layer3-5-conv3.bin", -const char *layer3_6_conv1_bin = "../tests/resnet101/layers/layer3-6-conv1.bin"; -const char *layer3_6_conv2_bin = "../tests/resnet101/layers/layer3-6-conv2.bin"; -const char *layer3_6_conv3_bin = "../tests/resnet101/layers/layer3-6-conv3.bin"; +"../tests/resnet101/layers/layer3-6-conv1.bin", +"../tests/resnet101/layers/layer3-6-conv2.bin", +"../tests/resnet101/layers/layer3-6-conv3.bin", -const char *layer3_7_conv1_bin = "../tests/resnet101/layers/layer3-7-conv1.bin"; -const char *layer3_7_conv2_bin = "../tests/resnet101/layers/layer3-7-conv2.bin"; -const char *layer3_7_conv3_bin = "../tests/resnet101/layers/layer3-7-conv3.bin"; +"../tests/resnet101/layers/layer3-7-conv1.bin", +"../tests/resnet101/layers/layer3-7-conv2.bin", +"../tests/resnet101/layers/layer3-7-conv3.bin", -const char *layer3_8_conv1_bin = "../tests/resnet101/layers/layer3-8-conv1.bin"; -const char *layer3_8_conv2_bin = "../tests/resnet101/layers/layer3-8-conv2.bin"; -const char *layer3_8_conv3_bin = "../tests/resnet101/layers/layer3-8-conv3.bin"; +"../tests/resnet101/layers/layer3-8-conv1.bin", +"../tests/resnet101/layers/layer3-8-conv2.bin", +"../tests/resnet101/layers/layer3-8-conv3.bin", -const char *layer3_9_conv1_bin = "../tests/resnet101/layers/layer3-9-conv1.bin"; -const char *layer3_9_conv2_bin = "../tests/resnet101/layers/layer3-9-conv2.bin"; -const char *layer3_9_conv3_bin = "../tests/resnet101/layers/layer3-9-conv3.bin"; +"../tests/resnet101/layers/layer3-9-conv1.bin", +"../tests/resnet101/layers/layer3-9-conv2.bin", +"../tests/resnet101/layers/layer3-9-conv3.bin", -const char *layer3_10_conv1_bin = "../tests/resnet101/layers/layer3-10-conv1.bin"; -const char *layer3_10_conv2_bin = "../tests/resnet101/layers/layer3-10-conv2.bin"; -const char *layer3_10_conv3_bin = "../tests/resnet101/layers/layer3-10-conv3.bin"; +"../tests/resnet101/layers/layer3-10-conv1.bin", +"../tests/resnet101/layers/layer3-10-conv2.bin", +"../tests/resnet101/layers/layer3-10-conv3.bin", -const char *layer3_11_conv1_bin = "../tests/resnet101/layers/layer3-11-conv1.bin"; -const char *layer3_11_conv2_bin = "../tests/resnet101/layers/layer3-11-conv2.bin"; -const char *layer3_11_conv3_bin = "../tests/resnet101/layers/layer3-11-conv3.bin"; +"../tests/resnet101/layers/layer3-11-conv1.bin", +"../tests/resnet101/layers/layer3-11-conv2.bin", +"../tests/resnet101/layers/layer3-11-conv3.bin", -const char *layer3_12_conv1_bin = "../tests/resnet101/layers/layer3-12-conv1.bin"; -const char *layer3_12_conv2_bin = "../tests/resnet101/layers/layer3-12-conv2.bin"; -const char *layer3_12_conv3_bin = "../tests/resnet101/layers/layer3-12-conv3.bin"; +"../tests/resnet101/layers/layer3-12-conv1.bin", +"../tests/resnet101/layers/layer3-12-conv2.bin", +"../tests/resnet101/layers/layer3-12-conv3.bin", -const char *layer3_13_conv1_bin = "../tests/resnet101/layers/layer3-13-conv1.bin"; -const char *layer3_13_conv2_bin = "../tests/resnet101/layers/layer3-13-conv2.bin"; -const char *layer3_13_conv3_bin = "../tests/resnet101/layers/layer3-13-conv3.bin"; +"../tests/resnet101/layers/layer3-13-conv1.bin", +"../tests/resnet101/layers/layer3-13-conv2.bin", +"../tests/resnet101/layers/layer3-13-conv3.bin", -const char *layer3_14_conv1_bin = "../tests/resnet101/layers/layer3-14-conv1.bin"; -const char *layer3_14_conv2_bin = "../tests/resnet101/layers/layer3-14-conv2.bin"; -const char *layer3_14_conv3_bin = "../tests/resnet101/layers/layer3-14-conv3.bin"; +"../tests/resnet101/layers/layer3-14-conv1.bin", +"../tests/resnet101/layers/layer3-14-conv2.bin", +"../tests/resnet101/layers/layer3-14-conv3.bin", -const char *layer3_15_conv1_bin = "../tests/resnet101/layers/layer3-15-conv1.bin"; -const char *layer3_15_conv2_bin = "../tests/resnet101/layers/layer3-15-conv2.bin"; -const char *layer3_15_conv3_bin = "../tests/resnet101/layers/layer3-15-conv3.bin"; +"../tests/resnet101/layers/layer3-15-conv1.bin", +"../tests/resnet101/layers/layer3-15-conv2.bin", +"../tests/resnet101/layers/layer3-15-conv3.bin", -const char *layer3_16_conv1_bin = "../tests/resnet101/layers/layer3-16-conv1.bin"; -const char *layer3_16_conv2_bin = "../tests/resnet101/layers/layer3-16-conv2.bin"; -const char *layer3_16_conv3_bin = "../tests/resnet101/layers/layer3-16-conv3.bin"; +"../tests/resnet101/layers/layer3-16-conv1.bin", +"../tests/resnet101/layers/layer3-16-conv2.bin", +"../tests/resnet101/layers/layer3-16-conv3.bin", -const char *layer3_17_conv1_bin = "../tests/resnet101/layers/layer3-17-conv1.bin"; -const char *layer3_17_conv2_bin = "../tests/resnet101/layers/layer3-17-conv2.bin"; -const char *layer3_17_conv3_bin = "../tests/resnet101/layers/layer3-17-conv3.bin"; +"../tests/resnet101/layers/layer3-17-conv1.bin", +"../tests/resnet101/layers/layer3-17-conv2.bin", +"../tests/resnet101/layers/layer3-17-conv3.bin", -const char *layer3_18_conv1_bin = "../tests/resnet101/layers/layer3-18-conv1.bin"; -const char *layer3_18_conv2_bin = "../tests/resnet101/layers/layer3-18-conv2.bin"; -const char *layer3_18_conv3_bin = "../tests/resnet101/layers/layer3-18-conv3.bin"; +"../tests/resnet101/layers/layer3-18-conv1.bin", +"../tests/resnet101/layers/layer3-18-conv2.bin", +"../tests/resnet101/layers/layer3-18-conv3.bin", -const char *layer3_19_conv1_bin = "../tests/resnet101/layers/layer3-19-conv1.bin"; -const char *layer3_19_conv2_bin = "../tests/resnet101/layers/layer3-19-conv2.bin"; -const char *layer3_19_conv3_bin = "../tests/resnet101/layers/layer3-19-conv3.bin"; +"../tests/resnet101/layers/layer3-19-conv1.bin", +"../tests/resnet101/layers/layer3-19-conv2.bin", +"../tests/resnet101/layers/layer3-19-conv3.bin", -const char *layer3_20_conv1_bin = "../tests/resnet101/layers/layer3-20-conv1.bin"; -const char *layer3_20_conv2_bin = "../tests/resnet101/layers/layer3-20-conv2.bin"; -const char *layer3_20_conv3_bin = "../tests/resnet101/layers/layer3-20-conv3.bin"; +"../tests/resnet101/layers/layer3-20-conv1.bin", +"../tests/resnet101/layers/layer3-20-conv2.bin", +"../tests/resnet101/layers/layer3-20-conv3.bin", -const char *layer3_21_conv1_bin = "../tests/resnet101/layers/layer3-21-conv1.bin"; -const char *layer3_21_conv2_bin = "../tests/resnet101/layers/layer3-21-conv2.bin"; -const char *layer3_21_conv3_bin = "../tests/resnet101/layers/layer3-21-conv3.bin"; +"../tests/resnet101/layers/layer3-21-conv1.bin", +"../tests/resnet101/layers/layer3-21-conv2.bin", +"../tests/resnet101/layers/layer3-21-conv3.bin", -const char *layer3_22_conv1_bin = "../tests/resnet101/layers/layer3-22-conv1.bin"; -const char *layer3_22_conv2_bin = "../tests/resnet101/layers/layer3-22-conv2.bin"; -const char *layer3_22_conv3_bin = "../tests/resnet101/layers/layer3-22-conv3.bin"; +"../tests/resnet101/layers/layer3-22-conv1.bin", +"../tests/resnet101/layers/layer3-22-conv2.bin", +"../tests/resnet101/layers/layer3-22-conv3.bin"}; //layer4 -const char *layer4_0_conv1_bin = "../tests/resnet101/layers/layer4-0-conv1.bin"; -const char *layer4_0_conv2_bin = "../tests/resnet101/layers/layer4-0-conv2.bin"; -const char *layer4_0_conv3_bin = "../tests/resnet101/layers/layer4-0-conv3.bin"; -const char *layer4_0_downsample_0_bin = "../tests/resnet101/layers/layer4-0-downsample-0.bin"; +const char *layer4_bin[]={ +"../tests/resnet101/layers/layer4-0-conv1.bin", +"../tests/resnet101/layers/layer4-0-conv2.bin", +"../tests/resnet101/layers/layer4-0-conv3.bin", +"../tests/resnet101/layers/layer4-0-downsample-0.bin", -const char *layer4_1_conv1_bin = "../tests/resnet101/layers/layer4-1-conv1.bin"; -const char *layer4_1_conv2_bin = "../tests/resnet101/layers/layer4-1-conv2.bin"; -const char *layer4_1_conv3_bin = "../tests/resnet101/layers/layer4-1-conv3.bin"; +"../tests/resnet101/layers/layer4-1-conv1.bin", +"../tests/resnet101/layers/layer4-1-conv2.bin", +"../tests/resnet101/layers/layer4-1-conv3.bin", -const char *layer4_2_conv1_bin = "../tests/resnet101/layers/layer4-2-conv1.bin"; -const char *layer4_2_conv2_bin = "../tests/resnet101/layers/layer4-2-conv2.bin"; -const char *layer4_2_conv3_bin = "../tests/resnet101/layers/layer4-2-conv3.bin"; +"../tests/resnet101/layers/layer4-2-conv1.bin", +"../tests/resnet101/layers/layer4-2-conv2.bin", +"../tests/resnet101/layers/layer4-2-conv3.bin"}; //final const char *fc_bin = "../tests/resnet101/layers/fc.bin"; -const char *output_bin = "../tests/resnet101/debug/layer1-0-relu.bin"; +const char *output_bin = "../tests/resnet101/debug/fc.bin"; int main() { @@ -162,204 +167,132 @@ int main() tk::dnn::Pooling maxpool4(&net, 3, 3, 2, 2, 1, 1, tk::dnn::POOLING_MAX); //layer 1 - tk::dnn::Conv2d layer1_0_conv1(&net, 64, 1, 1, 1, 1, 0, 0, layer1_0_conv1_bin, true); - tk::dnn::Activation relu1_0_1(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d layer1_0_conv2(&net, 64, 3, 3, 1, 1, 1, 1, layer1_0_conv2_bin, true); - tk::dnn::Activation relu1_0_2(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d layer1_0_conv3(&net, 256, 1, 1, 1, 1, 0, 0, layer1_0_conv3_bin, true); + int id_layer1_bin = 0; + tk::dnn::Layer *last = &maxpool4; + for(int i=0; i<3;i++) + { + tk::dnn::Conv2d *layer1_0_conv1 = new tk::dnn::Conv2d(&net, 64, 1, 1, 1, 1, 0, 0, layer1_bin[id_layer1_bin++], true); + tk::dnn::Activation *relu1_0_1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + tk::dnn::Conv2d *layer1_0_conv2 = new tk::dnn::Conv2d(&net, 64, 3, 3, 1, 1, 1, 1, layer1_bin[id_layer1_bin++], true); + tk::dnn::Activation *relu1_0_2 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + tk::dnn::Conv2d *layer1_0_conv3 = new tk::dnn::Conv2d(&net, 256, 1, 1, 1, 1, 0, 0, layer1_bin[id_layer1_bin++], true); + if(i==0) { + tk::dnn::Layer *route_1_0_layers[1] = { last }; + tk::dnn::Route *route_1_0 = new tk::dnn::Route(&net, route_1_0_layers, 1); + tk::dnn::Conv2d *layer1_0_downsample_0 = new tk::dnn::Conv2d(&net, 256, 1, 1, 1, 1, 0, 0, layer1_bin[id_layer1_bin++], true); + tk::dnn::Shortcut *s1_0 = new tk::dnn::Shortcut(&net, layer1_0_conv3); + } else { + tk::dnn::Shortcut *s1_0 = new tk::dnn::Shortcut(&net, last); + } + tk::dnn::Activation *layer1_0_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + last = layer1_0_relu; + } + + // tk::dnn::Activation *last_activation = (tk::dnn::Activation *) net.layers[net.num_layers-1]; + // layer 2 + int id_layer2_bin = 0; + for(int i=0; i<4;i++) + { + tk::dnn::Conv2d *layer1_0_conv1 = new tk::dnn::Conv2d(&net, 128, 1, 1, 1, 1, 0, 0, layer2_bin[id_layer2_bin++], true); + tk::dnn::Activation *relu1_0_1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + tk::dnn::Conv2d *layer1_0_conv2; + if(i==0) + layer1_0_conv2 = new tk::dnn::Conv2d(&net, 128, 3, 3, 2, 2, 1, 1, layer2_bin[id_layer2_bin++], true); + else + layer1_0_conv2 = new tk::dnn::Conv2d(&net, 128, 3, 3, 1, 1, 1, 1, layer2_bin[id_layer2_bin++], true); + + tk::dnn::Activation *relu1_0_2 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + tk::dnn::Conv2d *layer1_0_conv3 = new tk::dnn::Conv2d(&net, 512, 1, 1, 1, 1, 0, 0, layer2_bin[id_layer2_bin++], true); + if(i==0) + { + tk::dnn::Layer *route_1_0_layers[1] = { last }; + tk::dnn::Route *route_1_0 = new tk::dnn::Route(&net, route_1_0_layers, 1); + tk::dnn::Conv2d *layer1_0_downsample_0 = new tk::dnn::Conv2d(&net, 512, 1, 1, 2, 2, 0, 0, layer2_bin[id_layer2_bin++], true); + tk::dnn::Shortcut *s1_0 = new tk::dnn::Shortcut(&net, layer1_0_conv3); + } + else + { + tk::dnn::Shortcut *s1_0 = new tk::dnn::Shortcut(&net, last); + } + tk::dnn::Activation *layer1_0_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + last = layer1_0_relu; + } - tk::dnn::Layer *m83_layers[1] = { &maxpool4 }; - tk::dnn::Route m83 (&net, m83_layers, 1); - tk::dnn::Conv2d layer1_0_downsample_0(&net, 256, 1, 1, 1, 1, 0, 0, layer1_0_downsample_0_bin, true); - - tk::dnn::Shortcut s1_0 (&net, &layer1_0_conv3); - tk::dnn::Activation layer1_0_relu(&net, CUDNN_ACTIVATION_RELU); -/* - - tk::dnn::Conv2d layer1_1_conv1(&net, 64, 1, 1, 1, 1, 1, 1, layer1_1_conv1_bin, true); - tk::dnn::Conv2d layer1_1_conv2(&net, 64, 3, 3, 1, 1, 1, 1, layer1_1_conv2_bin, true); - tk::dnn::Conv2d layer1_1_conv3(&net, 256, 1, 1, 1, 1, 1, 1, layer1_1_conv3_bin, true); - tk::dnn::Activation layer1_1_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer1_2_conv1(&net, 64, 1, 1, 1, 1, 1, 1, layer1_2_conv1_bin, true); - tk::dnn::Conv2d layer1_2_conv2(&net, 64, 3, 3, 1, 1, 1, 1, layer1_2_conv2_bin, true); - tk::dnn::Conv2d layer1_2_conv3(&net, 256, 1, 1, 1, 1, 1, 1, layer1_2_conv3_bin, true); - tk::dnn::Activation layer1_2_relu(&net, CUDNN_ACTIVATION_RELU); - - - //layer 2 - tk::dnn::Conv2d layer2_0_conv1(&net, 128, 1, 1, 1, 1, 1, 1, layer2_0_conv1_bin, true); - tk::dnn::Conv2d layer2_0_conv2(&net, 128, 3, 3, 2, 2, 1, 1, layer2_0_conv2_bin, true); - tk::dnn::Conv2d layer2_0_conv3(&net, 512, 1, 1, 1, 1, 1, 1, layer2_0_conv3_bin, true); - tk::dnn::Activation layer2_0_relu(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d layer2_0_downsample_0(&net, 512, 1, 1, 2, 2, 1, 1, layer2_0_downsample_0, true); - - tk::dnn::Conv2d layer2_1_conv1(&net, 128, 1, 1, 1, 1, 1, 1, layer2_1_conv1_bin, true); - tk::dnn::Conv2d layer2_1_conv2(&net, 128, 3, 3, 1, 1, 1, 1, layer2_1_conv2_bin, true); - tk::dnn::Conv2d layer2_1_conv3(&net, 512, 1, 1, 1, 1, 1, 1, layer2_1_conv3_bin, true); - tk::dnn::Activation layer2_1_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer2_2_conv1(&net, 128, 1, 1, 1, 1, 1, 1, layer2_2_conv1_bin, true); - tk::dnn::Conv2d layer2_2_conv2(&net, 128, 3, 3, 1, 1, 1, 1, layer2_2_conv2_bin, true); - tk::dnn::Conv2d layer2_2_conv3(&net, 512, 1, 1, 1, 1, 1, 1, layer2_2_conv3_bin, true); - tk::dnn::Activation layer2_2_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer2_3_conv1(&net, 128, 1, 1, 1, 1, 1, 1, layer2_3_conv1_bin, true); - tk::dnn::Conv2d layer2_3_conv2(&net, 128, 3, 3, 1, 1, 1, 1, layer2_3_conv2_bin, true); - tk::dnn::Conv2d layer2_3_conv3(&net, 512, 1, 1, 1, 1, 1, 1, layer2_3_conv3_bin, true); - tk::dnn::Activation layer2_3_relu(&net, CUDNN_ACTIVATION_RELU); - - //layer 3 - tk::dnn::Conv2d layer3_0_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_0_conv1_bin, true); - tk::dnn::Conv2d layer3_0_conv2(&net, 256, 3, 3, 2, 2, 1, 1, layer3_0_conv2_bin, true); - tk::dnn::Conv2d layer3_0_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_0_conv3_bin, true); - tk::dnn::Activation layer3_0_relu(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d layer3_0_downsample_0(&net, 1024, 1, 1, 2, 2, 1, 1, layer3_0_downsample_0, true); - - tk::dnn::Conv2d layer3_1_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_1_conv1_bin, true); - tk::dnn::Conv2d layer3_1_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_1_conv2_bin, true); - tk::dnn::Conv2d layer3_1_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_1_conv3_bin, true); - tk::dnn::Activation layer3_1_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_2_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_2_conv1_bin, true); - tk::dnn::Conv2d layer3_2_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_2_conv2_bin, true); - tk::dnn::Conv2d layer3_2_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_2_conv3_bin, true); - tk::dnn::Activation layer3_2_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_3_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_3_conv1_bin, true); - tk::dnn::Conv2d layer3_3_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_3_conv2_bin, true); - tk::dnn::Conv2d layer3_3_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_3_conv3_bin, true); - tk::dnn::Activation layer3_3_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_4_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_4_conv1_bin, true); - tk::dnn::Conv2d layer3_4_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_4_conv2_bin, true); - tk::dnn::Conv2d layer3_4_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_4_conv3_bin, true); - tk::dnn::Activation layer3_4_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_5_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_5_conv1_bin, true); - tk::dnn::Conv2d layer3_5_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_5_conv2_bin, true); - tk::dnn::Conv2d layer3_5_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_5_conv3_bin, true); - tk::dnn::Activation layer3_5_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_6_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_6_conv1_bin, true); - tk::dnn::Conv2d layer3_6_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_6_conv2_bin, true); - tk::dnn::Conv2d layer3_6_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_6_conv3_bin, true); - tk::dnn::Activation layer3_6_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_7_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_7_conv1_bin, true); - tk::dnn::Conv2d layer3_7_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_7_conv2_bin, true); - tk::dnn::Conv2d layer3_7_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_7_conv3_bin, true); - tk::dnn::Activation layer3_7_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_8_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_8_conv1_bin, true); - tk::dnn::Conv2d layer3_8_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_8_conv2_bin, true); - tk::dnn::Conv2d layer3_8_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_8_conv3_bin, true); - tk::dnn::Activation layer3_8_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_9_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_9_conv1_bin, true); - tk::dnn::Conv2d layer3_9_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_9_conv2_bin, true); - tk::dnn::Conv2d layer3_9_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_9_conv3_bin, true); - tk::dnn::Activation layer3_9_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_10_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_10_conv1_bin, true); - tk::dnn::Conv2d layer3_10_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_10_conv2_bin, true); - tk::dnn::Conv2d layer3_10_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_10_conv3_bin, true); - tk::dnn::Activation layer3_10_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_11_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_11_conv1_bin, true); - tk::dnn::Conv2d layer3_11_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_11_conv2_bin, true); - tk::dnn::Conv2d layer3_11_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_11_conv3_bin, true); - tk::dnn::Activation layer3_11_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_12_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_12_conv1_bin, true); - tk::dnn::Conv2d layer3_12_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_12_conv2_bin, true); - tk::dnn::Conv2d layer3_12_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_12_conv3_bin, true); - tk::dnn::Activation layer3_12_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_13_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_13_conv1_bin, true); - tk::dnn::Conv2d layer3_13_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_13_conv2_bin, true); - tk::dnn::Conv2d layer3_13_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_13_conv3_bin, true); - tk::dnn::Activation layer3_13_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_14_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_14_conv1_bin, true); - tk::dnn::Conv2d layer3_14_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_14_conv2_bin, true); - tk::dnn::Conv2d layer3_14_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_14_conv3_bin, true); - tk::dnn::Activation layer3_14_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_15_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_15_conv1_bin, true); - tk::dnn::Conv2d layer3_15_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_15_conv2_bin, true); - tk::dnn::Conv2d layer3_15_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_15_conv3_bin, true); - tk::dnn::Activation layer3_15_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_16_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_16_conv1_bin, true); - tk::dnn::Conv2d layer3_16_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_16_conv2_bin, true); - tk::dnn::Conv2d layer3_16_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_16_conv3_bin, true); - tk::dnn::Activation layer3_16_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_17_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_17_conv1_bin, true); - tk::dnn::Conv2d layer3_17_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_17_conv2_bin, true); - tk::dnn::Conv2d layer3_17_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_17_conv3_bin, true); - tk::dnn::Activation layer3_17_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_18_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_18_conv1_bin, true); - tk::dnn::Conv2d layer3_18_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_18_conv2_bin, true); - tk::dnn::Conv2d layer3_18_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_18_conv3_bin, true); - tk::dnn::Activation layer3_18_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_19_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_19_conv1_bin, true); - tk::dnn::Conv2d layer3_19_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_19_conv2_bin, true); - tk::dnn::Conv2d layer3_19_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_19_conv3_bin, true); - tk::dnn::Activation layer3_19_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_20_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_20_conv1_bin, true); - tk::dnn::Conv2d layer3_20_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_20_conv2_bin, true); - tk::dnn::Conv2d layer3_20_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_20_conv3_bin, true); - tk::dnn::Activation layer3_20_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_21_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_21_conv1_bin, true); - tk::dnn::Conv2d layer3_21_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_21_conv2_bin, true); - tk::dnn::Conv2d layer3_21_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_21_conv3_bin, true); - tk::dnn::Activation layer3_21_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer3_22_conv1(&net, 256, 1, 1, 1, 1, 1, 1, layer3_22_conv1_bin, true); - tk::dnn::Conv2d layer3_22_conv2(&net, 256, 3, 3, 1, 1, 1, 1, layer3_22_conv2_bin, true); - tk::dnn::Conv2d layer3_22_conv3(&net, 1024, 1, 1, 1, 1, 1, 1, layer3_22_conv3_bin, true); - tk::dnn::Activation layer3_22_relu(&net, CUDNN_ACTIVATION_RELU); - - //layer 4 - tk::dnn::Conv2d layer4_0_conv1(&net, 512, 1, 1, 1, 1, 1, 1, layer4_0_conv1_bin, true); - tk::dnn::Conv2d layer4_0_conv2(&net, 512, 3, 3, 2, 2, 1, 1, layer4_0_conv2_bin, true); - tk::dnn::Conv2d layer4_0_conv3(&net, 2048, 1, 1, 1, 1, 1, 1, layer4_0_conv3_bin, true); - tk::dnn::Activation layer4_0_relu(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d layer4_0_downsample_0(&net, 2048, 1, 1, 2, 2, 1, 1, layer4_0_downsample_0, true); - - tk::dnn::Conv2d layer4_1_conv1(&net, 512, 1, 1, 1, 1, 1, 1, layer4_1_conv1_bin, true); - tk::dnn::Conv2d layer4_1_conv2(&net, 512, 3, 3, 1, 1, 1, 1, layer4_1_conv2_bin, true); - tk::dnn::Conv2d layer4_1_conv3(&net, 2048, 1, 1, 1, 1, 1, 1, layer4_1_conv3_bin, true); - tk::dnn::Activation layer4_1_relu(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Conv2d layer4_2_conv1(&net, 512, 1, 1, 1, 1, 1, 1, layer4_2_conv1_bin, true); - tk::dnn::Conv2d layer4_2_conv2(&net, 512, 3, 3, 1, 1, 1, 1, layer4_2_conv2_bin, true); - tk::dnn::Conv2d layer4_2_conv3(&net, 2048, 1, 1, 1, 1, 1, 1, layer4_2_conv3_bin, true); - tk::dnn::Activation layer4_2_relu(&net, CUDNN_ACTIVATION_RELU); + // layer 3 + int id_layer3_bin = 0; + for(int i=0; i<23;i++) + { + tk::dnn::Conv2d *layer1_0_conv1 = new tk::dnn::Conv2d(&net, 256, 1, 1, 1, 1, 0, 0, layer3_bin[id_layer3_bin++], true); + tk::dnn::Activation *relu1_0_1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + tk::dnn::Conv2d *layer1_0_conv2; + if(i==0) + layer1_0_conv2 = new tk::dnn::Conv2d(&net, 256, 3, 3, 2, 2, 1, 1, layer3_bin[id_layer3_bin++], true); + else + layer1_0_conv2 = new tk::dnn::Conv2d(&net, 256, 3, 3, 1, 1, 1, 1, layer3_bin[id_layer3_bin++], true); + + tk::dnn::Activation *relu1_0_2 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + tk::dnn::Conv2d *layer1_0_conv3 = new tk::dnn::Conv2d(&net, 1024, 1, 1, 1, 1, 0, 0, layer3_bin[id_layer3_bin++], true); + if(i==0) + { + tk::dnn::Layer *route_1_0_layers[1] = { last }; + tk::dnn::Route *route_1_0 = new tk::dnn::Route(&net, route_1_0_layers, 1); + tk::dnn::Conv2d *layer1_0_downsample_0 = new tk::dnn::Conv2d(&net, 1024, 1, 1, 2, 2, 0, 0, layer3_bin[id_layer3_bin++], true); + tk::dnn::Shortcut *s1_0 = new tk::dnn::Shortcut(&net, layer1_0_conv3); + } + else + { + tk::dnn::Shortcut *s1_0 = new tk::dnn::Shortcut(&net, last); + } + tk::dnn::Activation *layer1_0_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + last = layer1_0_relu; + } + // layer 4 + int id_layer4_bin = 0; + for(int i=0; i<3;i++) + { + tk::dnn::Conv2d *layer1_0_conv1 = new tk::dnn::Conv2d(&net, 512, 1, 1, 1, 1, 0, 0, layer4_bin[id_layer4_bin++], true); + tk::dnn::Activation *relu1_0_1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + tk::dnn::Conv2d *layer1_0_conv2; + if(i==0) + layer1_0_conv2 = new tk::dnn::Conv2d(&net, 512, 3, 3, 2, 2, 1, 1, layer4_bin[id_layer4_bin++], true); + else + layer1_0_conv2 = new tk::dnn::Conv2d(&net, 512, 3, 3, 1, 1, 1, 1, layer4_bin[id_layer4_bin++], true); + + tk::dnn::Activation *relu1_0_2 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + tk::dnn::Conv2d *layer1_0_conv3 = new tk::dnn::Conv2d(&net, 2048, 1, 1, 1, 1, 0, 0, layer4_bin[id_layer4_bin++], true); + if(i==0) + { + tk::dnn::Layer *route_1_0_layers[1] = { last }; + tk::dnn::Route *route_1_0 = new tk::dnn::Route(&net, route_1_0_layers, 1); + tk::dnn::Conv2d *layer1_0_downsample_0 = new tk::dnn::Conv2d(&net, 2048, 1, 1, 2, 2, 0, 0, layer4_bin[id_layer4_bin++], true); + tk::dnn::Shortcut *s1_0 = new tk::dnn::Shortcut(&net, layer1_0_conv3); + } + else + { + tk::dnn::Shortcut *s1_0 = new tk::dnn::Shortcut(&net, last); + } + tk::dnn::Activation *layer1_0_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); + last = layer1_0_relu; + } //final - tk::dnn::Pooling avgpool(&net, 3, 3, 2, 2, tk::dnn::POOLING_AVERAGE); + tk::dnn::Pooling avgpool(&net, 7, 7, 7, 7, 0, 0, tk::dnn::POOLING_AVERAGE); tk::dnn::Dense fc(&net, 1000, fc_bin); -*/ + + // Load input dnnType *data; dnnType *input_h; readBinaryFile(input_bin, dim.tot(), &input_h, &data); - printDeviceVector(64, data, true); + //printDeviceVector(64, data, true); //print network model net.print(); -/* + //convert network to tensorRT tk::dnn::NetworkRT netRT(&net, "resnet101.rt"); -*/ + tk::dnn::dataDim_t out_dim; out_dim = net.layers[net.num_layers-1]->output_dim; @@ -376,8 +309,8 @@ int main() } cudnn_out = net.layers[net.num_layers-1]->dstData; - printDeviceVector(64, cudnn_out, true); -/* + //printDeviceVector(64, cudnn_out, true); + tk::dnn::dataDim_t dim2 = dim; printCenteredTitle(" TENSORRT inference ", '=', 30); { @@ -388,7 +321,7 @@ int main() dim2.print(); } rt_out = (dnnType *)netRT.buffersRT[1]; -*/ + printCenteredTitle(std::string(" RESNET CHECK RESULTS ").c_str(), '=', 30); dnnType *out, *out_h; @@ -396,11 +329,11 @@ int main() readBinaryFile(output_bin, odim, &out_h, &out); std::cout << "CUDNN vs correct"; checkResult(odim, cudnn_out, out); -/* + std::cout << "TRT vs correct"; checkResult(odim, rt_out, out); std::cout << "CUDNN vs TRT "; checkResult(odim, cudnn_out, rt_out); -*/ + return 0; }