Add CPU default extensions loading in IE dnn backend (#11252)
authorVladislav Sovrasov <sovrasov.vlad@gmail.com>
Mon, 9 Apr 2018 13:22:19 +0000 (16:22 +0300)
committerVadim Pisarevsky <vadim.pisarevsky@gmail.com>
Mon, 9 Apr 2018 13:22:19 +0000 (16:22 +0300)
* Add CPU default extensions loading in IE dnn backend

* Load cpu_extensions for the future Intel's Inference Engine

cmake/OpenCVDetectInferenceEngine.cmake
modules/dnn/src/op_inf_engine.cpp

index 974246177561eae10c3f16231ae3b30b4388c2cf..8bcb9ac05739fef37526da5cdb9d13ac9e337175 100644 (file)
@@ -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
 )
index b180ec1b557c5da495f63e5fb23b1d8f3e231513..cad27ce3b31d25cbefe4b37d8344f57dcfde0524 100644 (file)
@@ -9,6 +9,11 @@
 #include "op_inf_engine.hpp"
 #include <opencv2/dnn/shape_utils.hpp>
 
+#ifdef HAVE_INF_ENGINE
+#include <ie_extension.h>
+#include <ie_plugin_dispatcher.hpp>
+#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());
+
+    InferenceEngine::StatusCode status;
+    InferenceEngine::ResponseDesc resp;
+    const InferenceEngine::Version* v = InferenceEngine::GetInferenceEngineVersion();
+
+    plugin = InferenceEngine::PluginDispatcher({""}).getSuitablePlugin(InferenceEngine::TargetDevice::eCPU);
+    if (std::atoi(v->buildNumber) > 5855)
+    {
 #ifdef _WIN32
-    plugin = InferenceEngine::InferenceEnginePluginPtr("MKLDNNPlugin.dll");
+        InferenceEngine::IExtensionPtr extension =
+            InferenceEngine::make_so_pointer<InferenceEngine::IExtension>("cpu_extension.dll");
 #else
-    plugin = InferenceEngine::InferenceEnginePluginPtr("libMKLDNNPlugin.so");
+        InferenceEngine::IExtensionPtr extension =
+            InferenceEngine::make_so_pointer<InferenceEngine::IExtension>("libcpu_extension.so");
 #endif  // _WIN32
-    InferenceEngine::ResponseDesc resp;
-    InferenceEngine::StatusCode status = plugin->LoadNetwork(net, &resp);
+        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);
 }