Fix concat to use ngraph shape infer (#16226)

Fix crop to return shape of original rank
This commit is contained in:
Taylor Yeonbok Lee 2023-03-13 13:25:23 -07:00 committed by GitHub
parent 9462b3ea16
commit f0f1c47063
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 13 deletions

View File

@ -8,6 +8,8 @@
#include "compounds.hpp"
#include "utils.hpp"
#include <openvino/core/partial_shape.hpp>
#include <map>
#include <list>
#include <cstdint>
@ -652,6 +654,19 @@ public:
return offset;
}
/// @brief Returns tensor as Partial shape of requested rank
ov::PartialShape get_partial_shape(size_t rank) const {
ov::Shape shape;
size_t i = 0;
for (; i < std::min(static_cast<size_t>(2), rank); ++i) {
shape.push_back(_sizes[i]);
}
for (; i < rank; ++i) {
shape.push_back(_sizes[rank - (i - 2) - 1]);
}
return ov::PartialShape(shape);
}
/// @brief Returns a tensor containing values maximum from @p lhs and @p rhs.
static tensor max(tensor const& lhs, tensor const& rhs) {
auto ret = lhs;

View File

@ -3,6 +3,7 @@
//
#include "concatenation_inst.h"
#include "concat_shape_inference.hpp"
#include "primitive_type_base.h"
#include "intel_gpu/runtime/error_handler.hpp"
#include "json_object.h"
@ -54,18 +55,16 @@ std::vector<layout> concatenation_inst::calc_output_layouts(const concatenation_
}
auto axis_index = desc->axis;
auto output_shape = input_layout.get<ShapeType>();
output_shape[axis_index] = 0;
std::vector<ShapeType> input_shapes;
std::vector<ShapeType> output_shapes = {ShapeType{}};
for (size_t i = 0; i < desc->input.size(); ++i) {
auto input_shape = impl_param.get_input_layout(i).get<ShapeType>();
if (input_shape.is_dynamic()) {
return { layout {ov::PartialShape::dynamic(input_shape.size()), output_dt, output_format} };
}
output_shape[axis_index] += input_shape[axis_index];
input_shapes.push_back(input_shape);
}
return { layout {output_shape, output_dt, output_format} };
ov::op::v0::Concat op;
op.set_concatenation_axis(axis_index);
ov::op::v0::shape_infer(&op, input_shapes, output_shapes);
return { layout {output_shapes[0], output_dt, output_format} };
}
template std::vector<layout> concatenation_inst::calc_output_layouts<ov::PartialShape>(concatenation_node const& node, const kernel_impl_params& impl_param);

View File

@ -102,9 +102,9 @@ std::vector<layout> crop_inst::calc_output_layouts(const crop_node& /*node*/, co
const auto lt_sizes = offsets.sub({0, 0, 0, 0, 0});
const auto out_sizes = in_sizes - (rb_sizes + lt_sizes);
return {layout({in_layout.data_type, in_layout.format, out_sizes})};
return {layout{out_sizes.get_partial_shape(in_layout.get_partial_shape().size()), in_layout.data_type, in_layout.format}};
}
return {layout({in_layout.data_type, in_layout.format, ref_in_sizes})};
return {layout{ref_in_sizes.get_partial_shape(in_layout.get_partial_shape().size()), in_layout.data_type, in_layout.format}};
}
bool is_output_static = false;

View File

@ -83,7 +83,7 @@ INSTANTIATE_TEST_SUITE_P(smoke, concatenation_test,
layout{ov::PartialShape{2, 2}, data_types::f32, format::bfyx},
},
0,
layout{ov::PartialShape::dynamic(2), data_types::f32, format::bfyx}
layout{ov::PartialShape{ov::Dimension(5, -1), ov::Dimension(2, 2)}, data_types::f32, format::bfyx}
},
}));

View File

@ -105,7 +105,7 @@ INSTANTIATE_TEST_SUITE_P(smoke, crop_si_test,
{tensor({0,0,0,0,1,1,1}),tensor({0,0,0,0,1,1,1})},
{},
{{{4},data_types::f32,format::bfyx}},
{{{3, 1, 1, 1},data_types::f32,format::bfyx}}, 0 // TODO: update once shape infer impl is fixed and don't do rank extension
{{{3},data_types::f32,format::bfyx}}, 0
},
{
tensor({-1,-1,-1,-1,-1,-1,-1}),