From 3f3fb1f18dffb29961859ab206ddbf1bfe3f7670 Mon Sep 17 00:00:00 2001 From: xuanyue Date: Mon, 31 Aug 2020 09:54:52 +0800 Subject: [PATCH] fix tflite and caffe single operator question --- mindspore/lite/schema/model.fbs | 1 + mindspore/lite/schema/ops.fbs | 7 ++ mindspore/lite/src/ops/space_to_batch_nd.cc | 4 +- mindspore/lite/src/populate_parameter.cc | 63 ++++++++++------- .../converter/parser/caffe/CMakeLists.txt | 3 +- .../parser/caffe/caffe_argmax_parser.cc | 2 +- .../parser/caffe/caffe_argmax_parser.h | 4 +- .../parser/caffe/caffe_batchnorm_parser.cc | 2 +- .../parser/caffe/caffe_batchnorm_parser.h | 4 +- .../parser/caffe/caffe_concat_parser.cc | 2 +- .../parser/caffe/caffe_concat_parser.h | 4 +- .../parser/caffe/caffe_conv_base_parser.h | 4 +- .../converter/parser/caffe/caffe_converter.cc | 2 +- .../converter/parser/caffe/caffe_converter.h | 6 +- .../parser/caffe/caffe_convolution_parser.cc | 2 +- .../parser/caffe/caffe_convolution_parser.h | 6 +- .../parser/caffe/caffe_crop_parser.cc | 2 +- .../parser/caffe/caffe_crop_parser.h | 4 +- .../caffe/caffe_deconvolution_parser.cc | 2 +- .../parser/caffe/caffe_deconvolution_parser.h | 6 +- .../parser/caffe/caffe_eltwise_parser.cc | 2 +- .../parser/caffe/caffe_eltwise_parser.h | 4 +- .../parser/caffe/caffe_exp_parser.cc | 69 +++++++++++++++++++ .../converter/parser/caffe/caffe_exp_parser.h | 38 ++++++++++ .../parser/caffe/caffe_flatten_parser.cc | 2 +- .../parser/caffe/caffe_flatten_parser.h | 4 +- .../parser/caffe/caffe_innerproduct_parser.cc | 2 +- .../parser/caffe/caffe_innerproduct_parser.h | 4 +- .../converter/parser/caffe/caffe_inspector.cc | 2 +- .../parser/caffe/caffe_interp_parser.cc | 2 +- .../parser/caffe/caffe_interp_parser.h | 4 +- .../parser/caffe/caffe_model_parser.cc | 11 ++- .../parser/caffe/caffe_model_parser.h | 5 +- .../parser/caffe/caffe_node_parser.cc | 2 +- .../parser/caffe/caffe_node_parser.h | 4 +- .../caffe/caffe_node_parser_registry.cc | 2 +- .../parser/caffe/caffe_node_parser_registry.h | 2 +- .../parser/caffe/caffe_permute_parser.cc | 2 +- .../parser/caffe/caffe_permute_parser.h | 4 +- .../parser/caffe/caffe_pooling_parser.cc | 2 +- .../parser/caffe/caffe_pooling_parser.h | 4 +- .../parser/caffe/caffe_power_parser.cc | 2 +- .../parser/caffe/caffe_power_parser.h | 4 +- .../parser/caffe/caffe_prelu_parser.cc | 2 +- .../parser/caffe/caffe_prelu_parser.h | 4 +- .../parser/caffe/caffe_relu6_parser.cc | 2 +- .../parser/caffe/caffe_relu6_parser.h | 4 +- .../parser/caffe/caffe_relu_parser.cc | 2 +- .../parser/caffe/caffe_relu_parser.h | 4 +- .../parser/caffe/caffe_reshape_parser.cc | 2 +- .../parser/caffe/caffe_reshape_parser.h | 4 +- .../parser/caffe/caffe_scale_parser.cc | 2 +- .../parser/caffe/caffe_scale_parser.h | 4 +- .../parser/caffe/caffe_sigmoid_parser.cc | 2 +- .../parser/caffe/caffe_sigmoid_parser.h | 4 +- .../parser/caffe/caffe_softmax_parser.cc | 2 +- .../parser/caffe/caffe_softmax_parser.h | 4 +- .../parser/caffe/caffe_tile_parser.cc | 2 +- .../parser/caffe/caffe_tile_parser.h | 4 +- .../parser/tflite/tflite_arithmetic_parser.cc | 3 + .../parser/tflite/tflite_custom_parser.cc | 67 ++++++++++++++++++ .../parser/tflite/tflite_custom_parser.h | 43 ++++++++++++ .../tflite/tflite_sparse_to_dense_parser.cc | 6 ++ .../converter/parser/tflite/tflite_util.cc | 1 + 64 files changed, 368 insertions(+), 107 deletions(-) create mode 100644 mindspore/lite/tools/converter/parser/caffe/caffe_exp_parser.cc create mode 100644 mindspore/lite/tools/converter/parser/caffe/caffe_exp_parser.h create mode 100644 mindspore/lite/tools/converter/parser/tflite/tflite_custom_parser.cc create mode 100644 mindspore/lite/tools/converter/parser/tflite/tflite_custom_parser.h diff --git a/mindspore/lite/schema/model.fbs b/mindspore/lite/schema/model.fbs index 4031af06f..e3d33eb0b 100644 --- a/mindspore/lite/schema/model.fbs +++ b/mindspore/lite/schema/model.fbs @@ -194,6 +194,7 @@ union PrimitiveType { MakeTuple, ToFormat, Proposal, + Custom, } enum QuantType: int { diff --git a/mindspore/lite/schema/ops.fbs b/mindspore/lite/schema/ops.fbs index 592b23f96..752d018d4 100644 --- a/mindspore/lite/schema/ops.fbs +++ b/mindspore/lite/schema/ops.fbs @@ -472,6 +472,9 @@ table Neg { } table Exp { + base : float; + scale : float; + shift : float; } table Cos { @@ -896,3 +899,7 @@ table Proposal { post_nms_topn : int; nms_thresh : float; } + +table Custom { + custom : [ubyte]; +} \ No newline at end of file diff --git a/mindspore/lite/src/ops/space_to_batch_nd.cc b/mindspore/lite/src/ops/space_to_batch_nd.cc index 23d5bfd18..2c2aadd39 100644 --- a/mindspore/lite/src/ops/space_to_batch_nd.cc +++ b/mindspore/lite/src/ops/space_to_batch_nd.cc @@ -53,7 +53,7 @@ std::vector SpaceToBatchND::GetPaddings() const { int SpaceToBatchND::UnPackToFlatBuilder(const schema::Primitive *primitive, flatbuffers::FlatBufferBuilder *fbb) { MS_ASSERT(nullptr != primitive); MS_ASSERT(nullptr != fbb); - auto attr = primitive->value_as_SpaceToBatch(); + auto attr = primitive->value_as_SpaceToBatchND(); if (attr == nullptr) { MS_LOG(ERROR) << "value_as_SpaceToBatch return nullptr"; return RET_ERROR; @@ -71,7 +71,7 @@ int SpaceToBatchND::UnPackToFlatBuilder(const schema::Primitive *primitive, flat } } auto val_offset = schema::CreateSpaceToBatchDirect(*fbb, &blockShape, &paddings); - auto prim_offset = schema::CreatePrimitive(*fbb, schema::PrimitiveType_SpaceToBatch, val_offset.o); + auto prim_offset = schema::CreatePrimitive(*fbb, schema::PrimitiveType_SpaceToBatchND, val_offset.o); fbb->Finish(prim_offset); return RET_OK; } diff --git a/mindspore/lite/src/populate_parameter.cc b/mindspore/lite/src/populate_parameter.cc index b1bb2e7e6..3173e469d 100644 --- a/mindspore/lite/src/populate_parameter.cc +++ b/mindspore/lite/src/populate_parameter.cc @@ -111,6 +111,7 @@ #include "src/ops/squared_difference.h" #include "src/ops/ceil.h" #include "src/ops/round.h" +#include "src/ops/sparse_to_dense.h" #include "nnacl/op_base.h" #include "nnacl/fp32/arg_min_max.h" #include "nnacl/fp32/cast.h" @@ -167,6 +168,7 @@ #include "nnacl/fp32/embedding_lookup.h" #include "nnacl/fp32/elu.h" #include "nnacl/leaky_relu_parameter.h" +#include "nnacl/sparse_to_dense.h" namespace mindspore::kernel { @@ -678,11 +680,11 @@ OpParameter *PopulateArithmetic(const mindspore::lite::PrimitiveC *primitive) { break; } auto tmp_shape = ((lite::Arithmetic *)primitive)->InShape0(); - (void)memcpy(arithmetic_param->in_shape0_, static_cast(tmp_shape.data()), tmp_shape.size() * sizeof(int)); + memcpy(arithmetic_param->in_shape0_, static_cast(tmp_shape.data()), tmp_shape.size() * sizeof(int)); tmp_shape = ((lite::Arithmetic *)primitive)->InShape1(); - (void)memcpy(arithmetic_param->in_shape1_, static_cast(tmp_shape.data()), tmp_shape.size() * sizeof(int)); + memcpy(arithmetic_param->in_shape1_, static_cast(tmp_shape.data()), tmp_shape.size() * sizeof(int)); tmp_shape = ((lite::Arithmetic *)primitive)->OutputShape(); - (void)memcpy(arithmetic_param->out_shape_, static_cast(tmp_shape.data()), tmp_shape.size() * sizeof(int)); + memcpy(arithmetic_param->out_shape_, static_cast(tmp_shape.data()), tmp_shape.size() * sizeof(int)); return reinterpret_cast(arithmetic_param); } @@ -1015,6 +1017,18 @@ OpParameter *PopulateSliceParameter(const mindspore::lite::PrimitiveC *primitive return reinterpret_cast(slice_param); } +OpParameter *PopulateSparseToDenseParameter(const mindspore::lite::PrimitiveC *primitive) { + SparseToDenseParameter *sparse_to_dense_param = + reinterpret_cast(malloc(sizeof(SparseToDenseParameter))); + if (sparse_to_dense_param == nullptr) { + MS_LOG(ERROR) << "malloc SparseToDenseParameter failed."; + return nullptr; + } + memset(sparse_to_dense_param, 0, sizeof(SparseToDenseParameter)); + sparse_to_dense_param->op_parameter_.type_ = primitive->Type(); + return reinterpret_cast(sparse_to_dense_param); +} + OpParameter *PopulateBroadcastToParameter(const mindspore::lite::PrimitiveC *primitive) { BroadcastToParameter *broadcast_param = reinterpret_cast(malloc(sizeof(BroadcastToParameter))); @@ -1205,28 +1219,26 @@ OpParameter *PopulateSpaceToBatchParameter(const mindspore::lite::PrimitiveC *pr } memset(space_batch_param, 0, sizeof(SpaceToBatchParameter)); space_batch_param->op_parameter_.type_ = primitive->Type(); - space_batch_param->op_parameter_.type_ = primitive->Type(); auto block_sizes = ((mindspore::lite::SpaceToBatch *)primitive)->BlockSizes(); - (void)memcpy(space_batch_param->block_sizes_, (block_sizes.data()), block_sizes.size() * sizeof(int)); + memcpy(space_batch_param->block_sizes_, (block_sizes.data()), block_sizes.size() * sizeof(int)); auto paddings = ((mindspore::lite::SpaceToBatch *)primitive)->Paddings(); - (void)memcpy(space_batch_param->paddings_, (paddings.data()), paddings.size() * sizeof(int)); + memcpy(space_batch_param->paddings_, (paddings.data()), paddings.size() * sizeof(int)); return reinterpret_cast(space_batch_param); } -OpParameter *PopulateSpaceToBatchParameterND(const mindspore::lite::PrimitiveC *primitivec) { - auto *space_batch_param = new (std::nothrow) SpaceToBatchParameter(); - if (space_batch_param == nullptr) { +OpParameter *PopulateSpaceToBatchNDParameter(const mindspore::lite::PrimitiveC *primitive) { + auto *space_batch_param_nd = new (std::nothrow) SpaceToBatchParameter(); + if (space_batch_param_nd == nullptr) { MS_LOG(ERROR) << "new SpaceToBatchParameter failed."; return nullptr; } - mindspore::lite::SpaceToBatchND *primitive = (mindspore::lite::SpaceToBatchND *)primitivec; - space_batch_param->op_parameter_.type_ = primitive->Type(); - auto block_sizes = primitive->GetBlockShape(); - (void)memcpy(space_batch_param->block_sizes_, (block_sizes.data()), block_sizes.size() * sizeof(int)); - auto paddings = primitive->GetPaddings(); - (void)memcpy(space_batch_param->paddings_, (paddings.data()), paddings.size() * sizeof(int)); - return reinterpret_cast(space_batch_param); + space_batch_param_nd->op_parameter_.type_ = primitive->Type(); + auto block_sizes = ((mindspore::lite::SpaceToBatchND *)primitive)->GetBlockShape(); + memcpy(space_batch_param_nd->block_sizes_, (block_sizes.data()), block_sizes.size() * sizeof(int)); + auto paddings = ((mindspore::lite::SpaceToBatchND *)primitive)->GetPaddings(); + memcpy(space_batch_param_nd->paddings_, (paddings.data()), paddings.size() * sizeof(int)); + return reinterpret_cast(space_batch_param_nd); } OpParameter *PopulateResizeParameter(const mindspore::lite::PrimitiveC *primitive) { @@ -1359,13 +1371,13 @@ OpParameter *PopulateStridedSliceParameter(const mindspore::lite::PrimitiveC *pr auto n_dims = ((lite::StridedSlice *)primitive)->NDims(); strided_slice_param->num_axes_ = n_dims; auto begin = ((lite::StridedSlice *)primitive)->GetBegins(); - (void)memcpy(strided_slice_param->begins_, (begin.data()), begin.size() * sizeof(int)); + memcpy(strided_slice_param->begins_, (begin.data()), begin.size() * sizeof(int)); auto end = ((lite::StridedSlice *)primitive)->GetEnds(); - (void)memcpy(strided_slice_param->ends_, (end.data()), end.size() * sizeof(int)); + memcpy(strided_slice_param->ends_, (end.data()), end.size() * sizeof(int)); auto stride = ((lite::StridedSlice *)primitive)->GetStrides(); - (void)memcpy(strided_slice_param->strides_, (stride.data()), stride.size() * sizeof(int)); + memcpy(strided_slice_param->strides_, (stride.data()), stride.size() * sizeof(int)); auto in_shape = ((lite::StridedSlice *)primitive)->GetInShape(); - (void)memcpy(strided_slice_param->in_shape_, (in_shape.data()), in_shape.size() * sizeof(int)); + memcpy(strided_slice_param->in_shape_, (in_shape.data()), in_shape.size() * sizeof(int)); return reinterpret_cast(strided_slice_param); } @@ -1405,9 +1417,9 @@ OpParameter *PopulatePriorBoxParameter(const mindspore::lite::PrimitiveC *primit return nullptr; } prior_box_param->max_sizes_size = prior_box_attr->GetMaxSizes().size(); - (void)memcpy(prior_box_param->max_sizes, prior_box_attr->GetMaxSizes().data(), + memcpy(prior_box_param->max_sizes, prior_box_attr->GetMaxSizes().data(), prior_box_attr->GetMaxSizes().size() * sizeof(int32_t)); - (void)memcpy(prior_box_param->min_sizes, prior_box_attr->GetMinSizes().data(), + memcpy(prior_box_param->min_sizes, prior_box_attr->GetMinSizes().data(), prior_box_attr->GetMinSizes().size() * sizeof(int32_t)); if (prior_box_attr->GetAspectRatios().size() > PRIOR_BOX_MAX_NUM) { @@ -1417,7 +1429,7 @@ OpParameter *PopulatePriorBoxParameter(const mindspore::lite::PrimitiveC *primit return nullptr; } prior_box_param->aspect_ratios_size = prior_box_attr->GetAspectRatios().size(); - (void)memcpy(prior_box_param->aspect_ratios, prior_box_attr->GetAspectRatios().data(), + memcpy(prior_box_param->aspect_ratios, prior_box_attr->GetAspectRatios().data(), prior_box_attr->GetAspectRatios().size() * sizeof(float)); if (prior_box_attr->GetVariances().size() != PRIOR_BOX_VAR_NUM) { MS_LOG(ERROR) << "PriorBox variances size should be " << PRIOR_BOX_VAR_NUM << ", got " @@ -1425,7 +1437,7 @@ OpParameter *PopulatePriorBoxParameter(const mindspore::lite::PrimitiveC *primit free(prior_box_param); return nullptr; } - (void)memcpy(prior_box_param->variances, prior_box_attr->GetVariances().data(), PRIOR_BOX_VAR_NUM * sizeof(float)); + memcpy(prior_box_param->variances, prior_box_attr->GetVariances().data(), PRIOR_BOX_VAR_NUM * sizeof(float)); prior_box_param->flip = prior_box_attr->GetFlip(); prior_box_param->clip = prior_box_attr->GetClip(); prior_box_param->offset = prior_box_attr->GetOffset(); @@ -1501,6 +1513,7 @@ OpParameter *PopulateEluParameter(const mindspore::lite::PrimitiveC *primitive) } PopulateParameterRegistry::PopulateParameterRegistry() { + populate_parameter_funcs_[schema::PrimitiveType_SparseToDense] = PopulateSparseToDenseParameter; populate_parameter_funcs_[schema::PrimitiveType_SoftMax] = PopulateSoftmaxParameter; populate_parameter_funcs_[schema::PrimitiveType_Activation] = PopulateActivationParameter; populate_parameter_funcs_[schema::PrimitiveType_Conv2D] = PopulateConvParameter; @@ -1578,7 +1591,7 @@ PopulateParameterRegistry::PopulateParameterRegistry() { populate_parameter_funcs_[schema::PrimitiveType_BatchToSpace] = PopulateBatchToSpaceParameter; populate_parameter_funcs_[schema::PrimitiveType_SpaceToDepth] = PopulateSpaceToDepthParameter; populate_parameter_funcs_[schema::PrimitiveType_SpaceToBatch] = PopulateSpaceToBatchParameter; - populate_parameter_funcs_[schema::PrimitiveType_SpaceToBatchND] = PopulateSpaceToBatchParameterND; + populate_parameter_funcs_[schema::PrimitiveType_SpaceToBatchND] = PopulateSpaceToBatchNDParameter; populate_parameter_funcs_[schema::PrimitiveType_Crop] = PopulateCropParameter; populate_parameter_funcs_[schema::PrimitiveType_Unsqueeze] = PopulateUnsqueezeParameter; populate_parameter_funcs_[schema::PrimitiveType_Flatten] = PopulateFlattenParameter; diff --git a/mindspore/lite/tools/converter/parser/caffe/CMakeLists.txt b/mindspore/lite/tools/converter/parser/caffe/CMakeLists.txt index bf27a111b..2faf790b2 100644 --- a/mindspore/lite/tools/converter/parser/caffe/CMakeLists.txt +++ b/mindspore/lite/tools/converter/parser/caffe/CMakeLists.txt @@ -28,4 +28,5 @@ add_library(caffe_parser_mid OBJECT ${CMAKE_CURRENT_SOURCE_DIR}/caffe_interp_parser.cc ${CMAKE_CURRENT_SOURCE_DIR}/caffe_permute_parser.cc ${CMAKE_CURRENT_SOURCE_DIR}/caffe_tile_parser.cc - ${CMAKE_CURRENT_SOURCE_DIR}/caffe_tanh_parser.cc) + ${CMAKE_CURRENT_SOURCE_DIR}/caffe_tanh_parser.cc + ${CMAKE_CURRENT_SOURCE_DIR}/caffe_exp_parser.cc) diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_argmax_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_argmax_parser.cc index a4238cc67..8aa275c03 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_argmax_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_argmax_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_argmax_parser.h" +#include "tools/converter/parser/caffe/caffe_argmax_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_argmax_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_argmax_parser.h index 7517f6f68..5b1b9fe94 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_argmax_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_argmax_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_ARGMAX_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_batchnorm_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_batchnorm_parser.cc index fad6d8577..b859c8464 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_batchnorm_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_batchnorm_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_batchnorm_parser.h" +#include "tools/converter/parser/caffe/caffe_batchnorm_parser.h" #include #include #include "tools/common/tensor_util.h" diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_batchnorm_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_batchnorm_parser.h index 9fb5d9828..83142963f 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_batchnorm_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_batchnorm_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_BATCHNORM_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_concat_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_concat_parser.cc index 01c407683..009c46a7c 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_concat_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_concat_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_concat_parser.h" +#include "tools/converter/parser/caffe/caffe_concat_parser.h" #include const int32_t CONCAT_DEFAULT_AXIS = 1; diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_concat_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_concat_parser.h index 19dafae2e..f0cb018dc 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_concat_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_concat_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_CONCAT_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_conv_base_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_conv_base_parser.h index e0919e7ca..7cdfe13d4 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_conv_base_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_conv_base_parser.h @@ -19,8 +19,8 @@ #include #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_converter.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_converter.cc index 0a8798988..37e51bce7 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_converter.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_converter.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_converter.h" +#include "tools/converter/parser/caffe/caffe_converter.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_converter.h b/mindspore/lite/tools/converter/parser/caffe/caffe_converter.h index db024b23f..2f6ea10d7 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_converter.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_converter.h @@ -19,9 +19,9 @@ #include #include -#include "mindspore/lite/tools/converter/converter.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.h" -#include "mindspore/lite/tools/converter/graphdef_transform.h" +#include "tools/converter/converter.h" +#include "tools/converter/parser/caffe/caffe_model_parser.h" +#include "tools/converter/graphdef_transform.h" namespace mindspore::lite { class CaffeConverter : public Converter { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_convolution_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_convolution_parser.cc index 96f546e44..ec94c2f43 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_convolution_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_convolution_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_convolution_parser.h" +#include "tools/converter/parser/caffe/caffe_convolution_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_convolution_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_convolution_parser.h index 48e723411..7baf194c9 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_convolution_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_convolution_parser.h @@ -18,9 +18,9 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_CONVOLUTION_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_conv_base_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_conv_base_parser.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_crop_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_crop_parser.cc index f4b566eae..e5a0cbefd 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_crop_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_crop_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_crop_parser.h" +#include "tools/converter/parser/caffe/caffe_crop_parser.h" #include const int32_t CROP_AXIS = 2; diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_crop_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_crop_parser.h index e2f92cf5d..d64f8534f 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_crop_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_crop_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_CROP_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_deconvolution_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_deconvolution_parser.cc index 5de6fc044..d46253b3f 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_deconvolution_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_deconvolution_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_deconvolution_parser.h" +#include "tools/converter/parser/caffe/caffe_deconvolution_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_deconvolution_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_deconvolution_parser.h index dd9df3ba2..fea07878b 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_deconvolution_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_deconvolution_parser.h @@ -18,9 +18,9 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_DECONVOLUTION_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_conv_base_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_conv_base_parser.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_eltwise_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_eltwise_parser.cc index bfbb4ee76..37689206b 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_eltwise_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_eltwise_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_eltwise_parser.h" +#include "tools/converter/parser/caffe/caffe_eltwise_parser.h" #include #include diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_eltwise_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_eltwise_parser.h index 0942154e2..8d0d2aed7 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_eltwise_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_eltwise_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_ELTWISE_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_exp_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_exp_parser.cc new file mode 100644 index 000000000..e39d400f4 --- /dev/null +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_exp_parser.cc @@ -0,0 +1,69 @@ +/** + * Copyright 2020 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "tools/converter/parser/caffe/caffe_exp_parser.h" +#include +#include + +namespace mindspore { +namespace lite { +STATUS CaffeExpParser::Parse(const caffe::LayerParameter &proto, + const caffe::LayerParameter &weight, + schema::CNodeT *op, + std::vector *weightVec) { + MS_LOG(DEBUG) << "parse ExpParser"; + if (op == nullptr) { + MS_LOG(ERROR) << "op is null"; + return RET_NULL_PTR; + } + op->primitive = std::make_unique(); + if (op->primitive == nullptr) { + MS_LOG(ERROR) << "op->primitive is null"; + return RET_NULL_PTR; + } + + std::unique_ptr attr = std::make_unique(); + if (attr == nullptr) { + MS_LOG(ERROR) << "new op failed"; + return RET_NULL_PTR; + } + + const caffe::ExpParameter exp_param = proto.exp_param(); + if (exp_param.has_base()) { + attr->base = exp_param.base(); + } else { + attr->base = -1; // -1 represent base = e + } + if (exp_param.has_scale()) { + attr->scale = exp_param.scale(); + } else { + attr->scale = 1; + } + if (exp_param.has_shift()) { + attr->shift = exp_param.shift(); + } else { + attr->shift = 0; + } + + op->primitive->value.type = schema::PrimitiveType_Exp; + op->primitive->value.value = attr.release(); + return RET_OK; +} + +CaffeNodeRegistrar g_caffeExpParser("Exp", new CaffeExpParser()); +} // namespace lite +} // namespace mindspore + diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_exp_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_exp_parser.h new file mode 100644 index 000000000..ac6a12cfe --- /dev/null +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_exp_parser.h @@ -0,0 +1,38 @@ +/** + * Copyright 2020 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_EXP_PARSER_H +#define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_EXP_PARSER_H + +#include +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" + +namespace mindspore { +namespace lite { +class CaffeExpParser : public CaffeNodeParser { + public: + CaffeExpParser() : CaffeNodeParser("exp") {} + + STATUS Parse(const caffe::LayerParameter &proto, + const caffe::LayerParameter &weight, + schema::CNodeT *op, + std::vector *weightVec) override; +}; +} // namespace lite +} // namespace mindspore + +#endif // MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_EXP_PARSER_H diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_flatten_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_flatten_parser.cc index 6e4b1d7c1..4eb0cb78b 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_flatten_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_flatten_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_flatten_parser.h" +#include "tools/converter/parser/caffe/caffe_flatten_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_flatten_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_flatten_parser.h index e1fb48f6e..333caaf6f 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_flatten_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_flatten_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_FLATTEN_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_innerproduct_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_innerproduct_parser.cc index cd968a257..2ba0588e3 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_innerproduct_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_innerproduct_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_innerproduct_parser.h" +#include "tools/converter/parser/caffe/caffe_innerproduct_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_innerproduct_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_innerproduct_parser.h index 375d6db03..c4ed3e7fe 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_innerproduct_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_innerproduct_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_INNERPRODUCT_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_inspector.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_inspector.cc index 394686e6c..77652fdfb 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_inspector.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_inspector.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_inspector.h" +#include "tools/converter/parser/caffe/caffe_inspector.h" #include "utils/log_adapter.h" namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_interp_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_interp_parser.cc index 5d87ad518..e7bb9aaee 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_interp_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_interp_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_interp_parser.h" +#include "tools/converter/parser/caffe/caffe_interp_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_interp_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_interp_parser.h index f8e390741..18ab4e457 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_interp_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_interp_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_INTERP_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.cc index 5f75fc1ee..67a1d9cf8 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.cc @@ -91,7 +91,12 @@ schema::MetaGraphT *CaffeModelParser::ParseToFb(const std::string &modelFile, co STATUS CaffeModelParser::SetOpInputIdx(const caffe::LayerParameter &layer, schema::CNodeT *op, TensorCache *tensorCache) { for (int i = 0; i < layer.bottom_size(); i++) { - int index = tensorCache->FindTensor(layer.bottom(i)); + int index = -1; + if (splitLayer.find(layer.bottom(i)) != splitLayer.end()) { + index = tensorCache->FindTensor(splitLayer.find(layer.bottom(i))->second); + } else { + index = tensorCache->FindTensor(layer.bottom(i)); + } if (index >= 0) { op->inputIndex.emplace_back(index); } else { @@ -193,6 +198,10 @@ STATUS CaffeModelParser::ParseLayer(const caffe::NetParameter &proto, const caff std::unique_ptr op = std::make_unique(); op->name = layer.name(); + if (layer.type() == "Split") { + splitLayer.emplace(layer.name(), layer.bottom(0)); + continue; + } auto status = SetOpInputIdx(layer, op.get(), tensorCache); if (status != RET_OK) { MS_LOG(ERROR) << "Set Op " << layer.name() << " Input Index Failed!"; diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.h index ffea8e6aa..84b318b9c 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_model_parser.h @@ -21,7 +21,8 @@ #include #include #include -#include "mindspore/lite/tools/converter/model_parser.h" +#include +#include "tools/converter/model_parser.h" #include "tools/converter/parser/caffe/caffe.pb.h" #include "tools/common/tensor_util.h" @@ -55,6 +56,8 @@ class CaffeModelParser : public ModelParser { STATUS GetModelInput(const caffe::NetParameter &proto, TensorCache *tensorCache); static const std::set skipedLayerType; + + std::unordered_map splitLayer; }; } // namespace lite } // namespace mindspore diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.cc index 268f165e8..9cc92cb95 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" #include #include "securec/include/securec.h" #include "ir/dtype/type_id.h" diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h index 59dba278f..f3320f77f 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h @@ -20,9 +20,9 @@ #include #include #include "google/protobuf/message.h" -#include "mindspore/lite/schema/inner/model_generated.h" +#include "schema/inner/model_generated.h" #include "tools/converter/parser/caffe/caffe.pb.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" #include "include/errorcode.h" #include "utils/log_adapter.h" diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.cc index 32afafd2c..550ab3c91 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h b/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h index b8cdf0741..000ddff4c 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h @@ -19,7 +19,7 @@ #include #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" #include "tools/converter/parser/caffe/caffe.pb.h" namespace mindspore::lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_permute_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_permute_parser.cc index 64598a29e..2e5ec46e9 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_permute_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_permute_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_permute_parser.h" +#include "tools/converter/parser/caffe/caffe_permute_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_permute_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_permute_parser.h index 8cfa78bee..28680d31f 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_permute_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_permute_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_PERMUTE_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_pooling_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_pooling_parser.cc index 554ad8d43..638931ca6 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_pooling_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_pooling_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_pooling_parser.h" +#include "tools/converter/parser/caffe/caffe_pooling_parser.h" #include const uint32_t INNERPRODUCT_WINDOW_DEFAULT_VALUE = 0; diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_pooling_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_pooling_parser.h index 0ff309192..c1b778d38 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_pooling_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_pooling_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_POOLING_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_power_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_power_parser.cc index 158460e4a..da4ce1127 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_power_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_power_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_power_parser.h" +#include "tools/converter/parser/caffe/caffe_power_parser.h" #include #include diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_power_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_power_parser.h index 0aa233811..e5c8a6ed8 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_power_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_power_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_POWER_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_prelu_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_prelu_parser.cc index 2c1b11cc8..71788fb5a 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_prelu_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_prelu_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_prelu_parser.h" +#include "tools/converter/parser/caffe/caffe_prelu_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_prelu_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_prelu_parser.h index 11b9f7106..027555949 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_prelu_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_prelu_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_PRELU_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_relu6_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_relu6_parser.cc index 0ad8a4a19..cbb4555ee 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_relu6_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_relu6_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_relu6_parser.h" +#include "tools/converter/parser/caffe/caffe_relu6_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_relu6_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_relu6_parser.h index bb6e948ff..a385f6e5a 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_relu6_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_relu6_parser.h @@ -17,8 +17,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_RELU6_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_relu_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_relu_parser.cc index 13309ddfc..4cc16c507 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_relu_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_relu_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_relu_parser.h" +#include "tools/converter/parser/caffe/caffe_relu_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_relu_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_relu_parser.h index 644181a90..06ef95372 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_relu_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_relu_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_RELU_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_reshape_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_reshape_parser.cc index 3dbbebb4e..38261ca9c 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_reshape_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_reshape_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_reshape_parser.h" +#include "tools/converter/parser/caffe/caffe_reshape_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_reshape_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_reshape_parser.h index 94767b574..05fd51575 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_reshape_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_reshape_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_RESHAPE_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_scale_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_scale_parser.cc index 537a061d1..b6b09c78f 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_scale_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_scale_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_scale_parser.h" +#include "tools/converter/parser/caffe/caffe_scale_parser.h" #include const int32_t NCHW_DIM_C = 1; diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_scale_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_scale_parser.h index b1982ae7d..667ad4136 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_scale_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_scale_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_SCALE_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_sigmoid_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_sigmoid_parser.cc index 98c07a123..3c72db93d 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_sigmoid_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_sigmoid_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_sigmoid_parser.h" +#include "tools/converter/parser/caffe/caffe_sigmoid_parser.h" #include namespace mindspore { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_sigmoid_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_sigmoid_parser.h index e6b2d4951..976d154fd 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_sigmoid_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_sigmoid_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_SIGMOID_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_softmax_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_softmax_parser.cc index b3ebb2e19..9839b2534 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_softmax_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_softmax_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_softmax_parser.h" +#include "tools/converter/parser/caffe/caffe_softmax_parser.h" #include static const int32_t CAFFE_SOFTMAX_DEFAULT_AXIS = 1; diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_softmax_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_softmax_parser.h index 12e743887..ad59d5291 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_softmax_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_softmax_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_SOFTMAX_PARSER_H_ #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_tile_parser.cc b/mindspore/lite/tools/converter/parser/caffe/caffe_tile_parser.cc index d3c1b840a..9ac361118 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_tile_parser.cc +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_tile_parser.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "mindspore/lite/tools/converter/parser/caffe/caffe_tile_parser.h" +#include "tools/converter/parser/caffe/caffe_tile_parser.h" #include #include diff --git a/mindspore/lite/tools/converter/parser/caffe/caffe_tile_parser.h b/mindspore/lite/tools/converter/parser/caffe/caffe_tile_parser.h index 09ddb6f16..bc8981652 100644 --- a/mindspore/lite/tools/converter/parser/caffe/caffe_tile_parser.h +++ b/mindspore/lite/tools/converter/parser/caffe/caffe_tile_parser.h @@ -18,8 +18,8 @@ #define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_CAFFE_CAFFE_TILE_PARSER_H #include -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser.h" -#include "mindspore/lite/tools/converter/parser/caffe/caffe_node_parser_registry.h" +#include "tools/converter/parser/caffe/caffe_node_parser.h" +#include "tools/converter/parser/caffe/caffe_node_parser_registry.h" namespace mindspore { namespace lite { diff --git a/mindspore/lite/tools/converter/parser/tflite/tflite_arithmetic_parser.cc b/mindspore/lite/tools/converter/parser/tflite/tflite_arithmetic_parser.cc index 8db54f049..68d9eaf16 100644 --- a/mindspore/lite/tools/converter/parser/tflite/tflite_arithmetic_parser.cc +++ b/mindspore/lite/tools/converter/parser/tflite/tflite_arithmetic_parser.cc @@ -212,6 +212,9 @@ STATUS TfliteSingleInputOpParser::Parse(const std::unique_ptr } else if (std::strcmp(node_name, "Exp") == 0) { MS_LOG(DEBUG) << "parse TfliteExpParser"; auto attr = std::make_unique(); + attr->base = -1; // -1 represent base = e + attr->scale = 1; + attr->shift = 0; if (attr == nullptr) { MS_LOG(ERROR) << "new op failed"; return RET_NULL_PTR; diff --git a/mindspore/lite/tools/converter/parser/tflite/tflite_custom_parser.cc b/mindspore/lite/tools/converter/parser/tflite/tflite_custom_parser.cc new file mode 100644 index 000000000..fcdb7599f --- /dev/null +++ b/mindspore/lite/tools/converter/parser/tflite/tflite_custom_parser.cc @@ -0,0 +1,67 @@ +/** + * Copyright 2020 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "tools/converter/parser/tflite/tflite_custom_parser.h" +#include +#include +#include + +namespace mindspore { +namespace lite { +STATUS TfliteCustomParser::Parse(const std::unique_ptr &tflite_op, + const std::vector> &tflite_tensors, + const std::vector> &tflite_model_buffer, + schema::CNodeT *op, + std::vector *tensors_id, + std::vector *tensors_format, + std::map *tensors_id_map) { + MS_LOG(DEBUG) << "parse TfliteCustomParser"; + if (op == nullptr) { + MS_LOG(ERROR) << "op is null"; + return RET_NULL_PTR; + } + op->primitive = std::make_unique(); + if (op->primitive == nullptr) { + MS_LOG(ERROR) << "op->primitive is null"; + return RET_NULL_PTR; + } + + std::unique_ptr attr = std::make_unique(); + if (attr == nullptr) { + MS_LOG(ERROR) << "new op failed"; + return RET_NULL_PTR; + } + + const auto &custom_attr = tflite_op->custom_options; + attr->custom = custom_attr; + op->primitive->value.type = schema::PrimitiveType_Custom; + op->primitive->value.value = attr.release(); + + for (size_t i = 0; i < tflite_op->inputs.size(); ++i) { + AddOpInput(op, tensors_id, tensors_format, tensors_id_map, + tflite_op->inputs[i], tensors_id->size(), tflite_tensors.size(), schema::Format_NHWC); + } + for (size_t i = 0; i < tflite_op->outputs.size(); ++i) { + AddOpOutput(op, tensors_id, tensors_format, tensors_id_map, + tflite_op->outputs[i], tensors_id->size(), tflite_tensors.size(), schema::Format_NHWC); + } + return RET_OK; +} + +TfliteNodeRegister g_tfliteCustomParser("Custom", new TfliteCustomParser()); +} // namespace lite +} // namespace mindspore + diff --git a/mindspore/lite/tools/converter/parser/tflite/tflite_custom_parser.h b/mindspore/lite/tools/converter/parser/tflite/tflite_custom_parser.h new file mode 100644 index 000000000..150137b9e --- /dev/null +++ b/mindspore/lite/tools/converter/parser/tflite/tflite_custom_parser.h @@ -0,0 +1,43 @@ +/** + * Copyright 2020 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_TFLITE_CUSTOM_PARSER_H +#define MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_TFLITE_CUSTOM_PARSER_H + +#include +#include +#include +#include "tools/converter/parser/tflite/tflite_node_parser.h" +#include "tools/converter/parser/tflite/tflite_node_parser_registry.h" + +namespace mindspore { +namespace lite { +class TfliteCustomParser : public TfliteNodeParser { + public: + TfliteCustomParser() : TfliteNodeParser("Custom") {} + + STATUS Parse(const std::unique_ptr &tflite_op, + const std::vector> &tflite_tensors, + const std::vector> &tflite_model_buffer, + schema::CNodeT *op, + std::vector *tensors_id, + std::vector *tensors_format, + std::map *tensors_id_map) override; +}; +} // namespace lite +} // namespace mindspore + +#endif // MINDSPORE_LITE_TOOLS_CONVERTER_PARSER_TFLITE_CUSTOM_PARSER_H diff --git a/mindspore/lite/tools/converter/parser/tflite/tflite_sparse_to_dense_parser.cc b/mindspore/lite/tools/converter/parser/tflite/tflite_sparse_to_dense_parser.cc index ddfaabf32..b00950d1d 100644 --- a/mindspore/lite/tools/converter/parser/tflite/tflite_sparse_to_dense_parser.cc +++ b/mindspore/lite/tools/converter/parser/tflite/tflite_sparse_to_dense_parser.cc @@ -66,6 +66,12 @@ STATUS TfliteSparseToDenseParser::Parse(const std::unique_ptr AddOpInput(op, tensors_id, tensors_format, tensors_id_map, tflite_op->inputs[0], tensors_id->size(), tflite_tensors.size(), schema::Format_NHWC); + AddOpInput(op, tensors_id, tensors_format, tensors_id_map, + tflite_op->inputs[1], tensors_id->size(), tflite_tensors.size(), schema::Format_NHWC); + AddOpInput(op, tensors_id, tensors_format, tensors_id_map, + tflite_op->inputs[2], tensors_id->size(), tflite_tensors.size(), schema::Format_NHWC); + AddOpInput(op, tensors_id, tensors_format, tensors_id_map, + tflite_op->inputs[3], tensors_id->size(), tflite_tensors.size(), schema::Format_NHWC); AddOpOutput(op, tensors_id, tensors_format, tensors_id_map, tflite_op->outputs[0], tensors_id->size(), tflite_tensors.size(), schema::Format_NHWC); return RET_OK; diff --git a/mindspore/lite/tools/converter/parser/tflite/tflite_util.cc b/mindspore/lite/tools/converter/parser/tflite/tflite_util.cc index d987b6e8f..8d6f87a2f 100644 --- a/mindspore/lite/tools/converter/parser/tflite/tflite_util.cc +++ b/mindspore/lite/tools/converter/parser/tflite/tflite_util.cc @@ -116,6 +116,7 @@ std::map tfMsOpTypeMap{ {tflite::BuiltinOperator_REVERSE_SEQUENCE, "ReverseSequence"}, {tflite::BuiltinOperator_UNIQUE, "Unique"}, {tflite::BuiltinOperator_UNPACK, "Unstack"}, + {tflite::BuiltinOperator_CUSTOM, "Custom"}, }; std::map tfMsActivationFunctionMap{ -- GitLab