1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "transform.h" 17 18 #include "memory_manager.h" 19 #include "common/log.h" 20 21 namespace OHOS { 22 namespace NeuralNetworkRuntime { 23 const uint32_t BIT8_TO_BYTE = 1; 24 const uint32_t BIT16_TO_BYTE = 2; 25 const uint32_t BIT32_TO_BYTE = 4; 26 const uint32_t BIT64_TO_BYTE = 8; 27 GetTypeSize(OH_NN_DataType type)28uint32_t GetTypeSize(OH_NN_DataType type) 29 { 30 switch (type) { 31 case OH_NN_BOOL: 32 return sizeof(bool); 33 case OH_NN_INT8: 34 case OH_NN_UINT8: 35 return BIT8_TO_BYTE; 36 case OH_NN_INT16: 37 case OH_NN_UINT16: 38 case OH_NN_FLOAT16: 39 return BIT16_TO_BYTE; 40 case OH_NN_INT32: 41 case OH_NN_UINT32: 42 case OH_NN_FLOAT32: 43 return BIT32_TO_BYTE; 44 case OH_NN_INT64: 45 case OH_NN_UINT64: 46 case OH_NN_FLOAT64: 47 return BIT64_TO_BYTE; 48 default: 49 return 0; 50 } 51 } 52 TransformDataType(OH_NN_DataType type)53mindspore::lite::DataType NNToMS::TransformDataType(OH_NN_DataType type) 54 { 55 switch (type) { 56 case OH_NN_BOOL: 57 return mindspore::lite::DATA_TYPE_BOOL; 58 case OH_NN_INT8: 59 return mindspore::lite::DATA_TYPE_INT8; 60 case OH_NN_INT16: 61 return mindspore::lite::DATA_TYPE_INT16; 62 case OH_NN_INT32: 63 return mindspore::lite::DATA_TYPE_INT32; 64 case OH_NN_INT64: 65 return mindspore::lite::DATA_TYPE_INT64; 66 case OH_NN_UINT8: 67 return mindspore::lite::DATA_TYPE_UINT8; 68 case OH_NN_UINT16: 69 return mindspore::lite::DATA_TYPE_UINT16; 70 case OH_NN_UINT32: 71 return mindspore::lite::DATA_TYPE_UINT32; 72 case OH_NN_UINT64: 73 return mindspore::lite::DATA_TYPE_UINT64; 74 case OH_NN_FLOAT16: 75 return mindspore::lite::DATA_TYPE_FLOAT16; 76 case OH_NN_FLOAT32: 77 return mindspore::lite::DATA_TYPE_FLOAT32; 78 case OH_NN_FLOAT64: 79 return mindspore::lite::DATA_TYPE_FLOAT64; 80 default: 81 return mindspore::lite::DATA_TYPE_UNKNOWN; 82 } 83 } 84 TransformFormat(OH_NN_Format type)85mindspore::lite::Format NNToMS::TransformFormat(OH_NN_Format type) 86 { 87 switch (type) { 88 case OH_NN_FORMAT_NCHW: 89 return mindspore::lite::FORMAT_NCHW; 90 case OH_NN_FORMAT_NHWC: 91 return mindspore::lite::FORMAT_NHWC; 92 default: 93 return mindspore::lite::FORMAT_NHWC; 94 } 95 } 96 TransfromFusionType(OH_NN_FuseType type)97mindspore::lite::ActivationType NNToMS::TransfromFusionType(OH_NN_FuseType type) 98 { 99 switch (type) { 100 case OH_NN_FUSED_NONE: 101 return mindspore::lite::ACTIVATION_TYPE_NO_ACTIVATION; 102 case OH_NN_FUSED_RELU: 103 return mindspore::lite::ACTIVATION_TYPE_RELU; 104 case OH_NN_FUSED_RELU6: 105 return mindspore::lite::ACTIVATION_TYPE_RELU6; 106 default: 107 return mindspore::lite::ACTIVATION_TYPE_UNKNOWN; 108 } 109 } 110 TransformQuantType(OHOS::NeuralNetworkRuntime::Ops::OpsQuantType type)111mindspore::lite::QuantType NNToMS::TransformQuantType(OHOS::NeuralNetworkRuntime::Ops::OpsQuantType type) 112 { 113 switch (type) { 114 case OHOS::NeuralNetworkRuntime::Ops::OpsQuantType::QUANT_NONE: 115 return mindspore::lite::QUANT_TYPE_NONE; 116 case OHOS::NeuralNetworkRuntime::Ops::OpsQuantType::QUANT_ALL: 117 return mindspore::lite::QUANT_TYPE_ALL; 118 default: return mindspore::lite::QUANT_TYPE_NONE; 119 } 120 } 121 TransformPadModeValue(int8_t padMode)122mindspore::lite::PadMode NNToMS::TransformPadModeValue(int8_t padMode) 123 { 124 // The value is an optional value of the int8_t type. The value 0 indicates the same, 125 // and the value 1 indicates valid. 126 return (padMode == 0) ? mindspore::lite::PadMode::PAD_MODE_SAME : 127 mindspore::lite::PadMode::PAD_MODE_VALID; 128 } 129 TransformDataType(mindspore::lite::DataType type)130OH_NN_DataType MSToNN::TransformDataType(mindspore::lite::DataType type) 131 { 132 switch (type) { 133 case mindspore::lite::DATA_TYPE_BOOL: 134 return OH_NN_BOOL; 135 case mindspore::lite::DATA_TYPE_INT8: 136 return OH_NN_INT8; 137 case mindspore::lite::DATA_TYPE_INT16: 138 return OH_NN_INT16; 139 case mindspore::lite::DATA_TYPE_INT32: 140 return OH_NN_INT32; 141 case mindspore::lite::DATA_TYPE_INT64: 142 return OH_NN_INT64; 143 case mindspore::lite::DATA_TYPE_UINT8: 144 return OH_NN_UINT8; 145 case mindspore::lite::DATA_TYPE_UINT16: 146 return OH_NN_UINT16; 147 case mindspore::lite::DATA_TYPE_UINT32: 148 return OH_NN_UINT32; 149 case mindspore::lite::DATA_TYPE_UINT64: 150 return OH_NN_UINT64; 151 case mindspore::lite::DATA_TYPE_FLOAT16: 152 return OH_NN_FLOAT16; 153 case mindspore::lite::DATA_TYPE_FLOAT32: 154 return OH_NN_FLOAT32; 155 case mindspore::lite::DATA_TYPE_FLOAT64: 156 return OH_NN_FLOAT64; 157 default: 158 return OH_NN_UNKNOWN; 159 } 160 } 161 TransformQuantParams(std::vector<mindspore::lite::QuantParam> msQuantParams)162std::vector<QuantParam> MSToNN::TransformQuantParams(std::vector<mindspore::lite::QuantParam> msQuantParams) 163 { 164 std::vector<QuantParam> nnQuantParam; 165 for (const mindspore::lite::QuantParam& param : msQuantParams) { 166 nnQuantParam.emplace_back((QuantParam){param.numBits, param.scale, param.zeroPoint}); 167 } 168 return nnQuantParam; 169 } 170 TransformFormat(mindspore::lite::Format msFormat)171OH_NN_Format MSToNN::TransformFormat(mindspore::lite::Format msFormat) 172 { 173 if (msFormat == mindspore::lite::FORMAT_NHWC) { 174 return OH_NN_Format::OH_NN_FORMAT_NHWC; 175 } else if (msFormat == mindspore::lite::FORMAT_NCHW) { 176 return OH_NN_Format::OH_NN_FORMAT_NCHW; 177 } 178 179 return OH_NN_Format::OH_NN_FORMAT_NONE; 180 } 181 } // namespace NeuralNetworkRuntime 182 } // namespace OHOS