mirror of
https://github.com/opencv/opencv.git
synced 2025-06-17 07:10:51 +08:00
Merge pull request #16719 from alalek:dnn_disable_nn_builder_api_3.4
This commit is contained in:
commit
094a5b0cba
@ -92,9 +92,15 @@ endif()
|
|||||||
|
|
||||||
set(dnn_runtime_libs "")
|
set(dnn_runtime_libs "")
|
||||||
if(INF_ENGINE_TARGET)
|
if(INF_ENGINE_TARGET)
|
||||||
|
ocv_option(OPENCV_DNN_IE_NN_BUILDER_2019 "Build with Inference Engine NN Builder API support" ON)
|
||||||
|
if(OPENCV_DNN_IE_NN_BUILDER_2019)
|
||||||
|
message(STATUS "DNN: Enabling Inference Engine NN Builder API support")
|
||||||
|
add_definitions(-DHAVE_DNN_IE_NN_BUILDER_2019=1)
|
||||||
|
endif()
|
||||||
list(APPEND dnn_runtime_libs ${INF_ENGINE_TARGET})
|
list(APPEND dnn_runtime_libs ${INF_ENGINE_TARGET})
|
||||||
endif()
|
endif()
|
||||||
if(HAVE_NGRAPH)
|
if(HAVE_NGRAPH)
|
||||||
|
message(STATUS "DNN: Enabling Inference Engine nGraph API support")
|
||||||
add_definitions(-DHAVE_DNN_NGRAPH)
|
add_definitions(-DHAVE_DNN_NGRAPH)
|
||||||
list(APPEND dnn_runtime_libs ngraph::ngraph)
|
list(APPEND dnn_runtime_libs ngraph::ngraph)
|
||||||
endif()
|
endif()
|
||||||
|
@ -162,30 +162,40 @@ private:
|
|||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_INF_ENGINE
|
||||||
if (checkIETarget(DNN_TARGET_CPU)) {
|
if (checkIETarget(DNN_TARGET_CPU)) {
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_CPU));
|
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_CPU));
|
||||||
|
#endif
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, DNN_TARGET_CPU));
|
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, DNN_TARGET_CPU));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (checkIETarget(DNN_TARGET_MYRIAD)) {
|
if (checkIETarget(DNN_TARGET_MYRIAD)) {
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_MYRIAD));
|
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_MYRIAD));
|
||||||
|
#endif
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, DNN_TARGET_MYRIAD));
|
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, DNN_TARGET_MYRIAD));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
if (checkIETarget(DNN_TARGET_FPGA))
|
if (checkIETarget(DNN_TARGET_FPGA))
|
||||||
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_FPGA));
|
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_FPGA));
|
||||||
|
#endif
|
||||||
#ifdef HAVE_OPENCL
|
#ifdef HAVE_OPENCL
|
||||||
if (cv::ocl::useOpenCL() && ocl::Device::getDefault().isIntel())
|
if (cv::ocl::useOpenCL() && ocl::Device::getDefault().isIntel())
|
||||||
{
|
{
|
||||||
if (checkIETarget(DNN_TARGET_OPENCL)) {
|
if (checkIETarget(DNN_TARGET_OPENCL)) {
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_OPENCL));
|
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_OPENCL));
|
||||||
|
#endif
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, DNN_TARGET_OPENCL));
|
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, DNN_TARGET_OPENCL));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (checkIETarget(DNN_TARGET_OPENCL_FP16)) {
|
if (checkIETarget(DNN_TARGET_OPENCL_FP16)) {
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_OPENCL_FP16));
|
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019, DNN_TARGET_OPENCL_FP16));
|
||||||
|
#endif
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, DNN_TARGET_OPENCL_FP16));
|
backends.push_back(std::make_pair(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, DNN_TARGET_OPENCL_FP16));
|
||||||
#endif
|
#endif
|
||||||
@ -761,7 +771,7 @@ struct DataLayer : public Layer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
CV_CheckEQ(inputsData.size(), (size_t)1, "");
|
CV_CheckEQ(inputsData.size(), (size_t)1, "");
|
||||||
@ -793,7 +803,7 @@ struct DataLayer : public Layer
|
|||||||
addConstantData("biases", biases, ieLayer);
|
addConstantData("biases", biases, ieLayer);
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
std::vector<String> outNames;
|
std::vector<String> outNames;
|
||||||
std::vector<MatShape> shapes;
|
std::vector<MatShape> shapes;
|
||||||
@ -1051,10 +1061,10 @@ static Ptr<BackendWrapper> wrapMat(int backendId, int targetId, cv::Mat& m)
|
|||||||
}
|
}
|
||||||
else if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
else if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
return Ptr<BackendWrapper>(new InfEngineBackendWrapper(targetId, m));
|
return Ptr<BackendWrapper>(new InfEngineBackendWrapper(targetId, m));
|
||||||
#else
|
#else
|
||||||
CV_Error(Error::StsNotImplemented, "This OpenCV version is built without Inference Engine API support");
|
CV_Error(Error::StsNotImplemented, "This OpenCV version is built without Inference Engine NN Builder API support");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
else if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
||||||
@ -1463,10 +1473,10 @@ struct Net::Impl
|
|||||||
initHalideBackend();
|
initHalideBackend();
|
||||||
else if (preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
else if (preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
initInfEngineBackend(blobsToKeep_);
|
initInfEngineBackend(blobsToKeep_);
|
||||||
#else
|
#else
|
||||||
CV_Assert(false && "This OpenCV version is built without Inference Engine API support");
|
CV_Assert(false && "This OpenCV version is built without Inference Engine NN Builder API support");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
else if (preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
||||||
@ -1536,7 +1546,7 @@ struct Net::Impl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
// Before launching Inference Engine graph we need to specify output blobs.
|
// Before launching Inference Engine graph we need to specify output blobs.
|
||||||
// This function requests output blobs based on inputs references of
|
// This function requests output blobs based on inputs references of
|
||||||
// layers from default backend or layers from different graphs.
|
// layers from default backend or layers from different graphs.
|
||||||
@ -1841,7 +1851,7 @@ struct Net::Impl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
@ -3074,8 +3084,12 @@ struct Net::Impl
|
|||||||
CV_Assert(preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 || preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH);
|
CV_Assert(preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 || preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH);
|
||||||
|
|
||||||
if (preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019) {
|
if (preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019) {
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
Ptr<InfEngineBackendWrapper> wrapper = ld.outputBlobsWrappers[pin.oid].dynamicCast<InfEngineBackendWrapper>();
|
Ptr<InfEngineBackendWrapper> wrapper = ld.outputBlobsWrappers[pin.oid].dynamicCast<InfEngineBackendWrapper>();
|
||||||
return std::move(wrapper->futureMat);
|
return std::move(wrapper->futureMat);
|
||||||
|
#else
|
||||||
|
CV_Error(Error::StsNotImplemented, "This OpenCV version is built without Inference Engine NN Builder API support");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if (preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
else if (preferableBackend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
||||||
{
|
{
|
||||||
@ -3167,9 +3181,13 @@ Net Net::Impl::createNetworkFromModelOptimizer(InferenceEngine::CNNNetwork& ieNe
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
Ptr<InfEngineBackendNode> backendNodeNN(new InfEngineBackendNode(InferenceEngine::Builder::Layer("")));
|
Ptr<InfEngineBackendNode> backendNodeNN(new InfEngineBackendNode(InferenceEngine::Builder::Layer("")));
|
||||||
backendNodeNN->net = Ptr<InfEngineBackendNet>(new InfEngineBackendNet(ieNet));
|
backendNodeNN->net = Ptr<InfEngineBackendNet>(new InfEngineBackendNet(ieNet));
|
||||||
backendNode = backendNodeNN;
|
backendNode = backendNodeNN;
|
||||||
|
#else
|
||||||
|
CV_Error(Error::StsNotImplemented, "This OpenCV version is built without Inference Engine NN Builder API support");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
for (auto& it : ieNet.getOutputsInfo())
|
for (auto& it : ieNet.getOutputsInfo())
|
||||||
{
|
{
|
||||||
@ -3195,6 +3213,7 @@ Net Net::Impl::createNetworkFromModelOptimizer(InferenceEngine::CNNNetwork& ieNe
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
Ptr<Layer> cvLayer(new InfEngineBackendLayer(ieNet));
|
Ptr<Layer> cvLayer(new InfEngineBackendLayer(ieNet));
|
||||||
|
|
||||||
InferenceEngine::CNNLayerPtr ieLayer = ieNet.getLayerByName(it.first.c_str());
|
InferenceEngine::CNNLayerPtr ieLayer = ieNet.getLayerByName(it.first.c_str());
|
||||||
@ -3205,6 +3224,9 @@ Net Net::Impl::createNetworkFromModelOptimizer(InferenceEngine::CNNNetwork& ieNe
|
|||||||
ld.layerInstance = cvLayer;
|
ld.layerInstance = cvLayer;
|
||||||
|
|
||||||
ld.backendNodes[DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019] = backendNode;
|
ld.backendNodes[DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019] = backendNode;
|
||||||
|
#else
|
||||||
|
CV_Error(Error::StsNotImplemented, "This OpenCV version is built without Inference Engine NN Builder API support");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < inputsNames.size(); ++i)
|
for (int i = 0; i < inputsNames.size(); ++i)
|
||||||
|
@ -25,8 +25,8 @@ namespace cv { namespace dnn {
|
|||||||
// For networks with input layer which has an empty name, IE generates a name id[some_number].
|
// For networks with input layer which has an empty name, IE generates a name id[some_number].
|
||||||
// OpenCV lets users use an empty input name and to prevent unexpected naming,
|
// OpenCV lets users use an empty input name and to prevent unexpected naming,
|
||||||
// we can use some predefined name.
|
// we can use some predefined name.
|
||||||
static std::string kDefaultInpLayerName = "empty_inp_layer_name";
|
static std::string kDefaultInpLayerName = "opencv_ngraph_empty_inp_layer_name";
|
||||||
static constexpr const char* kOpenCVLayersType = "OpenCVLayer";
|
static constexpr const char* kOpenCVLayersType = "opencv_ngraph_layer";
|
||||||
|
|
||||||
static std::string shapesToStr(const std::vector<Mat>& mats)
|
static std::string shapesToStr(const std::vector<Mat>& mats)
|
||||||
{
|
{
|
||||||
@ -77,7 +77,6 @@ public:
|
|||||||
return type_info;
|
return type_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
NgraphCustomOp() {};
|
|
||||||
NgraphCustomOp(const ngraph::NodeVector& inputs,
|
NgraphCustomOp(const ngraph::NodeVector& inputs,
|
||||||
const std::map<std::string, InferenceEngine::Parameter>& params = {}):
|
const std::map<std::string, InferenceEngine::Parameter>& params = {}):
|
||||||
Op(inputs), params(params)
|
Op(inputs), params(params)
|
||||||
@ -85,6 +84,11 @@ public:
|
|||||||
constructor_validate_and_infer_types();
|
constructor_validate_and_infer_types();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~NgraphCustomOp()
|
||||||
|
{
|
||||||
|
// nothing
|
||||||
|
}
|
||||||
|
|
||||||
void validate_and_infer_types() override
|
void validate_and_infer_types() override
|
||||||
{
|
{
|
||||||
std::vector<std::vector<size_t> > shapes;
|
std::vector<std::vector<size_t> > shapes;
|
||||||
@ -116,6 +120,136 @@ private:
|
|||||||
std::map<std::string, InferenceEngine::Parameter> params;
|
std::map<std::string, InferenceEngine::Parameter> params;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class InfEngineNgraphCustomLayer : public InferenceEngine::ILayerExecImpl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit InfEngineNgraphCustomLayer(const InferenceEngine::CNNLayer& layer) : cnnLayer(layer)
|
||||||
|
{
|
||||||
|
std::istringstream iss(layer.GetParamAsString("impl"));
|
||||||
|
size_t ptr;
|
||||||
|
iss >> ptr;
|
||||||
|
cvLayer = (Layer*)ptr;
|
||||||
|
|
||||||
|
std::vector<std::vector<size_t> > shapes;
|
||||||
|
strToShapes(layer.GetParamAsString("internals"), shapes);
|
||||||
|
internals.resize(shapes.size());
|
||||||
|
for (int i = 0; i < shapes.size(); ++i)
|
||||||
|
internals[i].create(std::vector<int>(shapes[i].begin(), shapes[i].end()), CV_32F);
|
||||||
|
}
|
||||||
|
|
||||||
|
~InfEngineNgraphCustomLayer()
|
||||||
|
{
|
||||||
|
// nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual InferenceEngine::StatusCode execute(std::vector<InferenceEngine::Blob::Ptr>& inputs,
|
||||||
|
std::vector<InferenceEngine::Blob::Ptr>& outputs,
|
||||||
|
InferenceEngine::ResponseDesc *resp) noexcept
|
||||||
|
{
|
||||||
|
std::vector<Mat> inpMats, outMats;
|
||||||
|
infEngineBlobsToMats(inputs, inpMats);
|
||||||
|
infEngineBlobsToMats(outputs, outMats);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
cvLayer->forward(inpMats, outMats, internals);
|
||||||
|
return InferenceEngine::StatusCode::OK;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
return InferenceEngine::StatusCode::GENERAL_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual InferenceEngine::StatusCode
|
||||||
|
getSupportedConfigurations(std::vector<InferenceEngine::LayerConfig>& conf,
|
||||||
|
InferenceEngine::ResponseDesc* resp) noexcept
|
||||||
|
{
|
||||||
|
std::vector<InferenceEngine::DataConfig> inDataConfig;
|
||||||
|
std::vector<InferenceEngine::DataConfig> outDataConfig;
|
||||||
|
for (auto& it : cnnLayer.insData)
|
||||||
|
{
|
||||||
|
InferenceEngine::DataConfig conf;
|
||||||
|
conf.desc = it.lock()->getTensorDesc();
|
||||||
|
inDataConfig.push_back(conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& it : cnnLayer.outData)
|
||||||
|
{
|
||||||
|
InferenceEngine::DataConfig conf;
|
||||||
|
conf.desc = it->getTensorDesc();
|
||||||
|
outDataConfig.push_back(conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
InferenceEngine::LayerConfig layerConfig;
|
||||||
|
layerConfig.inConfs = inDataConfig;
|
||||||
|
layerConfig.outConfs = outDataConfig;
|
||||||
|
|
||||||
|
conf.push_back(layerConfig);
|
||||||
|
return InferenceEngine::StatusCode::OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
InferenceEngine::StatusCode init(InferenceEngine::LayerConfig& config,
|
||||||
|
InferenceEngine::ResponseDesc *resp) noexcept
|
||||||
|
{
|
||||||
|
return InferenceEngine::StatusCode::OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
InferenceEngine::CNNLayer cnnLayer;
|
||||||
|
dnn::Layer* cvLayer;
|
||||||
|
std::vector<Mat> internals;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class InfEngineNgraphCustomLayerFactory : public InferenceEngine::ILayerImplFactory {
|
||||||
|
public:
|
||||||
|
explicit InfEngineNgraphCustomLayerFactory(const InferenceEngine::CNNLayer* layer) : cnnLayer(*layer)
|
||||||
|
{
|
||||||
|
// nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
InferenceEngine::StatusCode
|
||||||
|
getImplementations(std::vector<InferenceEngine::ILayerImpl::Ptr>& impls,
|
||||||
|
InferenceEngine::ResponseDesc* resp) noexcept override
|
||||||
|
{
|
||||||
|
impls.push_back(std::make_shared<InfEngineNgraphCustomLayer>(cnnLayer));
|
||||||
|
return InferenceEngine::StatusCode::OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
InferenceEngine::CNNLayer cnnLayer;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class InfEngineNgraphExtension : public InferenceEngine::IExtension
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void SetLogCallback(InferenceEngine::IErrorListener&) noexcept {}
|
||||||
|
virtual void Unload() noexcept {}
|
||||||
|
virtual void Release() noexcept {}
|
||||||
|
virtual void GetVersion(const InferenceEngine::Version*&) const noexcept {}
|
||||||
|
|
||||||
|
virtual InferenceEngine::StatusCode getPrimitiveTypes(char**&, unsigned int&,
|
||||||
|
InferenceEngine::ResponseDesc*) noexcept
|
||||||
|
{
|
||||||
|
return InferenceEngine::StatusCode::OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
InferenceEngine::StatusCode getFactoryFor(InferenceEngine::ILayerImplFactory*& factory,
|
||||||
|
const InferenceEngine::CNNLayer* cnnLayer,
|
||||||
|
InferenceEngine::ResponseDesc* resp) noexcept
|
||||||
|
{
|
||||||
|
if (cnnLayer->type != kOpenCVLayersType)
|
||||||
|
return InferenceEngine::StatusCode::NOT_IMPLEMENTED;
|
||||||
|
factory = new InfEngineNgraphCustomLayerFactory(cnnLayer);
|
||||||
|
return InferenceEngine::StatusCode::OK;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
InfEngineNgraphNode::InfEngineNgraphNode(std::shared_ptr<ngraph::Node>&& _node)
|
InfEngineNgraphNode::InfEngineNgraphNode(std::shared_ptr<ngraph::Node>&& _node)
|
||||||
: BackendNode(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH), node(std::move(_node)) {}
|
: BackendNode(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH), node(std::move(_node)) {}
|
||||||
|
|
||||||
@ -423,11 +557,11 @@ void InfEngineNgraphNet::initPlugin(InferenceEngine::CNNNetwork& net)
|
|||||||
// OpenCV fallbacks as extensions.
|
// OpenCV fallbacks as extensions.
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ie.AddExtension(std::make_shared<InfEngineExtension>(), "CPU");
|
ie.AddExtension(std::make_shared<InfEngineNgraphExtension>(), "CPU");
|
||||||
}
|
}
|
||||||
catch(const std::exception& e)
|
catch(const std::exception& e)
|
||||||
{
|
{
|
||||||
CV_LOG_INFO(NULL, "DNN-IE: Can't register OpenCV custom layers extension: " << e.what());
|
CV_LOG_INFO(NULL, "DNN-IE: Can't register OpenCV custom layers nGraph extension: " << e.what());
|
||||||
}
|
}
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
// Limit the number of CPU threads.
|
// Limit the number of CPU threads.
|
||||||
|
@ -354,7 +354,7 @@ public:
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::Layer ieLayer = InferenceEngine::Builder::ScaleShiftLayer(name);
|
InferenceEngine::Builder::Layer ieLayer = InferenceEngine::Builder::ScaleShiftLayer(name);
|
||||||
@ -363,7 +363,7 @@ public:
|
|||||||
addConstantData("biases", wrapToInfEngineBlob(bias_, {numChannels}, InferenceEngine::Layout::C), ieLayer);
|
addConstantData("biases", wrapToInfEngineBlob(bias_, {numChannels}, InferenceEngine::Layout::C), ieLayer);
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs, const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs, const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
||||||
|
@ -108,7 +108,7 @@ public:
|
|||||||
inputs[i].copyTo(outputs[i]);
|
inputs[i].copyTo(outputs[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
||||||
@ -131,7 +131,7 @@ public:
|
|||||||
ieLayer.setOutputPorts(std::vector<InferenceEngine::Port>(1));
|
ieLayer.setOutputPorts(std::vector<InferenceEngine::Port>(1));
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
@ -300,7 +300,7 @@ public:
|
|||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
||||||
@ -310,7 +310,7 @@ public:
|
|||||||
ieLayer.setInputPorts(std::vector<InferenceEngine::Port>(inputs.size()));
|
ieLayer.setInputPorts(std::vector<InferenceEngine::Port>(inputs.size()));
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
@ -68,14 +68,14 @@ public:
|
|||||||
blobs[0].copyTo(outputs[0]);
|
blobs[0].copyTo(outputs[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::ConstLayer ieLayer(name);
|
InferenceEngine::Builder::ConstLayer ieLayer(name);
|
||||||
ieLayer.setData(wrapToInfEngineBlob(blobs[0]));
|
ieLayer.setData(wrapToInfEngineBlob(blobs[0]));
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
@ -87,7 +87,8 @@ public:
|
|||||||
blobs[0].data);
|
blobs[0].data);
|
||||||
return Ptr<BackendNode>(new InfEngineNgraphNode(node));
|
return Ptr<BackendNode>(new InfEngineNgraphNode(node));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_NGRAPH
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Ptr<Layer> ConstLayer::create(const LayerParams& params)
|
Ptr<Layer> ConstLayer::create(const LayerParams& params)
|
||||||
|
@ -467,7 +467,7 @@ public:
|
|||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> > &inputs) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> > &inputs) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
||||||
@ -528,7 +528,7 @@ public:
|
|||||||
|
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> > &inputs,
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> > &inputs,
|
||||||
@ -1328,6 +1328,7 @@ public:
|
|||||||
return group == 1;
|
return group == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
||||||
{
|
{
|
||||||
if (kernel_size.size() == 3 && preferableTarget != DNN_TARGET_CPU) {
|
if (kernel_size.size() == 3 && preferableTarget != DNN_TARGET_CPU) {
|
||||||
@ -1371,10 +1372,12 @@ public:
|
|||||||
return std::accumulate(dilations.begin(), dilations.end(), 1, std::multiplies<size_t>()) == 1;
|
return std::accumulate(dilations.begin(), dilations.end(), 1, std::multiplies<size_t>()) == 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_INF_ENGINE
|
||||||
|
{
|
||||||
return kernel_size.size() == 2 && (backendId == DNN_BACKEND_OPENCV || backendId == DNN_BACKEND_HALIDE);
|
return kernel_size.size() == 2 && (backendId == DNN_BACKEND_OPENCV || backendId == DNN_BACKEND_HALIDE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool getMemoryShapes(const std::vector<MatShape> &inputs,
|
bool getMemoryShapes(const std::vector<MatShape> &inputs,
|
||||||
const int requiredOutputs,
|
const int requiredOutputs,
|
||||||
@ -1952,7 +1955,7 @@ public:
|
|||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> > &) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> > &) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Layout layout = blobs[0].dims == 5? InferenceEngine::Layout::NCDHW :
|
InferenceEngine::Layout layout = blobs[0].dims == 5? InferenceEngine::Layout::NCDHW :
|
||||||
@ -2007,7 +2010,7 @@ public:
|
|||||||
addConstantData("biases", wrapToInfEngineBlob(biasesMat, {(size_t)numOutput}, InferenceEngine::Layout::C), l);
|
addConstantData("biases", wrapToInfEngineBlob(biasesMat, {(size_t)numOutput}, InferenceEngine::Layout::C), l);
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
@ -924,7 +924,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::DetectionOutputLayer ieLayer(name);
|
InferenceEngine::Builder::DetectionOutputLayer ieLayer(name);
|
||||||
@ -946,7 +946,7 @@ public:
|
|||||||
|
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
@ -156,14 +156,14 @@ public:
|
|||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::Layer ieLayer = func.initInfEngineBuilderAPI();
|
InferenceEngine::Builder::Layer ieLayer = func.initInfEngineBuilderAPI();
|
||||||
ieLayer.setName(this->name);
|
ieLayer.setName(this->name);
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs, const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs, const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
||||||
@ -272,9 +272,11 @@ struct ReLUFunctor : public BaseFunctor
|
|||||||
|
|
||||||
bool supportBackend(int backendId, int)
|
bool supportBackend(int backendId, int)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
||||||
return slope >= 0 || !INF_ENGINE_VER_MAJOR_EQ(INF_ENGINE_RELEASE_2019R1);
|
return slope >= 0 || !INF_ENGINE_VER_MAJOR_EQ(INF_ENGINE_RELEASE_2019R1);
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
@ -371,12 +373,12 @@ struct ReLUFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
return InferenceEngine::Builder::ReLULayer("").setNegativeSlope(slope);
|
return InferenceEngine::Builder::ReLULayer("").setNegativeSlope(slope);
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -481,12 +483,12 @@ struct ReLU6Functor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
return InferenceEngine::Builder::ClampLayer("").setMinValue(minValue).setMaxValue(maxValue);
|
return InferenceEngine::Builder::ClampLayer("").setMinValue(minValue).setMaxValue(maxValue);
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -556,12 +558,12 @@ struct TanHFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
return InferenceEngine::Builder::TanHLayer("");
|
return InferenceEngine::Builder::TanHLayer("");
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -631,12 +633,12 @@ struct SwishFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
CV_Error(Error::StsNotImplemented, "");
|
CV_Error(Error::StsNotImplemented, "");
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -707,12 +709,12 @@ struct MishFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
CV_Error(Error::StsNotImplemented, "");
|
CV_Error(Error::StsNotImplemented, "");
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -788,12 +790,12 @@ struct SigmoidFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
return InferenceEngine::Builder::SigmoidLayer("");
|
return InferenceEngine::Builder::SigmoidLayer("");
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -863,12 +865,12 @@ struct ELUFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
return InferenceEngine::Builder::ELULayer("");
|
return InferenceEngine::Builder::ELULayer("");
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -941,12 +943,12 @@ struct AbsValFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
return InferenceEngine::Builder::ReLULayer("").setNegativeSlope(-0.999999f);
|
return InferenceEngine::Builder::ReLULayer("").setNegativeSlope(-0.999999f);
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -1020,12 +1022,12 @@ struct BNLLFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
CV_Error(Error::StsNotImplemented, "");
|
CV_Error(Error::StsNotImplemented, "");
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -1138,14 +1140,14 @@ struct PowerFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
return InferenceEngine::Builder::PowerLayer("").setPower(power)
|
return InferenceEngine::Builder::PowerLayer("").setPower(power)
|
||||||
.setScale(scale)
|
.setScale(scale)
|
||||||
.setShift(shift);
|
.setShift(shift);
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
@ -1290,7 +1292,7 @@ struct ChannelsPReLUFunctor : public BaseFunctor
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
InferenceEngine::Builder::Layer initInfEngineBuilderAPI()
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::Layer l = InferenceEngine::Builder::PReLULayer("");
|
InferenceEngine::Builder::Layer l = InferenceEngine::Builder::PReLULayer("");
|
||||||
@ -1298,7 +1300,7 @@ struct ChannelsPReLUFunctor : public BaseFunctor
|
|||||||
addConstantData("weights", wrapToInfEngineBlob(scale, {numChannels}, InferenceEngine::Layout::C), l);
|
addConstantData("weights", wrapToInfEngineBlob(scale, {numChannels}, InferenceEngine::Layout::C), l);
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
std::shared_ptr<ngraph::Node> initNgraphAPI(const std::shared_ptr<ngraph::Node>& node)
|
||||||
|
@ -659,7 +659,7 @@ public:
|
|||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::EltwiseLayer ieLayer(name);
|
InferenceEngine::Builder::EltwiseLayer ieLayer(name);
|
||||||
@ -683,7 +683,7 @@ public:
|
|||||||
|
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
@ -164,7 +164,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::Layer ieLayer(name);
|
InferenceEngine::Builder::Layer ieLayer(name);
|
||||||
@ -176,7 +176,7 @@ public:
|
|||||||
ieLayer.setOutputPorts(std::vector<InferenceEngine::Port>(1));
|
ieLayer.setOutputPorts(std::vector<InferenceEngine::Port>(1));
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
||||||
@ -204,7 +204,6 @@ virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inp
|
|||||||
return Ptr<BackendNode>(new InfEngineNgraphNode(reshape));
|
return Ptr<BackendNode>(new InfEngineNgraphNode(reshape));
|
||||||
}
|
}
|
||||||
#endif // HAVE_DNN_NGRAPH
|
#endif // HAVE_DNN_NGRAPH
|
||||||
// HAVE_INF_ENGINE
|
|
||||||
|
|
||||||
int _startAxis;
|
int _startAxis;
|
||||||
int _endAxis;
|
int _endAxis;
|
||||||
|
@ -444,7 +444,7 @@ public:
|
|||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::FullyConnectedLayer ieLayer(name);
|
InferenceEngine::Builder::FullyConnectedLayer ieLayer(name);
|
||||||
@ -459,7 +459,7 @@ public:
|
|||||||
|
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
@ -385,7 +385,7 @@ public:
|
|||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
float alphaSize = alpha;
|
float alphaSize = alpha;
|
||||||
@ -402,7 +402,7 @@ public:
|
|||||||
l.getParameters()["k"] = bias;
|
l.getParameters()["k"] = bias;
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs, const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs, const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
||||||
|
@ -118,15 +118,18 @@ public:
|
|||||||
|
|
||||||
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
||||||
return !zeroDev && (preferableTarget != DNN_TARGET_MYRIAD || eps <= 1e-7f);
|
return !zeroDev && (preferableTarget != DNN_TARGET_MYRIAD || eps <= 1e-7f);
|
||||||
else if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
#endif
|
||||||
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
||||||
return true;
|
return true;
|
||||||
else
|
#endif
|
||||||
#endif // HAVE_INF_ENGINE
|
{
|
||||||
return backendId == DNN_BACKEND_OPENCV;
|
return backendId == DNN_BACKEND_OPENCV;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_OPENCL
|
#ifdef HAVE_OPENCL
|
||||||
bool fast_forward_ocl(std::vector<UMat> &inputs, std::vector<UMat> &outputs)
|
bool fast_forward_ocl(std::vector<UMat> &inputs, std::vector<UMat> &outputs)
|
||||||
@ -375,7 +378,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::MVNLayer ieLayer(name);
|
InferenceEngine::Builder::MVNLayer ieLayer(name);
|
||||||
@ -384,7 +387,7 @@ public:
|
|||||||
ieLayer.setEpsilon(eps);
|
ieLayer.setEpsilon(eps);
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
||||||
|
@ -261,7 +261,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
||||||
@ -310,7 +310,7 @@ public:
|
|||||||
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
||||||
|
@ -184,7 +184,7 @@ public:
|
|||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::Layer ieLayer(name);
|
InferenceEngine::Builder::Layer ieLayer(name);
|
||||||
|
@ -371,14 +371,14 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::PermuteLayer ieLayer(name);
|
InferenceEngine::Builder::PermuteLayer ieLayer(name);
|
||||||
ieLayer.setOrder(_order);
|
ieLayer.setOrder(_order);
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
||||||
|
@ -174,15 +174,15 @@ public:
|
|||||||
|
|
||||||
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
||||||
{
|
{
|
||||||
if (computeMaxIdx)
|
if (computeMaxIdx)
|
||||||
return false;
|
return false;
|
||||||
#ifdef HAVE_INF_ENGINE
|
|
||||||
if (kernel_size.size() == 3)
|
if (kernel_size.size() == 3)
|
||||||
return preferableTarget == DNN_TARGET_CPU;
|
return preferableTarget == DNN_TARGET_CPU;
|
||||||
if (preferableTarget == DNN_TARGET_MYRIAD) {
|
if (preferableTarget == DNN_TARGET_MYRIAD) {
|
||||||
#if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LE(INF_ENGINE_RELEASE_2019R1)
|
#if INF_ENGINE_VER_MAJOR_LE(INF_ENGINE_RELEASE_2019R1)
|
||||||
if (type == MAX && (pad_l == 1 && pad_t == 1) && stride == Size(2, 2) ) {
|
if (type == MAX && (pad_l == 1 && pad_t == 1) && stride == Size(2, 2) ) {
|
||||||
return !isMyriadX();
|
return !isMyriadX();
|
||||||
}
|
}
|
||||||
@ -191,18 +191,24 @@ public:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
return type != STOCHASTIC;
|
return type != STOCHASTIC;
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) {
|
#endif
|
||||||
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
||||||
|
{
|
||||||
return !computeMaxIdx && type != STOCHASTIC;
|
return !computeMaxIdx && type != STOCHASTIC;
|
||||||
}
|
}
|
||||||
else
|
else if (backendId == DNN_BACKEND_OPENCV || backendId == DNN_BACKEND_HALIDE)
|
||||||
return (kernel_size.size() == 3 && backendId == DNN_BACKEND_OPENCV && preferableTarget == DNN_TARGET_CPU) ||
|
{
|
||||||
((kernel_size.empty() || kernel_size.size() == 2) && (backendId == DNN_BACKEND_OPENCV ||
|
if (kernel_size.size() == 3)
|
||||||
|
return (backendId == DNN_BACKEND_OPENCV && preferableTarget == DNN_TARGET_CPU);
|
||||||
|
if (kernel_size.empty() || kernel_size.size() == 2)
|
||||||
|
return backendId == DNN_BACKEND_OPENCV ||
|
||||||
(backendId == DNN_BACKEND_HALIDE && haveHalide() &&
|
(backendId == DNN_BACKEND_HALIDE && haveHalide() &&
|
||||||
(type == MAX || (type == AVE && !pad_t && !pad_l && !pad_b && !pad_r)))));
|
(type == MAX || (type == AVE && !pad_t && !pad_l && !pad_b && !pad_r)));
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_OPENCL
|
#ifdef HAVE_OPENCL
|
||||||
@ -301,7 +307,7 @@ public:
|
|||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
if (type == MAX || type == AVE)
|
if (type == MAX || type == AVE)
|
||||||
@ -347,7 +353,7 @@ public:
|
|||||||
CV_Error(Error::StsNotImplemented, "Unsupported pooling type");
|
CV_Error(Error::StsNotImplemented, "Unsupported pooling type");
|
||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -494,7 +494,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
if (_explicitSizes)
|
if (_explicitSizes)
|
||||||
@ -554,7 +554,7 @@ public:
|
|||||||
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs, const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs, const std::vector<Ptr<BackendNode> >& nodes) CV_OVERRIDE
|
||||||
|
@ -327,7 +327,7 @@ public:
|
|||||||
layerOutputs[0].col(2).copyTo(dst);
|
layerOutputs[0].col(2).copyTo(dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::ProposalLayer ieLayer(name);
|
InferenceEngine::Builder::ProposalLayer ieLayer(name);
|
||||||
@ -351,7 +351,7 @@ public:
|
|||||||
|
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
@ -185,14 +185,14 @@ public:
|
|||||||
permute->forward(inputs, outputs, internals_arr);
|
permute->forward(inputs, outputs, internals_arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::ReorgYoloLayer ieLayer(name);
|
InferenceEngine::Builder::ReorgYoloLayer ieLayer(name);
|
||||||
ieLayer.setStride(reorgStride);
|
ieLayer.setStride(reorgStride);
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> > &inputs,
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> > &inputs,
|
||||||
|
@ -260,7 +260,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::ReshapeLayer ieLayer(name);
|
InferenceEngine::Builder::ReshapeLayer ieLayer(name);
|
||||||
@ -268,7 +268,7 @@ public:
|
|||||||
ieLayer.setDims(outShapes[0]);
|
ieLayer.setDims(outShapes[0]);
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
||||||
|
@ -56,8 +56,7 @@ public:
|
|||||||
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_INF_ENGINE
|
||||||
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ||
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 || backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
||||||
backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
|
||||||
{
|
{
|
||||||
return (interpolation == "nearest" && scaleWidth == scaleHeight) ||
|
return (interpolation == "nearest" && scaleWidth == scaleHeight) ||
|
||||||
(interpolation == "bilinear");
|
(interpolation == "bilinear");
|
||||||
@ -162,9 +161,9 @@ public:
|
|||||||
CV_Error(Error::StsNotImplemented, "Unknown interpolation: " + interpolation);
|
CV_Error(Error::StsNotImplemented, "Unknown interpolation: " + interpolation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
#ifdef HAVE_INF_ENGINE
|
|
||||||
InferenceEngine::Builder::Layer ieLayer(name);
|
InferenceEngine::Builder::Layer ieLayer(name);
|
||||||
ieLayer.setName(name);
|
ieLayer.setName(name);
|
||||||
if (interpolation == "nearest")
|
if (interpolation == "nearest")
|
||||||
@ -190,9 +189,8 @@ public:
|
|||||||
ieLayer.setInputPorts(std::vector<InferenceEngine::Port>(1));
|
ieLayer.setInputPorts(std::vector<InferenceEngine::Port>(1));
|
||||||
ieLayer.setOutputPorts(std::vector<InferenceEngine::Port>(1));
|
ieLayer.setOutputPorts(std::vector<InferenceEngine::Port>(1));
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
#endif // HAVE_INF_ENGINE
|
|
||||||
return Ptr<BackendNode>();
|
|
||||||
}
|
}
|
||||||
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
@ -197,7 +197,7 @@ public:
|
|||||||
}
|
}
|
||||||
#endif // HAVE_HALIDE
|
#endif // HAVE_HALIDE
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >&) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::Builder::Layer l = InferenceEngine::Builder::ScaleShiftLayer(name);
|
InferenceEngine::Builder::Layer l = InferenceEngine::Builder::ScaleShiftLayer(name);
|
||||||
@ -223,7 +223,7 @@ public:
|
|||||||
addConstantData("biases", wrapToInfEngineBlob(blobs.back(), {numChannels}, InferenceEngine::Layout::C), l);
|
addConstantData("biases", wrapToInfEngineBlob(blobs.back(), {numChannels}, InferenceEngine::Layout::C), l);
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
return Ptr<BackendNode>(new InfEngineBackendNode(l));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
@ -113,13 +113,16 @@ public:
|
|||||||
|
|
||||||
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
virtual bool supportBackend(int backendId) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
return backendId == DNN_BACKEND_OPENCV ||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
(backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && sliceRanges.size() == 1) ||
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
|
||||||
(backendId == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 &&
|
return INF_ENGINE_VER_MAJOR_GE(INF_ENGINE_RELEASE_2019R1) &&
|
||||||
#ifdef HAVE_INF_ENGINE
|
sliceRanges.size() == 1 && sliceRanges[0].size() == 4;
|
||||||
INF_ENGINE_VER_MAJOR_GE(INF_ENGINE_RELEASE_2019R1) &&
|
|
||||||
#endif
|
#endif
|
||||||
sliceRanges.size() == 1 && sliceRanges[0].size() == 4);
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
|
if (backendId == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
|
||||||
|
return sliceRanges.size() == 1;
|
||||||
|
#endif
|
||||||
|
return backendId == DNN_BACKEND_OPENCV;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool getMemoryShapes(const std::vector<MatShape> &inputs,
|
bool getMemoryShapes(const std::vector<MatShape> &inputs,
|
||||||
@ -263,7 +266,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
#if INF_ENGINE_VER_MAJOR_GE(INF_ENGINE_RELEASE_2019R1)
|
#if INF_ENGINE_VER_MAJOR_GE(INF_ENGINE_RELEASE_2019R1)
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
|
@ -312,7 +312,7 @@ public:
|
|||||||
return Ptr<BackendNode>();
|
return Ptr<BackendNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
virtual Ptr<BackendNode> initInfEngine(const std::vector<Ptr<BackendWrapper> >& inputs) CV_OVERRIDE
|
||||||
{
|
{
|
||||||
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
InferenceEngine::DataPtr input = infEngineDataNode(inputs[0]);
|
||||||
@ -322,7 +322,7 @@ public:
|
|||||||
|
|
||||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||||
}
|
}
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
virtual Ptr<BackendNode> initNgraph(const std::vector<Ptr<BackendWrapper> >& inputs,
|
||||||
|
@ -42,8 +42,8 @@ Backend& getInferenceEngineBackendTypeParam()
|
|||||||
{
|
{
|
||||||
static Backend param = parseInferenceEngineBackendType(
|
static Backend param = parseInferenceEngineBackendType(
|
||||||
utils::getConfigurationParameterString("OPENCV_DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019_TYPE",
|
utils::getConfigurationParameterString("OPENCV_DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019_TYPE",
|
||||||
#ifdef HAVE_NGRAPH
|
#ifndef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
CV_DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_API // future: CV_DNN_BACKEND_INFERENCE_ENGINE_NGRAPH
|
CV_DNN_BACKEND_INFERENCE_ENGINE_NGRAPH
|
||||||
#else
|
#else
|
||||||
CV_DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_API
|
CV_DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_API
|
||||||
#endif
|
#endif
|
||||||
@ -69,6 +69,36 @@ cv::String setInferenceEngineBackendType(const cv::String& newBackendType)
|
|||||||
|
|
||||||
CV__DNN_EXPERIMENTAL_NS_END
|
CV__DNN_EXPERIMENTAL_NS_END
|
||||||
|
|
||||||
|
|
||||||
|
Mat infEngineBlobToMat(const InferenceEngine::Blob::Ptr& blob)
|
||||||
|
{
|
||||||
|
// NOTE: Inference Engine sizes are reversed.
|
||||||
|
std::vector<size_t> dims = blob->getTensorDesc().getDims();
|
||||||
|
std::vector<int> size(dims.begin(), dims.end());
|
||||||
|
auto precision = blob->getTensorDesc().getPrecision();
|
||||||
|
|
||||||
|
int type = -1;
|
||||||
|
switch (precision)
|
||||||
|
{
|
||||||
|
case InferenceEngine::Precision::FP32: type = CV_32F; break;
|
||||||
|
case InferenceEngine::Precision::U8: type = CV_8U; break;
|
||||||
|
default:
|
||||||
|
CV_Error(Error::StsNotImplemented, "Unsupported blob precision");
|
||||||
|
}
|
||||||
|
return Mat(size, type, (void*)blob->buffer());
|
||||||
|
}
|
||||||
|
|
||||||
|
void infEngineBlobsToMats(const std::vector<InferenceEngine::Blob::Ptr>& blobs,
|
||||||
|
std::vector<Mat>& mats)
|
||||||
|
{
|
||||||
|
mats.resize(blobs.size());
|
||||||
|
for (int i = 0; i < blobs.size(); ++i)
|
||||||
|
mats[i] = infEngineBlobToMat(blobs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
// For networks with input layer which has an empty name, IE generates a name id[some_number].
|
// For networks with input layer which has an empty name, IE generates a name id[some_number].
|
||||||
// OpenCV lets users use an empty input name and to prevent unexpected naming,
|
// OpenCV lets users use an empty input name and to prevent unexpected naming,
|
||||||
// we can use some predefined name.
|
// we can use some predefined name.
|
||||||
@ -556,6 +586,8 @@ void InfEngineBackendWrapper::setHostDirty()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#if INF_ENGINE_VER_MAJOR_LE(INF_ENGINE_RELEASE_2019R1)
|
#if INF_ENGINE_VER_MAJOR_LE(INF_ENGINE_RELEASE_2019R1)
|
||||||
static std::map<std::string, InferenceEngine::InferenceEnginePluginPtr>& getSharedPlugins()
|
static std::map<std::string, InferenceEngine::InferenceEnginePluginPtr>& getSharedPlugins()
|
||||||
{
|
{
|
||||||
@ -686,6 +718,9 @@ static bool detectMyriadX_()
|
|||||||
}
|
}
|
||||||
#endif // !defined(OPENCV_DNN_IE_VPU_TYPE_DEFAULT)
|
#endif // !defined(OPENCV_DNN_IE_VPU_TYPE_DEFAULT)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
void InfEngineBackendNet::initPlugin(InferenceEngine::CNNNetwork& net)
|
void InfEngineBackendNet::initPlugin(InferenceEngine::CNNNetwork& net)
|
||||||
{
|
{
|
||||||
CV_Assert(!isInitialized());
|
CV_Assert(!isInitialized());
|
||||||
@ -984,32 +1019,6 @@ void InfEngineBackendNet::forward(const std::vector<Ptr<BackendWrapper> >& outBl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Mat infEngineBlobToMat(const InferenceEngine::Blob::Ptr& blob)
|
|
||||||
{
|
|
||||||
// NOTE: Inference Engine sizes are reversed.
|
|
||||||
std::vector<size_t> dims = blob->getTensorDesc().getDims();
|
|
||||||
std::vector<int> size(dims.begin(), dims.end());
|
|
||||||
auto precision = blob->getTensorDesc().getPrecision();
|
|
||||||
|
|
||||||
int type = -1;
|
|
||||||
switch (precision)
|
|
||||||
{
|
|
||||||
case InferenceEngine::Precision::FP32: type = CV_32F; break;
|
|
||||||
case InferenceEngine::Precision::U8: type = CV_8U; break;
|
|
||||||
default:
|
|
||||||
CV_Error(Error::StsNotImplemented, "Unsupported blob precision");
|
|
||||||
}
|
|
||||||
return Mat(size, type, (void*)blob->buffer());
|
|
||||||
}
|
|
||||||
|
|
||||||
void infEngineBlobsToMats(const std::vector<InferenceEngine::Blob::Ptr>& blobs,
|
|
||||||
std::vector<Mat>& mats)
|
|
||||||
{
|
|
||||||
mats.resize(blobs.size());
|
|
||||||
for (int i = 0; i < blobs.size(); ++i)
|
|
||||||
mats[i] = infEngineBlobToMat(blobs[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool InfEngineBackendLayer::getMemoryShapes(const std::vector<MatShape> &inputs,
|
bool InfEngineBackendLayer::getMemoryShapes(const std::vector<MatShape> &inputs,
|
||||||
const int requiredOutputs,
|
const int requiredOutputs,
|
||||||
std::vector<MatShape> &outputs,
|
std::vector<MatShape> &outputs,
|
||||||
@ -1076,6 +1085,8 @@ void addConstantData(const std::string& name, InferenceEngine::Blob::Ptr data,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_INF_ENGINE
|
||||||
|
|
||||||
bool haveInfEngine()
|
bool haveInfEngine()
|
||||||
@ -1091,11 +1102,13 @@ void forwardInfEngine(const std::vector<Ptr<BackendWrapper> >& outBlobsWrappers,
|
|||||||
Ptr<BackendNode>& node, bool isAsync)
|
Ptr<BackendNode>& node, bool isAsync)
|
||||||
{
|
{
|
||||||
CV_Assert(haveInfEngine());
|
CV_Assert(haveInfEngine());
|
||||||
#ifdef HAVE_INF_ENGINE
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
CV_Assert(!node.empty());
|
CV_Assert(!node.empty());
|
||||||
Ptr<InfEngineBackendNode> ieNode = node.dynamicCast<InfEngineBackendNode>();
|
Ptr<InfEngineBackendNode> ieNode = node.dynamicCast<InfEngineBackendNode>();
|
||||||
CV_Assert(!ieNode.empty());
|
CV_Assert(!ieNode.empty());
|
||||||
ieNode->net->forward(outBlobsWrappers, isAsync);
|
ieNode->net->forward(outBlobsWrappers, isAsync);
|
||||||
|
#else
|
||||||
|
CV_Error(Error::StsNotImplemented, "This OpenCV version is built without Inference Engine NN Builder API support");
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_INF_ENGINE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#pragma GCC diagnostic ignored "-Wsuggest-override"
|
#pragma GCC diagnostic ignored "-Wsuggest-override"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
//#define INFERENCE_ENGINE_DEPRECATED // turn off deprecation warnings from IE
|
//#define INFERENCE_ENGINE_DEPRECATED // turn off deprecation warnings from IE
|
||||||
//there is no way to suppress warnings from IE only at this moment, so we are forced to suppress warnings globally
|
//there is no way to suppress warnings from IE only at this moment, so we are forced to suppress warnings globally
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
@ -49,6 +50,7 @@
|
|||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning(disable: 4996) // was declared deprecated
|
#pragma warning(disable: 4996) // was declared deprecated
|
||||||
#endif
|
#endif
|
||||||
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
#if defined(__GNUC__) && INF_ENGINE_VER_MAJOR_LT(INF_ENGINE_RELEASE_2020_1)
|
#if defined(__GNUC__) && INF_ENGINE_VER_MAJOR_LT(INF_ENGINE_RELEASE_2020_1)
|
||||||
#pragma GCC visibility push(default)
|
#pragma GCC visibility push(default)
|
||||||
@ -74,6 +76,13 @@ namespace cv { namespace dnn {
|
|||||||
|
|
||||||
Backend& getInferenceEngineBackendTypeParam();
|
Backend& getInferenceEngineBackendTypeParam();
|
||||||
|
|
||||||
|
Mat infEngineBlobToMat(const InferenceEngine::Blob::Ptr& blob);
|
||||||
|
|
||||||
|
void infEngineBlobsToMats(const std::vector<InferenceEngine::Blob::Ptr>& blobs,
|
||||||
|
std::vector<Mat>& mats);
|
||||||
|
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
class InfEngineBackendNet
|
class InfEngineBackendNet
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -180,11 +189,6 @@ InferenceEngine::Blob::Ptr wrapToInfEngineBlob(const Mat& m, const std::vector<s
|
|||||||
|
|
||||||
InferenceEngine::DataPtr infEngineDataNode(const Ptr<BackendWrapper>& ptr);
|
InferenceEngine::DataPtr infEngineDataNode(const Ptr<BackendWrapper>& ptr);
|
||||||
|
|
||||||
Mat infEngineBlobToMat(const InferenceEngine::Blob::Ptr& blob);
|
|
||||||
|
|
||||||
void infEngineBlobsToMats(const std::vector<InferenceEngine::Blob::Ptr>& blobs,
|
|
||||||
std::vector<Mat>& mats);
|
|
||||||
|
|
||||||
// Convert Inference Engine blob with FP32 precision to FP16 precision.
|
// Convert Inference Engine blob with FP32 precision to FP16 precision.
|
||||||
// Allocates memory for a new blob.
|
// Allocates memory for a new blob.
|
||||||
InferenceEngine::Blob::Ptr convertFp16(const InferenceEngine::Blob::Ptr& blob);
|
InferenceEngine::Blob::Ptr convertFp16(const InferenceEngine::Blob::Ptr& blob);
|
||||||
@ -232,6 +236,8 @@ public:
|
|||||||
InferenceEngine::ResponseDesc* resp) noexcept;
|
InferenceEngine::ResponseDesc* resp) noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif // HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
|
||||||
|
|
||||||
CV__DNN_EXPERIMENTAL_NS_BEGIN
|
CV__DNN_EXPERIMENTAL_NS_BEGIN
|
||||||
|
|
||||||
|
@ -371,7 +371,10 @@ void initDNNTests()
|
|||||||
#ifdef HAVE_DNN_NGRAPH
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
CV_TEST_TAG_DNN_SKIP_IE_NGRAPH,
|
CV_TEST_TAG_DNN_SKIP_IE_NGRAPH,
|
||||||
#endif
|
#endif
|
||||||
CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
|
CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER,
|
||||||
|
#endif
|
||||||
|
""
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
registerGlobalSkipTag(
|
registerGlobalSkipTag(
|
||||||
|
@ -130,14 +130,18 @@ void test_readNet_IE_do_not_call_setInput(Backend backendId)
|
|||||||
EXPECT_TRUE(res.empty()) << res.size;
|
EXPECT_TRUE(res.empty()) << res.size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_DNN_IE_NN_BUILDER_2019
|
||||||
TEST(readNet, do_not_call_setInput_IE_NN_BUILDER_2019)
|
TEST(readNet, do_not_call_setInput_IE_NN_BUILDER_2019)
|
||||||
{
|
{
|
||||||
test_readNet_IE_do_not_call_setInput(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019);
|
test_readNet_IE_do_not_call_setInput(DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_DNN_NGRAPH
|
||||||
TEST(readNet, do_not_call_setInput_IE_NGRAPH)
|
TEST(readNet, do_not_call_setInput_IE_NGRAPH)
|
||||||
{
|
{
|
||||||
test_readNet_IE_do_not_call_setInput(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH);
|
test_readNet_IE_do_not_call_setInput(DNN_BACKEND_INFERENCE_ENGINE_NGRAPH);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#endif // HAVE_INF_ENGINE
|
#endif // HAVE_INF_ENGINE
|
||||||
|
|
||||||
typedef testing::TestWithParam<tuple<Backend, Target> > dump;
|
typedef testing::TestWithParam<tuple<Backend, Target> > dump;
|
||||||
|
@ -62,6 +62,8 @@ static std::vector<std::string>& getTestTagsSkipList()
|
|||||||
|
|
||||||
void registerGlobalSkipTag(const std::string& skipTag)
|
void registerGlobalSkipTag(const std::string& skipTag)
|
||||||
{
|
{
|
||||||
|
if (skipTag.empty())
|
||||||
|
return; // do nothing
|
||||||
std::vector<std::string>& skipTags = getTestTagsSkipList();
|
std::vector<std::string>& skipTags = getTestTagsSkipList();
|
||||||
for (size_t i = 0; i < skipTags.size(); ++i)
|
for (size_t i = 0; i < skipTags.size(); ++i)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user