• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)28 uint32_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)53 mindspore::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)85 mindspore::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)97 mindspore::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)111 mindspore::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)122 mindspore::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)130 OH_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)162 std::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)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