From 8bc8a9464548325b9dfffea72b39c9092c1d5362 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Tue, 2 Apr 2019 15:03:32 +0300 Subject: [PATCH] dnn: update DNNTestOpenVINO.models tests - models are moved out from OpenVINO package - need to download them separatelly --- modules/dnn/test/test_ie_models.cpp | 115 +++++++++++++++++++++++----- 1 file changed, 94 insertions(+), 21 deletions(-) diff --git a/modules/dnn/test/test_ie_models.cpp b/modules/dnn/test/test_ie_models.cpp index 49262a5a32..ea4633bce2 100644 --- a/modules/dnn/test/test_ie_models.cpp +++ b/modules/dnn/test/test_ie_models.cpp @@ -21,9 +21,18 @@ static void initDLDTDataPath() static bool initialized = false; if (!initialized) { +#if INF_ENGINE_RELEASE <= 2018050000 const char* dldtTestDataPath = getenv("INTEL_CVSDK_DIR"); if (dldtTestDataPath) - cvtest::addDataSearchPath(cv::utils::fs::join(dldtTestDataPath, "deployment_tools")); + cvtest::addDataSearchPath(dldtTestDataPath); +#else + const char* omzDataPath = getenv("OPENCV_OPEN_MODEL_ZOO_DATA_PATH"); + if (omzDataPath) + cvtest::addDataSearchPath(omzDataPath); + const char* dnnDataPath = getenv("OPENCV_DNN_TEST_DATA_PATH"); + if (dnnDataPath) + cvtest::addDataSearchPath(std::string(dnnDataPath) + "/omz_intel_models"); +#endif initialized = true; } #endif @@ -33,6 +42,76 @@ using namespace cv; using namespace cv::dnn; using namespace InferenceEngine; +struct OpenVINOModelTestCaseInfo +{ + const char* modelPathFP32; + const char* modelPathFP16; +}; + +static const std::map& getOpenVINOTestModels() +{ + static std::map g_models { +#if INF_ENGINE_RELEASE <= 2018050000 + { "age-gender-recognition-retail-0013", { + "deployment_tools/intel_models/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013", + "deployment_tools/intel_models/age-gender-recognition-retail-0013/FP16/age-gender-recognition-retail-0013" + }}, + { "face-person-detection-retail-0002", { + "deployment_tools/intel_models/face-person-detection-retail-0002/FP32/face-person-detection-retail-0002", + "deployment_tools/intel_models/face-person-detection-retail-0002/FP16/face-person-detection-retail-0002" + }}, + { "head-pose-estimation-adas-0001", { + "deployment_tools/intel_models/head-pose-estimation-adas-0001/FP32/head-pose-estimation-adas-0001", + "deployment_tools/intel_models/head-pose-estimation-adas-0001/FP16/head-pose-estimation-adas-0001" + }}, + { "person-detection-retail-0002", { + "deployment_tools/intel_models/person-detection-retail-0002/FP32/person-detection-retail-0002", + "deployment_tools/intel_models/person-detection-retail-0002/FP16/person-detection-retail-0002" + }}, + { "vehicle-detection-adas-0002", { + "deployment_tools/intel_models/vehicle-detection-adas-0002/FP32/vehicle-detection-adas-0002", + "deployment_tools/intel_models/vehicle-detection-adas-0002/FP16/vehicle-detection-adas-0002" + }} +#else + // layout is defined by open_model_zoo/model_downloader + // Downloaded using these parameters for Open Model Zoo downloader (2019R1): + // ./downloader.py -o ${OPENCV_DNN_TEST_DATA_PATH}/omz_intel_models --cache_dir ${OPENCV_DNN_TEST_DATA_PATH}/.omz_cache/ \ + // --name face-person-detection-retail-0002,face-person-detection-retail-0002-fp16,age-gender-recognition-retail-0013,age-gender-recognition-retail-0013-fp16,head-pose-estimation-adas-0001,head-pose-estimation-adas-0001-fp16,person-detection-retail-0002,person-detection-retail-0002-fp16,vehicle-detection-adas-0002,vehicle-detection-adas-0002-fp16 + { "age-gender-recognition-retail-0013", { + "Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013", + "Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013-fp16" + }}, + { "face-person-detection-retail-0002", { + "Retail/object_detection/face_pedestrian/rmnet-ssssd-2heads/0002/dldt/face-person-detection-retail-0002", + "Retail/object_detection/face_pedestrian/rmnet-ssssd-2heads/0002/dldt/face-person-detection-retail-0002-fp16" + }}, + { "head-pose-estimation-adas-0001", { + "Transportation/object_attributes/headpose/vanilla_cnn/dldt/head-pose-estimation-adas-0001", + "Transportation/object_attributes/headpose/vanilla_cnn/dldt/head-pose-estimation-adas-0001-fp16" + }}, + { "person-detection-retail-0002", { + "Retail/object_detection/pedestrian/hypernet-rfcn/0026/dldt/person-detection-retail-0002", + "Retail/object_detection/pedestrian/hypernet-rfcn/0026/dldt/person-detection-retail-0002-fp16" + }}, + { "vehicle-detection-adas-0002", { + "Transportation/object_detection/vehicle/mobilenet-reduced-ssd/dldt/vehicle-detection-adas-0002", + "Transportation/object_detection/vehicle/mobilenet-reduced-ssd/dldt/vehicle-detection-adas-0002-fp16" + }} +#endif + }; + + return g_models; +} + +static const std::vector getOpenVINOTestModelsList() +{ + std::vector result; + const std::map& models = getOpenVINOTestModels(); + for (const auto& it : models) + result.push_back(it.first); + return result; +} + static inline void genData(const std::vector& dims, Mat& m, Blob::Ptr& dataPtr) { std::vector reversedDims(dims.begin(), dims.end()); @@ -172,25 +251,23 @@ void runCV(Target target, const std::string& xmlPath, const std::string& binPath } } -typedef TestWithParam > DNNTestOpenVINO; +typedef TestWithParam > DNNTestOpenVINO; TEST_P(DNNTestOpenVINO, models) { + initDLDTDataPath(); + Target target = (dnn::Target)(int)get<0>(GetParam()); std::string modelName = get<1>(GetParam()); - std::string precision = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? "FP16" : "FP32"; - std::string prefix; + bool isFP16 = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD); -#ifdef INF_ENGINE_RELEASE -#if INF_ENGINE_RELEASE <= 2018050000 - prefix = utils::fs::join("intel_models", - utils::fs::join(modelName, - utils::fs::join(precision, modelName))); -#endif -#endif + const std::map& models = getOpenVINOTestModels(); + const auto it = models.find(modelName); + ASSERT_TRUE(it != models.end()) << modelName; + OpenVINOModelTestCaseInfo modelInfo = it->second; + std::string modelPath = isFP16 ? modelInfo.modelPathFP16 : modelInfo.modelPathFP32; - initDLDTDataPath(); - std::string xmlPath = findDataFile(prefix + ".xml"); - std::string binPath = findDataFile(prefix + ".bin"); + std::string xmlPath = findDataFile(modelPath + ".xml"); + std::string binPath = findDataFile(modelPath + ".bin"); std::map inputsMap; std::map ieOutputsMap, cvOutputsMap; @@ -210,16 +287,12 @@ TEST_P(DNNTestOpenVINO, models) } } + INSTANTIATE_TEST_CASE_P(/**/, DNNTestOpenVINO, Combine(testing::ValuesIn(getAvailableTargets(DNN_BACKEND_INFERENCE_ENGINE)), - testing::Values( - "age-gender-recognition-retail-0013", - "face-person-detection-retail-0002", - "head-pose-estimation-adas-0001", - "person-detection-retail-0002", - "vehicle-detection-adas-0002" - )) + testing::ValuesIn(getOpenVINOTestModelsList()) + ) ); }}