From 141eaa2c51d4e68d951f0f062c435cd0c8603bf2 Mon Sep 17 00:00:00 2001 From: zhujingxuan Date: Thu, 29 Apr 2021 17:25:07 +0800 Subject: [PATCH] fix scale fp32 and wrapper --- .../opcoders/nnacl/fp32/scale_fp32_coder.cc | 25 +++++++++---------- .../detection_post_process_base_wrapper.c | 2 +- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/mindspore/lite/micro/coder/opcoders/nnacl/fp32/scale_fp32_coder.cc b/mindspore/lite/micro/coder/opcoders/nnacl/fp32/scale_fp32_coder.cc index 239ddf67ef..61d106aca1 100644 --- a/mindspore/lite/micro/coder/opcoders/nnacl/fp32/scale_fp32_coder.cc +++ b/mindspore/lite/micro/coder/opcoders/nnacl/fp32/scale_fp32_coder.cc @@ -41,9 +41,10 @@ ScaleFP32Coder::~ScaleFP32Coder() { int ScaleFP32Coder::InitScaleOffset() { Tensor *scale_tensor = input_tensors_.at(kWeightIndex); MS_CHECK_PTR(scale_tensor); - if (reinterpret_cast(scale_tensor->data_c())) { + if (scale_tensor->data_c() != nullptr) { scale_param_->const_scale_ = true; - scale_ = reinterpret_cast(malloc(scale_tensor->ElementsNum() * sizeof(float))); + scale_ = + reinterpret_cast(allocator_->Malloc(kNumberTypeFloat32, scale_tensor->Size(), kOfflinePackWeight)); MS_CHECK_PTR(scale_); MS_CHECK_TRUE(scale_tensor->Size() > 0, "invalid scale tensor size"); MS_CHECK_RET_CODE(memcpy_s(scale_, scale_tensor->Size(), scale_tensor->data_c(), scale_tensor->Size()), @@ -55,13 +56,16 @@ int ScaleFP32Coder::InitScaleOffset() { if (input_tensors_.size() == 2) { scale_param_->const_offset_ = true; - offset_ = reinterpret_cast(malloc(scale_tensor->ElementsNum() * sizeof(float))); + offset_ = + reinterpret_cast(allocator_->Malloc(kNumberTypeFloat32, scale_tensor->Size(), kOfflinePackWeight)); MS_CHECK_PTR(offset_); MS_CHECK_RET_CODE(memset_s(offset_, scale_tensor->Size(), 0, scale_tensor->Size()), "memset_s failed!"); - } else if (input_tensors_.size() == 3 && reinterpret_cast(input_tensors_.at(2)->data_c())) { + } else if (input_tensors_.size() == 3 && input_tensors_.at(2)->data_c() != nullptr) { scale_param_->const_offset_ = true; Tensor *offset_tensor = input_tensors_.at(2); - offset_ = reinterpret_cast(malloc(offset_tensor->ElementsNum() * sizeof(float))); + MS_CHECK_PTR(offset_tensor); + offset_ = + reinterpret_cast(allocator_->Malloc(kNumberTypeFloat32, offset_tensor->Size(), kOfflinePackWeight)); MS_CHECK_PTR(offset_); MS_CHECK_TRUE(offset_tensor->Size() > 0, "invalid offset tensor size"); MS_CHECK_RET_CODE(memcpy_s(offset_, offset_tensor->Size(), offset_tensor->data_c(), offset_tensor->Size()), @@ -123,10 +127,6 @@ int ScaleFP32Coder::ReSize() { int ScaleFP32Coder::DoCode(CoderContext *const context) { // init struct ScaleParameters - Tensor *scale_tensor = input_tensors_.at(kWeightIndex); - Tensor *offset_tensor = input_tensors_.at(kBiasIndex); - MS_CHECK_PTR(scale_tensor); - MS_CHECK_PTR(offset_tensor); Collect(context, {"nnacl/scale.h", "nnacl/fp32/scale.h", "nnacl/quantization/quantize.h"}, {"scale.c"}); NNaclFp32Serializer code; @@ -134,16 +134,15 @@ int ScaleFP32Coder::DoCode(CoderContext *const context) { switch (scale_param_->activation_type_) { case schema::ActivationType_RELU6: - code.CodeFunction("DoScaleRelu6", input_tensor_, output_tensor_, scale_tensor, offset_tensor, kDefaultTaskId, + code.CodeFunction("DoScaleRelu6", input_tensor_, output_tensor_, scale_, offset_, kDefaultTaskId, "&scale_parameter"); break; case schema::ActivationType_RELU: - code.CodeFunction("DoScaleRelu", input_tensor_, output_tensor_, scale_tensor, offset_tensor, kDefaultTaskId, + code.CodeFunction("DoScaleRelu", input_tensor_, output_tensor_, scale_, offset_, kDefaultTaskId, "&scale_parameter"); break; case schema::ActivationType_NO_ACTIVATION: - code.CodeFunction("DoScale", input_tensor_, output_tensor_, scale_tensor, offset_tensor, kDefaultTaskId, - "&scale_parameter"); + code.CodeFunction("DoScale", input_tensor_, output_tensor_, scale_, offset_, kDefaultTaskId, "&scale_parameter"); break; default: MS_LOG(ERROR) << "Scale does not support activation type " << scale_param_->activation_type_; diff --git a/mindspore/lite/micro/coder/wrapper/base/detection_post_process_base_wrapper.c b/mindspore/lite/micro/coder/wrapper/base/detection_post_process_base_wrapper.c index 2edc36061d..dbff657f26 100644 --- a/mindspore/lite/micro/coder/wrapper/base/detection_post_process_base_wrapper.c +++ b/mindspore/lite/micro/coder/wrapper/base/detection_post_process_base_wrapper.c @@ -33,7 +33,7 @@ static inline bool compare(int i, int j, const float *scores) { static void heapify(const float *scores, int *indexes, int n, int i) { while (i < n) { int cur = i; - int l = 2 * i + 1; + const int l = 2 * i + 1; const int r = 2 * i + 2; if (r < n && compare(indexes[cur], indexes[r], scores)) { cur = r;