From 0d9c63744e890685451146868c29230c1942d713 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Mon, 9 Apr 2018 16:22:19 +0300 Subject: [PATCH] Add CPU default extensions loading in IE dnn backend (#11252) * Add CPU default extensions loading in IE dnn backend * Load cpu_extensions for the future Intel's Inference Engine --- cmake/OpenCVDetectInferenceEngine.cmake | 1 + modules/dnn/src/op_inf_engine.cpp | 30 ++++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/cmake/OpenCVDetectInferenceEngine.cmake b/cmake/OpenCVDetectInferenceEngine.cmake index 9742461775..8bcb9ac057 100644 --- a/cmake/OpenCVDetectInferenceEngine.cmake +++ b/cmake/OpenCVDetectInferenceEngine.cmake @@ -50,6 +50,7 @@ set(ie_lib_list inference_engine) link_directories( ${INTEL_CVSDK_DIR}/external/mklml_lnx/lib ${INTEL_CVSDK_DIR}/inference_engine/external/mklml_lnx/lib + ${INTEL_CVSDK_DIR}/inference_engine/external/mkltiny_lnx/lib ${INTEL_CVSDK_DIR}/external/cldnn/lib ${INTEL_CVSDK_DIR}/inference_engine/external/cldnn/lib ) diff --git a/modules/dnn/src/op_inf_engine.cpp b/modules/dnn/src/op_inf_engine.cpp index b180ec1b55..cad27ce3b3 100644 --- a/modules/dnn/src/op_inf_engine.cpp +++ b/modules/dnn/src/op_inf_engine.cpp @@ -9,6 +9,11 @@ #include "op_inf_engine.hpp" #include +#ifdef HAVE_INF_ENGINE +#include +#include +#endif // HAVE_INF_ENGINE + namespace cv { namespace dnn { #ifdef HAVE_INF_ENGINE @@ -309,13 +314,26 @@ void InfEngineBackendNet::init() void InfEngineBackendNet::initPlugin(InferenceEngine::ICNNNetwork& net) { CV_Assert(!isInitialized()); -#ifdef _WIN32 - plugin = InferenceEngine::InferenceEnginePluginPtr("MKLDNNPlugin.dll"); -#else - plugin = InferenceEngine::InferenceEnginePluginPtr("libMKLDNNPlugin.so"); -#endif // _WIN32 + + InferenceEngine::StatusCode status; InferenceEngine::ResponseDesc resp; - InferenceEngine::StatusCode status = plugin->LoadNetwork(net, &resp); + const InferenceEngine::Version* v = InferenceEngine::GetInferenceEngineVersion(); + + plugin = InferenceEngine::PluginDispatcher({""}).getSuitablePlugin(InferenceEngine::TargetDevice::eCPU); + if (std::atoi(v->buildNumber) > 5855) + { +#ifdef _WIN32 + InferenceEngine::IExtensionPtr extension = + InferenceEngine::make_so_pointer("cpu_extension.dll"); +#else + InferenceEngine::IExtensionPtr extension = + InferenceEngine::make_so_pointer("libcpu_extension.so"); +#endif // _WIN32 + status = plugin->AddExtension(extension, &resp); + if (status != InferenceEngine::StatusCode::OK) + CV_Error(Error::StsAssert, resp.msg); + } + status = plugin->LoadNetwork(net, &resp); if (status != InferenceEngine::StatusCode::OK) CV_Error(Error::StsAssert, resp.msg); }