Skip to content

Commit b7d3104

Browse files
authored
[NVIDIA] Fix Concat/VariadicSplit layers with negative axis (#476)
* Fix Concat layer with negative axis * Fix negative axis for VariadicSplit
1 parent ae1f96d commit b7d3104

File tree

4 files changed

+10
-4
lines changed

4 files changed

+10
-4
lines changed

modules/nvidia_plugin/src/ops/concat.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ ConcatOp::ConcatOp(const CreationContext& context,
2929
Expects(num_inputs_ == GetInputIds().size());
3030
Expects(GetOutputIds().size() == 1);
3131
const auto& outputShape = concatOp.get_output_shape(0);
32-
const int64_t axis = concatOp.get_axis();
32+
int64_t axis = concatOp.get_axis();
33+
if (axis < 0) {
34+
axis += static_cast<int64_t>(concatOp.get_input_partial_shape(0).rank().get_length());
35+
}
3336
Expects(axis >= 0 && axis < outputShape.size());
3437
auto num_chunks =
3538
std::accumulate(outputShape.begin(), outputShape.begin() + axis + 1, 1, std::multiplies<size_t>());

modules/nvidia_plugin/src/ops/variadic_split.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@ VariadicSplitOp::VariadicSplitOp(const CreationContext& context,
9292
const auto element_type = input_element_type;
9393

9494
const auto& data_shape = variadic_split_node->get_input_shape(0);
95-
const int64_t axis = *axis_node->get_data_ptr<int64_t>();
95+
int64_t axis = *axis_node->get_data_ptr<int64_t>();
96+
if (axis < 0) {
97+
axis += static_cast<int64_t>(variadic_split_node->get_input_partial_shape(0).rank().get_length());
98+
}
9699
Expects(axis >= 0 && axis < data_shape.size());
97100
const size_t orig_axis_size = data_shape[axis];
98101

modules/nvidia_plugin/tests/functional/shared_tests_instances/single_layer_tests/concat.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ using namespace LayerTestsDefinitions;
1313

1414
namespace {
1515

16-
std::vector<int> axes = {0, 1, 2, 3};
16+
std::vector<int> axes = {-3, -2, -1, 0, 1, 2, 3};
1717
std::vector<std::vector<std::vector<size_t>>> inShapes = {
1818
{{10, 10, 10, 10}},
1919
{{10, 10, 10, 10}, {10, 10, 10, 10}},

modules/nvidia_plugin/tests/functional/shared_tests_instances/single_layer_tests/variadic_split.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const std::vector<std::vector<size_t>> smoke_numSplits = {
3030
INSTANTIATE_TEST_CASE_P(smoke_NumSplitsCheck,
3131
VariadicSplitLayerTest,
3232
::testing::Combine(::testing::ValuesIn(smoke_numSplits),
33-
::testing::Values(0, 1, 2, 3),
33+
::testing::Values(-3, -2, -1, 0, 1, 2, 3),
3434
::testing::ValuesIn(netPrecisions),
3535
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),
3636
::testing::Values(InferenceEngine::Precision::UNSPECIFIED),

0 commit comments

Comments
 (0)