[BUG]Add extra op clone to have default inputs/outputs set. (#3855)
* Add extra op clone to have default inputs/outputs set. * Call `validate_and_infer_types` after clone for TensorIterator and Loop * Add gtest to check if default values works with dynamic shapes * Apply suggestions from PR. Co-authored-by: Patryk Elszkowski <patryk.elszkowki@intel.com>
This commit is contained in:
parent
afb32262c1
commit
187813a3f6
@ -710,8 +710,18 @@ std::shared_ptr<ngraph::Node> V10Parser::XmlDeserializer::createNode(
|
||||
}
|
||||
ngraphNode->set_arguments(inputs);
|
||||
XmlDeserializer visitor(node, weights, opsets);
|
||||
if (ngraphNode->visit_attributes(visitor))
|
||||
if (ngraphNode->visit_attributes(visitor)) {
|
||||
ngraphNode->constructor_validate_and_infer_types();
|
||||
}
|
||||
|
||||
// To be sure that all default values will be initialized:
|
||||
ngraphNode = ngraphNode->clone_with_new_inputs(ngraphNode->input_values());
|
||||
|
||||
// Constructor of Loop and TensorIterator do not call validate_and_infer_types function
|
||||
// -> ticket 36145
|
||||
if (const auto& subGraph = std::dynamic_pointer_cast<ngraph::op::util::SubGraphOp>(ngraphNode)) {
|
||||
subGraph->validate_and_infer_types();
|
||||
}
|
||||
}
|
||||
|
||||
// Create GenericIE operation for backward compatibility
|
||||
|
Binary file not shown.
@ -0,0 +1,93 @@
|
||||
<?xml version="1.0"?>
|
||||
<net name="Function_0" version="10">
|
||||
<layers>
|
||||
<layer id="0" name="Parameter_68" type="Parameter" version="opset1">
|
||||
<data shape="6" element_type="f32" />
|
||||
<output>
|
||||
<port id="0" precision="FP32">
|
||||
<dim>6</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="1" name="Constant_69" type="Const" version="opset1">
|
||||
<data element_type="i64" shape="1" offset="0" size="8" />
|
||||
<output>
|
||||
<port id="0" precision="I64">
|
||||
<dim>1</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="2" name="Constant_70" type="Const" version="opset1">
|
||||
<data element_type="i64" shape="1" offset="8" size="8" />
|
||||
<output>
|
||||
<port id="0" precision="I64">
|
||||
<dim>1</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="4" name="Pad_72" type="Pad" version="opset1">
|
||||
<data pad_mode="reflect" />
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>6</dim>
|
||||
</port>
|
||||
<port id="1">
|
||||
<dim>1</dim>
|
||||
</port>
|
||||
<port id="2">
|
||||
<dim>1</dim>
|
||||
</port>
|
||||
|
||||
</input>
|
||||
<output>
|
||||
<port id="3" precision="FP32">
|
||||
<dim>15</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="5" name="ShapeOf_73" type="ShapeOf" version="opset1">
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>15</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="1" precision="I64">
|
||||
<dim>1</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="6" name="Reshape_74" type="Reshape" version="opset1">
|
||||
<data special_zero="false" />
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>15</dim>
|
||||
</port>
|
||||
<port id="1">
|
||||
<dim>1</dim>
|
||||
</port>
|
||||
</input>
|
||||
<output>
|
||||
<port id="2" precision="FP32">
|
||||
<dim>15</dim>
|
||||
</port>
|
||||
</output>
|
||||
</layer>
|
||||
<layer id="7" name="Result_75" type="Result" version="opset1">
|
||||
<input>
|
||||
<port id="0">
|
||||
<dim>15</dim>
|
||||
</port>
|
||||
</input>
|
||||
</layer>
|
||||
</layers>
|
||||
<edges>
|
||||
<edge from-layer="0" from-port="0" to-layer="4" to-port="0" />
|
||||
<edge from-layer="1" from-port="0" to-layer="4" to-port="1" />
|
||||
<edge from-layer="2" from-port="0" to-layer="4" to-port="2" />
|
||||
<edge from-layer="4" from-port="3" to-layer="5" to-port="0" />
|
||||
<edge from-layer="4" from-port="3" to-layer="6" to-port="0" />
|
||||
<edge from-layer="5" from-port="1" to-layer="6" to-port="1" />
|
||||
<edge from-layer="6" from-port="2" to-layer="7" to-port="0" />
|
||||
</edges>
|
||||
</net>
|
@ -68,7 +68,8 @@ INSTANTIATE_TEST_CASE_P(IRSerialization, SerializationTest,
|
||||
std::make_tuple("experimental_detectron_detection_output.xml", ""),
|
||||
std::make_tuple("experimental_detectron_detection_output_opset6.xml", ""),
|
||||
std::make_tuple("nms5.xml", "nms5.bin"),
|
||||
std::make_tuple("shape_of.xml", "")));
|
||||
std::make_tuple("shape_of.xml", ""),
|
||||
std::make_tuple("pad_with_shape_of.xml", "")));
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(ONNXSerialization, SerializationTest,
|
||||
testing::Values(std::make_tuple("add_abc.prototxt", ""),
|
||||
|
@ -375,7 +375,7 @@ std::shared_ptr<Node> op::v5::Loop::clone_with_new_inputs(const OutputVector& ne
|
||||
{
|
||||
op->m_output_descriptions.push_back(output_description->copy());
|
||||
}
|
||||
return move(op);
|
||||
return op;
|
||||
}
|
||||
|
||||
Output<Node> op::v5::Loop::get_concatenated_slices(const Output<Node>& value,
|
||||
|
@ -301,5 +301,5 @@ std::shared_ptr<Node>
|
||||
{
|
||||
op->m_output_descriptions.push_back(output_description->copy());
|
||||
}
|
||||
return move(op);
|
||||
return op;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user