diff --git a/modules/dnn/src/layers/trilu_layer.cpp b/modules/dnn/src/layers/trilu_layer.cpp index 4a33177633..84d2c279f3 100644 --- a/modules/dnn/src/layers/trilu_layer.cpp +++ b/modules/dnn/src/layers/trilu_layer.cpp @@ -22,7 +22,6 @@ class TriluLayerImpl CV_FINAL : public TriluLayer { return false; } - void forward(InputArrayOfArrays inputs_arr, OutputArrayOfArrays outputs_arr, OutputArrayOfArrays internals_arr) CV_OVERRIDE { std::vector inputs, outputs; inputs_arr.getMatVector(inputs); @@ -42,18 +41,19 @@ class TriluLayerImpl CV_FINAL : public TriluLayer { for (int i = 0; i < cdims; ++i) loops *= shape_input[i]; - float *dst = outputs[0].ptr(); + const size_t elemSize = outputs[0].elemSize(); + uchar *dst = outputs[0].ptr(); auto fn = [&](const Range &r) { - for (int i = r.start; i < r.end; i++) { for(int l=0; l < m; l+=1) { int cmin = upperTri ? 0 : (l + k + 1); cmin = std::max(cmin, 0); const int cmax = upperTri ? min(l + k -1, w-1) : w-1; const int num_zeros = cmax - cmin + 1; - auto *cur_dst = dst + ((w * h) * i + (w * l + cmin)); + size_t offset = (static_cast(w) * h * i + (static_cast(w) * l + cmin)) * elemSize; + auto *cur_dst = dst + offset; if (cmin < w && num_zeros > 0) - std::memset(cur_dst, 0, sizeof(float) * num_zeros); + std::memset(cur_dst, 0, elemSize * num_zeros); } } }; @@ -62,24 +62,21 @@ class TriluLayerImpl CV_FINAL : public TriluLayer { parallel_for_(Range(0, loops), fn, nstripes); } - void getTypes(const std::vector& inputs, const int requiredOutputs, const int requiredInternals, std::vector& outputs, std::vector& internals) const CV_OVERRIDE { - outputs.assign(1, CV_32F); + outputs.assign(1, inputs[0]); } private: bool upperTri; }; - Ptr TriluLayer::create(const LayerParams& params) { return makePtr(params); } - }} diff --git a/modules/dnn/test/test_onnx_conformance_layer_filter__openvino.inl.hpp b/modules/dnn/test/test_onnx_conformance_layer_filter__openvino.inl.hpp index 06c176e4f3..4590e6da50 100644 --- a/modules/dnn/test/test_onnx_conformance_layer_filter__openvino.inl.hpp +++ b/modules/dnn/test/test_onnx_conformance_layer_filter__openvino.inl.hpp @@ -2058,39 +2058,39 @@ CASE(test_transpose_all_permutations_5) CASE(test_transpose_default) // no filter CASE(test_tril) - // no filter + SKIP; CASE(test_tril_neg) - // no filter + SKIP; CASE(test_tril_one_row_neg) - // no filter + SKIP; CASE(test_tril_out_neg) - // no filter + SKIP; CASE(test_tril_out_pos) - // no filter + SKIP; CASE(test_tril_pos) - // no filter + SKIP; CASE(test_tril_square) - // no filter + SKIP; CASE(test_tril_square_neg) - // no filter + SKIP; CASE(test_tril_zero) // no filter CASE(test_triu) - // no filter + SKIP; CASE(test_triu_neg) - // no filter + SKIP; CASE(test_triu_one_row) - // no filter + SKIP; CASE(test_triu_out_neg_out) - // no filter + SKIP; CASE(test_triu_out_pos) - // no filter + SKIP; CASE(test_triu_pos) - // no filter + SKIP; CASE(test_triu_square) - // no filter + SKIP; CASE(test_triu_square_neg) - // no filter + SKIP; CASE(test_triu_zero) // no filter CASE(test_unique_not_sorted_without_axis) diff --git a/modules/dnn/test/test_onnx_conformance_layer_filter_opencv_classic_denylist.inl.hpp b/modules/dnn/test/test_onnx_conformance_layer_filter_opencv_classic_denylist.inl.hpp index 1b0fed6982..8557647e98 100644 --- a/modules/dnn/test/test_onnx_conformance_layer_filter_opencv_classic_denylist.inl.hpp +++ b/modules/dnn/test/test_onnx_conformance_layer_filter_opencv_classic_denylist.inl.hpp @@ -75,3 +75,19 @@ "test_isinf", "test_isinf_negative", "test_isinf_positive", +"test_tril", +"test_tril_neg", +"test_tril_one_row_neg", +"test_tril_out_neg", +"test_tril_out_pos", +"test_tril_pos", +"test_tril_square", +"test_tril_square_neg", +"test_triu", +"test_triu_neg", +"test_triu_one_row", +"test_triu_out_neg_out", +"test_triu_out_pos", +"test_triu_pos", +"test_triu_square", +"test_triu_square_neg", diff --git a/modules/dnn/test/test_onnx_conformance_layer_parser_denylist.inl.hpp b/modules/dnn/test/test_onnx_conformance_layer_parser_denylist.inl.hpp index 2dba4fdcd6..a06b416099 100644 --- a/modules/dnn/test/test_onnx_conformance_layer_parser_denylist.inl.hpp +++ b/modules/dnn/test/test_onnx_conformance_layer_parser_denylist.inl.hpp @@ -334,23 +334,7 @@ "test_training_dropout_mask", // ---- same as above --- "test_training_dropout_zero_ratio", // ---- same as above --- "test_training_dropout_zero_ratio_mask", // ---- same as above --- -"test_tril", // Issue:: Parser: Can't create layer "onnx_node_output_0!y" of type "Trilu" in function 'getLayerInstance' -"test_tril_neg", // ---- same as above --- -"test_tril_one_row_neg", // ---- same as above --- -"test_tril_out_neg", // ---- same as above --- -"test_tril_out_pos", // ---- same as above --- -"test_tril_pos", // ---- same as above --- -"test_tril_square", // ---- same as above --- -"test_tril_square_neg", // ---- same as above --- "test_tril_zero", // ---- same as above --- -"test_triu", // ---- same as above --- -"test_triu_neg", // ---- same as above --- -"test_triu_one_row", // ---- same as above --- -"test_triu_out_neg_out", // ---- same as above --- -"test_triu_out_pos", // ---- same as above --- -"test_triu_pos", // ---- same as above --- -"test_triu_square", // ---- same as above --- -"test_triu_square_neg", // ---- same as above --- "test_triu_zero", // ---- same as above --- "test_unique_not_sorted_without_axis", // Issue:: Parser: Can't create layer "onnx_node_output_0!Y" of type "Unique" in function 'getLayerInstance' "test_unique_sorted_with_axis", // ---- same as above ---