Fix concat to use ngraph shape infer (#16226)
Fix crop to return shape of original rank
This commit is contained in:
parent
9462b3ea16
commit
f0f1c47063
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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}
|
||||
},
|
||||
}));
|
||||
|
||||
|
@ -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}),
|
||||
|
Loading…
Reference in New Issue
Block a user