diff --git a/src/frontends/onnx/frontend/src/op/reduce.cpp b/src/frontends/onnx/frontend/src/op/reduce.cpp index ed4aaa5d13d..d0525d06f81 100644 --- a/src/frontends/onnx/frontend/src/op/reduce.cpp +++ b/src/frontends/onnx/frontend/src/op/reduce.cpp @@ -213,7 +213,9 @@ ov::OutputVector reduce_l2(const Node& node) { ov::OutputVector reduce_max(const ov::frontend::onnx::Node& node) { return {make_ov_reduction_op(node, node.get_ov_inputs().at(0), supported_types_v3)}; } - +ov::OutputVector reduce_mean(const ov::frontend::onnx::Node& node) { + return {make_ov_reduction_op(node, node.get_ov_inputs().at(0), supported_types_v2)}; +} ov::OutputVector reduce_min(const ov::frontend::onnx::Node& node) { return {make_ov_reduction_op(node, node.get_ov_inputs().at(0), supported_types_v3)}; } @@ -230,11 +232,12 @@ ov::OutputVector reduce_l2(const Node& node) { ov::OutputVector reduce_max(const ov::frontend::onnx::Node& node) { return {make_ov_reduction_op(node, node.get_ov_inputs().at(0), supported_types_v3, false)}; } - +ov::OutputVector reduce_mean(const ov::frontend::onnx::Node& node) { + return {make_ov_reduction_op(node, node.get_ov_inputs().at(0), supported_types_v3, false)}; +} ov::OutputVector reduce_min(const ov::frontend::onnx::Node& node) { return {make_ov_reduction_op(node, node.get_ov_inputs().at(0), supported_types_v3, false)}; } - ov::OutputVector reduce_log_sum(const ov::frontend::onnx::Node& node) { const ov::Output sum_node = make_ov_reduction_op(node, node.get_ov_inputs().at(0), supported_types_v2, false); diff --git a/src/frontends/onnx/frontend/src/op/reduce.hpp b/src/frontends/onnx/frontend/src/op/reduce.hpp index 740a6127fc3..7ad4693a12e 100644 --- a/src/frontends/onnx/frontend/src/op/reduce.hpp +++ b/src/frontends/onnx/frontend/src/op/reduce.hpp @@ -51,6 +51,12 @@ ov::OutputVector reduce_max(const ov::frontend::onnx::Node& node); namespace set_1 { ov::OutputVector reduce_mean(const ov::frontend::onnx::Node& node); } // namespace set_1 +namespace set_13 { +ov::OutputVector reduce_mean(const ov::frontend::onnx::Node& node); +} // namespace set_13 +namespace set_18 { +ov::OutputVector reduce_mean(const ov::frontend::onnx::Node& node); +} // namespace set_18 namespace set_1 { ov::OutputVector reduce_min(const ov::frontend::onnx::Node& node); diff --git a/src/frontends/onnx/frontend/src/ops_bridge.cpp b/src/frontends/onnx/frontend/src/ops_bridge.cpp index cbc26d22849..aa97235bd1a 100644 --- a/src/frontends/onnx/frontend/src/ops_bridge.cpp +++ b/src/frontends/onnx/frontend/src/ops_bridge.cpp @@ -497,6 +497,8 @@ OperatorsBridge::OperatorsBridge() { REGISTER_OPERATOR("ReduceMax", 18, reduce_max); REGISTER_OPERATOR("ReduceMax", 20, reduce_max); REGISTER_OPERATOR("ReduceMean", 1, reduce_mean); + REGISTER_OPERATOR("ReduceMean", 13, reduce_mean); + REGISTER_OPERATOR("ReduceMean", 18, reduce_mean); REGISTER_OPERATOR("ReduceMin", 1, reduce_min); REGISTER_OPERATOR("ReduceMin", 13, reduce_min); REGISTER_OPERATOR("ReduceMin", 18, reduce_min); diff --git a/src/frontends/onnx/tests/models/reduce_mean_18.prototxt b/src/frontends/onnx/tests/models/reduce_mean_18.prototxt new file mode 100644 index 00000000000..32c4377f339 --- /dev/null +++ b/src/frontends/onnx/tests/models/reduce_mean_18.prototxt @@ -0,0 +1,67 @@ +ir_version: 7 +graph { + node { + input: "a" + input: "axes" + output: "b" + op_type: "ReduceMean" + } + name: "ReduceMeanGraph" + initializer { + data_type: 6 + dims: 1 + name: "axes" + raw_data: "\002\000\000\000" + } + input { + name: "a" + type { + tensor_type { + elem_type: 2 + shape { + dim { + dim_value: 1 + } + dim { + dim_value: 1 + } + dim { + dim_value: 4 + } + dim { + dim_value: 4 + } + } + } + } + } + input { + name: "axes" + type { + tensor_type { + elem_type: 6 + shape { + dim { + dim_value: 1 + } + } + } + } + } + output { + name: "b" + type { + tensor_type { + elem_type: 2 + shape { + dim { + dim_value: 1 + } + } + } + } + } +} +opset_import { + version: 18 +} diff --git a/src/frontends/onnx/tests/onnx_import.in.cpp b/src/frontends/onnx/tests/onnx_import.in.cpp index 1d0d9c488bf..e15e4e768b6 100644 --- a/src/frontends/onnx/tests/onnx_import.in.cpp +++ b/src/frontends/onnx/tests/onnx_import.in.cpp @@ -1182,6 +1182,23 @@ OPENVINO_TEST(${BACKEND_NAME}, onnx_model_reduce_mean) { test_case.run(); } +OPENVINO_TEST(${BACKEND_NAME}, onnx_model_reduce_mean_18) { + auto model = convert_model("reduce_mean_18.onnx"); + + // input data shape (1, 1, 4, 4) + std::vector> inputs{ + ov::test::NDArray({{{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}}}) + .get_vector()}; + + // output data shape (1,) + auto expected_output = ov::test::NDArray({7, 8, 9, 10}).get_vector(); + + auto test_case = ov::test::TestCase(model, s_device); + test_case.add_multiple_inputs(inputs); + test_case.add_expected_output(expected_output); + test_case.run(); +} + OPENVINO_TEST(${BACKEND_NAME}, onnx_model_reduce_min) { auto model = convert_model("reduce_min.onnx"); diff --git a/src/frontends/onnx/tests/tests_python/test_backend.py b/src/frontends/onnx/tests/tests_python/test_backend.py index 91bd1701ca3..7961ef1533f 100644 --- a/src/frontends/onnx/tests/tests_python/test_backend.py +++ b/src/frontends/onnx/tests/tests_python/test_backend.py @@ -48,9 +48,6 @@ from tests import ( xfail_issue_99950, xfail_issue_99952, xfail_issue_99954, - xfail_issue_99955, - xfail_issue_99957, - xfail_issue_99960, xfail_issue_99961, xfail_issue_99968, xfail_issue_99969, @@ -419,31 +416,6 @@ tests_expected_to_fail = [ xfail_issue_99954, "OnnxBackendNodeModelTest.test_constant_pad_axes_cpu", ), - ( - xfail_issue_99955, - "OnnxBackendNodeModelTest.test_group_normalization_epsilon_expanded_cpu", - "OnnxBackendNodeModelTest.test_group_normalization_example_expanded_cpu", - ), - ( - xfail_issue_99957, - "OnnxBackendNodeModelTest.test_layer_normalization_2d_axis1_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_2d_axis_negative_1_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_3d_axis1_epsilon_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_3d_axis2_epsilon_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_3d_axis_negative_1_epsilon_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_3d_axis_negative_2_epsilon_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_4d_axis1_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_4d_axis2_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_4d_axis3_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_4d_axis_negative_1_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_4d_axis_negative_2_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_4d_axis_negative_3_expanded_ver18_cpu", - "OnnxBackendNodeModelTest.test_layer_normalization_default_axis_expanded_ver18_cpu", - ), - ( - xfail_issue_99960, - "OnnxBackendNodeModelTest.test_mvn_expanded_ver18_cpu", - ), ( xfail_issue_99961, "OnnxBackendNodeModelTest.test_optional_get_element_optional_sequence_cpu", @@ -475,13 +447,7 @@ tests_expected_to_fail = [ "OnnxBackendNodeModelTest.test_reduce_log_sum_exp_keepdims_example_cpu", "OnnxBackendNodeModelTest.test_reduce_log_sum_exp_negative_axes_keepdims_example_cpu", "OnnxBackendNodeModelTest.test_reduce_log_sum_exp_keepdims_random_cpu", - "OnnxBackendNodeModelTest.test_reduce_mean_do_not_keepdims_example_cpu", "OnnxBackendNodeModelTest.test_reduce_log_sum_exp_negative_axes_keepdims_random_cpu", - "OnnxBackendNodeModelTest.test_reduce_mean_do_not_keepdims_random_cpu", - "OnnxBackendNodeModelTest.test_reduce_mean_keepdims_example_cpu", - "OnnxBackendNodeModelTest.test_reduce_mean_negative_axes_keepdims_example_cpu", - "OnnxBackendNodeModelTest.test_reduce_mean_keepdims_random_cpu", - "OnnxBackendNodeModelTest.test_reduce_mean_negative_axes_keepdims_random_cpu", "OnnxBackendNodeModelTest.test_reduce_prod_do_not_keepdims_example_cpu", "OnnxBackendNodeModelTest.test_reduce_prod_do_not_keepdims_random_cpu", "OnnxBackendNodeModelTest.test_reduce_prod_keepdims_example_cpu",