Add IR frontend tests (#13178)
* Add IR frontend tests * Fix comments * Add tests * Fix comments 1 * Fix comments 2 * fix comments 3 * fix code style * Fix comments 4 * Fix comments 5 Co-authored-by: Ilya Churaev <ilya.churaev@intel.com>
This commit is contained in:
1 parent
07aabf27bc
commit
11579530b7
12 files changed
+1630
-150
No files matched your search
@@ -3,3 +3,8 @@
|
||||
#
|
||||
|
||||
add_subdirectory(src)
|
||||
|
||||
if(ENABLE_TESTS)
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Copyright (C) 2018-2022 Intel Corporation
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
set(TARGET_NAME ov_ir_frontend_tests)
|
||||
|
||||
ov_add_test_target(
|
||||
NAME ${TARGET_NAME}
|
||||
ROOT ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDENCIES
|
||||
openvino_ir_frontend
|
||||
LINK_LIBRARIES
|
||||
gtest
|
||||
gtest_main
|
||||
openvino::runtime::dev
|
||||
commonTestUtils
|
||||
INCLUDES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../include"
|
||||
ADD_CLANG_FORMAT
|
||||
LABELS
|
||||
IR_FRONTEND
|
||||
)
|
||||
@@ -0,0 +1,63 @@
|
||||
// Copyright (C) 2018-2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <fstream>
|
||||
|
||||
#include "common_test_utils/graph_comparator.hpp"
|
||||
#include "openvino/frontend/manager.hpp"
|
||||
#include "openvino/openvino.hpp"
|
||||
|
||||
class IRFrontendTestsImpl {
|
||||
protected:
|
||||
ov::Core core;
|
||||
ov::frontend::FrontEndManager manager;
|
||||
|
||||
std::string xmlFileName = "IrFrontendTestModel.xml";
|
||||
std::string binFileName = "IrFrontendTestModel.bin";
|
||||
|
||||
void createTemporalModelFile(std::string xmlFileContent,
|
||||
std::vector<unsigned char> binFileContent = std::vector<unsigned char>()) {
|
||||
ASSERT_TRUE(xmlFileContent.size() > 0);
|
||||
|
||||
{
|
||||
std::ofstream xmlFile;
|
||||
xmlFile.open(xmlFileName);
|
||||
xmlFile << xmlFileContent;
|
||||
xmlFile.close();
|
||||
}
|
||||
|
||||
if (binFileContent.size() > 0) {
|
||||
std::ofstream binFile;
|
||||
binFile.open(binFileName, std::ios::binary);
|
||||
binFile.write((const char*)binFileContent.data(), binFileContent.size());
|
||||
binFile.close();
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveTemporalFiles() {
|
||||
std::remove(xmlFileName.c_str());
|
||||
std::remove(binFileName.c_str());
|
||||
}
|
||||
|
||||
std::shared_ptr<ov::Model> getWithIRFrontend(const std::string& model) {
|
||||
std::istringstream modelStringStream(model);
|
||||
std::istream& modelStream = modelStringStream;
|
||||
|
||||
ov::frontend::FrontEnd::Ptr FE;
|
||||
ov::frontend::InputModel::Ptr inputModel;
|
||||
|
||||
ov::AnyVector params{&modelStream};
|
||||
|
||||
FE = manager.load_by_model(params);
|
||||
if (FE)
|
||||
inputModel = FE->load(params);
|
||||
|
||||
if (inputModel)
|
||||
return FE->convert(inputModel);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,959 @@
|
||||
// Copyright (C) 2018-2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "frontend_test.hpp"
|
||||
#include "openvino/opsets/opset1.hpp"
|
||||
#include "openvino/opsets/opset3.hpp"
|
||||
|
||||
class IRFrontendTests : public ::testing::Test, public IRFrontendTestsImpl {
|
||||
protected:
|
||||
void SetUp() override {}
|
||||
|
||||
void TearDown() override {
|
||||
RemoveTemporalFiles();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(IRFrontendTests, elementary_model_reading_v11) {
|
||||
std::string testModelV11 = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
ov::RTMap rtInfo;
|
||||
uint64_t version;
|
||||
|
||||
ASSERT_NO_THROW(model = getWithIRFrontend(testModelV11));
|
||||
ASSERT_TRUE(!!model);
|
||||
ASSERT_NO_THROW(rtInfo = model->get_rt_info());
|
||||
ASSERT_NO_THROW(version = rtInfo["version"].as<int64_t>());
|
||||
ASSERT_EQ(11, version);
|
||||
|
||||
std::shared_ptr<ov::Model> modelRef;
|
||||
{
|
||||
auto parameter = std::make_shared<ov::opset1::Parameter>(ov::element::f32, ov::Shape{1, 3, 22, 22});
|
||||
parameter->set_friendly_name("input");
|
||||
auto result = std::make_shared<ov::opset1::Result>(parameter);
|
||||
result->set_friendly_name("output");
|
||||
modelRef = std::make_shared<ov::Model>(ov::NodeVector{result}, ov::ParameterVector{parameter});
|
||||
}
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
const auto res = fc.compare(model, modelRef);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, elementary_model_reading_v10) {
|
||||
std::string testModelV10 = R"V0G0N(
|
||||
<net name="Network" version="10">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> modelv10;
|
||||
ov::RTMap rtInfoV10;
|
||||
uint64_t version;
|
||||
|
||||
ASSERT_NO_THROW(modelv10 = getWithIRFrontend(testModelV10));
|
||||
ASSERT_TRUE(!!modelv10);
|
||||
ASSERT_NO_THROW(rtInfoV10 = modelv10->get_rt_info());
|
||||
ASSERT_NO_THROW(version = rtInfoV10["version"].as<int64_t>());
|
||||
ASSERT_EQ(10, version);
|
||||
|
||||
std::shared_ptr<ov::Model> modelRef;
|
||||
{
|
||||
auto parameter = std::make_shared<ov::opset1::Parameter>(ov::element::f32, ov::Shape{1, 3, 22, 22});
|
||||
parameter->set_friendly_name("input");
|
||||
auto result = std::make_shared<ov::opset1::Result>(parameter);
|
||||
result->set_friendly_name("output");
|
||||
modelRef = std::make_shared<ov::Model>(ov::NodeVector{result}, ov::ParameterVector{parameter});
|
||||
}
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
const auto res = fc.compare(modelv10, modelRef);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, elementary_model_reading_v9) {
|
||||
std::string testModelV9 = R"V0G0N(
|
||||
<net name="Network" version="9">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> modelv9;
|
||||
ASSERT_THROW(modelv9 = core.read_model(testModelV9, ov::Tensor()), ov::Exception);
|
||||
ASSERT_FALSE(!!modelv9);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, model_with_missing_weights) {
|
||||
std::string testModelV11 = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="value1" type="Const" version="opset1">
|
||||
<data element_type="i64" shape="4" offset="0" size="32" />
|
||||
<output>
|
||||
<port id="0" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="2" name="Transpose0321" type="Transpose" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
<port id="1" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="3" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
|
||||
<edge from-layer="1" from-port="0" to-layer="2" to-port="1"/>
|
||||
<edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
ASSERT_THROW(core.read_model(testModelV11, ov::Tensor()), ov::Exception);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, model_with_weights_reading_from_disk) {
|
||||
std::string xmlModel = R"V0G0N(
|
||||
<?xml version="1.0" ?>
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="value1" type="Const" version="opset1">
|
||||
<data element_type="i64" shape="4" offset="0" size="32" />
|
||||
<output>
|
||||
<port id="0" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="2" name="Transpose0321" type="Transpose" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
<port id="1" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="3" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
|
||||
<edge from-layer="1" from-port="0" to-layer="2" to-port="1"/>
|
||||
<edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::vector<unsigned char> buffer(32, 0);
|
||||
uint64_t* uint64Buffer = reinterpret_cast<uint64_t*>(buffer.data());
|
||||
uint64Buffer[0] = 0;
|
||||
uint64Buffer[1] = 3;
|
||||
uint64Buffer[2] = 2;
|
||||
uint64Buffer[3] = 1;
|
||||
|
||||
createTemporalModelFile(xmlModel, buffer);
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_NO_THROW(model = core.read_model(xmlFileName, binFileName));
|
||||
ASSERT_TRUE(!!model);
|
||||
|
||||
std::shared_ptr<ov::Model> modelRef;
|
||||
{
|
||||
auto parameter = std::make_shared<ov::opset1::Parameter>(ov::element::f32, ov::Shape{1, 3, 22, 22});
|
||||
parameter->set_friendly_name("input");
|
||||
auto constant =
|
||||
std::make_shared<ov::opset1::Constant>(ov::element::i64, ov::Shape{4}, std::vector<uint64_t>{0, 3, 2, 1});
|
||||
constant->set_friendly_name("value1");
|
||||
auto transpose = std::make_shared<ov::opset1::Transpose>(parameter, constant);
|
||||
transpose->set_friendly_name("Transpose0321");
|
||||
auto result = std::make_shared<ov::opset1::Result>(transpose);
|
||||
result->set_friendly_name("output");
|
||||
modelRef = std::make_shared<ov::Model>(ov::NodeVector{result}, ov::ParameterVector{parameter});
|
||||
}
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
const auto res = fc.compare(model, modelRef);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, model_without_weights_reading_from_disk) {
|
||||
std::string xmlModel = R"V0G0N(
|
||||
<?xml version="1.0" ?>
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
createTemporalModelFile(xmlModel);
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_NO_THROW(model = core.read_model(xmlFileName));
|
||||
ASSERT_TRUE(!!model);
|
||||
|
||||
std::shared_ptr<ov::Model> modelRef;
|
||||
{
|
||||
auto parameter = std::make_shared<ov::opset1::Parameter>(ov::element::f32, ov::Shape{1, 3, 22, 22});
|
||||
parameter->set_friendly_name("input");
|
||||
auto result = std::make_shared<ov::opset1::Result>(parameter);
|
||||
result->set_friendly_name("output");
|
||||
modelRef = std::make_shared<ov::Model>(ov::NodeVector{result}, ov::ParameterVector{parameter});
|
||||
}
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
const auto res = fc.compare(model, modelRef);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, model_with_wrong_shape) {
|
||||
std::string xmlModel = R"V0G0N(
|
||||
<?xml version="1.0" ?>
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="value1" type="Const" version="opset1">
|
||||
<data element_type="i64" shape="4" offset="0" size="16" />
|
||||
<output>
|
||||
<port id="0" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="2" name="Transpose0321" type="Transpose" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
<port id="1" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="3" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
|
||||
<edge from-layer="1" from-port="0" to-layer="2" to-port="1"/>
|
||||
<edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::vector<unsigned char> buffer(32, 0);
|
||||
uint64_t* uint64Buffer = reinterpret_cast<uint64_t*>(buffer.data());
|
||||
uint64Buffer[0] = 0;
|
||||
uint64Buffer[1] = 3;
|
||||
uint64Buffer[2] = 2;
|
||||
uint64Buffer[3] = 1;
|
||||
|
||||
createTemporalModelFile(xmlModel, buffer);
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_THROW(core.read_model(xmlFileName, binFileName), ov::Exception);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, model_with_underallocated_weights_reading_from_disk) {
|
||||
std::string xmlModel = R"V0G0N(
|
||||
<?xml version="1.0" ?>
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="value1" type="Const" version="opset1">
|
||||
<data element_type="i64" shape="4" offset="0" size="32" />
|
||||
<output>
|
||||
<port id="0" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="2" name="Transpose0321" type="Transpose" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
<port id="1" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="3" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
|
||||
<edge from-layer="1" from-port="0" to-layer="2" to-port="1"/>
|
||||
<edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::vector<unsigned char> buffer(24, 0);
|
||||
uint64_t* uint64Buffer = reinterpret_cast<uint64_t*>(buffer.data());
|
||||
uint64Buffer[0] = 0;
|
||||
uint64Buffer[1] = 3;
|
||||
uint64Buffer[2] = 2;
|
||||
|
||||
createTemporalModelFile(xmlModel, buffer);
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_THROW(core.read_model(xmlFileName, binFileName), ov::Exception);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, model_with_missing_weights_from_disk) {
|
||||
std::string xmlModel = R"V0G0N(
|
||||
<?xml version="1.0" ?>
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="value1" type="Const" version="opset1">
|
||||
<data element_type="i64" shape="4" offset="0" size="32" />
|
||||
<output>
|
||||
<port id="0" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="2" name="Transpose0321" type="Transpose" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
<port id="1" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="3" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
|
||||
<edge from-layer="1" from-port="0" to-layer="2" to-port="1"/>
|
||||
<edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
createTemporalModelFile(xmlModel);
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_THROW(core.read_model(xmlFileName, binFileName), ov::Exception);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, missing_layer_data) {
|
||||
std::string model = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
ASSERT_THROW(core.read_model(model, ov::Tensor()), ov::Exception);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, model_with_wrong_dimensions) {
|
||||
std::string testModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>-2</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_THROW(model = core.read_model(testModel, ov::Tensor()), ov::Exception);
|
||||
ASSERT_TRUE(!model);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, name_is_not_unique) {
|
||||
std::string xmlModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="testname" type="Const" version="opset1">
|
||||
<data element_type="i64" shape="4" offset="0" size="32" />
|
||||
<output>
|
||||
<port id="0" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="2" name="testname" type="Transpose" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
<port id="1" precision="I64">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="3" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
|
||||
<edge from-layer="1" from-port="0" to-layer="2" to-port="1"/>
|
||||
<edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::vector<unsigned char> buffer(32, 0);
|
||||
int64_t* int64Buffer = reinterpret_cast<int64_t*>(buffer.data());
|
||||
int64Buffer[0] = 0;
|
||||
int64Buffer[1] = 3;
|
||||
int64Buffer[2] = 2;
|
||||
int64Buffer[3] = 1;
|
||||
|
||||
createTemporalModelFile(xmlModel, buffer);
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_THROW(core.read_model(xmlFileName, binFileName), ov::Exception);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, edge_has_wrong_port_id) {
|
||||
std::string testModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="10"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_THROW(model = core.read_model(testModel, ov::Tensor()), ov::Exception);
|
||||
ASSERT_FALSE(!!model);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, edge_has_wrong_layer_id) {
|
||||
std::string testModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_THROW(model = core.read_model(testModel, ov::Tensor()), ov::Exception);
|
||||
ASSERT_FALSE(!!model);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, not_opset1) {
|
||||
std::string testModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="shapeof" type="ShapeOf" version="opset3">
|
||||
<data output_type="i32" />
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="1" precision="I32">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="2" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="I32">
|
||||
<dim>4</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
<edge from-layer="1" from-port="1" to-layer="2" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_NO_THROW(model = getWithIRFrontend(testModel));
|
||||
ASSERT_TRUE(!!model);
|
||||
|
||||
std::shared_ptr<ov::Model> modelRef;
|
||||
{
|
||||
auto parameter = std::make_shared<ov::opset1::Parameter>(ov::element::f32, ov::Shape{1, 3, 22, 22});
|
||||
parameter->set_friendly_name("input");
|
||||
auto shapeof = std::make_shared<ov::opset3::ShapeOf>(parameter, ov::element::i32);
|
||||
shapeof->set_friendly_name("shapeof");
|
||||
auto result = std::make_shared<ov::opset1::Result>(shapeof);
|
||||
result->set_friendly_name("output");
|
||||
modelRef = std::make_shared<ov::Model>(ov::NodeVector{result}, ov::ParameterVector{parameter});
|
||||
}
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
const auto res = fc.compare(model, modelRef);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTests, wrong_opset) {
|
||||
std::string testModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="wrongOpset">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_THROW(model = core.read_model(testModel, ov::Tensor()), ov::Exception);
|
||||
ASSERT_FALSE(!!model);
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
// Copyright (C) 2018-2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "frontend_test.hpp"
|
||||
#include "openvino/op/util/framework_node.hpp"
|
||||
#include "openvino/opsets/opset1.hpp"
|
||||
|
||||
class IRFrontendExtensionTests : public ::testing::Test, public IRFrontendTestsImpl {
|
||||
protected:
|
||||
void SetUp() override {}
|
||||
|
||||
void TearDown() override {
|
||||
RemoveTemporalFiles();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(IRFrontendExtensionTests, custom_ops_test_with_framework_node_extension) {
|
||||
static std::string customOpsModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="customOp1" id="1" type="testtype" version="testopset">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>2</dim>
|
||||
<dim>2</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="1" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>2</dim>
|
||||
<dim>2</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="2" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
<edge from-layer="1" from-port="1" to-layer="2" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
std::shared_ptr<ov::Model> model;
|
||||
auto extension = std::make_shared<ov::OpExtension<ov::op::util::FrameworkNode>>();
|
||||
|
||||
core.add_extension(extension);
|
||||
|
||||
ASSERT_NO_THROW(model = core.read_model(customOpsModel, ov::Tensor()));
|
||||
ASSERT_TRUE(!!model);
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendExtensionTests, custom_ops_test_without_extension) {
|
||||
static std::string customOpsModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data element_type="f32" shape="1,3,22,22"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="customOp1" id="1" type="testtype" version="testopset">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>2</dim>
|
||||
<dim>2</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="1" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>2</dim>
|
||||
<dim>2</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="2" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
<edge from-layer="1" from-port="1" to-layer="2" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_THROW(model = core.read_model(customOpsModel, ov::Tensor()), ov::Exception);
|
||||
ASSERT_TRUE(!model);
|
||||
}
|
||||
@@ -0,0 +1,377 @@
|
||||
// Copyright (C) 2018-2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "common_test_utils/graph_comparator.hpp"
|
||||
#include "openvino/core/preprocess/input_tensor_info.hpp"
|
||||
#include "openvino/frontend/manager.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
#include "openvino/runtime/core.hpp"
|
||||
|
||||
class PartialShapeDeserialization : public testing::Test {
|
||||
protected:
|
||||
std::shared_ptr<ov::Model> getWithIRFrontend(const std::string& model) {
|
||||
std::istringstream modelStringStream(model);
|
||||
std::istream& modelStream = modelStringStream;
|
||||
|
||||
ov::frontend::FrontEnd::Ptr FE;
|
||||
ov::frontend::InputModel::Ptr inputModel;
|
||||
|
||||
ov::AnyVector params{&modelStream};
|
||||
|
||||
FE = manager.load_by_model(params);
|
||||
if (FE)
|
||||
inputModel = FE->load(params);
|
||||
|
||||
if (inputModel)
|
||||
return FE->convert(inputModel);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
ov::frontend::FrontEndManager manager;
|
||||
};
|
||||
|
||||
TEST_F(PartialShapeDeserialization, shape_with_boundaries_test_case1) {
|
||||
std::string model = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="in1" type="Parameter" id="0" version="opset8">
|
||||
<data element_type="f16" shape="1,3,100..200,120..320"/>
|
||||
<output>
|
||||
<port id="0" precision="FP16" names="input_tensor">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="Round" id="1" type="Round" version="opset8">
|
||||
<data mode="half_to_even"/>
|
||||
<input>
|
||||
<port id="1" precision="FP16">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP16" names="output_tensor">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="2" version="opset8">
|
||||
<input>
|
||||
<port id="0" precision="FP16">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
|
||||
<edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
auto f = getWithIRFrontend(model);
|
||||
ASSERT_NE(nullptr, f);
|
||||
|
||||
ov::PartialShape shape{1, 3, ov::Dimension(100, 200), ov::Dimension(120, 320)};
|
||||
auto type = ov::element::f16;
|
||||
auto param = std::make_shared<ov::opset8::Parameter>(type, shape);
|
||||
|
||||
param->set_friendly_name("in1");
|
||||
param->get_output_tensor(0).set_names({"input_tensor"});
|
||||
|
||||
auto round = std::make_shared<ov::opset8::Round>(param, ov::opset8::Round::RoundMode::HALF_TO_EVEN);
|
||||
|
||||
round->set_friendly_name("Round");
|
||||
round->get_output_tensor(0).set_names({"output_tensor"});
|
||||
|
||||
auto result = std::make_shared<ov::opset8::Result>(round);
|
||||
result->set_friendly_name("output");
|
||||
|
||||
auto f_11_ref = std::make_shared<ov::Model>(ov::ResultVector{result}, ov::ParameterVector{param});
|
||||
f_11_ref->set_friendly_name("Network");
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
auto res = fc.compare(f, f_11_ref);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
|
||||
TEST_F(PartialShapeDeserialization, shape_with_boundaries_testC_case2) {
|
||||
std::string model = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="in1" type="Parameter" id="0" version="opset8">
|
||||
<data element_type="f16" shape="1,?,..200,120.."/>
|
||||
<output>
|
||||
<port id="0" precision="FP16" names="input_tensor">
|
||||
<dim>1</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="Round" id="1" type="Round" version="opset8">
|
||||
<data mode="half_to_even"/>
|
||||
<input>
|
||||
<port id="1" precision="FP16">
|
||||
<dim>1</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP16" names="output_tensor">
|
||||
<dim>1</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="2" version="opset8">
|
||||
<input>
|
||||
<port id="0" precision="FP16">
|
||||
<dim>1</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
<dim>-1</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
|
||||
<edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
auto f = getWithIRFrontend(model);
|
||||
ASSERT_NE(nullptr, f);
|
||||
|
||||
ov::PartialShape shape{1, ov::Dimension(), ov::Dimension(0, 200), ov::Dimension(120, -1)};
|
||||
auto type = ov::element::f16;
|
||||
auto param = std::make_shared<ov::opset8::Parameter>(type, shape);
|
||||
|
||||
param->set_friendly_name("in1");
|
||||
param->get_output_tensor(0).set_names({"input_tensor"});
|
||||
|
||||
auto round = std::make_shared<ov::opset8::Round>(param, ov::opset8::Round::RoundMode::HALF_TO_EVEN);
|
||||
|
||||
round->set_friendly_name("Round");
|
||||
round->get_output_tensor(0).set_names({"output_tensor"});
|
||||
|
||||
auto result = std::make_shared<ov::opset8::Result>(round);
|
||||
result->set_friendly_name("output");
|
||||
|
||||
auto f_11_ref = std::make_shared<ov::Model>(ov::ResultVector{result}, ov::ParameterVector{param});
|
||||
f_11_ref->set_friendly_name("Network");
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
auto res = fc.compare(f, f_11_ref);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
|
||||
TEST_F(PartialShapeDeserialization, shape_with_boundaries_test_dynamic_rank) {
|
||||
std::string model = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="in1" type="Parameter" id="0" version="opset8">
|
||||
<data element_type="f16" shape="..."/>
|
||||
<output>
|
||||
<port id="0" precision="FP16" names="input_tensor">
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="Round" id="1" type="Round" version="opset8">
|
||||
<data mode="half_to_even"/>
|
||||
<input>
|
||||
<port id="1" precision="FP16">
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP16" names="output_tensor">
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="2" version="opset8">
|
||||
<input>
|
||||
<port id="0" precision="FP16">
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
|
||||
<edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
auto f = getWithIRFrontend(model);
|
||||
ASSERT_NE(nullptr, f);
|
||||
|
||||
ov::PartialShape shape = ov::PartialShape::dynamic();
|
||||
auto type = ov::element::f16;
|
||||
auto param = std::make_shared<ov::opset8::Parameter>(type, shape);
|
||||
|
||||
param->set_friendly_name("in1");
|
||||
param->get_output_tensor(0).set_names({"input_tensor"});
|
||||
|
||||
auto round = std::make_shared<ov::opset8::Round>(param, ov::opset8::Round::RoundMode::HALF_TO_EVEN);
|
||||
|
||||
round->set_friendly_name("Round");
|
||||
round->get_output_tensor(0).set_names({"output_tensor"});
|
||||
|
||||
auto result = std::make_shared<ov::opset8::Result>(round);
|
||||
result->set_friendly_name("output");
|
||||
|
||||
auto f_11_ref = std::make_shared<ov::Model>(ov::ResultVector{result}, ov::ParameterVector{param});
|
||||
f_11_ref->set_friendly_name("Network");
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
auto res = fc.compare(f, f_11_ref);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
|
||||
TEST_F(PartialShapeDeserialization, shape_with_boundaries_test_dynamic_rank_negative) {
|
||||
std::string model = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="in1" type="Parameter" id="0" version="opset8">
|
||||
<data element_type="f16" shape="...,..."/>
|
||||
<output>
|
||||
<port id="0" precision="FP16" names="input_tensor">
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset8">
|
||||
<input>
|
||||
<port id="0" precision="FP16">
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
// TODO: change to ov::Exception (69781)
|
||||
ASSERT_THROW(getWithIRFrontend(model), ov::Exception);
|
||||
}
|
||||
|
||||
TEST_F(PartialShapeDeserialization, shape_with_boundaries_test_dynamic_dim_negative) {
|
||||
std::string model = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="in1" type="Parameter" id="0" version="opset8">
|
||||
<data element_type="f16" shape="1,...,2"/>
|
||||
<output>
|
||||
<port id="0" precision="FP16" names="input_tensor">
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset8">
|
||||
<input>
|
||||
<port id="0" precision="FP16">
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
// TODO: change to ov::Exception (69781)
|
||||
ASSERT_THROW(getWithIRFrontend(model), ov::Exception);
|
||||
}
|
||||
|
||||
TEST_F(PartialShapeDeserialization, shape_with_boundaries_test_wrong_dim) {
|
||||
std::string model = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="in1" type="Parameter" id="0" version="opset8">
|
||||
<data element_type="f16" shape="1s,2"/>
|
||||
<output>
|
||||
<port id="0" precision="FP16" names="input_tensor">
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset8">
|
||||
<input>
|
||||
<port id="0" precision="FP16">
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
// TODO: change to ov::Exception (69781)
|
||||
ASSERT_THROW(getWithIRFrontend(model), ov::Exception);
|
||||
}
|
||||
|
||||
TEST_F(PartialShapeDeserialization, shape_with_boundaries_test_wrong_boundary) {
|
||||
std::string model = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer name="in1" type="Parameter" id="0" version="opset8">
|
||||
<data element_type="f16" shape="1..g,2"/>
|
||||
<output>
|
||||
<port id="0" precision="FP16" names="input_tensor">
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset8">
|
||||
<input>
|
||||
<port id="0" precision="FP16">
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
// TODO: change to ov::Exception (69781)
|
||||
ASSERT_THROW(getWithIRFrontend(model), ov::Exception);
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
// Copyright (C) 2018-2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "frontend_test.hpp"
|
||||
|
||||
class IRFrontendTestsPreProcessing : public ::testing::Test, public IRFrontendTestsImpl {
|
||||
protected:
|
||||
void SetUp() override {}
|
||||
|
||||
void TearDown() override {
|
||||
RemoveTemporalFiles();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(IRFrontendTestsPreProcessing, pre_processing) {
|
||||
std::string xmlModel = R"V0G0N(
|
||||
<?xml version="1.0" ?>
|
||||
<net name="Network" version="10">
|
||||
<pre-process mean-precision="FP32" reference-layer-name="input">
|
||||
<channel id="0">
|
||||
<mean offset="0" size="1936"/>
|
||||
</channel>
|
||||
<channel id="1">
|
||||
<mean offset="1936" size="1936"/>
|
||||
</channel>
|
||||
<channel id="2">
|
||||
<mean offset="3872" size="1936"/>
|
||||
</channel>
|
||||
</pre-process>
|
||||
<layers>
|
||||
<layer name="input" type="Parameter" id="0" version="opset1">
|
||||
<data shape="1,3,22,22" element_type="f32"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer name="output" type="Result" id="1" version="opset1">
|
||||
<input>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>3</dim>
|
||||
<dim>22</dim>
|
||||
<dim>22</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
int dataSizeinFloat = 22 * 22 * 3;
|
||||
std::vector<unsigned char> buffer(dataSizeinFloat * sizeof(float), 0);
|
||||
float* floatBuffer = reinterpret_cast<float*>(buffer.data());
|
||||
for (int i = 0; i < dataSizeinFloat; i++) {
|
||||
floatBuffer[i] = 1;
|
||||
}
|
||||
|
||||
createTemporalModelFile(xmlModel, buffer);
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_NO_THROW(model = core.read_model(xmlFileName, binFileName));
|
||||
ASSERT_TRUE(!!model);
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,252 @@
|
||||
// Copyright (C) 2018-2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "frontend_test.hpp"
|
||||
#include "openvino/opsets/opset1.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
class IRFrontendTestsTensorIterator : public ::testing::Test, public IRFrontendTestsImpl {
|
||||
protected:
|
||||
void SetUp() override {}
|
||||
|
||||
void TearDown() override {
|
||||
RemoveTemporalFiles();
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(IRFrontendTestsTensorIterator, tensor_iterator_merged_input) {
|
||||
std::string testModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer id="0" name="Parameter1" type="Parameter" version="opset1">
|
||||
<data element_type="f32" shape="1,2,3"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="TensorIterator" type="TensorIterator" version="opset1">
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="1" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
<port_map>
|
||||
<input external_port_id="0" internal_layer_id="0"/>
|
||||
<output external_port_id="1" internal_layer_id="1"/>
|
||||
</port_map>
|
||||
<back_edges>
|
||||
<edge from-layer="1" to-layer="0"/>
|
||||
</back_edges>
|
||||
<body>
|
||||
<layers>
|
||||
<layer id="0" name="internalParameter1" type="Parameter" version="opset1">
|
||||
<data element_type="f32" shape="1,2,3"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="internalResult1" type="Result" version="opset1">
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</body>
|
||||
</layer>
|
||||
<layer id="2" name="Result1" type="Result" version="opset1">
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
<edge from-layer="1" from-port="1" to-layer="2" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_NO_THROW(model = core.read_model(testModel, ov::Tensor()));
|
||||
ASSERT_TRUE(!!model);
|
||||
|
||||
std::shared_ptr<ov::Model> modelRef;
|
||||
{
|
||||
auto parameter = std::make_shared<ov::opset1::Parameter>(ov::element::f32, ov::Shape{1, 2, 3});
|
||||
parameter->set_friendly_name("Parameter1");
|
||||
auto tensor_iterator = std::make_shared<ov::opset8::TensorIterator>();
|
||||
|
||||
std::shared_ptr<ov::Model> body;
|
||||
auto internalParameter = std::make_shared<ov::opset1::Parameter>(ov::element::f32, ov::Shape{1, 2, 3});
|
||||
internalParameter->set_friendly_name("internalParameter1");
|
||||
auto result1 = std::make_shared<ov::opset1::Result>(internalParameter);
|
||||
result1->set_friendly_name("internalResult1");
|
||||
body = std::make_shared<ov::Model>(ov::NodeVector{result1}, ov::ParameterVector{internalParameter});
|
||||
tensor_iterator->set_body(body);
|
||||
tensor_iterator->set_friendly_name("TensorIterator");
|
||||
tensor_iterator->set_merged_input(internalParameter, parameter, result1);
|
||||
auto out0 = tensor_iterator->get_iter_value(result1, -1);
|
||||
|
||||
auto result = std::make_shared<ov::opset1::Result>(tensor_iterator->output(0));
|
||||
result->set_friendly_name("Result1");
|
||||
|
||||
modelRef = std::make_shared<ov::Model>(ov::NodeVector{result}, ov::ParameterVector{parameter});
|
||||
}
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
const auto res = fc.compare(model, modelRef);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
|
||||
TEST_F(IRFrontendTestsTensorIterator, tensor_iterator_slised_input) {
|
||||
std::string testModel = R"V0G0N(
|
||||
<net name="Network" version="11">
|
||||
<layers>
|
||||
<layer id="0" name="Parameter1" type="Parameter" version="opset1">
|
||||
<data element_type="f32" shape="1,2,3"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="TensorIterator" type="TensorIterator" version="opset1">
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="1" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</output>
|
||||
<port_map>
|
||||
<input axis="2" external_port_id="0" internal_layer_id="0" part_size="1" stride="1"/>
|
||||
<output axis="2" external_port_id="1" internal_layer_id="1" part_size="1" stride="1"/>
|
||||
</port_map>
|
||||
<back_edges>
|
||||
<edge from-layer="1" to-layer="0"/>
|
||||
</back_edges>
|
||||
<body>
|
||||
<layers>
|
||||
<layer id="0" name="internalParameter1" type="Parameter" version="opset1">
|
||||
<data element_type="f32" shape="1,2,1"/>
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>1</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="internalResult1" type="Result" version="opset1">
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>1</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
</edges>
|
||||
</body>
|
||||
</layer>
|
||||
<layer id="2" name="Result1" type="Result" version="opset1">
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>1</dim>
|
||||
<dim>2</dim>
|
||||
<dim>3</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
|
||||
<edge from-layer="1" from-port="1" to-layer="2" to-port="0"/>
|
||||
</edges>
|
||||
</net>
|
||||
)V0G0N";
|
||||
|
||||
std::shared_ptr<ov::Model> model;
|
||||
|
||||
ASSERT_NO_THROW(model = core.read_model(testModel, ov::Tensor()));
|
||||
ASSERT_TRUE(!!model);
|
||||
|
||||
std::shared_ptr<ov::Model> modelRef;
|
||||
{
|
||||
auto parameter = std::make_shared<ov::opset1::Parameter>(ov::element::f32, ov::Shape{1, 2, 3});
|
||||
parameter->set_friendly_name("Parameter1");
|
||||
auto tensor_iterator = std::make_shared<ov::opset8::TensorIterator>();
|
||||
|
||||
std::shared_ptr<ov::Model> body;
|
||||
auto internalParameter = std::make_shared<ov::opset1::Parameter>(ov::element::f32, ov::Shape{1, 2, 3});
|
||||
internalParameter->set_friendly_name("internalParameter1");
|
||||
auto result1 = std::make_shared<ov::opset1::Result>(internalParameter);
|
||||
result1->set_friendly_name("internalResult1");
|
||||
body = std::make_shared<ov::Model>(ov::NodeVector{result1}, ov::ParameterVector{internalParameter});
|
||||
tensor_iterator->set_body(body);
|
||||
tensor_iterator->set_friendly_name("TensorIterator");
|
||||
tensor_iterator->set_sliced_input(internalParameter, parameter, 0, 1, 1, -1, 2);
|
||||
auto out0 = tensor_iterator->get_concatenated_slices(result1, 0, 1, 1, -1, 2);
|
||||
|
||||
auto result = std::make_shared<ov::opset1::Result>(tensor_iterator->output(0));
|
||||
result->set_friendly_name("Result1");
|
||||
|
||||
modelRef = std::make_shared<ov::Model>(ov::NodeVector{result}, ov::ParameterVector{parameter});
|
||||
}
|
||||
|
||||
const auto fc = FunctionsComparator::with_default()
|
||||
.enable(FunctionsComparator::ATTRIBUTES)
|
||||
.enable(FunctionsComparator::PRECISIONS)
|
||||
.enable(FunctionsComparator::RUNTIME_KEYS)
|
||||
.enable(FunctionsComparator::NAMES)
|
||||
.enable(FunctionsComparator::CONST_VALUES);
|
||||
const auto res = fc.compare(model, modelRef);
|
||||
EXPECT_TRUE(res.valid) << res.message;
|
||||
}
|
||||
Reference in new issue
Block a user