diff --git a/mindspore/lite/src/runtime/kernel/opencl/kernel/conv2d.cc b/mindspore/lite/src/runtime/kernel/opencl/kernel/conv2d.cc index e46423502d..7b2673cb96 100644 --- a/mindspore/lite/src/runtime/kernel/opencl/kernel/conv2d.cc +++ b/mindspore/lite/src/runtime/kernel/opencl/kernel/conv2d.cc @@ -264,11 +264,11 @@ int Conv2DOpenCLKernel::InitFilter() { ConvertConvWeight4DTo7D(weight_tensor->data_c(), packed_weight_, CO_, KH_, KW_, CI_, block_size_.C); } - FreeDequantedWeight(); } } allocator->UnmapBuffer(packed_weight_); + FreeDequantedWeight(); return RET_OK; } diff --git a/mindspore/lite/src/runtime/kernel/opencl/kernel/conv2d_transpose.cc b/mindspore/lite/src/runtime/kernel/opencl/kernel/conv2d_transpose.cc index a3a0ee01bf..faa1bdd374 100644 --- a/mindspore/lite/src/runtime/kernel/opencl/kernel/conv2d_transpose.cc +++ b/mindspore/lite/src/runtime/kernel/opencl/kernel/conv2d_transpose.cc @@ -125,6 +125,10 @@ void Conv2dTransposeOpenCLKernel::SetConstArgs() { } int Conv2dTransposeOpenCLKernel::InitWeights() { + auto ret = DequantWeight(); + if (ret != RET_OK) { + return ret; + } ConvParameter *param = reinterpret_cast(op_parameter_); int ci = in_tensors_[0]->shape()[3]; int co = out_tensors_[0]->shape()[3]; @@ -180,6 +184,7 @@ int Conv2dTransposeOpenCLKernel::InitWeights() { } } allocator->UnmapBuffer(padWeight_); + FreeDequantedWeight(); // init bias_(image2d mem) size_t im_dst_x, im_dst_y; diff --git a/mindspore/lite/src/runtime/kernel/opencl/kernel/depthwise_conv2d.cc b/mindspore/lite/src/runtime/kernel/opencl/kernel/depthwise_conv2d.cc index ab236d4483..3c57a7128b 100644 --- a/mindspore/lite/src/runtime/kernel/opencl/kernel/depthwise_conv2d.cc +++ b/mindspore/lite/src/runtime/kernel/opencl/kernel/depthwise_conv2d.cc @@ -93,10 +93,6 @@ int DepthwiseConv2dOpenCLKernel::Prepare() { } int DepthwiseConv2dOpenCLKernel::InitWeights() { - if (!in_tensors_.at(1)->IsConst()) { - MS_LOG(ERROR) << "DepthwiseConv2d don't support non-constant filter yet."; - return RET_ERROR; - } auto ret = DequantWeight(); if (ret != RET_OK) { return ret; @@ -124,7 +120,6 @@ int DepthwiseConv2dOpenCLKernel::InitWeights() { } else { // int8 or int16 std::function to_dtype = [](int16_t x) -> int16_t { return x; }; PackNCHWToNC4HW4(origin_weight, packed_weight_, 1, plane, out_info.C, to_dtype); - FreeDequantedWeight(); } } else { packed_weight_ = allocator->Malloc(pack_weight_size * sizeof(float)); @@ -138,10 +133,10 @@ int DepthwiseConv2dOpenCLKernel::InitWeights() { } else { // int8 or int16 std::function to_dtype = [](float x) -> float { return x; }; PackNCHWToNC4HW4(origin_weight, packed_weight_, 1, plane, out_info.C, to_dtype); - FreeDequantedWeight(); } } allocator->UnmapBuffer(packed_weight_); + FreeDequantedWeight(); size_t dtype_size = sizeof(float); if (is_fp16 && in_tensors_.at(kBiasIndex)->data_type() == kNumberTypeFloat16) {