[IE][VPU]: Merges transformations calls from LoadExeNetwork and Frontend (#2220)
Signed-off-by: Gladilov, Gleb <gleb.gladilov@intel.com>
This commit is contained in:
parent
9ca5fbaf02
commit
6e0611566c
@ -29,6 +29,9 @@
|
||||
#include <transformations/convert_opset1_to_legacy/convert_opset1_to_legacy.hpp>
|
||||
#include <transformations/common_optimizations/common_optimizations.hpp>
|
||||
#include <vpu/ngraph/transformations/merge_subsequent_dsr_operations.hpp>
|
||||
#include <vpu/ngraph/transformations/convert_nms_4_to_nms_dynamic.hpp>
|
||||
#include "vpu/ngraph/transformations/dynamic_to_static_shape.hpp"
|
||||
#include "vpu/ngraph/transformations/eliminate_shapeof_after_dsr.hpp"
|
||||
#include <vpu/ngraph/operations/dynamic_shape_resolver.hpp>
|
||||
|
||||
namespace vpu {
|
||||
@ -146,40 +149,43 @@ bool FrontEnd::isLayerSupported(const std::string& type) {
|
||||
}
|
||||
|
||||
ie::ICNNNetwork::Ptr FrontEnd::convertNetwork(ie::ICNNNetwork& network) {
|
||||
std::shared_ptr<ie::ICNNNetwork> convertedNetwork;
|
||||
// disable transformations for some cases
|
||||
const auto transformationsPredicate = [](const std::shared_ptr<const ngraph::Node> &node) -> bool {
|
||||
const bool casesWithDynamicOrStaticUsage = std::dynamic_pointer_cast<const ngraph::opset3::Gelu>(node) ||
|
||||
std::dynamic_pointer_cast<const ngraph::opset4::SoftPlus>(node);
|
||||
std::shared_ptr<ie::ICNNNetwork> convertedNetwork;
|
||||
// disable transformations for some cases
|
||||
const auto transformationsPredicate = [](const std::shared_ptr<const ngraph::Node>& node) -> bool {
|
||||
const bool casesWithDynamicOrStaticUsage =
|
||||
std::dynamic_pointer_cast<const ngraph::opset3::Gelu>(node) || std::dynamic_pointer_cast<const ngraph::opset4::SoftPlus>(node);
|
||||
|
||||
const bool casesWithOnlyDynamicUsage = (std::dynamic_pointer_cast<const ngraph::opset3::MatMul>(node) ||
|
||||
std::dynamic_pointer_cast<const ngraph::opset3::StridedSlice>(node)) &&
|
||||
std::dynamic_pointer_cast<const ngraph::vpu::op::DynamicShapeResolver>(node->input_value(0).get_node_shared_ptr());
|
||||
const bool casesWithOnlyDynamicUsage =
|
||||
(std::dynamic_pointer_cast<const ngraph::opset3::MatMul>(node) ||
|
||||
std::dynamic_pointer_cast<const ngraph::opset3::StridedSlice>(node)) &&
|
||||
std::dynamic_pointer_cast<const ngraph::vpu::op::DynamicShapeResolver>(node->input_value(0).get_node_shared_ptr());
|
||||
|
||||
return casesWithDynamicOrStaticUsage || casesWithOnlyDynamicUsage;
|
||||
};
|
||||
return casesWithDynamicOrStaticUsage || casesWithOnlyDynamicUsage;
|
||||
};
|
||||
|
||||
auto nGraphFunc = network.getFunction();
|
||||
// Disable shape inference (WA for generic operations)
|
||||
ngraph::op::GenericIE::DisableReshape noReshape(nGraphFunc);
|
||||
auto nGraphFunc = network.getFunction();
|
||||
// Disable shape inference (WA for generic operations)
|
||||
ngraph::op::GenericIE::DisableReshape noReshape(nGraphFunc);
|
||||
|
||||
ngraph::pass::Manager manager;
|
||||
ngraph::pass::Manager manager;
|
||||
manager.register_pass<vpu::UpgradeNMS4ToNMSDynamic>();
|
||||
manager.register_pass<ngraph::pass::CommonOptimizations>();
|
||||
manager.register_pass<vpu::DynamicToStaticShape>();
|
||||
manager.register_pass<vpu::EliminateShapeOfAfterDSR>();
|
||||
manager.register_pass<ngraph::pass::ConvertOpSet3ToOpSet2>();
|
||||
manager.register_pass<ngraph::pass::ConvertOpSet2ToOpSet1>();
|
||||
manager.register_pass<ngraph::pass::ConvertOpSet1ToLegacy>();
|
||||
manager.set_callback(transformationsPredicate);
|
||||
manager.run_passes(nGraphFunc);
|
||||
|
||||
manager.register_pass<ngraph::pass::CommonOptimizations>();
|
||||
manager.register_pass<ngraph::pass::ConvertOpSet3ToOpSet2>();
|
||||
manager.register_pass<ngraph::pass::ConvertOpSet2ToOpSet1>();
|
||||
manager.register_pass<ngraph::pass::ConvertOpSet1ToLegacy>();
|
||||
manager.set_callback(transformationsPredicate);
|
||||
manager.run_passes(nGraphFunc);
|
||||
ngraph::pass::Manager ti_manager;
|
||||
ti_manager.register_pass<ngraph::pass::ApplyTransformationsToTIBody>(manager);
|
||||
ti_manager.run_passes(nGraphFunc);
|
||||
|
||||
ngraph::pass::Manager ti_manager;
|
||||
ti_manager.register_pass<ngraph::pass::ApplyTransformationsToTIBody>(manager);
|
||||
ti_manager.run_passes(nGraphFunc);
|
||||
vpu::MergeSubsequentDSROperations().run_on_function(nGraphFunc);
|
||||
|
||||
vpu::MergeSubsequentDSROperations().run_on_function(nGraphFunc);
|
||||
|
||||
convertedNetwork = InferenceEngine::details::convertFunctionToICNNNetwork(nGraphFunc, network);
|
||||
return convertedNetwork;
|
||||
convertedNetwork = InferenceEngine::details::convertFunctionToICNNNetwork(nGraphFunc, network);
|
||||
return convertedNetwork;
|
||||
}
|
||||
|
||||
std::set<std::string> FrontEnd::checkSupportedLayers(ie::ICNNNetwork& network) {
|
||||
|
@ -20,13 +20,9 @@
|
||||
#include <transformations/tensor_iterator_transformations/apply_transformations_to_ti_body.hpp>
|
||||
#include <transformations/common_optimizations/common_optimizations.hpp>
|
||||
#include <transformations/rt_info/fused_names_attribute.hpp>
|
||||
#include <vpu/ngraph/transformations/convert_nms_4_to_nms_dynamic.hpp>
|
||||
#include <ngraph/op/util/op_types.hpp>
|
||||
#include <ngraph/opsets/opset3.hpp>
|
||||
|
||||
#include "vpu/ngraph/transformations/dynamic_to_static_shape.hpp"
|
||||
#include "vpu/ngraph/transformations/eliminate_shapeof_after_dsr.hpp"
|
||||
|
||||
#include "generic_ie.hpp"
|
||||
|
||||
#include "myriad_plugin.h"
|
||||
@ -37,32 +33,14 @@ using namespace InferenceEngine::VPUConfigParams;
|
||||
using namespace vpu::MyriadPlugin;
|
||||
|
||||
|
||||
ExecutableNetworkInternal::Ptr Engine::LoadExeNetworkImpl(
|
||||
const ICNNNetwork& network,
|
||||
const std::map<std::string, std::string>& config) {
|
||||
ExecutableNetworkInternal::Ptr Engine::LoadExeNetworkImpl(const ICNNNetwork& network, const std::map<std::string, std::string>& config) {
|
||||
VPU_PROFILE(LoadExeNetworkImpl);
|
||||
|
||||
auto parsedConfigCopy = _parsedConfig;
|
||||
parsedConfigCopy.update(config);
|
||||
|
||||
auto clonedNetwork = cloneNetwork(network);
|
||||
if (auto function = clonedNetwork->getFunction()) {
|
||||
ngraph::op::GenericIE::DisableReshape noReshape(function);
|
||||
ngraph::pass::Manager manager;
|
||||
manager.register_pass<vpu::UpgradeNMS4ToNMSDynamic>();
|
||||
manager.register_pass<ngraph::pass::CommonOptimizations>();
|
||||
manager.register_pass<vpu::DynamicToStaticShape>();
|
||||
manager.register_pass<vpu::EliminateShapeOfAfterDSR>();
|
||||
manager.run_passes(function);
|
||||
|
||||
ngraph::pass::Manager ti_manager;
|
||||
ti_manager.register_pass<ngraph::pass::ApplyTransformationsToTIBody>(manager);
|
||||
ti_manager.run_passes(function);
|
||||
}
|
||||
|
||||
return std::make_shared<ExecutableNetwork>(*clonedNetwork,
|
||||
_mvnc, _devicePool,
|
||||
parsedConfigCopy, GetCore());
|
||||
return std::make_shared<ExecutableNetwork>(*clonedNetwork, _mvnc, _devicePool, parsedConfigCopy, GetCore());
|
||||
}
|
||||
|
||||
void Engine::SetConfig(const std::map<std::string, std::string> &config) {
|
||||
|
Loading…
Reference in New Issue
Block a user