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 "common/log.h"
19
20 namespace OHOS {
21 namespace NeuralNetworkRuntime {
22 const uint32_t BIT8_TO_BYTE = 1;
23 const uint32_t BIT16_TO_BYTE = 2;
24 const uint32_t BIT32_TO_BYTE = 4;
25 const uint32_t BIT64_TO_BYTE = 8;
26
GetTypeSize(OH_NN_DataType type)27 uint32_t GetTypeSize(OH_NN_DataType type)
28 {
29 switch (type) {
30 case OH_NN_BOOL:
31 return sizeof(bool);
32 case OH_NN_INT8:
33 case OH_NN_UINT8:
34 return BIT8_TO_BYTE;
35 case OH_NN_INT16:
36 case OH_NN_UINT16:
37 case OH_NN_FLOAT16:
38 return BIT16_TO_BYTE;
39 case OH_NN_INT32:
40 case OH_NN_UINT32:
41 case OH_NN_FLOAT32:
42 return BIT32_TO_BYTE;
43 case OH_NN_INT64:
44 case OH_NN_UINT64:
45 case OH_NN_FLOAT64:
46 return BIT64_TO_BYTE;
47 default:
48 return 0;
49 }
50 }
51
TransformDataType(OH_NN_DataType type)52 mindspore::lite::DataType NNToMS::TransformDataType(OH_NN_DataType type)
53 {
54 switch (type) {
55 case OH_NN_BOOL:
56 return mindspore::lite::DATA_TYPE_BOOL;
57 case OH_NN_INT8:
58 return mindspore::lite::DATA_TYPE_INT8;
59 case OH_NN_INT16:
60 return mindspore::lite::DATA_TYPE_INT16;
61 case OH_NN_INT32:
62 return mindspore::lite::DATA_TYPE_INT32;
63 case OH_NN_INT64:
64 return mindspore::lite::DATA_TYPE_INT64;
65 case OH_NN_UINT8:
66 return mindspore::lite::DATA_TYPE_UINT8;
67 case OH_NN_UINT16:
68 return mindspore::lite::DATA_TYPE_UINT16;
69 case OH_NN_UINT32:
70 return mindspore::lite::DATA_TYPE_UINT32;
71 case OH_NN_UINT64:
72 return mindspore::lite::DATA_TYPE_UINT64;
73 case OH_NN_FLOAT16:
74 return mindspore::lite::DATA_TYPE_FLOAT16;
75 case OH_NN_FLOAT32:
76 return mindspore::lite::DATA_TYPE_FLOAT32;
77 case OH_NN_FLOAT64:
78 return mindspore::lite::DATA_TYPE_FLOAT64;
79 default:
80 return mindspore::lite::DATA_TYPE_UNKNOWN;
81 }
82 }
83
TransformFormat(OH_NN_Format type)84 mindspore::lite::Format NNToMS::TransformFormat(OH_NN_Format type)
85 {
86 switch (type) {
87 case OH_NN_FORMAT_NCHW:
88 return mindspore::lite::FORMAT_NCHW;
89 case OH_NN_FORMAT_NHWC:
90 return mindspore::lite::FORMAT_NHWC;
91 default:
92 return mindspore::lite::FORMAT_NHWC;
93 }
94 }
95
TransfromFusionType(OH_NN_FuseType type)96 mindspore::lite::ActivationType NNToMS::TransfromFusionType(OH_NN_FuseType type)
97 {
98 switch (type) {
99 case OH_NN_FUSED_NONE:
100 return mindspore::lite::ACTIVATION_TYPE_NO_ACTIVATION;
101 case OH_NN_FUSED_RELU:
102 return mindspore::lite::ACTIVATION_TYPE_RELU;
103 case OH_NN_FUSED_RELU6:
104 return mindspore::lite::ACTIVATION_TYPE_RELU6;
105 default:
106 return mindspore::lite::ACTIVATION_TYPE_UNKNOWN;
107 }
108 }
109
TransformQuantType(OHOS::NeuralNetworkRuntime::Ops::OpsQuantType type)110 mindspore::lite::QuantType NNToMS::TransformQuantType(OHOS::NeuralNetworkRuntime::Ops::OpsQuantType type)
111 {
112 switch (type) {
113 case OHOS::NeuralNetworkRuntime::Ops::OpsQuantType::QUANT_NONE:
114 return mindspore::lite::QUANT_TYPE_NONE;
115 case OHOS::NeuralNetworkRuntime::Ops::OpsQuantType::QUANT_ALL:
116 return mindspore::lite::QUANT_TYPE_ALL;
117 default: return mindspore::lite::QUANT_TYPE_NONE;
118 }
119 }
120
TransformPadModeValue(int8_t padMode)121 mindspore::lite::PadMode NNToMS::TransformPadModeValue(int8_t padMode)
122 {
123 // The value is an optional value of the int8_t type. The value 0 indicates the same,
124 // and the value 1 indicates valid.
125 return (padMode == 0) ? mindspore::lite::PadMode::PAD_MODE_SAME :
126 mindspore::lite::PadMode::PAD_MODE_VALID;
127 }
128
TransformDataType(mindspore::lite::DataType type)129 OH_NN_DataType MSToNN::TransformDataType(mindspore::lite::DataType type)
130 {
131 switch (type) {
132 case mindspore::lite::DATA_TYPE_BOOL:
133 return OH_NN_BOOL;
134 case mindspore::lite::DATA_TYPE_INT8:
135 return OH_NN_INT8;
136 case mindspore::lite::DATA_TYPE_INT16:
137 return OH_NN_INT16;
138 case mindspore::lite::DATA_TYPE_INT32:
139 return OH_NN_INT32;
140 case mindspore::lite::DATA_TYPE_INT64:
141 return OH_NN_INT64;
142 case mindspore::lite::DATA_TYPE_UINT8:
143 return OH_NN_UINT8;
144 case mindspore::lite::DATA_TYPE_UINT16:
145 return OH_NN_UINT16;
146 case mindspore::lite::DATA_TYPE_UINT32:
147 return OH_NN_UINT32;
148 case mindspore::lite::DATA_TYPE_UINT64:
149 return OH_NN_UINT64;
150 case mindspore::lite::DATA_TYPE_FLOAT16:
151 return OH_NN_FLOAT16;
152 case mindspore::lite::DATA_TYPE_FLOAT32:
153 return OH_NN_FLOAT32;
154 case mindspore::lite::DATA_TYPE_FLOAT64:
155 return OH_NN_FLOAT64;
156 default:
157 return OH_NN_UNKNOWN;
158 }
159 }
160
TransformQuantParams(std::vector<mindspore::lite::QuantParam> msQuantParams)161 std::vector<QuantParam> MSToNN::TransformQuantParams(std::vector<mindspore::lite::QuantParam> msQuantParams)
162 {
163 std::vector<QuantParam> nnQuantParam;
164 std::transform(msQuantParams.begin(), msQuantParams.end(), std::back_inserter(nnQuantParam),
165 [](mindspore::lite::QuantParam quantParam) {
166 return (QuantParam){quantParam.numBits, quantParam.scale, quantParam.zeroPoint};
167 });
168 return nnQuantParam;
169 }
170
TransformFormat(mindspore::lite::Format msFormat)171 OH_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