From c4e955eab54332eb8483629b0df42cd0ed94fae0 Mon Sep 17 00:00:00 2001 From: Micaela Verucchi Date: Thu, 11 Jun 2020 12:43:34 +0200 Subject: [PATCH] Add different yolov4 size tests Signed-off-by: Micaela Verucchi --- include/tkDNN/utils.h | 2 +- src/utils.cpp | 16 +- tests/darknet/cfg/yolo4_320.cfg | 1156 +++++++++++++++++ .../darknet/cfg/{yolo4.cfg => yolo4_416.cfg} | 0 tests/darknet/cfg/yolo4_512.cfg | 1156 +++++++++++++++++ tests/darknet/cfg/yolo4_608.cfg | 1156 +++++++++++++++++ tests/darknet/{yolo4.cpp => yolo4_320.cpp} | 6 +- tests/darknet/yolo4_416.cpp | 34 + tests/darknet/yolo4_512.cpp | 34 + tests/darknet/yolo4_608.cpp | 34 + tests/test_rtinference/rtinference.cpp | 16 +- 11 files changed, 3596 insertions(+), 14 deletions(-) create mode 100644 tests/darknet/cfg/yolo4_320.cfg rename tests/darknet/cfg/{yolo4.cfg => yolo4_416.cfg} (100%) create mode 100644 tests/darknet/cfg/yolo4_512.cfg create mode 100644 tests/darknet/cfg/yolo4_608.cfg rename tests/darknet/{yolo4.cpp => yolo4_320.cpp} (85%) create mode 100644 tests/darknet/yolo4_416.cpp create mode 100644 tests/darknet/yolo4_512.cpp create mode 100644 tests/darknet/yolo4_608.cpp diff --git a/include/tkDNN/utils.h b/include/tkDNN/utils.h index aa73e9e..bca99f8 100644 --- a/include/tkDNN/utils.h +++ b/include/tkDNN/utils.h @@ -105,7 +105,7 @@ void printCenteredTitle(const char *title, char fill, int dim = 30); bool fileExist(const char *fname); void downloadWeightsifDoNotExist(const std::string& input_bin, const std::string& test_folder, const std::string& weights_url); void readBinaryFile(std::string fname, int size, dnnType** data_h, dnnType** data_d, int seek = 0); -int checkResult(int size, dnnType *data_d, dnnType *correct_d, bool device = true, int limit = 10); +int checkResult(int size, dnnType *data_d, dnnType *correct_d, bool device = true, int limit = 10, bool verbose=true); void printDeviceVector(int size, dnnType* vec_d, bool device = true); float getColor(const int c, const int x, const int max); void resize(int size, dnnType **data); diff --git a/src/utils.cpp b/src/utils.cpp index 65030f0..1ab57ad 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -83,7 +83,7 @@ void printDeviceVector(int size, dnnType* vec_d, bool device){ delete [] vec; } -int checkResult(int size, dnnType *data_d, dnnType *correct_d, bool device, int limit) { +int checkResult(int size, dnnType *data_d, dnnType *correct_d, bool device, int limit, bool verbose) { dnnType *data_h, *correct_h; const float eps = 0.02f; @@ -117,13 +117,15 @@ int checkResult(int size, dnnType *data_d, dnnType *correct_d, bool device, int delete [] correct_h; } - std::cout<<" | "; - if(diffs == 0) - std::cout< input_bins = { bin_path + "/layers/input.bin" }; @@ -15,9 +15,9 @@ int main() { bin_path + "/debug/layer161_out.bin" }; std::string wgs_path = bin_path + "/layers"; - std::string cfg_path = "../tests/darknet/cfg/yolo4.cfg"; + std::string cfg_path = "../tests/darknet/cfg/yolo4_320.cfg"; std::string name_path = "../tests/darknet/names/coco.names"; - downloadWeightsifDoNotExist(input_bins[0], bin_path, "https://cloud.hipert.unimore.it/s/d97CFzYqCPCp5Hg/download"); + downloadWeightsifDoNotExist(input_bins[0], bin_path, "https://cloud.hipert.unimore.it/s/64PHAwrM6RCZbiR/download"); // parse darknet network tk::dnn::Network *net = tk::dnn::darknetParser(cfg_path, wgs_path, name_path); diff --git a/tests/darknet/yolo4_416.cpp b/tests/darknet/yolo4_416.cpp new file mode 100644 index 0000000..984b265 --- /dev/null +++ b/tests/darknet/yolo4_416.cpp @@ -0,0 +1,34 @@ +#include +#include +#include "tkdnn.h" +#include "test.h" +#include "DarknetParser.h" + +int main() { + std::string bin_path = "yolo4_416"; + std::vector input_bins = { + bin_path + "/layers/input.bin" + }; + std::vector output_bins = { + bin_path + "/debug/layer139_out.bin", + bin_path + "/debug/layer150_out.bin", + bin_path + "/debug/layer161_out.bin" + }; + std::string wgs_path = bin_path + "/layers"; + std::string cfg_path = "../tests/darknet/cfg/yolo4_416.cfg"; + std::string name_path = "../tests/darknet/names/coco.names"; + downloadWeightsifDoNotExist(input_bins[0], bin_path, "https://cloud.hipert.unimore.it/s/982LxTQcNQfFQc4/download"); + + // parse darknet network + tk::dnn::Network *net = tk::dnn::darknetParser(cfg_path, wgs_path, name_path); + net->print(); + + //convert network to tensorRT + tk::dnn::NetworkRT *netRT = new tk::dnn::NetworkRT(net, net->getNetworkRTName(bin_path.c_str())); + + int ret = testInference(input_bins, output_bins, net, netRT); + net->releaseLayers(); + delete net; + delete netRT; + return ret; +} diff --git a/tests/darknet/yolo4_512.cpp b/tests/darknet/yolo4_512.cpp new file mode 100644 index 0000000..414e9be --- /dev/null +++ b/tests/darknet/yolo4_512.cpp @@ -0,0 +1,34 @@ +#include +#include +#include "tkdnn.h" +#include "test.h" +#include "DarknetParser.h" + +int main() { + std::string bin_path = "yolo4_512"; + std::vector input_bins = { + bin_path + "/layers/input.bin" + }; + std::vector output_bins = { + bin_path + "/debug/layer139_out.bin", + bin_path + "/debug/layer150_out.bin", + bin_path + "/debug/layer161_out.bin" + }; + std::string wgs_path = bin_path + "/layers"; + std::string cfg_path = "../tests/darknet/cfg/yolo4_512.cfg"; + std::string name_path = "../tests/darknet/names/coco.names"; + downloadWeightsifDoNotExist(input_bins[0], bin_path, "https://cloud.hipert.unimore.it/s/XN3FNXs3fnMaK5i/download"); + + // parse darknet network + tk::dnn::Network *net = tk::dnn::darknetParser(cfg_path, wgs_path, name_path); + net->print(); + + //convert network to tensorRT + tk::dnn::NetworkRT *netRT = new tk::dnn::NetworkRT(net, net->getNetworkRTName(bin_path.c_str())); + + int ret = testInference(input_bins, output_bins, net, netRT); + net->releaseLayers(); + delete net; + delete netRT; + return ret; +} diff --git a/tests/darknet/yolo4_608.cpp b/tests/darknet/yolo4_608.cpp new file mode 100644 index 0000000..dda084f --- /dev/null +++ b/tests/darknet/yolo4_608.cpp @@ -0,0 +1,34 @@ +#include +#include +#include "tkdnn.h" +#include "test.h" +#include "DarknetParser.h" + +int main() { + std::string bin_path = "yolo4_608"; + std::vector input_bins = { + bin_path + "/layers/input.bin" + }; + std::vector output_bins = { + bin_path + "/debug/layer139_out.bin", + bin_path + "/debug/layer150_out.bin", + bin_path + "/debug/layer161_out.bin" + }; + std::string wgs_path = bin_path + "/layers"; + std::string cfg_path = "../tests/darknet/cfg/yolo4_608.cfg"; + std::string name_path = "../tests/darknet/names/coco.names"; + downloadWeightsifDoNotExist(input_bins[0], bin_path, "https://cloud.hipert.unimore.it/s/Bg9r7kqDFJiFB4c/download"); + + // parse darknet network + tk::dnn::Network *net = tk::dnn::darknetParser(cfg_path, wgs_path, name_path); + net->print(); + + //convert network to tensorRT + tk::dnn::NetworkRT *netRT = new tk::dnn::NetworkRT(net, net->getNetworkRTName(bin_path.c_str())); + + int ret = testInference(input_bins, output_bins, net, netRT); + net->releaseLayers(); + delete net; + delete netRT; + return ret; +} diff --git a/tests/test_rtinference/rtinference.cpp b/tests/test_rtinference/rtinference.cpp index a629168..e128ae8 100644 --- a/tests/test_rtinference/rtinference.cpp +++ b/tests/test_rtinference/rtinference.cpp @@ -1,4 +1,5 @@ #include +#include #include "tkdnn.h" #include /* srand, rand */ @@ -29,6 +30,7 @@ int main(int argc, char *argv[]) { int ret_tensorrt = 0; std::cout<<"Testing with batchsize: "< stats; printCenteredTitle(" TENSORRT inference ", '=', 30); float total_time = 0; for(int i=0; i<1200; i++) { @@ -46,18 +48,26 @@ int main(int argc, char *argv[]) { netRT.infer(dim, input_d); TKDNN_TSTOP total_time+= t_ns; + if(i> 1) + stats.push_back(t_ns); // control output - std::cout<<"Output Buffers: "<