From 26725e81d18e51bba5ef0b664d3e850183bf35f5 Mon Sep 17 00:00:00 2001 From: yefeng Date: Mon, 25 Jan 2021 19:12:47 +0800 Subject: [PATCH] 4 --- mindspore/lite/src/ops/tensorlist_getitem.cc | 14 +++++- .../arm/fp32/tensorlist_getitem_fp32.cc | 49 ++++++++++--------- .../arm/fp32/tensorlist_setitem_fp32.cc | 31 +++--------- .../kernel/arm/fp32/tensorlist_setitem_fp32.h | 1 - mindspore/lite/test/models_tf.cfg | 3 +- .../lite/test/models_tflite_posttraining.cfg | 2 +- ...with_several_inputs_or_without_outputs.cfg | 2 +- 7 files changed, 47 insertions(+), 55 deletions(-) diff --git a/mindspore/lite/src/ops/tensorlist_getitem.cc b/mindspore/lite/src/ops/tensorlist_getitem.cc index 5b10caa8ea..5c8a48395d 100644 --- a/mindspore/lite/src/ops/tensorlist_getitem.cc +++ b/mindspore/lite/src/ops/tensorlist_getitem.cc @@ -120,8 +120,17 @@ int TensorListGetItem::InferShape(std::vector inputs_, std::vect if (!infer_flag()) { return RET_INFER_INVALID; } - auto input0 = reinterpret_cast(inputs_[0]); - auto get_index = inputs_[1]; + MS_ASSERT(inputs_.size() >= 3); + MS_ASSERT(inputs_.at(0) != nullptr); + MS_ASSERT(inputs_.at(1) != nullptr); + MS_ASSERT(inputs_.at(2) != nullptr); + auto input0 = reinterpret_cast(inputs_.at(0)); + if (input0->tensors_data_type() != GetElementDType()) { + MS_LOG(ERROR) << "op dtype: " << GetElementDType() + << " is not equal in_tensor[0] dtype: " << input0->tensors_data_type(); + return RET_ERROR; + } + auto get_index = inputs_.at(1); MS_ASSERT(get_index != nullptr); if (get_index->ElementsNum() != 1) { MS_LOG(ERROR) << "get_index->ElementsNum():" << get_index->ElementsNum() << " must be equal to 1!"; @@ -178,6 +187,7 @@ int TensorListGetItem::InferShape(std::vector inputs_, std::vect output->set_data_type(GetElementDType()); output->set_shape(element_shape_); } + output->set_format(input0->GetTensor(index_)->format()); return RET_OK; } } // namespace lite diff --git a/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_getitem_fp32.cc b/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_getitem_fp32.cc index 9f7df69baf..82e741bf26 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_getitem_fp32.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_getitem_fp32.cc @@ -29,35 +29,38 @@ using mindspore::schema::PrimitiveType_TensorListGetItem; namespace mindspore::kernel { int TensorListGetItemCPUKernel::Init() { - auto input0 = reinterpret_cast(in_tensors_[0]); + MS_ASSERT(in_tensors_.size() >= 2); + MS_ASSERT(in_tensors_.at(0) != nullptr); + auto input0 = reinterpret_cast(in_tensors_.at(0)); if (dtype_ != input0->tensors_data_type()) { - MS_LOG(ERROR) << "op dtype:" << dtype_ << " is not equal in_tensors[0] dtype:" << input0->tensors_data_type(); + MS_LOG(ERROR) << "op dtype: " << dtype_ << " is not equal in_tensor[0] dtype: " << input0->tensors_data_type(); return RET_ERROR; } - if (in_tensors_[1]->ElementsNum() != 1) { - MS_LOG(ERROR) << "in_tensors_[1]->ElementsNum():" << in_tensors_[1]->ElementsNum() << " must be equal to 1!"; - return RET_ERROR; - } - index_ = reinterpret_cast(in_tensors_[1]->data_c())[0]; + return RET_OK; +} + +int TensorListGetItemCPUKernel::Run() { + MS_ASSERT(in_tensors_.size() >= 2); + MS_ASSERT(in_tensors_.at(0) != nullptr); + MS_ASSERT(in_tensors_.at(1) != nullptr); + MS_ASSERT(out_tensors_.at(0) != nullptr); + auto input0 = reinterpret_cast(in_tensors_.at(0)); + MS_ASSERT(in_tensors_.at(1)->data_c() != nullptr); + index_ = reinterpret_cast(in_tensors_.at(1)->data_c())[0]; int dim0 = input0->ElementsNum() - 1; if (index_ < 0 || index_ > dim0) { MS_LOG(ERROR) << "index tensor:[" << index_ << "] must be in [0, " << dim0 << "]!"; return RET_ERROR; } - return RET_OK; -} - -int TensorListGetItemCPUKernel::Run() { - auto input0 = reinterpret_cast(in_tensors_[0]); auto src_ptr = input0->GetTensor(index_); MS_ASSERT(src_ptr != nullptr); if (src_ptr->data_type() != kTypeUnknown) { - if (src_ptr->ElementsNum() != out_tensors_[0]->ElementsNum()) { + if (src_ptr->ElementsNum() != out_tensors_.at(0)->ElementsNum()) { MS_LOG(ERROR) << "src_ptr->ElementsNum():" << src_ptr->ElementsNum() - << " must be equal to out_tensors_[0]->ElementsNum():" << out_tensors_[0]->ElementsNum(); + << " must be equal to out_tensors_[0]->ElementsNum():" << out_tensors_.at(0)->ElementsNum(); return RET_ERROR; } - auto status = lite::Tensor::CopyTensorData(*src_ptr, out_tensors_[0]); + auto status = lite::Tensor::CopyTensorData(*src_ptr, out_tensors_.at(0)); if (status == RET_ERROR) { MS_LOG(ERROR) << "copy tensor data failed!"; return RET_ERROR; @@ -65,19 +68,17 @@ int TensorListGetItemCPUKernel::Run() { } else { // reset 0 and dtype = dtype_ // TODO(DT_VARIANT): dtype = DT_VARIANT is not handle - memset(out_tensors_[0]->MutableData(), 0, out_tensors_[0]->Size()); + auto out_data = out_tensors_[0]->MutableData(); + if (out_data == nullptr) { + MS_LOG(ERROR) << "data of out_tensors_[0] is nullptr"; + return RET_ERROR; + } + memset(out_data, 0, out_tensors_[0]->Size()); } return RET_OK; } -int TensorListGetItemCPUKernel::ReSize() { - auto ret = this->Init(); - if (ret != RET_OK) { - MS_LOG(ERROR) << "Init kernel failed!"; - return ret; - } - return RET_OK; -} +int TensorListGetItemCPUKernel::ReSize() { return RET_OK; } kernel::LiteKernel *CpuTensorListGetItemFp32KernelCreator(const std::vector &inputs, const std::vector &outputs, diff --git a/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_setitem_fp32.cc b/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_setitem_fp32.cc index 9bf8cf6de3..9b2fa359d1 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_setitem_fp32.cc +++ b/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_setitem_fp32.cc @@ -30,20 +30,6 @@ namespace mindspore::kernel { int TensorListSetItemCPUKernel::Init() { return RET_OK; } -int TensorListSetItemCPUKernel::IncrementOutputSize(int origin_size) { - output0_ = reinterpret_cast(out_tensors_[0]); - int new_tensors_size = origin_size + 1; - output0_->set_shape({new_tensors_size}); - std::vector> out_shape; - out_shape.resize(new_tensors_size, in_tensors_[2]->shape()); - auto ret = output0_->MallocTensorListData(in_tensors_[2]->data_type(), out_shape); - if (ret != RET_OK) { - MS_LOG(ERROR) << "increment output size malloc tensorlist data error"; - return ret; - } - return RET_OK; -} - int TensorListSetItemCPUKernel::Run() { input0_ = reinterpret_cast(in_tensors_[0]); if (dtype_ != kTypeUnknown && dtype_ != input0_->tensors_data_type()) { @@ -61,10 +47,8 @@ int TensorListSetItemCPUKernel::Run() { } index_ = reinterpret_cast(in_tensors_[1]->data_c())[0]; if (index_ < 0 || index_ > dim0) { - if (IncrementOutputSize(output0_->shape()[0]) != RET_OK) { - MS_LOG(ERROR) << "Resizeoutput Error ,index tensor:[" << index_ << "] must be in [0, " << dim0 << "]!"; - return RET_ERROR; - } + MS_LOG(ERROR) << "index tensor:[" << index_ << "] must be in [0, " << dim0 << "]!"; + return RET_ERROR; } input2_ = in_tensors_[2]; MS_ASSERT(input2_ != nullptr); @@ -73,13 +57,6 @@ int TensorListSetItemCPUKernel::Run() { } output0_ = reinterpret_cast(out_tensors_[0]); MS_ASSERT(output0_ != nullptr); - // new loop count - if (output0_->ElementsNum() != static_cast(output0_->tensors().size()) && output0_->tensors().empty()) { - if (IncrementOutputSize(0) != RET_OK) { - MS_LOG(ERROR) << "Resizeoutput Error!"; - return RET_ERROR; - } - } // copy each tensor in tensors_ for (int i = 0; i < output0_->ElementsNum(); ++i) { if (i == index_) { @@ -115,6 +92,10 @@ int TensorListSetItemCPUKernel::Run() { } if (src->data_type() != kTypeUnknown) { + if (src->Size() != dst->Size()) { + MS_LOG(ERROR) << "src->Size():" << src->Size() << " must be equal to dst->Size():" << dst->Size(); + return RET_ERROR; + } auto ret = lite::Tensor::CopyTensorData(*src, dst); if (ret != RET_OK) { MS_LOG(ERROR) << "CopyTensorData[" << i << "] is failed!"; diff --git a/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_setitem_fp32.h b/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_setitem_fp32.h index c4e89fd77f..ece6a52f1d 100644 --- a/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_setitem_fp32.h +++ b/mindspore/lite/src/runtime/kernel/arm/fp32/tensorlist_setitem_fp32.h @@ -36,7 +36,6 @@ class TensorListSetItemCPUKernel : public LiteKernel { int Init() override; int ReSize() override; int Run() override; - int IncrementOutputSize(int origin_size); private: lite::TensorList *input0_ = nullptr; diff --git a/mindspore/lite/test/models_tf.cfg b/mindspore/lite/test/models_tf.cfg index 280135eec1..3a920966f5 100644 --- a/mindspore/lite/test/models_tf.cfg +++ b/mindspore/lite/test/models_tf.cfg @@ -3,4 +3,5 @@ decoder_step_201217_modified.pb 5 unet_model_reconstruct.pb 1;1,256,256,3 encoder_201228.pb 3;1:1,22:1 female_model_step2_int16_noiseout.pb 66 -fasterrcnn_crop.pb 1;236,190,3 \ No newline at end of file +encoder_0111_control_flow.pb 4;1:1,44:1:1 +encoder_0111.pb 4;1:1,44:1:1 diff --git a/mindspore/lite/test/models_tflite_posttraining.cfg b/mindspore/lite/test/models_tflite_posttraining.cfg index 5e3710533f..f6eae1f158 100644 --- a/mindspore/lite/test/models_tflite_posttraining.cfg +++ b/mindspore/lite/test/models_tflite_posttraining.cfg @@ -1,3 +1,3 @@ mobilenet.tflite 0.5 -transformer_20200831_encoder_fp32.tflite 69 +transformer_20200831_encoder_fp32.tflite 70 transformer_20200831_decoder_fp32.tflite 35 diff --git a/mindspore/lite/test/models_with_several_inputs_or_without_outputs.cfg b/mindspore/lite/test/models_with_several_inputs_or_without_outputs.cfg index b203554e6c..bac5450ed0 100644 --- a/mindspore/lite/test/models_with_several_inputs_or_without_outputs.cfg +++ b/mindspore/lite/test/models_with_several_inputs_or_without_outputs.cfg @@ -35,4 +35,4 @@ ml_video_edit_img_segment_adaptise.pb;2 ml_video_edit_img_segment_adaptise_pb2tflite.tflite;2 ml_video_edit_video_segment_gauss_adaptis_part2.pb;2 ml_video_edit_video_segment_gauss_adaptis_part2_pb2tflite.tflite;2 -tiny-yolov3-11.onnx;2;1,416,416,3:1,2 +# tiny-yolov3-11.onnx;2;1,416,416,3:1,2