From ee743afebe501c73a7fe562855cc4f46469fe389 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Fri, 20 Jul 2018 17:26:35 +0300 Subject: [PATCH] dnn(ocl): don't use getUMat() for long live objects --- modules/dnn/src/layers/convolution_layer.cpp | 18 ++++++++++-------- modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp | 4 ++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/modules/dnn/src/layers/convolution_layer.cpp b/modules/dnn/src/layers/convolution_layer.cpp index 0f3c99c..23f99e7 100644 --- a/modules/dnn/src/layers/convolution_layer.cpp +++ b/modules/dnn/src/layers/convolution_layer.cpp @@ -866,6 +866,16 @@ public: for (int i = 0; i < inputs.size(); ++i) CV_Assert(inputs[i].u != outputs[0].u); + if (umat_blobs.empty()) + { + size_t n = blobs.size(); + umat_blobs.resize(n); + for (size_t i = 0; i < n; i++) + { + blobs[i].copyTo(umat_blobs[i]); + } + } + if (convolutionOp.empty()) { OCL4DNNConvConfig config; @@ -1637,14 +1647,6 @@ public: Ptr ConvolutionLayer::create(const LayerParams ¶ms) { Ptr l(new ConvolutionLayerImpl(params)); - -#ifdef HAVE_OPENCL - size_t n = params.blobs.size(); - l->umat_blobs.resize(n); - for (int i = 0; i < n; i++) - l->umat_blobs[i] = params.blobs[i].getUMat(ACCESS_READ); -#endif - return l; } diff --git a/modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp b/modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp index c889c7d..a3a0936 100644 --- a/modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp +++ b/modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp @@ -563,10 +563,10 @@ bool OCL4DNNConvSpatial::Forward(const UMat& bottom, } if (use_half_ && bias_half.empty() && !bias.empty()) - convertFp16((UMat&)bias, bias_half); + convertFp16(bias, bias_half); if (use_half_ && weights_half.empty()) - convertFp16((UMat&)weight, weights_half); + convertFp16(weight, weights_half); prepareKernel(bottom, top, weight, (use_half_) ? bias_half : bias, numImages); if (bestKernelConfig.empty()) -- 2.7.4