From 44bf748479730ee5cc368b9df79e262974af0d6f Mon Sep 17 00:00:00 2001 From: YashasSamaga Date: Wed, 2 Sep 2020 12:18:41 +0530 Subject: [PATCH 1/2] do not allocate UMat in non-OpenCL targets --- modules/dnn/src/layers/permute_layer.cpp | 34 +++++++++++++----------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/modules/dnn/src/layers/permute_layer.cpp b/modules/dnn/src/layers/permute_layer.cpp index e08bfa0c5c..e3129556ba 100644 --- a/modules/dnn/src/layers/permute_layer.cpp +++ b/modules/dnn/src/layers/permute_layer.cpp @@ -174,21 +174,9 @@ public: computeStrides(shape(inputs[0]), shape(outputs[0])); #ifdef HAVE_OPENCL - if (uorder.empty()) - { - std::vector orderVec(_order.begin(), _order.end());; - Mat morder(1, orderVec.size(), CV_32SC1, &orderVec[0]); - - std::vector oldStrideVec(_oldStride.begin(), _oldStride.end()); - Mat mold_stride(1, _oldStride.size(), CV_32SC1, &oldStrideVec[0]); - - std::vector newStrideVec(_newStride.begin(), _newStride.end()); - Mat mnew_stride(1, newStrideVec.size(), CV_32SC1, &newStrideVec[0]); - - morder.copyTo(uorder); - mold_stride.copyTo(uold_stride); - mnew_stride.copyTo(unew_stride); - } + uorder.release(); + uold_stride.release(); + unew_stride.release(); #endif } @@ -276,6 +264,22 @@ public: if (!_needsPermute) return false; + if (uorder.empty()) + { + std::vector orderVec(_order.begin(), _order.end());; + Mat morder(1, orderVec.size(), CV_32SC1, &orderVec[0]); + + std::vector oldStrideVec(_oldStride.begin(), _oldStride.end()); + Mat mold_stride(1, _oldStride.size(), CV_32SC1, &oldStrideVec[0]); + + std::vector newStrideVec(_newStride.begin(), _newStride.end()); + Mat mnew_stride(1, newStrideVec.size(), CV_32SC1, &newStrideVec[0]); + + morder.copyTo(uorder); + mold_stride.copyTo(uold_stride); + mnew_stride.copyTo(unew_stride); + } + bool use_half = (inps.depth() == CV_16S); String opts = format("-DDtype=%s", use_half ? "half" : "float"); for (size_t i = 0; i < inputs.size(); i++) From 1df533c914c282f4c99d42307b9ee3b86df34caa Mon Sep 17 00:00:00 2001 From: YashasSamaga Date: Wed, 2 Sep 2020 14:25:36 +0530 Subject: [PATCH 2/2] fix typo in fusion tests --- modules/dnn/test/test_layers.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/dnn/test/test_layers.cpp b/modules/dnn/test/test_layers.cpp index d61f319f54..f9b0f62379 100644 --- a/modules/dnn/test/test_layers.cpp +++ b/modules/dnn/test/test_layers.cpp @@ -2343,7 +2343,7 @@ TEST_P(ConvolutionEltwiseActivationFusion, Accuracy) if (eltwiseOp != "sum" && weightedEltwise) throw SkipTestException("weighted eltwise not supported"); LayerParams eltwiseParams; - TestLayerFusion::makeDefaultTestEltwiseLayer(eltwiseParams, eltwiseOp, false); + TestLayerFusion::makeDefaultTestEltwiseLayer(eltwiseParams, eltwiseOp, weightedEltwise); std::string actType = get<3>(GetParam()); LayerParams activationParams; @@ -2353,7 +2353,7 @@ TEST_P(ConvolutionEltwiseActivationFusion, Accuracy) Target targetId = get<1>(get<4>(GetParam())); // bug: https://github.com/opencv/opencv/issues/17945 - if (eltwiseOp != "sum" && backendId == DNN_BACKEND_OPENCV && (targetId == DNN_TARGET_OPENCL || targetId == DNN_TARGET_OPENCL_FP16)) + if ((eltwiseOp != "sum" || weightedEltwise) && backendId == DNN_BACKEND_OPENCV && (targetId == DNN_TARGET_OPENCL || targetId == DNN_TARGET_OPENCL_FP16)) applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL); // bug: https://github.com/opencv/opencv/issues/17953 @@ -2440,7 +2440,7 @@ TEST_P(ConvolutionActivationEltwiseFusion, Accuracy) if (eltwiseOp != "sum" && weightedEltwise) throw SkipTestException("weighted eltwise not supported"); LayerParams eltwiseParams; - TestLayerFusion::makeDefaultTestEltwiseLayer(eltwiseParams, eltwiseOp, false); + TestLayerFusion::makeDefaultTestEltwiseLayer(eltwiseParams, eltwiseOp, weightedEltwise); Backend backendId = get<0>(get<4>(GetParam())); Target targetId = get<1>(get<4>(GetParam()));