Tests for keep_constant_inputs (#1366)

* First variant of tests for keep_constant_inputs

* Redone tests to check number of inputs

* Count inputs of layer via ngraph::Function

* Add additional transformations for CNNNetwork

* Modified work with CNNNetwork via iterators

* Add tests for FullyConnected Network

* Rename function for counting of inputs

* Debug output was deleted

* transformations_callback was removed

* Change ASSERT_GT on ASSERT_EQ
This commit is contained in:
Alexey Tarakanov 2020-07-28 05:56:48 +03:00 committed by GitHub
parent af3a0900b0
commit e5dfb71178
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,109 @@
// Copyright (C) 2020 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include <gtest/gtest.h>
#include <cpp/ie_cnn_network.h>
#include <cnn_network_impl.hpp> // deprecated API
#include <ngraph/function.hpp>
#include <ngraph/opsets/opset1.hpp>
#include <ngraph_ops/convolution_ie.hpp>
#include <transformations/init_node_info.hpp>
#include <ie_precision.hpp>
#include <functional_test_utils/precision_utils.hpp>
#include "ngraph_functions/subgraph_builders.hpp"
#include <convert_function_to_cnn_network.hpp>
#include <ngraph_ops/fully_connected.hpp>
#include <transformations/common_optimizations/common_optimizations.hpp>
#include <transformations/convert_opset1_to_legacy/convert_opset1_to_legacy.hpp>
#include <transformations/convert_opset2_to_opset1/convert_opset2_to_opset1.hpp>
#include <transformations/convert_opset3_to_opset2/convert_opset3_to_opset2.hpp>
#include "generic_ie.hpp"
#include "functional_test_utils/low_precision_transformations/layer_transformation.hpp"
using namespace testing;
using namespace InferenceEngine;
int numberOfInputsForLayerInCNNNetwork(const InferenceEngine::CNNNetwork& network, std::string layerType) {
int numberOfInputs = 0;
IE_SUPPRESS_DEPRECATED_START
for (auto it = details::CNNNetworkIterator(network); it != details::CNNNetworkIterator(); it++) {
InferenceEngine::CNNLayerPtr layer = *it;
if (layer->type == layerType) {
numberOfInputs = layer->insData.size();
break;
}
}
IE_SUPPRESS_DEPRECATED_END
return numberOfInputs;
}
void transformNetwork(std::shared_ptr<InferenceEngine::ICNNNetwork> clonedNetwork, bool keep_constant_inputs) {
if (clonedNetwork->getFunction()) {
auto nGraphFunc = clonedNetwork->getFunction();
ngraph::pass::CommonOptimizations().run_on_function(nGraphFunc);
ngraph::pass::ConvertOpSet3ToOpSet2().run_on_function(nGraphFunc);
ngraph::pass::ConvertOpSet2ToOpSet1().run_on_function(nGraphFunc);
ngraph::pass::ConvertOpSet1ToLegacy().run_on_function(nGraphFunc);
clonedNetwork = InferenceEngine::details::convertFunctionToICNNNetwork(nGraphFunc, *clonedNetwork, keep_constant_inputs);
}
}
TEST(KeepConstantInputsTests, ConvertConvolutionPoolReluNetworkWithTrue) {
std::shared_ptr <ngraph::Function> f_ptr;
f_ptr = ngraph::builder::subgraph::makeConvPoolRelu();
InferenceEngine::CNNNetwork originalNetwork(f_ptr);
transformNetwork(originalNetwork, true);
ASSERT_EQ(numberOfInputsForLayerInCNNNetwork(originalNetwork, "Convolution"), 2);
}
TEST(KeepConstantInputsTests, ConvertConvolutionPoolReluNetworkWithFalse) {
std::shared_ptr <ngraph::Function> f_ptr;
f_ptr = ngraph::builder::subgraph::makeConvPoolRelu();
InferenceEngine::CNNNetwork originalNetwork(f_ptr);
transformNetwork(originalNetwork, false);
ASSERT_EQ(numberOfInputsForLayerInCNNNetwork(originalNetwork, "Convolution"), 1);
}
TEST(KeepConstantInputsTests, ConvertConvolutionBiasNetworkWithTrue) {
std::shared_ptr <ngraph::Function> f_ptr;
f_ptr = ngraph::builder::subgraph::makeConvBias();
InferenceEngine::CNNNetwork originalNetwork(f_ptr);
transformNetwork(originalNetwork, true);
ASSERT_EQ(numberOfInputsForLayerInCNNNetwork(originalNetwork, "Convolution"), 3);
}
TEST(KeepConstantInputsTests, ConvertConvolutionBiasNetworkWithFalse) {
std::shared_ptr <ngraph::Function> f_ptr;
f_ptr = ngraph::builder::subgraph::makeConvBias();
InferenceEngine::CNNNetwork originalNetwork(f_ptr);
transformNetwork(originalNetwork, false);
ASSERT_EQ(numberOfInputsForLayerInCNNNetwork(originalNetwork, "Convolution"), 1);
}
TEST(KeepConstantInputsTests, ConvertFullyConnectedNetworkWithTrue) {
std::shared_ptr <ngraph::Function> f_ptr;
auto input1 = std::make_shared<ngraph::opset1::Parameter>(ngraph::element::f32, ngraph::Shape{1, 128});
auto weights = ngraph::opset1::Constant::create(ngraph::element::f32, ngraph::Shape{786, 128}, {1});
auto empty_bias = ngraph::opset1::Constant::create(ngraph::element::f32, ngraph::Shape{786}, {0});
auto fc = std::make_shared<ngraph::op::FullyConnected>(input1, weights, empty_bias, ngraph::Shape{1, 786});
f_ptr = std::make_shared<ngraph::Function>(ngraph::NodeVector{fc}, ngraph::ParameterVector{input1});
InferenceEngine::CNNNetwork originalNetwork(f_ptr);
transformNetwork(originalNetwork, true);
ASSERT_EQ(numberOfInputsForLayerInCNNNetwork(originalNetwork, "FullyConnected"), 3);
}
TEST(KeepConstantInputsTests, ConvertFullyConnectedNetworkWithFalse) {
std::shared_ptr <ngraph::Function> f_ptr;
auto input1 = std::make_shared<ngraph::opset1::Parameter>(ngraph::element::f32, ngraph::Shape{1, 128});
auto weights = ngraph::opset1::Constant::create(ngraph::element::f32, ngraph::Shape{786, 128}, {1});
auto empty_bias = ngraph::opset1::Constant::create(ngraph::element::f32, ngraph::Shape{786}, {0});
auto fc = std::make_shared<ngraph::op::FullyConnected>(input1, weights, empty_bias, ngraph::Shape{1, 786});
f_ptr = std::make_shared<ngraph::Function>(ngraph::NodeVector{fc}, ngraph::ParameterVector{input1});
InferenceEngine::CNNNetwork originalNetwork(f_ptr);
transformNetwork(originalNetwork, false);
ASSERT_EQ(numberOfInputsForLayerInCNNNetwork(originalNetwork, "FullyConnected"), 1);
}