diff --git a/CMakeLists.txt b/CMakeLists.txt index 197dced..01ffe48 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,9 +114,6 @@ target_link_libraries(test_resnet101_cnet tkDNN) add_executable(test_dla34_cnet tests/centernet/dla34_cnet/dla34_cnet.cpp) target_link_libraries(test_dla34_cnet tkDNN) -add_executable(test_resnet101_cnet3d tests/centernet/resnet101_cnet3d/resnet101_cnet3d.cpp) -target_link_libraries(test_resnet101_cnet3d tkDNN) - add_executable(test_dla34_cnet3d tests/centernet/dla34_cnet3d/dla34_cnet3d.cpp) target_link_libraries(test_dla34_cnet3d tkDNN) diff --git a/include/tkDNN/CenternetDetection3D.h b/include/tkDNN/CenternetDetection3D.h index 943fbf4..f9c918f 100644 --- a/include/tkDNN/CenternetDetection3D.h +++ b/include/tkDNN/CenternetDetection3D.h @@ -61,6 +61,8 @@ private: #endif cv::Mat r; float *d_ptrs; + + cv::Size sz_old; cv::Mat src; cv::Mat dst; diff --git a/src/CenternetDetection3D.cpp b/src/CenternetDetection3D.cpp index 8f7d7c3..653624b 100644 --- a/src/CenternetDetection3D.cpp +++ b/src/CenternetDetection3D.cpp @@ -106,17 +106,22 @@ bool CenternetDetection3D::init(const std::string& tensor_path, const int n_clas calibs_.at(0,2) = 604.0814; calibs_.at(1,1) = 707.0493; calibs_.at(1,2) = 180.5066; + calibs_.at(0,3) = 45.75831; + calibs_.at(1,3) = -0.3454157; + calibs_.at(2,2) = 1.0; + calibs_.at(2,3) = 0.004981016; } else { - calibs_.at(0,0) = inputCalibs[bi].at(0,0) * dim.w / 1440; - calibs_.at(0,2) = inputCalibs[bi].at(0,2) * dim.w / 1440; - calibs_.at(1,1) = inputCalibs[bi].at(1,1) * dim.h / 1080; - calibs_.at(1,2) = inputCalibs[bi].at(1,2) * dim.h / 1080; + calibs_.at(0,0) = inputCalibs[bi].at(0,0);// * (1440.0/dim.w);// / 1440; + calibs_.at(0,2) = inputCalibs[bi].at(0,2);// * (1440.0/dim.w);// / 1440; + calibs_.at(1,1) = inputCalibs[bi].at(1,1);// * (1080.0/dim.h);//dim.h / 1080; + calibs_.at(1,2) = inputCalibs[bi].at(1,2);// * (1080.0/dim.h);//dim.h / 1080; + calibs_.at(2,2) = 1.0; } - calibs_.at(0,3) = 45.75831; - calibs_.at(1,3) = -0.3454157; - calibs_.at(2,2) = 1.0; - calibs_.at(2,3) = 0.004981016; + // calibs_.at(0,3) = 45.75831; + // calibs_.at(1,3) = -0.3454157; + // calibs_.at(2,2) = 1.0; + // calibs_.at(2,3) = 0.004981016; calibs.push_back(calibs_); } @@ -165,16 +170,21 @@ bool CenternetDetection3D::init(const std::string& tensor_path, const int n_clas } void CenternetDetection3D::preprocess(cv::Mat &frame, const int bi){ - // auto start_t = std::chrono::steady_clock::now(); - // auto step_t = std::chrono::steady_clock::now(); - // auto end_t = std::chrono::steady_clock::now(); cv::Size sz = originalSize[bi]; - // std::cout<<"image: "<(0,2) = new_width / 2.0f; + calibs[bi].at(1,2) = new_height /2.0f; + } + else { + calibs[bi].at(0,0) = inputCalibs[bi].at(0,0) * 2.0 * dim.w / sz.width; + calibs[bi].at(0,2) = inputCalibs[bi].at(0,2) * dim.w / sz.width ; + calibs[bi].at(1,1) = inputCalibs[bi].at(1,1) * 2.0 * dim.h / sz.height; + calibs[bi].at(1,2) = inputCalibs[bi].at(1,2) * dim.h / sz.height; + } float c[] = {new_width / 2.0f, new_height /2.0f}; float s[] = {new_width, new_height}; // ----------- get_affine_transform @@ -206,13 +216,13 @@ void CenternetDetection3D::preprocess(cv::Mat &frame, const int bi){ } sz_old = sz; #ifdef OPENCV_CUDACONTRIB - std::cout<<"OPENCV CPMTROB\n"; + // std::cout<<"OPENCV CPMTROB\n"; cv::cuda::GpuMat im_Orig; cv::cuda::GpuMat imageF1_d, imageF2_d; im_Orig = cv::cuda::GpuMat(frame); - // cv::cuda::resize (im_Orig, imageF1_d, cv::Size(new_width, new_height)); - imageF1_d = im_Orig; + cv::cuda::resize (im_Orig, imageF1_d, cv::Size(dim.w, dim.h));//cv::Size(new_width, new_height)); + // imageF1_d = im_Orig; checkCuda( cudaDeviceSynchronize() ); sz = imageF1_d.size(); @@ -252,10 +262,10 @@ void CenternetDetection3D::preprocess(cv::Mat &frame, const int bi){ // std::cout << " TIME Memcpy to input_d: " << std::chrono::duration_cast(end_t - step_t).count() << " us" << std::endl; // step_t = end_t; #else - std::cout<<"NO OPENCV CPMTROB\n"; + // std::cout<<"NO OPENCV CPMTROB\n"; cv::Mat imageF; - // resize(frame, imageF, cv::Size(new_width, new_height)); - imageF = frame; + resize(frame, imageF, cv::Size(dim.w, dim.h));//cv::Size(new_width, new_height)); + // imageF = frame; sz = imageF.size(); // std::cout<<"size: "<& frames) { int thickness = 2; for(int bi=0; bi=0; ind_f--) { for(int j=0; j<4; j++) { - cv::line(frames[bi], cv::Point(b.corners.at(faceId.at(ind_f).at(j) * 2), - b.corners.at(faceId.at(ind_f).at(j) * 2 + 1)), - cv::Point(b.corners.at(faceId.at(ind_f).at((j+1)%4) * 2), - b.corners.at(faceId.at(ind_f).at((j+1)%4) * 2 + 1)), + cv::line(frames[bi], cv::Point(b.corners.at(faceId.at(ind_f).at(j) * 2) * scale_x, + b.corners.at(faceId.at(ind_f).at(j) * 2 + 1) * scale_y), + cv::Point(b.corners.at(faceId.at(ind_f).at((j+1)%4) * 2) * scale_x, + b.corners.at(faceId.at(ind_f).at((j+1)%4) * 2 + 1) * scale_y), colors[b.cl], 2); if(ind_f == 0) { - cv::line(frames[bi], cv::Point(b.corners.at(faceId.at(ind_f).at(0) * 2), - b.corners.at(faceId.at(ind_f).at(0) * 2 + 1)), - cv::Point(b.corners.at(faceId.at(ind_f).at(2) * 2), - b.corners.at(faceId.at(ind_f).at(2) * 2 + 1)), colors[b.cl], 2); - cv::line(frames[bi], cv::Point(b.corners.at(faceId.at(ind_f).at(1) * 2), - b.corners.at(faceId.at(ind_f).at(1) * 2 + 1)), - cv::Point(b.corners.at(faceId.at(ind_f).at(3) * 2), - b.corners.at(faceId.at(ind_f).at(3) * 2 + 1)), colors[b.cl], 2); + cv::line(frames[bi], cv::Point(b.corners.at(faceId.at(ind_f).at(0) * 2) * scale_x, + b.corners.at(faceId.at(ind_f).at(0) * 2 + 1)* scale_y), + cv::Point(b.corners.at(faceId.at(ind_f).at(2) * 2) * scale_x, + b.corners.at(faceId.at(ind_f).at(2) * 2 + 1) * scale_y), colors[b.cl], 2); + cv::line(frames[bi], cv::Point(b.corners.at(faceId.at(ind_f).at(1) * 2)* scale_x, + b.corners.at(faceId.at(ind_f).at(1) * 2 + 1)* scale_y), + cv::Point(b.corners.at(faceId.at(ind_f).at(3) * 2)* scale_x, + b.corners.at(faceId.at(ind_f).at(3) * 2 + 1)* scale_y), colors[b.cl], 2); } } } // draw label cv::Size text_size = getTextSize(classesNames[b.cl], cv::FONT_HERSHEY_SIMPLEX, font_scale, thickness, &baseline); - cv::rectangle(frames[bi], cv::Point(b.corners.at(faceId.at(0).at(0) * 2), - b.corners.at(faceId.at(0).at(0) * 2 + 1)), - cv::Point((b.corners.at(faceId.at(0).at(0) * 2) + text_size.width - 2), - (b.corners.at(faceId.at(0).at(0) * 2 + 1)) - text_size.height - 2), colors[b.cl], -1); - cv::putText(frames[bi], classesNames[b.cl], cv::Point(b.corners.at(faceId.at(0).at(0) * 2), - b.corners.at(faceId.at(0).at(0) * 2 + 1) - (baseline / 2)), + cv::rectangle(frames[bi], cv::Point(b.corners.at(faceId.at(0).at(0) * 2)* scale_x, + b.corners.at(faceId.at(0).at(0) * 2 + 1)* scale_y), + cv::Point((b.corners.at(faceId.at(0).at(0) * 2)* scale_x + text_size.width - 2), + (b.corners.at(faceId.at(0).at(0) * 2 + 1)* scale_y - text_size.height - 2)), colors[b.cl], -1); + cv::putText(frames[bi], classesNames[b.cl], cv::Point(b.corners.at(faceId.at(0).at(0) * 2)* scale_x, + (b.corners.at(faceId.at(0).at(0) * 2 + 1)* scale_y - (baseline / 2))), cv::FONT_HERSHEY_SIMPLEX, font_scale, cv::Scalar(255, 255, 255), thickness); } } diff --git a/tests/centernet/resnet101_cnet3d/resnet101_cnet3d.cpp b/tests/centernet/resnet101_cnet3d/resnet101_cnet3d.cpp deleted file mode 100644 index 396c62a..0000000 --- a/tests/centernet/resnet101_cnet3d/resnet101_cnet3d.cpp +++ /dev/null @@ -1,443 +0,0 @@ -#include - -#include "kernels.h" -#include "Yolo3Detection.h" -#include "tkdnn.h" -#include -#include // std::iota -#include // std::sort -// #include "utils.h" - -const char *input_bin = "resnet101_cnet3d/debug/input.bin"; -const char *conv1_bin = "resnet101_cnet3d/layers/conv1.bin"; - -//layer1 -const char *layer1_bin[]={ -"resnet101_cnet3d/layers/layer1-0-conv1.bin", -"resnet101_cnet3d/layers/layer1-0-conv2.bin", -"resnet101_cnet3d/layers/layer1-0-conv3.bin", -"resnet101_cnet3d/layers/layer1-0-downsample-0.bin", - -"resnet101_cnet3d/layers/layer1-1-conv1.bin", -"resnet101_cnet3d/layers/layer1-1-conv2.bin", -"resnet101_cnet3d/layers/layer1-1-conv3.bin", - -"resnet101_cnet3d/layers/layer1-2-conv1.bin", -"resnet101_cnet3d/layers/layer1-2-conv2.bin", -"resnet101_cnet3d/layers/layer1-2-conv3.bin"}; - - -//layer2 -const char *layer2_bin[]={ -"resnet101_cnet3d/layers/layer2-0-conv1.bin", -"resnet101_cnet3d/layers/layer2-0-conv2.bin", -"resnet101_cnet3d/layers/layer2-0-conv3.bin", -"resnet101_cnet3d/layers/layer2-0-downsample-0.bin", - -"resnet101_cnet3d/layers/layer2-1-conv1.bin", -"resnet101_cnet3d/layers/layer2-1-conv2.bin", -"resnet101_cnet3d/layers/layer2-1-conv3.bin", - -"resnet101_cnet3d/layers/layer2-2-conv1.bin", -"resnet101_cnet3d/layers/layer2-2-conv2.bin", -"resnet101_cnet3d/layers/layer2-2-conv3.bin", - -"resnet101_cnet3d/layers/layer2-3-conv1.bin", -"resnet101_cnet3d/layers/layer2-3-conv2.bin", -"resnet101_cnet3d/layers/layer2-3-conv3.bin" -}; -//layer3 -const char *layer3_bin[]={ -"resnet101_cnet3d/layers/layer3-0-conv1.bin", -"resnet101_cnet3d/layers/layer3-0-conv2.bin", -"resnet101_cnet3d/layers/layer3-0-conv3.bin", -"resnet101_cnet3d/layers/layer3-0-downsample-0.bin", - -"resnet101_cnet3d/layers/layer3-1-conv1.bin", -"resnet101_cnet3d/layers/layer3-1-conv2.bin", -"resnet101_cnet3d/layers/layer3-1-conv3.bin", - -"resnet101_cnet3d/layers/layer3-2-conv1.bin", -"resnet101_cnet3d/layers/layer3-2-conv2.bin", -"resnet101_cnet3d/layers/layer3-2-conv3.bin", - -"resnet101_cnet3d/layers/layer3-3-conv1.bin", -"resnet101_cnet3d/layers/layer3-3-conv2.bin", -"resnet101_cnet3d/layers/layer3-3-conv3.bin", - -"resnet101_cnet3d/layers/layer3-4-conv1.bin", -"resnet101_cnet3d/layers/layer3-4-conv2.bin", -"resnet101_cnet3d/layers/layer3-4-conv3.bin", - -"resnet101_cnet3d/layers/layer3-5-conv1.bin", -"resnet101_cnet3d/layers/layer3-5-conv2.bin", -"resnet101_cnet3d/layers/layer3-5-conv3.bin", - -"resnet101_cnet3d/layers/layer3-6-conv1.bin", -"resnet101_cnet3d/layers/layer3-6-conv2.bin", -"resnet101_cnet3d/layers/layer3-6-conv3.bin", - -"resnet101_cnet3d/layers/layer3-7-conv1.bin", -"resnet101_cnet3d/layers/layer3-7-conv2.bin", -"resnet101_cnet3d/layers/layer3-7-conv3.bin", - -"resnet101_cnet3d/layers/layer3-8-conv1.bin", -"resnet101_cnet3d/layers/layer3-8-conv2.bin", -"resnet101_cnet3d/layers/layer3-8-conv3.bin", - -"resnet101_cnet3d/layers/layer3-9-conv1.bin", -"resnet101_cnet3d/layers/layer3-9-conv2.bin", -"resnet101_cnet3d/layers/layer3-9-conv3.bin", - -"resnet101_cnet3d/layers/layer3-10-conv1.bin", -"resnet101_cnet3d/layers/layer3-10-conv2.bin", -"resnet101_cnet3d/layers/layer3-10-conv3.bin", - -"resnet101_cnet3d/layers/layer3-11-conv1.bin", -"resnet101_cnet3d/layers/layer3-11-conv2.bin", -"resnet101_cnet3d/layers/layer3-11-conv3.bin", - -"resnet101_cnet3d/layers/layer3-12-conv1.bin", -"resnet101_cnet3d/layers/layer3-12-conv2.bin", -"resnet101_cnet3d/layers/layer3-12-conv3.bin", - -"resnet101_cnet3d/layers/layer3-13-conv1.bin", -"resnet101_cnet3d/layers/layer3-13-conv2.bin", -"resnet101_cnet3d/layers/layer3-13-conv3.bin", - -"resnet101_cnet3d/layers/layer3-14-conv1.bin", -"resnet101_cnet3d/layers/layer3-14-conv2.bin", -"resnet101_cnet3d/layers/layer3-14-conv3.bin", - -"resnet101_cnet3d/layers/layer3-15-conv1.bin", -"resnet101_cnet3d/layers/layer3-15-conv2.bin", -"resnet101_cnet3d/layers/layer3-15-conv3.bin", - -"resnet101_cnet3d/layers/layer3-16-conv1.bin", -"resnet101_cnet3d/layers/layer3-16-conv2.bin", -"resnet101_cnet3d/layers/layer3-16-conv3.bin", - -"resnet101_cnet3d/layers/layer3-17-conv1.bin", -"resnet101_cnet3d/layers/layer3-17-conv2.bin", -"resnet101_cnet3d/layers/layer3-17-conv3.bin", - -"resnet101_cnet3d/layers/layer3-18-conv1.bin", -"resnet101_cnet3d/layers/layer3-18-conv2.bin", -"resnet101_cnet3d/layers/layer3-18-conv3.bin", - -"resnet101_cnet3d/layers/layer3-19-conv1.bin", -"resnet101_cnet3d/layers/layer3-19-conv2.bin", -"resnet101_cnet3d/layers/layer3-19-conv3.bin", - -"resnet101_cnet3d/layers/layer3-20-conv1.bin", -"resnet101_cnet3d/layers/layer3-20-conv2.bin", -"resnet101_cnet3d/layers/layer3-20-conv3.bin", - -"resnet101_cnet3d/layers/layer3-21-conv1.bin", -"resnet101_cnet3d/layers/layer3-21-conv2.bin", -"resnet101_cnet3d/layers/layer3-21-conv3.bin", - -"resnet101_cnet3d/layers/layer3-22-conv1.bin", -"resnet101_cnet3d/layers/layer3-22-conv2.bin", -"resnet101_cnet3d/layers/layer3-22-conv3.bin"}; - - -//layer4 -const char *layer4_bin[]={ -"resnet101_cnet3d/layers/layer4-0-conv1.bin", -"resnet101_cnet3d/layers/layer4-0-conv2.bin", -"resnet101_cnet3d/layers/layer4-0-conv3.bin", -"resnet101_cnet3d/layers/layer4-0-downsample-0.bin", - -"resnet101_cnet3d/layers/layer4-1-conv1.bin", -"resnet101_cnet3d/layers/layer4-1-conv2.bin", -"resnet101_cnet3d/layers/layer4-1-conv3.bin", - -"resnet101_cnet3d/layers/layer4-2-conv1.bin", -"resnet101_cnet3d/layers/layer4-2-conv2.bin", -"resnet101_cnet3d/layers/layer4-2-conv3.bin"}; - -const char *d_conv1_bin = "resnet101_cnet3d/layers/deconv_layers-0-conv_offset_mask.bin"; -const char *deform1_bin = "resnet101_cnet3d/layers/deconv_layers-0.bin"; -const char *deconv1_bin = "resnet101_cnet3d/layers/deconv_layers-3.bin"; - -const char *d_conv2_bin = "resnet101_cnet3d/layers/deconv_layers-6-conv_offset_mask.bin"; -const char *deform2_bin = "resnet101_cnet3d/layers/deconv_layers-6.bin"; -const char *deconv2_bin = "resnet101_cnet3d/layers/deconv_layers-9.bin"; - -const char *d_conv3_bin = "resnet101_cnet3d/layers/deconv_layers-12-conv_offset_mask.bin"; -const char *deform3_bin = "resnet101_cnet3d/layers/deconv_layers-12.bin"; -const char *deconv3_bin = "resnet101_cnet3d/layers/deconv_layers-15.bin"; - -const char *hm_conv1_bin = "resnet101_cnet3d/layers/hm-0.bin"; -const char *hm_conv2_bin = "resnet101_cnet3d/layers/hm-2.bin"; -const char *wh_conv1_bin = "resnet101_cnet3d/layers/wh-0.bin"; -const char *wh_conv2_bin = "resnet101_cnet3d/layers/wh-2.bin"; -const char *reg_conv1_bin = "resnet101_cnet3d/layers/reg-0.bin"; -const char *reg_conv2_bin = "resnet101_cnet3d/layers/reg-2.bin"; -const char *dep_conv1_bin = "resnet101_cnet3d/layers/dep-0.bin"; -const char *dep_conv2_bin = "resnet101_cnet3d/layers/dep-2.bin"; -const char *rot_conv1_bin = "resnet101_cnet3d/layers/rot-0.bin"; -const char *rot_conv2_bin = "resnet101_cnet3d/layers/rot-2.bin"; -const char *dim_conv1_bin = "resnet101_cnet3d/layers/dim-0.bin"; -const char *dim_conv2_bin = "resnet101_cnet3d/layers/dim-2.bin"; -//final -const char *fc_bin = "resnet101_cnet3d/layers/fc.bin"; - -const char *output_bin[]={ -"resnet101_cnet3d/debug/hm.bin", -"resnet101_cnet3d/debug/wh.bin", -"resnet101_cnet3d/debug/reg.bin", -"resnet101_cnet3d/debug/dep.bin", -"resnet101_cnet3d/debug/rot.bin", -"resnet101_cnet3d/debug/dim.bin"}; - -int main() -{ - downloadWeightsifDoNotExist(input_bin, "resnet101_cnet3d", "https://cloud.hipert.unimore.it/s/xH5oH9t5wdnktYf/download"); - - // Network layout - tk::dnn::dataDim_t dim(1, 3, 512, 512, 1); - tk::dnn::Network net(dim); - - tk::dnn::Conv2d conv1(&net, 64, 7, 7, 2, 2, 3, 3, conv1_bin, true); - tk::dnn::Activation relu3(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Pooling maxpool4(&net, 3, 3, 2, 2, 1, 1, tk::dnn::POOLING_MAX); - - - //layer 1 - 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; - } - - // 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; - } - - // 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; - } - - tk::dnn::DeformConv2d *layer0_deform1 = new tk::dnn::DeformConv2d(&net, 256, 1, 3, 3, 1, 1, 1, 1, deform1_bin, d_conv1_bin, true); - tk::dnn::Activation *layer0_deform1_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::DeConv2d *layer0_deconv1 = new tk::dnn::DeConv2d(&net, 256, 4, 4, 2, 2, 1, 1, deconv1_bin, true); - tk::dnn::Activation *layer0_deconv1_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::DeformConv2d *layer1_deform1 = new tk::dnn::DeformConv2d(&net, 128, 1, 3, 3, 1, 1, 1, 1, deform2_bin, d_conv2_bin, true); - tk::dnn::Activation *layer1_deform1_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::DeConv2d *layer1_deconv1 = new tk::dnn::DeConv2d(&net, 128, 4, 4, 2, 2, 1, 1, deconv2_bin, true); - tk::dnn::Activation *layer1_deconv1_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::DeformConv2d *layer2_deform1 = new tk::dnn::DeformConv2d(&net, 64, 1, 3, 3, 1, 1, 1, 1, deform3_bin, d_conv3_bin, true); - tk::dnn::Activation *layer2_deform1_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::DeConv2d *layer2_deconv1 = new tk::dnn::DeConv2d(&net, 64, 4, 4, 2, 2, 1, 1, deconv3_bin, true); - tk::dnn::Activation *layer2_deconv1_relu = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - - tk::dnn::Layer *route_1_0_layers[1] = { layer2_deconv1_relu }; - tk::dnn::Conv2d *hm_conv1 = new tk::dnn::Conv2d(&net, 64, 3, 3, 1, 1, 1, 1, hm_conv1_bin, false); - tk::dnn::Activation *hm_relu1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d *hm = new tk::dnn::Conv2d(&net, 3, 1, 1, 1, 1, 0, 0, hm_conv2_bin, false); - hm->setFinal(); - int kernel = 3; - int pad = (kernel - 1)/2; - tk::dnn::Activation *hm_sig = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_SIGMOID); - tk::dnn::Pooling *hmax = new tk::dnn::Pooling(&net, kernel, kernel, 1, 1, pad, pad, tk::dnn::POOLING_MAX); - hmax->setFinal(); - - tk::dnn::Route *route_1_0 = new tk::dnn::Route(&net, route_1_0_layers, 1); - tk::dnn::Conv2d *wh_conv1 = new tk::dnn::Conv2d(&net, 64, 3, 3, 1, 1, 1, 1, wh_conv1_bin, false); - tk::dnn::Activation *wh_relu1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d *wh = new tk::dnn::Conv2d(&net, 2, 1, 1, 1, 1, 0, 0, wh_conv2_bin, false); - wh->setFinal(); - - tk::dnn::Route *route_2_0 = new tk::dnn::Route(&net, route_1_0_layers, 1); - tk::dnn::Conv2d *reg_conv1 = new tk::dnn::Conv2d(&net, 64, 3, 3, 1, 1, 1, 1, reg_conv1_bin, false); - tk::dnn::Activation *reg_relu1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d *reg = new tk::dnn::Conv2d(&net, 2, 1, 1, 1, 1, 0, 0, reg_conv2_bin, false); - reg->setFinal(); - - // dep - tk::dnn::Route *route_3_0 = new tk::dnn::Route(&net, route_1_0_layers, 1); - tk::dnn::Conv2d *dep_conv1 = new tk::dnn::Conv2d(&net, 64, 3, 3, 1, 1, 1, 1, dep_conv1_bin, false); - tk::dnn::Activation *dep_relu1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d *dep = new tk::dnn::Conv2d(&net, 1, 1, 1, 1, 1, 0, 0, dep_conv2_bin, false); - dep->setFinal(); - - // rot - tk::dnn::Route *route_4_0 = new tk::dnn::Route(&net, route_1_0_layers, 1); - tk::dnn::Conv2d *rot_conv1 = new tk::dnn::Conv2d(&net, 64, 3, 3, 1, 1, 1, 1, rot_conv1_bin, false); - tk::dnn::Activation *rot_relu1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d *rot = new tk::dnn::Conv2d(&net, 8, 1, 1, 1, 1, 0, 0, rot_conv2_bin, false); - rot->setFinal(); - - // dim - tk::dnn::Route *route_5_0 = new tk::dnn::Route(&net, route_1_0_layers, 1); - tk::dnn::Conv2d *dim_conv1 = new tk::dnn::Conv2d(&net, 64, 3, 3, 1, 1, 1, 1, dim_conv1_bin, false); - tk::dnn::Activation *dim_relu1 = new tk::dnn::Activation(&net, CUDNN_ACTIVATION_RELU); - tk::dnn::Conv2d *dim_ = new tk::dnn::Conv2d(&net, 3, 1, 1, 1, 1, 0, 0, dim_conv2_bin, false); - dim_->setFinal(); - - // Load input - dnnType *data; - dnnType *input_h; - readBinaryFile(input_bin, dim.tot(), &input_h, &data); - // printDeviceVector(64, data, true); - - //print network model - net.print(); - - //convert network to tensorRT - tk::dnn::NetworkRT netRT(&net, net.getNetworkRTName("resnet101_cnet3d")); - - - tk::dnn::dataDim_t dim1 = dim; //input dim - printCenteredTitle(" CUDNN inference ", '=', 30); - { - dim1.print(); - TKDNN_TSTART - net.infer(dim1, data); - TKDNN_TSTOP - dim1.print(); - } - - // printDeviceVector(64, cudnn_out, true); - - tk::dnn::dataDim_t dim2 = dim; - printCenteredTitle(" TENSORRT inference ", '=', 30); - { - dim2.print(); - TKDNN_TSTART - netRT.infer(dim2, data); - TKDNN_TSTOP - dim2.print(); - } - - tk::dnn::Layer *outs[6] = { hm, wh, reg, dep, rot, dim_ }; - int out_count = 1; - int ret_cudnn = 0, ret_tensorrt = 0, ret_cudnn_tensorrt = 0; - for(int i=0; i<6; i++) { - printCenteredTitle((std::string(" RESNET 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); - // std::cout<<"OUTPUT BIN:\n"; - // printDeviceVector(odim, cudnn_out, true); - // std::cout<<"FILE BIN:\n"; - // printDeviceVector(odim, out, true); - - dnnType *cudnn_out, *rt_out; - cudnn_out = outs[i]->dstData; - rt_out = (dnnType *)netRT.buffersRT[i+out_count]; - // there is the maxpool. It isn't an output but it is necessary for the process section - if(i==0) - out_count ++; - - 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; -}