[IE][VPU]: Merges transformations calls from LoadExeNetwork and Frontend (#2220)

Signed-off-by: Gladilov, Gleb <gleb.gladilov@intel.com>
This commit is contained in:
Gladilov, Gleb 2020-09-15 15:28:28 +03:00 committed by GitHub
parent 9ca5fbaf02
commit 6e0611566c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 51 deletions

View File

@ -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) {

View File

@ -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) {