From c557193b8c3684cea403e30c5374edcaf86a9793 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 30 Aug 2018 17:53:41 +0300 Subject: [PATCH] dnn(test): use dnnBackendsAndTargets() param generator --- modules/dnn/perf/perf_convolution.cpp | 8 +--- modules/dnn/perf/perf_net.cpp | 23 +----------- modules/dnn/test/test_backends.cpp | 17 +-------- modules/dnn/test/test_common.hpp | 50 +++++++++++++++++++++++++ modules/dnn/test/test_halide_layers.cpp | 18 +-------- modules/dnn/test/test_precomp.hpp | 16 -------- 6 files changed, 56 insertions(+), 76 deletions(-) diff --git a/modules/dnn/perf/perf_convolution.cpp b/modules/dnn/perf/perf_convolution.cpp index 5164ac0130..be742ea48b 100644 --- a/modules/dnn/perf/perf_convolution.cpp +++ b/modules/dnn/perf/perf_convolution.cpp @@ -666,15 +666,9 @@ PERF_TEST_P_(Conv, conv) SANITY_CHECK_NOTHING(); } -static const tuple testBackendsAndTargets[] = { - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_CPU), - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL), - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL_FP16) -}; - INSTANTIATE_TEST_CASE_P(/**/, Conv, Combine( ConvParamID::all(), - testing::ValuesIn(testBackendsAndTargets) + dnnBackendsAndTargets(false, false) // defined in ../test/test_common.hpp )); } // namespace diff --git a/modules/dnn/perf/perf_net.cpp b/modules/dnn/perf/perf_net.cpp index c6cef9f4f7..192604b861 100644 --- a/modules/dnn/perf/perf_net.cpp +++ b/modules/dnn/perf/perf_net.cpp @@ -14,10 +14,7 @@ namespace opencv_test { -CV_ENUM(DNNBackend, DNN_BACKEND_DEFAULT, DNN_BACKEND_HALIDE, DNN_BACKEND_INFERENCE_ENGINE, DNN_BACKEND_OPENCV) -CV_ENUM(DNNTarget, DNN_TARGET_CPU, DNN_TARGET_OPENCL, DNN_TARGET_OPENCL_FP16, DNN_TARGET_MYRIAD) - -class DNNTestNetwork : public ::perf::TestBaseWithParam< tuple > +class DNNTestNetwork : public ::perf::TestBaseWithParam< tuple > { public: dnn::Backend backend; @@ -269,22 +266,6 @@ PERF_TEST_P_(DNNTestNetwork, Inception_v2_Faster_RCNN) Mat(cv::Size(800, 600), CV_32FC3)); } -const tuple testCases[] = { -#ifdef HAVE_HALIDE - tuple(DNN_BACKEND_HALIDE, DNN_TARGET_CPU), - tuple(DNN_BACKEND_HALIDE, DNN_TARGET_OPENCL), -#endif -#ifdef HAVE_INF_ENGINE - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_CPU), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL_FP16), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_MYRIAD), -#endif - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_CPU), - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL), - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL_FP16) -}; - -INSTANTIATE_TEST_CASE_P(/*nothing*/, DNNTestNetwork, testing::ValuesIn(testCases)); +INSTANTIATE_TEST_CASE_P(/*nothing*/, DNNTestNetwork, dnnBackendsAndTargets()); } // namespace diff --git a/modules/dnn/test/test_backends.cpp b/modules/dnn/test/test_backends.cpp index 309f0010e4..8a3653957c 100644 --- a/modules/dnn/test/test_backends.cpp +++ b/modules/dnn/test/test_backends.cpp @@ -285,21 +285,6 @@ TEST_P(DNNTestNetwork, FastNeuralStyle_eccv16) processNet("dnn/fast_neural_style_eccv16_starry_night.t7", "", inp, "", "", l1, lInf); } -const tuple testCases[] = { -#ifdef HAVE_HALIDE - tuple(DNN_BACKEND_HALIDE, DNN_TARGET_CPU), - tuple(DNN_BACKEND_HALIDE, DNN_TARGET_OPENCL), -#endif -#ifdef HAVE_INF_ENGINE - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_CPU), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL_FP16), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_MYRIAD), -#endif - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL), - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL_FP16) -}; - -INSTANTIATE_TEST_CASE_P(/*nothing*/, DNNTestNetwork, testing::ValuesIn(testCases)); +INSTANTIATE_TEST_CASE_P(/*nothing*/, DNNTestNetwork, dnnBackendsAndTargets(true, true, false)); }} // namespace diff --git a/modules/dnn/test/test_common.hpp b/modules/dnn/test/test_common.hpp index b752f4f5ec..e5fb5859b6 100644 --- a/modules/dnn/test/test_common.hpp +++ b/modules/dnn/test/test_common.hpp @@ -42,6 +42,10 @@ #ifndef __OPENCV_TEST_COMMON_HPP__ #define __OPENCV_TEST_COMMON_HPP__ +#ifdef HAVE_OPENCL +#include "opencv2/core/ocl.hpp" +#endif + namespace cv { namespace dnn { CV__DNN_EXPERIMENTAL_NS_BEGIN static inline void PrintTo(const cv::dnn::Backend& v, std::ostream* os) @@ -227,4 +231,50 @@ static inline bool readFileInMemory(const std::string& filename, std::string& co return true; } +namespace opencv_test { + +using namespace cv::dnn; + +static testing::internal::ParamGenerator > dnnBackendsAndTargets( + bool withInferenceEngine = true, + bool withHalide = false, + bool withCpuOCV = true +) +{ + std::vector > targets; +#ifdef HAVE_HALIDE + if (withHalide) + { + targets.push_back(make_tuple(DNN_BACKEND_HALIDE, DNN_TARGET_CPU)); + if (cv::ocl::useOpenCL()) + targets.push_back(make_tuple(DNN_BACKEND_HALIDE, DNN_TARGET_OPENCL)); + } +#endif +#ifdef HAVE_INF_ENGINE + if (withInferenceEngine) + { + targets.push_back(make_tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_CPU)); + if (cv::ocl::useOpenCL()) + { + targets.push_back(make_tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL)); + targets.push_back(make_tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL_FP16)); + } + if (checkMyriadTarget()) + targets.push_back(make_tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_MYRIAD)); + } +#endif + if (withCpuOCV) + targets.push_back(make_tuple(DNN_BACKEND_OPENCV, DNN_TARGET_CPU)); +#ifdef HAVE_OPENCL + if (cv::ocl::useOpenCL()) + { + targets.push_back(make_tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL)); + targets.push_back(make_tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL_FP16)); + } +#endif + return testing::ValuesIn(targets); +} + +} // namespace + #endif diff --git a/modules/dnn/test/test_halide_layers.cpp b/modules/dnn/test/test_halide_layers.cpp index 11d059223c..445f85b376 100644 --- a/modules/dnn/test/test_halide_layers.cpp +++ b/modules/dnn/test/test_halide_layers.cpp @@ -44,23 +44,9 @@ static void test(LayerParams& params, Mat& input, Backend backendId, Target targ test(input, net, backendId, targetId, skipCheck); } -static testing::internal::ParamGenerator > dnnBackendsAndTargetsWithHalide() +static inline testing::internal::ParamGenerator > dnnBackendsAndTargetsWithHalide() { - static const tuple testCases[] = { -#ifdef HAVE_HALIDE - tuple(DNN_BACKEND_HALIDE, DNN_TARGET_CPU), - tuple(DNN_BACKEND_HALIDE, DNN_TARGET_OPENCL), -#endif -#ifdef HAVE_INF_ENGINE - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_CPU), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL_FP16), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_MYRIAD), -#endif - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL), - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL_FP16) - }; - return testing::ValuesIn(testCases); + return dnnBackendsAndTargets(true, true, false); // OpenCV/CPU is used as reference } class Test_Halide_layers : public DNNTestLayer {}; diff --git a/modules/dnn/test/test_precomp.hpp b/modules/dnn/test/test_precomp.hpp index 0cd8b582e6..6c1fbd64b1 100644 --- a/modules/dnn/test/test_precomp.hpp +++ b/modules/dnn/test/test_precomp.hpp @@ -66,22 +66,6 @@ static testing::internal::ParamGenerator availableDnnTargets() return testing::ValuesIn(targets); } -static testing::internal::ParamGenerator > dnnBackendsAndTargets() -{ - static const tuple testCases[] = { - #ifdef HAVE_INF_ENGINE - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_CPU), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_OPENCL_FP16), - tuple(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_MYRIAD), - #endif - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_CPU), - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL), - tuple(DNN_BACKEND_OPENCV, DNN_TARGET_OPENCL_FP16) - }; - return testing::ValuesIn(testCases); -} - class DNNTestLayer : public TestWithParam > { public: