You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

populate_parameter.cc 85 kB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824
  1. /**
  2. * Copyright 2020 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include "src/populate_parameter.h"
  17. #include "src/ops/primitive_c.h"
  18. #include "src/common/log_adapter.h"
  19. #include "schema/ops_generated.h"
  20. #include "src/ops/constant_of_shape.h"
  21. #include "src/ops/space_to_batch.h"
  22. #include "src/ops/space_to_batch_nd.h"
  23. #include "src/ops/conv2d.h"
  24. #include "src/ops/roi_pooling.h"
  25. #include "src/ops/topk.h"
  26. #include "src/ops/broadcast_to.h"
  27. #include "src/ops/unsqueeze.h"
  28. #include "src/ops/unstack.h"
  29. #include "src/ops/depth_to_space.h"
  30. #include "src/ops/batch_to_space.h"
  31. #include "src/ops/prior_box.h"
  32. #include "src/ops/lstm.h"
  33. #include "src/ops/softmax.h"
  34. #include "src/ops/activation.h"
  35. #include "src/ops/deconv2d.h"
  36. #include "src/ops/reduce.h"
  37. #include "src/ops/pooling.h"
  38. #include "src/ops/fused_batchnorm.h"
  39. #include "src/ops/batch_norm.h"
  40. #include "src/ops/power.h"
  41. #include "src/ops/range.h"
  42. #include "src/ops/add.h"
  43. #include "src/ops/sub.h"
  44. #include "src/ops/div.h"
  45. #include "src/ops/real_div.h"
  46. #include "src/ops/bias_add.h"
  47. #include "src/ops/expand_dims.h"
  48. #include "src/ops/full_connection.h"
  49. #include "src/ops/shape.h"
  50. #include "src/ops/elu.h"
  51. #include "src/ops/embedding_lookup.h"
  52. #include "src/ops/quant_dtype_cast.h"
  53. #include "src/ops/matmul.h"
  54. #include "src/ops/resize.h"
  55. #include "src/ops/tile.h"
  56. #include "src/ops/one_hot.h"
  57. #include "src/ops/lsh_projection.h"
  58. #include "src/ops/space_to_depth.h"
  59. #include "src/ops/split.h"
  60. #include "src/ops/argmax.h"
  61. #include "src/ops/argmin.h"
  62. #include "src/ops/cast.h"
  63. #include "src/ops/clip.h"
  64. #include "src/ops/reshape.h"
  65. #include "src/ops/scale.h"
  66. #include "src/ops/concat.h"
  67. #include "src/ops/nchw2nhwc.h"
  68. #include "src/ops/slice.h"
  69. #include "src/ops/squeeze.h"
  70. #include "src/ops/flatten.h"
  71. #include "src/ops/mean.h"
  72. #include "src/ops/nhwc2nchw.h"
  73. #include "src/ops/stack.h"
  74. #include "src/ops/crop.h"
  75. #include "src/ops/addn.h"
  76. #include "src/ops/gather.h"
  77. #include "src/ops/gather_nd.h"
  78. #include "src/ops/local_response_normalization.h"
  79. #include "src/ops/pad.h"
  80. #include "src/ops/leaky_relu.h"
  81. #include "src/ops/p_relu.h"
  82. #include "src/ops/reverse_sequence.h"
  83. #include "src/ops/dedepthwise_conv2d.h"
  84. #include "src/ops/depthwise_conv2d.h"
  85. #include "src/ops/mul.h"
  86. #include "src/ops/eltwise.h"
  87. #include "src/ops/fill.h"
  88. #include "src/ops/transpose.h"
  89. #include "src/ops/log.h"
  90. #include "src/ops/abs.h"
  91. #include "src/ops/sin.h"
  92. #include "src/ops/cos.h"
  93. #include "src/ops/sqrt.h"
  94. #include "src/ops/square.h"
  95. #include "src/ops/exp.h"
  96. #include "src/ops/rsqrt.h"
  97. #include "src/ops/maximum.h"
  98. #include "src/ops/minimum.h"
  99. #include "src/ops/strided_slice.h"
  100. #include "src/ops/reverse.h"
  101. #include "src/ops/logical_and.h"
  102. #include "src/ops/logical_or.h"
  103. #include "src/ops/logical_not.h"
  104. #include "src/ops/floor_div.h"
  105. #include "src/ops/floor_mod.h"
  106. #include "src/ops/equal.h"
  107. #include "src/ops/not_equal.h"
  108. #include "src/ops/less.h"
  109. #include "src/ops/less_equal.h"
  110. #include "src/ops/greater_equal.h"
  111. #include "src/ops/greater.h"
  112. #include "src/ops/floor.h"
  113. #include "src/ops/squared_difference.h"
  114. #include "src/ops/ceil.h"
  115. #include "src/ops/round.h"
  116. #include "src/ops/sparse_to_dense.h"
  117. #include "src/ops/l2_norm.h"
  118. #include "src/ops/neg.h"
  119. #include "src/ops/detection_post_process.h"
  120. #include "src/ops/skip_gram.h"
  121. #include "src/ops/custom_predict.h"
  122. #include "nnacl/op_base.h"
  123. #include "nnacl/fp32/arg_min_max.h"
  124. #include "nnacl/fp32/cast.h"
  125. #include "nnacl/concat_parameter.h"
  126. #include "nnacl/fp32/slice.h"
  127. #include "nnacl/fp32/broadcast_to.h"
  128. #include "nnacl/reshape_parameter.h"
  129. #include "nnacl/prelu_parameter.h"
  130. #include "nnacl/shape.h"
  131. #include "nnacl/fp32/constant_of_shape.h"
  132. #include "nnacl/stack_parameter.h"
  133. #include "nnacl/unstack.h"
  134. #include "nnacl/depth_to_space.h"
  135. #include "nnacl/conv_parameter.h"
  136. #include "nnacl/lsh_projection_parameter.h"
  137. #include "nnacl/fp32/pooling.h"
  138. #include "nnacl/matmul_parameter.h"
  139. #include "nnacl/fp32/roi_pooling.h"
  140. #include "nnacl/softmax_parameter.h"
  141. #include "nnacl/fp32/tile.h"
  142. #include "nnacl/fp32/topk.h"
  143. #include "nnacl/reduce_parameter.h"
  144. #include "nnacl/fp32/activation.h"
  145. #include "nnacl/clip.h"
  146. #include "nnacl/fp32/arithmetic.h"
  147. #include "nnacl/fp32/batchnorm.h"
  148. #include "nnacl/power.h"
  149. #include "nnacl/fp32/range.h"
  150. #include "nnacl/fp32/local_response_norm.h"
  151. #include "nnacl/fp32/expandDims.h"
  152. #include "nnacl/arithmetic_self_parameter.h"
  153. #include "nnacl/pad_parameter.h"
  154. #include "nnacl/fp32/fill.h"
  155. #include "nnacl/transpose.h"
  156. #include "nnacl/split_parameter.h"
  157. #include "nnacl/squeeze.h"
  158. #include "nnacl/gather_parameter.h"
  159. #include "nnacl/fp32/reverse.h"
  160. #include "nnacl/reverse_sequence.h"
  161. #include "nnacl/fp32/unique.h"
  162. #include "nnacl/scale.h"
  163. #include "nnacl/fp32/gatherNd.h"
  164. #include "nnacl/resize_parameter.h"
  165. #include "nnacl/scatter_nd.h"
  166. #include "nnacl/batch_to_space.h"
  167. #include "nnacl/fp32/crop.h"
  168. #include "fp32/flatten.h"
  169. #include "nnacl/fp32/unsqueeze.h"
  170. #include "nnacl/fp32/one_hot.h"
  171. #include "nnacl/strided_slice.h"
  172. #include "base/prior_box.h"
  173. #include "nnacl/fp32/space_to_depth.h"
  174. #include "nnacl/fp32/space_to_batch.h"
  175. #include "nnacl/int8/quant_dtype_cast.h"
  176. #include "nnacl/fp32/lstm.h"
  177. #include "nnacl/fp32/embedding_lookup.h"
  178. #include "nnacl/fp32/elu.h"
  179. #include "mindspore/lite/nnacl/fp32/sparse_to_dense.h"
  180. #include "nnacl/l2_norm_parameter.h"
  181. #include "nnacl/detection_post_process_parameter.h"
  182. #include "nnacl/fp32/exp.h"
  183. #include "nnacl/fp32/skip_gram.h"
  184. #include "nnacl/predict_parameter.h"
  185. namespace mindspore::kernel {
  186. OpParameter *PopulateROIPoolingParameter(const mindspore::lite::PrimitiveC *primitive) {
  187. const auto param =
  188. reinterpret_cast<mindspore::lite::ROIPooling *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  189. ROIPoolingParameter *roi_pooling_param = reinterpret_cast<ROIPoolingParameter *>(malloc(sizeof(ROIPoolingParameter)));
  190. if (roi_pooling_param == nullptr) {
  191. MS_LOG(ERROR) << "malloc ROIPoolingParameter failed.";
  192. return nullptr;
  193. }
  194. memset(roi_pooling_param, 0, sizeof(ROIPoolingParameter));
  195. roi_pooling_param->op_parameter_.type_ = primitive->Type();
  196. roi_pooling_param->pooledH_ = param->GetPooledW();
  197. roi_pooling_param->pooledW_ = param->GetPooledW();
  198. roi_pooling_param->scale_ = param->GetScale();
  199. return reinterpret_cast<OpParameter *>(roi_pooling_param);
  200. }
  201. OpParameter *PopulateBatchNorm(const mindspore::lite::PrimitiveC *primitive) {
  202. const auto param =
  203. reinterpret_cast<mindspore::lite::BatchNorm *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  204. BatchNormParameter *batch_norm_param = reinterpret_cast<BatchNormParameter *>(malloc(sizeof(BatchNormParameter)));
  205. if (batch_norm_param == nullptr) {
  206. MS_LOG(ERROR) << "malloc BatchNormParameter failed.";
  207. return nullptr;
  208. }
  209. memset(batch_norm_param, 0, sizeof(BatchNormParameter));
  210. batch_norm_param->op_parameter_.type_ = primitive->Type();
  211. batch_norm_param->epsilon_ = param->GetEpsilon();
  212. batch_norm_param->fused_ = false;
  213. return reinterpret_cast<OpParameter *>(batch_norm_param);
  214. }
  215. OpParameter *PopulateFillParameter(const mindspore::lite::PrimitiveC *primitive) {
  216. const auto param = reinterpret_cast<mindspore::lite::Fill *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  217. FillParameter *fill_param = reinterpret_cast<FillParameter *>(malloc(sizeof(FillParameter)));
  218. if (fill_param == nullptr) {
  219. MS_LOG(ERROR) << "malloc FillParameter failed.";
  220. return nullptr;
  221. }
  222. memset(fill_param, 0, sizeof(FillParameter));
  223. fill_param->op_parameter_.type_ = primitive->Type();
  224. auto flatDims = param->GetDims();
  225. fill_param->num_dims_ = flatDims.size();
  226. int i = 0;
  227. for (auto iter = flatDims.begin(); iter != flatDims.end(); iter++) {
  228. fill_param->dims_[i++] = *iter;
  229. }
  230. return reinterpret_cast<OpParameter *>(fill_param);
  231. }
  232. OpParameter *PopulateExpandDimsParameter(const mindspore::lite::PrimitiveC *primitive) {
  233. auto param = reinterpret_cast<mindspore::lite::ExpandDims *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  234. ExpandDimsParameter *expand_dims_param = reinterpret_cast<ExpandDimsParameter *>(malloc(sizeof(ExpandDimsParameter)));
  235. if (expand_dims_param == nullptr) {
  236. MS_LOG(ERROR) << "malloc ExpandDimsParameter failed.";
  237. return nullptr;
  238. }
  239. memset(expand_dims_param, 0, sizeof(ExpandDimsParameter));
  240. expand_dims_param->op_parameter_.type_ = primitive->Type();
  241. expand_dims_param->dim_ = param->GetDim();
  242. return reinterpret_cast<OpParameter *>(expand_dims_param);
  243. }
  244. OpParameter *PopulatePReLUParameter(const mindspore::lite::PrimitiveC *primitive) {
  245. auto param = reinterpret_cast<mindspore::lite::PReLU *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  246. PReluParameter *prelu_param = reinterpret_cast<PReluParameter *>(malloc(sizeof(PReluParameter)));
  247. if (prelu_param == nullptr) {
  248. MS_LOG(ERROR) << "malloc PReluParameter failed.";
  249. return nullptr;
  250. }
  251. memset(prelu_param, 0, sizeof(PReluParameter));
  252. prelu_param->op_parameter_.type_ = primitive->Type();
  253. prelu_param->channelShared = param->GetChannelShared();
  254. return reinterpret_cast<OpParameter *>(prelu_param);
  255. }
  256. OpParameter *PopulatePoolingParameter(const mindspore::lite::PrimitiveC *primitive) {
  257. auto pooling_primitive =
  258. reinterpret_cast<mindspore::lite::Pooling *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  259. PoolingParameter *pooling_param = reinterpret_cast<PoolingParameter *>(malloc(sizeof(PoolingParameter)));
  260. if (pooling_param == nullptr) {
  261. MS_LOG(ERROR) << "malloc PoolingParameter failed.";
  262. return nullptr;
  263. }
  264. memset(pooling_param, 0, sizeof(PoolingParameter));
  265. pooling_param->op_parameter_.type_ = primitive->Type();
  266. pooling_param->global_ = pooling_primitive->GetGlobal();
  267. pooling_param->window_w_ = pooling_primitive->GetWindowW();
  268. pooling_param->window_h_ = pooling_primitive->GetWindowH();
  269. auto pooling_lite_primitive = (lite::Pooling *)primitive;
  270. pooling_param->pad_u_ = pooling_lite_primitive->PadUp();
  271. pooling_param->pad_d_ = pooling_lite_primitive->PadDown();
  272. pooling_param->pad_l_ = pooling_lite_primitive->PadLeft();
  273. pooling_param->pad_r_ = pooling_lite_primitive->PadRight();
  274. pooling_param->stride_w_ = pooling_primitive->GetStrideW();
  275. pooling_param->stride_h_ = pooling_primitive->GetStrideH();
  276. pooling_param->avg_mode_ = pooling_primitive->GetAvgMode();
  277. auto is_global = pooling_primitive->GetGlobal();
  278. pooling_param->global_ = is_global;
  279. auto pool_mode = pooling_primitive->GetPoolingMode();
  280. switch (pool_mode) {
  281. case schema::PoolMode_MAX_POOLING:
  282. pooling_param->pool_mode_ = PoolMode_MaxPool;
  283. break;
  284. case schema::PoolMode_MEAN_POOLING:
  285. pooling_param->pool_mode_ = PoolMode_AvgPool;
  286. break;
  287. default:
  288. pooling_param->pool_mode_ = PoolMode_No;
  289. break;
  290. }
  291. auto round_mode = pooling_primitive->GetRoundMode();
  292. switch (round_mode) {
  293. case schema::RoundMode_FLOOR:
  294. pooling_param->round_mode_ = RoundMode_Floor;
  295. break;
  296. case schema::RoundMode_CEIL:
  297. pooling_param->round_mode_ = RoundMode_Ceil;
  298. break;
  299. default:
  300. pooling_param->round_mode_ = RoundMode_No;
  301. break;
  302. }
  303. if (pooling_primitive->GetActivationType() == schema::ActivationType_RELU) {
  304. pooling_param->act_type_ = ActType_Relu;
  305. } else if (pooling_primitive->GetActivationType() == schema::ActivationType_RELU6) {
  306. pooling_param->act_type_ = ActType_Relu6;
  307. } else {
  308. pooling_param->act_type_ = ActType_No;
  309. }
  310. return reinterpret_cast<OpParameter *>(pooling_param);
  311. }
  312. OpParameter *PopulateFullconnectionParameter(const mindspore::lite::PrimitiveC *primitive) {
  313. auto param =
  314. reinterpret_cast<mindspore::lite::FullConnection *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  315. MatMulParameter *matmul_param = reinterpret_cast<MatMulParameter *>(malloc(sizeof(MatMulParameter)));
  316. if (matmul_param == nullptr) {
  317. MS_LOG(ERROR) << "malloc MatMulParameter failed.";
  318. return nullptr;
  319. }
  320. memset(matmul_param, 0, sizeof(MatMulParameter));
  321. matmul_param->op_parameter_.type_ = primitive->Type();
  322. matmul_param->b_transpose_ = true;
  323. matmul_param->a_transpose_ = false;
  324. matmul_param->has_bias_ = param->GetHasBias();
  325. if (param->GetActivationType() == schema::ActivationType_RELU) {
  326. matmul_param->act_type_ = ActType_Relu;
  327. } else if (param->GetActivationType() == schema::ActivationType_RELU6) {
  328. matmul_param->act_type_ = ActType_Relu6;
  329. } else {
  330. matmul_param->act_type_ = ActType_No;
  331. }
  332. return reinterpret_cast<OpParameter *>(matmul_param);
  333. }
  334. OpParameter *PopulateMatMulParameter(const mindspore::lite::PrimitiveC *primitive) {
  335. auto param = reinterpret_cast<mindspore::lite::MatMul *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  336. MatMulParameter *matmul_param = reinterpret_cast<MatMulParameter *>(malloc(sizeof(MatMulParameter)));
  337. if (matmul_param == nullptr) {
  338. MS_LOG(ERROR) << "malloc MatMulParameter failed.";
  339. return nullptr;
  340. }
  341. memset(matmul_param, 0, sizeof(MatMulParameter));
  342. matmul_param->op_parameter_.type_ = primitive->Type();
  343. matmul_param->b_transpose_ = param->GetTransposeB();
  344. matmul_param->a_transpose_ = param->GetTransposeA();
  345. matmul_param->has_bias_ = false;
  346. matmul_param->act_type_ = ActType_No;
  347. return reinterpret_cast<OpParameter *>(matmul_param);
  348. }
  349. OpParameter *PopulateConvParameter(const mindspore::lite::PrimitiveC *primitive) {
  350. ConvParameter *conv_param = reinterpret_cast<ConvParameter *>(malloc(sizeof(ConvParameter)));
  351. if (conv_param == nullptr) {
  352. MS_LOG(ERROR) << "malloc ConvParameter failed.";
  353. return nullptr;
  354. }
  355. memset(conv_param, 0, sizeof(ConvParameter));
  356. conv_param->op_parameter_.type_ = primitive->Type();
  357. auto conv_primitive =
  358. reinterpret_cast<mindspore::lite::Conv2D *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  359. conv_param->kernel_h_ = conv_primitive->GetKernelH();
  360. conv_param->kernel_w_ = conv_primitive->GetKernelW();
  361. conv_param->group_ = conv_primitive->GetGroup();
  362. conv_param->stride_h_ = conv_primitive->GetStrideH();
  363. conv_param->stride_w_ = conv_primitive->GetStrideW();
  364. auto conv2d_lite_primitive = (lite::Conv2D *)primitive;
  365. conv_param->pad_u_ = conv2d_lite_primitive->PadUp();
  366. conv_param->pad_d_ = conv2d_lite_primitive->PadDown();
  367. conv_param->pad_l_ = conv2d_lite_primitive->PadLeft();
  368. conv_param->pad_r_ = conv2d_lite_primitive->PadRight();
  369. conv_param->dilation_h_ = conv_primitive->GetDilateH();
  370. conv_param->dilation_w_ = conv_primitive->GetDilateW();
  371. conv_param->input_channel_ = conv_primitive->GetChannelIn();
  372. conv_param->output_channel_ = conv_primitive->GetChannelOut();
  373. conv_param->group_ = conv_primitive->GetGroup();
  374. auto act_type = conv_primitive->GetActivationType();
  375. switch (act_type) {
  376. case schema::ActivationType_RELU:
  377. conv_param->act_type_ = ActType_Relu;
  378. break;
  379. case schema::ActivationType_RELU6:
  380. conv_param->act_type_ = ActType_Relu6;
  381. break;
  382. default:
  383. conv_param->act_type_ = ActType_No;
  384. break;
  385. }
  386. return reinterpret_cast<OpParameter *>(conv_param);
  387. }
  388. OpParameter *PopulateConvDwParameter(const mindspore::lite::PrimitiveC *primitive) {
  389. ConvParameter *conv_param = reinterpret_cast<ConvParameter *>(malloc(sizeof(ConvParameter)));
  390. if (conv_param == nullptr) {
  391. MS_LOG(ERROR) << "malloc ConvParameter failed.";
  392. return nullptr;
  393. }
  394. memset(conv_param, 0, sizeof(ConvParameter));
  395. conv_param->op_parameter_.type_ = primitive->Type();
  396. auto conv_primitive =
  397. reinterpret_cast<mindspore::lite::DepthwiseConv2D *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  398. conv_param->kernel_h_ = conv_primitive->GetKernelH();
  399. conv_param->kernel_w_ = conv_primitive->GetKernelW();
  400. conv_param->stride_h_ = conv_primitive->GetStrideH();
  401. conv_param->stride_w_ = conv_primitive->GetStrideW();
  402. auto convdw_lite_primitive = (lite::DepthwiseConv2D *)primitive;
  403. conv_param->pad_u_ = convdw_lite_primitive->PadUp();
  404. conv_param->pad_d_ = convdw_lite_primitive->PadDown();
  405. conv_param->pad_l_ = convdw_lite_primitive->PadLeft();
  406. conv_param->pad_r_ = convdw_lite_primitive->PadRight();
  407. conv_param->input_channel_ = convdw_lite_primitive->GetInputChannel();
  408. conv_param->dilation_h_ = conv_primitive->GetDilateH();
  409. conv_param->dilation_w_ = conv_primitive->GetDilateW();
  410. auto act_type = conv_primitive->GetActivationType();
  411. switch (act_type) {
  412. case schema::ActivationType_RELU:
  413. conv_param->act_type_ = ActType_Relu;
  414. break;
  415. case schema::ActivationType_RELU6:
  416. conv_param->act_type_ = ActType_Relu6;
  417. break;
  418. default:
  419. conv_param->act_type_ = ActType_No;
  420. break;
  421. }
  422. return reinterpret_cast<OpParameter *>(conv_param);
  423. }
  424. OpParameter *PopulateDeconvDwParameter(const mindspore::lite::PrimitiveC *primitive) {
  425. ConvParameter *conv_param = reinterpret_cast<ConvParameter *>(malloc(sizeof(ConvParameter)));
  426. if (conv_param == nullptr) {
  427. MS_LOG(ERROR) << "malloc ConvParameter failed.";
  428. return nullptr;
  429. }
  430. memset(conv_param, 0, sizeof(ConvParameter));
  431. conv_param->op_parameter_.type_ = primitive->Type();
  432. auto conv_primitive =
  433. reinterpret_cast<mindspore::lite::DeDepthwiseConv2D *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  434. conv_param->kernel_h_ = conv_primitive->GetKernelH();
  435. conv_param->kernel_w_ = conv_primitive->GetKernelW();
  436. conv_param->stride_h_ = conv_primitive->GetStrideH();
  437. conv_param->stride_w_ = conv_primitive->GetStrideW();
  438. auto deconvdw_lite_primitive = (mindspore::lite::DeDepthwiseConv2D *)primitive;
  439. conv_param->pad_u_ = deconvdw_lite_primitive->PadUp();
  440. conv_param->pad_d_ = deconvdw_lite_primitive->PadDown();
  441. conv_param->pad_l_ = deconvdw_lite_primitive->PadLeft();
  442. conv_param->pad_r_ = deconvdw_lite_primitive->PadRight();
  443. conv_param->dilation_h_ = conv_primitive->GetDilateH();
  444. conv_param->dilation_w_ = conv_primitive->GetDilateW();
  445. auto act_type = conv_primitive->GetActivationType();
  446. switch (act_type) {
  447. case schema::ActivationType_RELU:
  448. conv_param->act_type_ = ActType_Relu;
  449. break;
  450. case schema::ActivationType_RELU6:
  451. conv_param->act_type_ = ActType_Relu6;
  452. break;
  453. default:
  454. conv_param->act_type_ = ActType_No;
  455. break;
  456. }
  457. return reinterpret_cast<OpParameter *>(conv_param);
  458. }
  459. OpParameter *PopulateDeconvParameter(const mindspore::lite::PrimitiveC *primitive) {
  460. ConvParameter *conv_param = reinterpret_cast<ConvParameter *>(malloc(sizeof(ConvParameter)));
  461. if (conv_param == nullptr) {
  462. MS_LOG(ERROR) << "malloc ConvParameter failed.";
  463. return nullptr;
  464. }
  465. memset(conv_param, 0, sizeof(ConvParameter));
  466. conv_param->op_parameter_.type_ = primitive->Type();
  467. auto conv_primitive =
  468. reinterpret_cast<mindspore::lite::DeConv2D *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  469. conv_param->kernel_h_ = conv_primitive->GetKernelH();
  470. conv_param->kernel_w_ = conv_primitive->GetKernelW();
  471. conv_param->stride_h_ = conv_primitive->GetStrideH();
  472. conv_param->stride_w_ = conv_primitive->GetStrideW();
  473. auto deconv_lite_primitive = (lite::DeConv2D *)primitive;
  474. conv_param->pad_u_ = deconv_lite_primitive->PadUp();
  475. conv_param->pad_d_ = deconv_lite_primitive->PadDown();
  476. conv_param->pad_l_ = deconv_lite_primitive->PadLeft();
  477. conv_param->pad_r_ = deconv_lite_primitive->PadRight();
  478. conv_param->dilation_h_ = conv_primitive->GetDilateH();
  479. conv_param->dilation_w_ = conv_primitive->GetDilateW();
  480. auto act_type = conv_primitive->GetActivationType();
  481. switch (act_type) {
  482. case schema::ActivationType_RELU:
  483. conv_param->act_type_ = ActType_Relu;
  484. break;
  485. case schema::ActivationType_RELU6:
  486. conv_param->act_type_ = ActType_Relu6;
  487. break;
  488. default:
  489. conv_param->act_type_ = ActType_No;
  490. break;
  491. }
  492. return reinterpret_cast<OpParameter *>(conv_param);
  493. }
  494. OpParameter *PopulateSoftmaxParameter(const mindspore::lite::PrimitiveC *primitive) {
  495. auto softmax_primitive =
  496. reinterpret_cast<mindspore::lite::SoftMax *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  497. SoftmaxParameter *softmax_param = reinterpret_cast<SoftmaxParameter *>(malloc(sizeof(SoftmaxParameter)));
  498. if (softmax_param == nullptr) {
  499. MS_LOG(ERROR) << "malloc SoftmaxParameter failed.";
  500. return nullptr;
  501. }
  502. memset(softmax_param, 0, sizeof(SoftmaxParameter));
  503. softmax_param->op_parameter_.type_ = primitive->Type();
  504. softmax_param->axis_ = softmax_primitive->GetAxis();
  505. return reinterpret_cast<OpParameter *>(softmax_param);
  506. }
  507. OpParameter *PopulateReduceParameter(const mindspore::lite::PrimitiveC *primitive) {
  508. ReduceParameter *reduce_param = reinterpret_cast<ReduceParameter *>(malloc(sizeof(ReduceParameter)));
  509. if (reduce_param == nullptr) {
  510. MS_LOG(ERROR) << "malloc ReduceParameter failed.";
  511. return nullptr;
  512. }
  513. memset(reduce_param, 0, sizeof(ReduceParameter));
  514. reduce_param->op_parameter_.type_ = primitive->Type();
  515. auto reduce = reinterpret_cast<mindspore::lite::Reduce *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  516. reduce_param->keep_dims_ = reduce->GetKeepDims();
  517. reduce_param->reduce_to_end_ = reduce->GetReduceToEnd();
  518. reduce_param->coeff = reduce->GetCoeff();
  519. auto axisVector = reduce->GetAxes();
  520. if (axisVector.size() > REDUCE_MAX_AXES_NUM) {
  521. MS_LOG(ERROR) << "Reduce axes size " << axisVector.size() << " exceed limit " << REDUCE_MAX_AXES_NUM;
  522. free(reduce_param);
  523. return nullptr;
  524. }
  525. reduce_param->num_axes_ = static_cast<int>(axisVector.size());
  526. int i = 0;
  527. for (auto iter = axisVector.begin(); iter != axisVector.end(); iter++) {
  528. reduce_param->axes_[i++] = *iter;
  529. }
  530. reduce_param->mode_ = static_cast<int>(reduce->GetMode());
  531. return reinterpret_cast<OpParameter *>(reduce_param);
  532. }
  533. OpParameter *PopulateMeanParameter(const mindspore::lite::PrimitiveC *primitive) {
  534. ReduceParameter *mean_param = reinterpret_cast<ReduceParameter *>(malloc(sizeof(ReduceParameter)));
  535. if (mean_param == nullptr) {
  536. MS_LOG(ERROR) << "malloc ReduceParameter failed.";
  537. return nullptr;
  538. }
  539. memset(mean_param, 0, sizeof(ReduceParameter));
  540. mean_param->op_parameter_.type_ = primitive->Type();
  541. auto mean = reinterpret_cast<mindspore::lite::Mean *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  542. mean_param->keep_dims_ = mean->GetKeepDims();
  543. auto axisVector = mean->GetAxis();
  544. if (axisVector.size() > REDUCE_MAX_AXES_NUM) {
  545. MS_LOG(ERROR) << "Reduce axes size " << axisVector.size() << " exceed limit " << REDUCE_MAX_AXES_NUM;
  546. free(mean_param);
  547. return nullptr;
  548. }
  549. mean_param->num_axes_ = static_cast<int>(axisVector.size());
  550. int i = 0;
  551. for (auto iter = axisVector.begin(); iter != axisVector.end(); iter++) {
  552. mean_param->axes_[i++] = *iter;
  553. }
  554. mean_param->mode_ = static_cast<int>(schema::ReduceMode_ReduceMean);
  555. return reinterpret_cast<OpParameter *>(mean_param);
  556. }
  557. OpParameter *PopulatePadParameter(const mindspore::lite::PrimitiveC *primitive) {
  558. PadParameter *pad_param = reinterpret_cast<PadParameter *>(malloc(sizeof(PadParameter)));
  559. if (pad_param == nullptr) {
  560. MS_LOG(ERROR) << "malloc PadParameter failed.";
  561. return nullptr;
  562. }
  563. memset(pad_param, 0, sizeof(PadParameter));
  564. pad_param->op_parameter_.type_ = primitive->Type();
  565. auto pad_node = reinterpret_cast<mindspore::lite::Pad *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  566. pad_param->pad_mode_ = pad_node->GetPaddingMode();
  567. if (pad_param->pad_mode_ == static_cast<int>(schema::PaddingMode_CONSTANT)) {
  568. pad_param->constant_value_ = pad_node->GetConstantValue();
  569. auto size = pad_node->GetPaddings().size();
  570. if (size > MAX_PAD_SIZE) {
  571. MS_LOG(ERROR) << "Invalid padding size: " << size;
  572. free(pad_param);
  573. return nullptr;
  574. }
  575. for (size_t i = 0; i < MAX_PAD_SIZE - size; ++i) {
  576. pad_param->paddings_[i] = 0;
  577. }
  578. for (size_t i = 0; i < size; i++) {
  579. pad_param->paddings_[MAX_PAD_SIZE - size + i] = pad_node->GetPaddings()[i];
  580. }
  581. pad_param->padding_length = MAX_PAD_SIZE;
  582. }
  583. return reinterpret_cast<OpParameter *>(pad_param);
  584. }
  585. OpParameter *PopulateActivationParameter(const mindspore::lite::PrimitiveC *primitive) {
  586. ActivationParameter *act_param = reinterpret_cast<ActivationParameter *>(malloc(sizeof(ActivationParameter)));
  587. if (act_param == nullptr) {
  588. MS_LOG(ERROR) << "malloc ActivationParameter failed.";
  589. return nullptr;
  590. }
  591. memset(act_param, 0, sizeof(ActivationParameter));
  592. act_param->op_parameter_.type_ = primitive->Type();
  593. auto activation =
  594. reinterpret_cast<mindspore::lite::Activation *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  595. act_param->type_ = static_cast<int>(activation->GetType());
  596. act_param->alpha_ = activation->GetAlpha();
  597. act_param->min_val_ = activation->GetMinVal();
  598. act_param->max_val_ = activation->GetMaxVal();
  599. return reinterpret_cast<OpParameter *>(act_param);
  600. }
  601. OpParameter *PopulateClipParameter(const mindspore::lite::PrimitiveC *primitive) {
  602. ClipParameter *act_param = reinterpret_cast<ClipParameter *>(malloc(sizeof(ClipParameter)));
  603. if (act_param == nullptr) {
  604. MS_LOG(ERROR) << "malloc ClipParameter failed.";
  605. return nullptr;
  606. }
  607. memset(act_param, 0, sizeof(ClipParameter));
  608. act_param->op_parameter_.type_ = primitive->Type();
  609. auto activation = reinterpret_cast<mindspore::lite::Clip *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  610. act_param->min_val_ = activation->GetMin();
  611. act_param->max_val_ = activation->GetMax();
  612. return reinterpret_cast<OpParameter *>(act_param);
  613. }
  614. OpParameter *PopulateFusedBatchNorm(const mindspore::lite::PrimitiveC *primitive) {
  615. BatchNormParameter *batch_norm_param = reinterpret_cast<BatchNormParameter *>(malloc(sizeof(BatchNormParameter)));
  616. if (batch_norm_param == nullptr) {
  617. MS_LOG(ERROR) << "malloc BatchNormParameter failed.";
  618. return nullptr;
  619. }
  620. memset(batch_norm_param, 0, sizeof(BatchNormParameter));
  621. batch_norm_param->op_parameter_.type_ = primitive->Type();
  622. auto param =
  623. reinterpret_cast<mindspore::lite::FusedBatchNorm *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  624. batch_norm_param->epsilon_ = param->GetEpsilon();
  625. batch_norm_param->momentum_ = param->GetMomentum();
  626. batch_norm_param->fused_ = true;
  627. return reinterpret_cast<OpParameter *>(batch_norm_param);
  628. }
  629. OpParameter *PopulateArithmetic(const mindspore::lite::PrimitiveC *primitive) {
  630. ArithmeticParameter *arithmetic_param = reinterpret_cast<ArithmeticParameter *>(malloc(sizeof(ArithmeticParameter)));
  631. if (arithmetic_param == nullptr) {
  632. MS_LOG(ERROR) << "malloc ArithmeticParameter failed.";
  633. return nullptr;
  634. }
  635. memset(arithmetic_param, 0, sizeof(ArithmeticParameter));
  636. arithmetic_param->op_parameter_.type_ = primitive->Type();
  637. arithmetic_param->broadcasting_ = ((lite::Arithmetic *)primitive)->Broadcasting();
  638. arithmetic_param->ndim_ = ((lite::Arithmetic *)primitive)->NDims();
  639. switch (primitive->Type()) {
  640. case schema::PrimitiveType_Add:
  641. arithmetic_param->activation_type_ =
  642. reinterpret_cast<mindspore::lite::Add *>(const_cast<mindspore::lite::PrimitiveC *>(primitive))
  643. ->GetActivationType();
  644. break;
  645. case schema::PrimitiveType_Sub:
  646. arithmetic_param->activation_type_ =
  647. reinterpret_cast<mindspore::lite::Sub *>(const_cast<mindspore::lite::PrimitiveC *>(primitive))
  648. ->GetActivationType();
  649. break;
  650. case schema::PrimitiveType_Mul:
  651. arithmetic_param->activation_type_ =
  652. reinterpret_cast<mindspore::lite::Mul *>(const_cast<mindspore::lite::PrimitiveC *>(primitive))
  653. ->GetActivationType();
  654. break;
  655. case schema::PrimitiveType_Div:
  656. arithmetic_param->activation_type_ =
  657. reinterpret_cast<mindspore::lite::Div *>(const_cast<mindspore::lite::PrimitiveC *>(primitive))
  658. ->GetActivationType();
  659. break;
  660. default:
  661. arithmetic_param->activation_type_ = 0;
  662. break;
  663. }
  664. auto tmp_shape = ((lite::Arithmetic *)primitive)->InShape0();
  665. memcpy(arithmetic_param->in_shape0_, static_cast<void *>(tmp_shape.data()), tmp_shape.size() * sizeof(int));
  666. tmp_shape = ((lite::Arithmetic *)primitive)->InShape1();
  667. memcpy(arithmetic_param->in_shape1_, static_cast<void *>(tmp_shape.data()), tmp_shape.size() * sizeof(int));
  668. tmp_shape = ((lite::Arithmetic *)primitive)->OutputShape();
  669. memcpy(arithmetic_param->out_shape_, static_cast<void *>(tmp_shape.data()), tmp_shape.size() * sizeof(int));
  670. return reinterpret_cast<OpParameter *>(arithmetic_param);
  671. }
  672. OpParameter *PopulateEltwiseParameter(const mindspore::lite::PrimitiveC *primitive) {
  673. ArithmeticParameter *arithmetic_param = reinterpret_cast<ArithmeticParameter *>(malloc(sizeof(ArithmeticParameter)));
  674. if (arithmetic_param == nullptr) {
  675. MS_LOG(ERROR) << "malloc ArithmeticParameter failed.";
  676. return nullptr;
  677. }
  678. memset(arithmetic_param, 0, sizeof(ArithmeticParameter));
  679. auto eltwise = reinterpret_cast<mindspore::lite::Eltwise *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  680. switch (eltwise->GetMode()) {
  681. case schema::EltwiseMode_PROD:
  682. arithmetic_param->op_parameter_.type_ = schema::PrimitiveType_Mul;
  683. break;
  684. case schema::EltwiseMode_SUM:
  685. arithmetic_param->op_parameter_.type_ = schema::PrimitiveType_Add;
  686. break;
  687. case schema::EltwiseMode_MAXIMUM:
  688. arithmetic_param->op_parameter_.type_ = schema::PrimitiveType_Maximum;
  689. break;
  690. default:
  691. free(arithmetic_param);
  692. return nullptr;
  693. }
  694. return reinterpret_cast<OpParameter *>(arithmetic_param);
  695. }
  696. OpParameter *PopulateArithmeticSelf(const mindspore::lite::PrimitiveC *primitive) {
  697. ArithmeticSelfParameter *arithmetic_self_param =
  698. reinterpret_cast<ArithmeticSelfParameter *>(malloc(sizeof(ArithmeticSelfParameter)));
  699. if (arithmetic_self_param == nullptr) {
  700. MS_LOG(ERROR) << "malloc ArithmeticSelfParameter failed.";
  701. return nullptr;
  702. }
  703. memset(arithmetic_self_param, 0, sizeof(ArithmeticSelfParameter));
  704. arithmetic_self_param->op_parameter_.type_ = primitive->Type();
  705. return reinterpret_cast<OpParameter *>(arithmetic_self_param);
  706. }
  707. OpParameter *PopulatePowerParameter(const mindspore::lite::PrimitiveC *primitive) {
  708. PowerParameter *power_param = reinterpret_cast<PowerParameter *>(malloc(sizeof(PowerParameter)));
  709. if (power_param == nullptr) {
  710. MS_LOG(ERROR) << "malloc PowerParameter failed.";
  711. return nullptr;
  712. }
  713. memset(power_param, 0, sizeof(PowerParameter));
  714. power_param->op_parameter_.type_ = primitive->Type();
  715. auto power = reinterpret_cast<mindspore::lite::Power *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  716. power_param->power_ = power->GetPower();
  717. power_param->scale_ = power->GetScale();
  718. power_param->shift_ = power->GetShift();
  719. return reinterpret_cast<OpParameter *>(power_param);
  720. }
  721. OpParameter *PopulateArgMaxParameter(const mindspore::lite::PrimitiveC *primitive) {
  722. ArgMinMaxParameter *arg_param = reinterpret_cast<ArgMinMaxParameter *>(malloc(sizeof(ArgMinMaxParameter)));
  723. if (arg_param == nullptr) {
  724. MS_LOG(ERROR) << "malloc ArgMinMaxParameter failed.";
  725. return nullptr;
  726. }
  727. memset(arg_param, 0, sizeof(ArgMinMaxParameter));
  728. arg_param->op_parameter_.type_ = primitive->Type();
  729. auto param = reinterpret_cast<mindspore::lite::ArgMax *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  730. arg_param->axis_ = param->GetAxis();
  731. arg_param->topk_ = param->GetTopK();
  732. arg_param->axis_type_ = param->GetAxisType();
  733. arg_param->out_value_ = param->GetOutMaxValue();
  734. arg_param->keep_dims_ = param->GetKeepDims();
  735. return reinterpret_cast<OpParameter *>(arg_param);
  736. }
  737. OpParameter *PopulateArgMinParameter(const mindspore::lite::PrimitiveC *primitive) {
  738. ArgMinMaxParameter *arg_param = reinterpret_cast<ArgMinMaxParameter *>(malloc(sizeof(ArgMinMaxParameter)));
  739. if (arg_param == nullptr) {
  740. MS_LOG(ERROR) << "malloc ArgMinMaxParameter failed.";
  741. return nullptr;
  742. }
  743. memset(arg_param, 0, sizeof(ArgMinMaxParameter));
  744. arg_param->op_parameter_.type_ = primitive->Type();
  745. auto param = reinterpret_cast<mindspore::lite::ArgMin *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  746. arg_param->axis_ = param->GetAxis();
  747. arg_param->topk_ = param->GetTopK();
  748. arg_param->axis_type_ = param->GetAxisType();
  749. arg_param->out_value_ = param->GetOutMaxValue();
  750. arg_param->keep_dims_ = param->GetKeepDims();
  751. return reinterpret_cast<OpParameter *>(arg_param);
  752. }
  753. OpParameter *PopulateCastParameter(const mindspore::lite::PrimitiveC *primitive) {
  754. CastParameter *cast_param = reinterpret_cast<CastParameter *>(malloc(sizeof(CastParameter)));
  755. if (cast_param == nullptr) {
  756. MS_LOG(ERROR) << "malloc CastParameter failed.";
  757. return nullptr;
  758. }
  759. memset(cast_param, 0, sizeof(CastParameter));
  760. cast_param->op_parameter_.type_ = primitive->Type();
  761. auto param = reinterpret_cast<mindspore::lite::Cast *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  762. cast_param->src_type_ = param->GetSrcT();
  763. cast_param->dst_type_ = param->GetDstT();
  764. return reinterpret_cast<OpParameter *>(cast_param);
  765. }
  766. OpParameter *PopulateLocalResponseNormParameter(const mindspore::lite::PrimitiveC *primitive) {
  767. auto local_response_norm_attr = reinterpret_cast<mindspore::lite::LocalResponseNormalization *>(
  768. const_cast<mindspore::lite::PrimitiveC *>(primitive));
  769. LocalResponseNormParameter *lrn_param =
  770. reinterpret_cast<LocalResponseNormParameter *>(malloc(sizeof(LocalResponseNormParameter)));
  771. if (lrn_param == nullptr) {
  772. MS_LOG(ERROR) << "malloc LocalResponseNormParameter failed.";
  773. return nullptr;
  774. }
  775. memset(lrn_param, 0, sizeof(LocalResponseNormParameter));
  776. lrn_param->op_parameter_.type_ = primitive->Type();
  777. lrn_param->depth_radius_ = local_response_norm_attr->GetDepthRadius();
  778. lrn_param->bias_ = local_response_norm_attr->GetBias();
  779. lrn_param->alpha_ = local_response_norm_attr->GetAlpha();
  780. lrn_param->beta_ = local_response_norm_attr->GetBeta();
  781. return reinterpret_cast<OpParameter *>(lrn_param);
  782. }
  783. OpParameter *PopulateRangeParameter(const mindspore::lite::PrimitiveC *primitive) {
  784. auto range_attr = reinterpret_cast<mindspore::lite::Range *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  785. RangeParameter *range_param = reinterpret_cast<RangeParameter *>(malloc(sizeof(RangeParameter)));
  786. if (range_param == nullptr) {
  787. MS_LOG(ERROR) << "malloc RangeParameter failed.";
  788. return nullptr;
  789. }
  790. memset(range_param, 0, sizeof(RangeParameter));
  791. range_param->op_parameter_.type_ = primitive->Type();
  792. range_param->start_ = range_attr->GetStart();
  793. range_param->limit_ = range_attr->GetLimit();
  794. range_param->delta_ = range_attr->GetDelta();
  795. range_param->dType_ = range_attr->GetDType();
  796. return reinterpret_cast<OpParameter *>(range_param);
  797. }
  798. OpParameter *PopulateConcatParameter(const mindspore::lite::PrimitiveC *primitive) {
  799. ConcatParameter *concat_param = reinterpret_cast<ConcatParameter *>(malloc(sizeof(ConcatParameter)));
  800. if (concat_param == nullptr) {
  801. MS_LOG(ERROR) << "malloc ConcatParameter failed.";
  802. return nullptr;
  803. }
  804. memset(concat_param, 0, sizeof(ConcatParameter));
  805. concat_param->op_parameter_.type_ = primitive->Type();
  806. auto param = reinterpret_cast<mindspore::lite::Concat *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  807. concat_param->axis_ = param->GetAxis();
  808. return reinterpret_cast<OpParameter *>(concat_param);
  809. }
  810. OpParameter *PopulateTileParameter(const mindspore::lite::PrimitiveC *primitive) {
  811. TileParameter *tile_param = reinterpret_cast<TileParameter *>(malloc(sizeof(TileParameter)));
  812. if (tile_param == nullptr) {
  813. MS_LOG(ERROR) << "malloc TileParameter failed.";
  814. return nullptr;
  815. }
  816. memset(tile_param, 0, sizeof(TileParameter));
  817. tile_param->op_parameter_.type_ = primitive->Type();
  818. auto param = reinterpret_cast<mindspore::lite::Tile *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  819. auto multiples = param->GetMultiples();
  820. tile_param->in_dim_ = multiples.size();
  821. for (int i = 0; i < tile_param->in_dim_; ++i) {
  822. tile_param->multiples_[i] = multiples[i];
  823. }
  824. return reinterpret_cast<OpParameter *>(tile_param);
  825. }
  826. OpParameter *PopulateTopKParameter(const mindspore::lite::PrimitiveC *primitive) {
  827. TopkParameter *topk_param = reinterpret_cast<TopkParameter *>(malloc(sizeof(TopkParameter)));
  828. if (topk_param == nullptr) {
  829. MS_LOG(ERROR) << "malloc TopkParameter failed.";
  830. return nullptr;
  831. }
  832. memset(topk_param, 0, sizeof(TopkParameter));
  833. topk_param->op_parameter_.type_ = primitive->Type();
  834. auto param = reinterpret_cast<mindspore::lite::TopK *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  835. topk_param->k_ = param->GetK();
  836. topk_param->sorted_ = param->GetSorted();
  837. return reinterpret_cast<OpParameter *>(topk_param);
  838. }
  839. OpParameter *PopulateNhwc2NchwParameter(const mindspore::lite::PrimitiveC *primitive) {
  840. TransposeParameter *parameter = reinterpret_cast<TransposeParameter *>(malloc(sizeof(TransposeParameter)));
  841. if (parameter == nullptr) {
  842. MS_LOG(ERROR) << "malloc OpParameter failed.";
  843. return nullptr;
  844. }
  845. memset(parameter, 0, sizeof(OpParameter));
  846. parameter->op_parameter_.type_ = primitive->Type();
  847. parameter->num_axes_ = 4;
  848. parameter->perm_[0] = 0;
  849. parameter->perm_[1] = 3;
  850. parameter->perm_[2] = 1;
  851. parameter->perm_[3] = 2;
  852. return reinterpret_cast<OpParameter *>(parameter);
  853. }
  854. OpParameter *PopulateNchw2NhwcParameter(const mindspore::lite::PrimitiveC *primitive) {
  855. TransposeParameter *parameter = reinterpret_cast<TransposeParameter *>(malloc(sizeof(TransposeParameter)));
  856. if (parameter == nullptr) {
  857. MS_LOG(ERROR) << "malloc OpParameter failed.";
  858. return nullptr;
  859. }
  860. memset(parameter, 0, sizeof(OpParameter));
  861. parameter->op_parameter_.type_ = primitive->Type();
  862. parameter->num_axes_ = 4;
  863. parameter->perm_[0] = 0;
  864. parameter->perm_[1] = 2;
  865. parameter->perm_[2] = 3;
  866. parameter->perm_[3] = 1;
  867. return reinterpret_cast<OpParameter *>(parameter);
  868. }
  869. OpParameter *PopulateTransposeParameter(const mindspore::lite::PrimitiveC *primitive) {
  870. TransposeParameter *transpose_param = reinterpret_cast<TransposeParameter *>(malloc(sizeof(TransposeParameter)));
  871. if (transpose_param == nullptr) {
  872. MS_LOG(ERROR) << "malloc TransposeParameter failed.";
  873. return nullptr;
  874. }
  875. memset(transpose_param, 0, sizeof(TransposeParameter));
  876. auto param = reinterpret_cast<mindspore::lite::Transpose *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  877. transpose_param->op_parameter_.type_ = primitive->Type();
  878. auto perm_vector_ = param->GetPerm();
  879. int i = 0;
  880. for (auto iter = perm_vector_.begin(); iter != perm_vector_.end(); iter++) {
  881. transpose_param->perm_[i++] = *iter;
  882. }
  883. transpose_param->num_axes_ = i;
  884. transpose_param->conjugate_ = param->GetConjugate();
  885. return reinterpret_cast<OpParameter *>(transpose_param);
  886. }
  887. OpParameter *PopulateSplitParameter(const mindspore::lite::PrimitiveC *primitive) {
  888. SplitParameter *split_param = reinterpret_cast<SplitParameter *>(malloc(sizeof(SplitParameter)));
  889. if (split_param == nullptr) {
  890. MS_LOG(ERROR) << "malloc SplitParameter failed.";
  891. return nullptr;
  892. }
  893. memset(split_param, 0, sizeof(SplitParameter));
  894. auto param = reinterpret_cast<mindspore::lite::Split *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  895. split_param->op_parameter_.type_ = primitive->Type();
  896. split_param->num_split_ = param->GetNumberSplit();
  897. auto split_sizes_vector_ = param->GetSizeSplits();
  898. int i = 0;
  899. for (auto iter = split_sizes_vector_.begin(); iter != split_sizes_vector_.end(); iter++) {
  900. split_param->split_sizes_[i++] = *iter;
  901. }
  902. split_param->split_dim_ = param->GetSplitDim();
  903. split_param->num_split_ = param->GetNumberSplit();
  904. return reinterpret_cast<OpParameter *>(split_param);
  905. }
  906. OpParameter *PopulateSqueezeParameter(const mindspore::lite::PrimitiveC *primitive) {
  907. SqueezeParameter *squeeze_param = reinterpret_cast<SqueezeParameter *>(malloc(sizeof(SqueezeParameter)));
  908. if (squeeze_param == nullptr) {
  909. MS_LOG(ERROR) << "malloc SqueezeParameter failed.";
  910. return nullptr;
  911. }
  912. memset(squeeze_param, 0, sizeof(SqueezeParameter));
  913. squeeze_param->op_parameter_.type_ = primitive->Type();
  914. return reinterpret_cast<OpParameter *>(squeeze_param);
  915. }
  916. OpParameter *PopulateScaleParameter(const mindspore::lite::PrimitiveC *primitive) {
  917. if (primitive == nullptr) {
  918. MS_LOG(ERROR) << "input primitive is nullptr";
  919. return nullptr;
  920. }
  921. ScaleParameter *scale_param = reinterpret_cast<ScaleParameter *>(malloc(sizeof(ScaleParameter)));
  922. if (scale_param == nullptr) {
  923. MS_LOG(ERROR) << "malloc ScaleParameter failed.";
  924. return nullptr;
  925. }
  926. memset(scale_param, 0, sizeof(ScaleParameter));
  927. scale_param->op_parameter_.type_ = primitive->Type();
  928. auto param = reinterpret_cast<mindspore::lite::Scale *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  929. scale_param->axis_ = param->GetAxis();
  930. scale_param->activation_type_ = param->GetActivationType();
  931. return reinterpret_cast<OpParameter *>(scale_param);
  932. }
  933. OpParameter *PopulateGatherParameter(const mindspore::lite::PrimitiveC *primitive) {
  934. auto gather_attr = reinterpret_cast<mindspore::lite::Gather *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  935. GatherParameter *gather_param = reinterpret_cast<GatherParameter *>(malloc(sizeof(GatherParameter)));
  936. if (gather_param == nullptr) {
  937. MS_LOG(ERROR) << "malloc GatherParameter failed.";
  938. return nullptr;
  939. }
  940. memset(gather_param, 0, sizeof(GatherParameter));
  941. gather_param->op_parameter_.type_ = primitive->Type();
  942. gather_param->axis_ = gather_attr->GetAxis();
  943. gather_param->batchDims_ = gather_attr->GetBatchDims();
  944. return reinterpret_cast<OpParameter *>(gather_param);
  945. }
  946. OpParameter *PopulateGatherNdParameter(const mindspore::lite::PrimitiveC *primitive) {
  947. GatherNdParameter *gather_nd_param = reinterpret_cast<GatherNdParameter *>(malloc(sizeof(GatherNdParameter)));
  948. if (gather_nd_param == nullptr) {
  949. MS_LOG(ERROR) << "malloc GatherNdParameter failed.";
  950. return nullptr;
  951. }
  952. memset(gather_nd_param, 0, sizeof(GatherNdParameter));
  953. gather_nd_param->op_parameter_.type_ = primitive->Type();
  954. auto gatherNd_attr =
  955. reinterpret_cast<mindspore::lite::GatherNd *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  956. gather_nd_param->batchDims_ = gatherNd_attr->GetBatchDims();
  957. return reinterpret_cast<OpParameter *>(gather_nd_param);
  958. }
  959. OpParameter *PopulateScatterNDParameter(const mindspore::lite::PrimitiveC *primitive) {
  960. ScatterNDParameter *scatter_nd_param = reinterpret_cast<ScatterNDParameter *>(malloc(sizeof(ScatterNDParameter)));
  961. if (scatter_nd_param == nullptr) {
  962. MS_LOG(ERROR) << "malloc ScatterNDParameter failed.";
  963. return nullptr;
  964. }
  965. memset(scatter_nd_param, 0, sizeof(ScatterNDParameter));
  966. scatter_nd_param->op_parameter_.type_ = primitive->Type();
  967. return reinterpret_cast<OpParameter *>(scatter_nd_param);
  968. }
  969. OpParameter *PopulateSliceParameter(const mindspore::lite::PrimitiveC *primitive) {
  970. SliceParameter *slice_param = reinterpret_cast<SliceParameter *>(malloc(sizeof(SliceParameter)));
  971. if (slice_param == nullptr) {
  972. MS_LOG(ERROR) << "malloc SliceParameter failed.";
  973. return nullptr;
  974. }
  975. memset(slice_param, 0, sizeof(SliceParameter));
  976. auto param = reinterpret_cast<mindspore::lite::Slice *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  977. slice_param->op_parameter_.type_ = primitive->Type();
  978. auto param_begin = param->GetPostProcessBegin();
  979. auto param_size = param->GetPostProcessSize();
  980. if (param_begin.size() != param_size.size()) {
  981. free(slice_param);
  982. return nullptr;
  983. }
  984. slice_param->param_length_ = static_cast<int32_t>(param_begin.size());
  985. for (int32_t i = 0; i < slice_param->param_length_; ++i) {
  986. slice_param->begin_[i] = param_begin[i];
  987. slice_param->size_[i] = param_size[i];
  988. }
  989. return reinterpret_cast<OpParameter *>(slice_param);
  990. }
  991. OpParameter *PopulateSparseToDenseParameter(const mindspore::lite::PrimitiveC *primitive) {
  992. SparseToDenseParameter *sparse_to_dense_param =
  993. reinterpret_cast<SparseToDenseParameter *>(malloc(sizeof(SparseToDenseParameter)));
  994. if (sparse_to_dense_param == nullptr) {
  995. MS_LOG(ERROR) << "malloc SparseToDenseParameter failed.";
  996. return nullptr;
  997. }
  998. memset(sparse_to_dense_param, 0, sizeof(SparseToDenseParameter));
  999. sparse_to_dense_param->op_parameter_.type_ = primitive->Type();
  1000. auto param = reinterpret_cast<mindspore::lite::SparseToDense *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1001. sparse_to_dense_param->validate_indices_ = param->GetValidateIndices();
  1002. return reinterpret_cast<OpParameter *>(sparse_to_dense_param);
  1003. }
  1004. OpParameter *PopulateBroadcastToParameter(const mindspore::lite::PrimitiveC *primitive) {
  1005. BroadcastToParameter *broadcast_param =
  1006. reinterpret_cast<BroadcastToParameter *>(malloc(sizeof(BroadcastToParameter)));
  1007. if (broadcast_param == nullptr) {
  1008. MS_LOG(ERROR) << "malloc BroadcastToParameter failed.";
  1009. return nullptr;
  1010. }
  1011. memset(broadcast_param, 0, sizeof(BroadcastToParameter));
  1012. auto param = reinterpret_cast<mindspore::lite::BroadcastTo *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1013. broadcast_param->op_parameter_.type_ = primitive->Type();
  1014. auto dst_shape = param->GetDstShape();
  1015. broadcast_param->shape_size_ = dst_shape.size();
  1016. for (size_t i = 0; i < broadcast_param->shape_size_; ++i) {
  1017. broadcast_param->shape_[i] = dst_shape[i];
  1018. }
  1019. return reinterpret_cast<OpParameter *>(broadcast_param);
  1020. }
  1021. OpParameter *PopulateReshapeParameter(const mindspore::lite::PrimitiveC *primitive) {
  1022. ReshapeParameter *reshape_param = reinterpret_cast<ReshapeParameter *>(malloc(sizeof(ReshapeParameter)));
  1023. if (reshape_param == nullptr) {
  1024. MS_LOG(ERROR) << "malloc ReshapeParameter failed.";
  1025. return nullptr;
  1026. }
  1027. memset(reshape_param, 0, sizeof(ReshapeParameter));
  1028. reshape_param->op_parameter_.type_ = primitive->Type();
  1029. return reinterpret_cast<OpParameter *>(reshape_param);
  1030. }
  1031. OpParameter *PopulateShapeParameter(const mindspore::lite::PrimitiveC *primitive) {
  1032. ShapeParameter *shape_param = reinterpret_cast<ShapeParameter *>(malloc(sizeof(ShapeParameter)));
  1033. if (shape_param == nullptr) {
  1034. MS_LOG(ERROR) << "malloc ShapeParameter failed.";
  1035. return nullptr;
  1036. }
  1037. memset(shape_param, 0, sizeof(ShapeParameter));
  1038. shape_param->op_parameter_.type_ = primitive->Type();
  1039. return reinterpret_cast<OpParameter *>(shape_param);
  1040. }
  1041. OpParameter *PopulateConstantOfShapeParameter(const mindspore::lite::PrimitiveC *primitive) {
  1042. auto attr =
  1043. reinterpret_cast<mindspore::lite::ConstantOfShape *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1044. ConstantOfShapeParameter *param =
  1045. reinterpret_cast<ConstantOfShapeParameter *>(malloc(sizeof(ConstantOfShapeParameter)));
  1046. if (param == nullptr) {
  1047. MS_LOG(ERROR) << "malloc ConstantOfShapeParameter failed.";
  1048. return nullptr;
  1049. }
  1050. memset(param, 0, sizeof(ConstantOfShapeParameter));
  1051. param->op_parameter_.type_ = primitive->Type();
  1052. param->value_ = attr->GetValue();
  1053. return reinterpret_cast<OpParameter *>(param);
  1054. }
  1055. OpParameter *PopulateReverseParameter(const mindspore::lite::PrimitiveC *primitive) {
  1056. auto reverse_attr =
  1057. reinterpret_cast<mindspore::lite::Reverse *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1058. ReverseParameter *reverse_param = reinterpret_cast<ReverseParameter *>(malloc(sizeof(ReverseParameter)));
  1059. if (reverse_param == nullptr) {
  1060. MS_LOG(ERROR) << "malloc ReverseParameter failed.";
  1061. return nullptr;
  1062. }
  1063. memset(reverse_param, 0, sizeof(ReverseParameter));
  1064. reverse_param->op_parameter_.type_ = primitive->Type();
  1065. auto flatAxis = reverse_attr->GetAxis();
  1066. reverse_param->num_axis_ = flatAxis.size();
  1067. int i = 0;
  1068. for (auto iter = flatAxis.begin(); iter != flatAxis.end(); iter++) {
  1069. reverse_param->axis_[i++] = *iter;
  1070. }
  1071. return reinterpret_cast<OpParameter *>(reverse_param);
  1072. }
  1073. OpParameter *PopulateUnsqueezeParameter(const mindspore::lite::PrimitiveC *primitive) {
  1074. auto unsqueeze_attr =
  1075. reinterpret_cast<mindspore::lite::Unsqueeze *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1076. UnsqueezeParameter *unsqueeze_param = reinterpret_cast<UnsqueezeParameter *>(malloc(sizeof(UnsqueezeParameter)));
  1077. if (unsqueeze_param == nullptr) {
  1078. MS_LOG(ERROR) << "malloc UnsqueezeParameter failed.";
  1079. return nullptr;
  1080. }
  1081. memset(unsqueeze_param, 0, sizeof(UnsqueezeParameter));
  1082. unsqueeze_param->op_parameter_.type_ = primitive->Type();
  1083. auto flatAxis = unsqueeze_attr->GetAxis();
  1084. unsqueeze_param->num_dim_ = flatAxis.size();
  1085. int i = 0;
  1086. for (auto iter = flatAxis.begin(); iter != flatAxis.end(); iter++) {
  1087. unsqueeze_param->dims_[i++] = *iter;
  1088. }
  1089. return reinterpret_cast<OpParameter *>(unsqueeze_param);
  1090. }
  1091. OpParameter *PopulateStackParameter(const mindspore::lite::PrimitiveC *primitive) {
  1092. StackParameter *stack_param = reinterpret_cast<StackParameter *>(malloc(sizeof(StackParameter)));
  1093. if (stack_param == nullptr) {
  1094. MS_LOG(ERROR) << "malloc StackParameter failed.";
  1095. return nullptr;
  1096. }
  1097. memset(stack_param, 0, sizeof(StackParameter));
  1098. auto param = reinterpret_cast<mindspore::lite::Stack *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1099. stack_param->op_parameter_.type_ = primitive->Type();
  1100. stack_param->axis_ = param->GetAxis();
  1101. return reinterpret_cast<OpParameter *>(stack_param);
  1102. }
  1103. OpParameter *PopulateUnstackParameter(const mindspore::lite::PrimitiveC *primitive) {
  1104. UnstackParameter *unstack_param = reinterpret_cast<UnstackParameter *>(malloc(sizeof(UnstackParameter)));
  1105. if (unstack_param == nullptr) {
  1106. MS_LOG(ERROR) << "malloc UnstackParameter failed.";
  1107. return nullptr;
  1108. }
  1109. memset(unstack_param, 0, sizeof(UnstackParameter));
  1110. auto param = reinterpret_cast<mindspore::lite::Unstack *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1111. unstack_param->op_parameter_.type_ = primitive->Type();
  1112. unstack_param->num_ = param->GetNum();
  1113. unstack_param->axis_ = param->GetAxis();
  1114. return reinterpret_cast<OpParameter *>(unstack_param);
  1115. }
  1116. OpParameter *PopulateReverseSequenceParameter(const mindspore::lite::PrimitiveC *primitive) {
  1117. ReverseSequenceParameter *reverse_sequence_param =
  1118. reinterpret_cast<ReverseSequenceParameter *>(malloc(sizeof(ReverseSequenceParameter)));
  1119. if (reverse_sequence_param == nullptr) {
  1120. MS_LOG(ERROR) << "malloc ReverseSequenceParameter failed.";
  1121. return nullptr;
  1122. }
  1123. memset(reverse_sequence_param, 0, sizeof(ReverseSequenceParameter));
  1124. auto param =
  1125. reinterpret_cast<mindspore::lite::ReverseSequence *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1126. reverse_sequence_param->op_parameter_.type_ = primitive->Type();
  1127. reverse_sequence_param->seq_axis_ = param->GetSeqAxis();
  1128. reverse_sequence_param->batch_axis_ = param->GetBatchAxis();
  1129. return reinterpret_cast<OpParameter *>(reverse_sequence_param);
  1130. }
  1131. OpParameter *PopulateUniqueParameter(const mindspore::lite::PrimitiveC *primitive) {
  1132. UniqueParameter *unique_param = reinterpret_cast<UniqueParameter *>(malloc(sizeof(UniqueParameter)));
  1133. if (unique_param == nullptr) {
  1134. MS_LOG(ERROR) << "malloc UniqueParameter failed.";
  1135. return nullptr;
  1136. }
  1137. memset(unique_param, 0, sizeof(UniqueParameter));
  1138. unique_param->op_parameter_.type_ = primitive->Type();
  1139. return reinterpret_cast<OpParameter *>(unique_param);
  1140. }
  1141. OpParameter *PopulateDepthToSpaceParameter(const mindspore::lite::PrimitiveC *primitive) {
  1142. DepthToSpaceParameter *depth_space_param =
  1143. reinterpret_cast<DepthToSpaceParameter *>(malloc(sizeof(DepthToSpaceParameter)));
  1144. if (depth_space_param == nullptr) {
  1145. MS_LOG(ERROR) << "malloc DepthToSpaceParameter failed.";
  1146. return nullptr;
  1147. }
  1148. memset(depth_space_param, 0, sizeof(DepthToSpaceParameter));
  1149. auto param = reinterpret_cast<mindspore::lite::DepthToSpace *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1150. depth_space_param->op_parameter_.type_ = primitive->Type();
  1151. depth_space_param->block_size_ = param->GetBlockSize();
  1152. return reinterpret_cast<OpParameter *>(depth_space_param);
  1153. }
  1154. OpParameter *PopulateSpaceToDepthParameter(const mindspore::lite::PrimitiveC *primitive) {
  1155. SpaceToDepthParameter *space_depth_param =
  1156. reinterpret_cast<SpaceToDepthParameter *>(malloc(sizeof(SpaceToDepthParameter)));
  1157. if (space_depth_param == nullptr) {
  1158. MS_LOG(ERROR) << "malloc SpaceToDepthParameter failed.";
  1159. return nullptr;
  1160. }
  1161. memset(space_depth_param, 0, sizeof(SpaceToDepthParameter));
  1162. space_depth_param->op_parameter_.type_ = primitive->Type();
  1163. auto param = reinterpret_cast<mindspore::lite::SpaceToDepth *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1164. space_depth_param->op_parameter_.type_ = primitive->Type();
  1165. space_depth_param->block_size_ = param->GetBlockSize();
  1166. if (param->GetFormat() != schema::Format::Format_NHWC) {
  1167. MS_LOG(ERROR) << "Currently only NHWC format is supported.";
  1168. free(space_depth_param);
  1169. return nullptr;
  1170. }
  1171. return reinterpret_cast<OpParameter *>(space_depth_param);
  1172. }
  1173. OpParameter *PopulateSpaceToBatchParameter(const mindspore::lite::PrimitiveC *primitive) {
  1174. SpaceToBatchParameter *space_batch_param =
  1175. reinterpret_cast<SpaceToBatchParameter *>(malloc(sizeof(SpaceToBatchParameter)));
  1176. if (space_batch_param == nullptr) {
  1177. MS_LOG(ERROR) << "malloc SpaceToBatchParameter failed.";
  1178. return nullptr;
  1179. }
  1180. memset(space_batch_param, 0, sizeof(SpaceToBatchParameter));
  1181. space_batch_param->op_parameter_.type_ = primitive->Type();
  1182. auto block_sizes = ((mindspore::lite::SpaceToBatch *)primitive)->BlockSizes();
  1183. memcpy(space_batch_param->block_sizes_, (block_sizes.data()), block_sizes.size() * sizeof(int));
  1184. auto paddings = ((mindspore::lite::SpaceToBatch *)primitive)->Paddings();
  1185. memcpy(space_batch_param->paddings_, (paddings.data()), paddings.size() * sizeof(int));
  1186. return reinterpret_cast<OpParameter *>(space_batch_param);
  1187. }
  1188. OpParameter *PopulateSpaceToBatchNDParameter(const mindspore::lite::PrimitiveC *primitive) {
  1189. auto *space_batch_param_nd = new (std::nothrow) SpaceToBatchParameter();
  1190. if (space_batch_param_nd == nullptr) {
  1191. MS_LOG(ERROR) << "new SpaceToBatchParameter failed.";
  1192. return nullptr;
  1193. }
  1194. space_batch_param_nd->op_parameter_.type_ = primitive->Type();
  1195. auto block_sizes = ((mindspore::lite::SpaceToBatchND *)primitive)->GetBlockShape();
  1196. memcpy(space_batch_param_nd->block_sizes_, (block_sizes.data()), block_sizes.size() * sizeof(int));
  1197. auto paddings = ((mindspore::lite::SpaceToBatchND *)primitive)->GetPaddings();
  1198. memcpy(space_batch_param_nd->paddings_, (paddings.data()), paddings.size() * sizeof(int));
  1199. return reinterpret_cast<OpParameter *>(space_batch_param_nd);
  1200. }
  1201. OpParameter *PopulateResizeParameter(const mindspore::lite::PrimitiveC *primitive) {
  1202. ResizeParameter *resize_param = reinterpret_cast<ResizeParameter *>(malloc(sizeof(ResizeParameter)));
  1203. if (resize_param == nullptr) {
  1204. MS_LOG(ERROR) << "malloc ResizeParameter failed.";
  1205. return nullptr;
  1206. }
  1207. memset(resize_param, 0, sizeof(ResizeParameter));
  1208. resize_param->op_parameter_.type_ = primitive->Type();
  1209. auto param = reinterpret_cast<mindspore::lite::Resize *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1210. resize_param->method_ = static_cast<int>(param->GetMethod());
  1211. resize_param->new_height_ = param->GetNewHeight();
  1212. resize_param->new_width_ = param->GetNewWidth();
  1213. resize_param->align_corners_ = param->GetAlignCorners();
  1214. resize_param->preserve_aspect_ratio_ = param->GetPreserveAspectRatio();
  1215. return reinterpret_cast<OpParameter *>(resize_param);
  1216. }
  1217. OpParameter *PopulateBatchToSpaceParameter(const mindspore::lite::PrimitiveC *primitive) {
  1218. BatchToSpaceParameter *batch_space_param =
  1219. reinterpret_cast<BatchToSpaceParameter *>(malloc(sizeof(BatchToSpaceParameter)));
  1220. if (batch_space_param == nullptr) {
  1221. MS_LOG(ERROR) << "malloc BatchToSpaceParameter failed.";
  1222. return nullptr;
  1223. }
  1224. memset(batch_space_param, 0, sizeof(BatchToSpaceParameter));
  1225. batch_space_param->op_parameter_.type_ = primitive->Type();
  1226. auto param = reinterpret_cast<mindspore::lite::BatchToSpace *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1227. auto block_shape = param->GetBlockShape();
  1228. if (block_shape.size() != BATCH_TO_SPACE_BLOCK_SHAPE_SIZE) {
  1229. MS_LOG(ERROR) << "batch_to_space blockShape size should be " << BATCH_TO_SPACE_BLOCK_SHAPE_SIZE;
  1230. free(batch_space_param);
  1231. return nullptr;
  1232. }
  1233. auto crops = param->GetCrops();
  1234. if (crops.size() != BATCH_TO_SPACE_CROPS_SIZE) {
  1235. MS_LOG(ERROR) << "batch_to_space crops size should be " << BATCH_TO_SPACE_CROPS_SIZE;
  1236. free(batch_space_param);
  1237. return nullptr;
  1238. }
  1239. for (int i = 0; i < BATCH_TO_SPACE_BLOCK_SHAPE_SIZE; ++i) {
  1240. batch_space_param->block_shape_[i] = block_shape[i];
  1241. }
  1242. for (int i = 0; i < BATCH_TO_SPACE_CROPS_SIZE; ++i) {
  1243. batch_space_param->crops_[i] = crops[i];
  1244. }
  1245. return reinterpret_cast<OpParameter *>(batch_space_param);
  1246. }
  1247. OpParameter *PopulateCropParameter(const mindspore::lite::PrimitiveC *primitive) {
  1248. auto param = reinterpret_cast<mindspore::lite::Crop *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1249. auto param_offset = param->GetOffsets();
  1250. if (param_offset.size() > CROP_OFFSET_MAX_SIZE) {
  1251. MS_LOG(ERROR) << "crop_param offset size(" << param_offset.size() << ") should <= " << CROP_OFFSET_MAX_SIZE;
  1252. return nullptr;
  1253. }
  1254. CropParameter *crop_param = reinterpret_cast<CropParameter *>(malloc(sizeof(CropParameter)));
  1255. if (crop_param == nullptr) {
  1256. MS_LOG(ERROR) << "malloc CropParameter failed.";
  1257. return nullptr;
  1258. }
  1259. memset(crop_param, 0, sizeof(CropParameter));
  1260. crop_param->op_parameter_.type_ = primitive->Type();
  1261. crop_param->axis_ = param->GetAxis();
  1262. crop_param->offset_size_ = param_offset.size();
  1263. for (size_t i = 0; i < param_offset.size(); ++i) {
  1264. crop_param->offset_[i] = param_offset[i];
  1265. }
  1266. return reinterpret_cast<OpParameter *>(crop_param);
  1267. }
  1268. OpParameter *PopulateLshProjectionParameter(const mindspore::lite::PrimitiveC *primitive) {
  1269. LshProjectionParameter *lsh_project_param =
  1270. reinterpret_cast<LshProjectionParameter *>(malloc(sizeof(LshProjectionParameter)));
  1271. if (lsh_project_param == nullptr) {
  1272. MS_LOG(ERROR) << "malloc LshProjectionParameter failed.";
  1273. return nullptr;
  1274. }
  1275. memset(lsh_project_param, 0, sizeof(LshProjectionParameter));
  1276. lsh_project_param->op_parameter_.type_ = primitive->Type();
  1277. auto param = reinterpret_cast<mindspore::lite::LshProjection *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1278. lsh_project_param->lsh_type_ = param->GetLshType();
  1279. return reinterpret_cast<OpParameter *>(lsh_project_param);
  1280. }
  1281. OpParameter *PopulateOneHotParameter(const mindspore::lite::PrimitiveC *primitive) {
  1282. OneHotParameter *one_hot_param = reinterpret_cast<OneHotParameter *>(malloc(sizeof(OneHotParameter)));
  1283. if (one_hot_param == nullptr) {
  1284. MS_LOG(ERROR) << "malloc OneHotParameter failed.";
  1285. return nullptr;
  1286. }
  1287. memset(one_hot_param, 0, sizeof(OneHotParameter));
  1288. one_hot_param->op_parameter_.type_ = primitive->Type();
  1289. auto param = reinterpret_cast<mindspore::lite::OneHot *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1290. if (param == nullptr) {
  1291. free(one_hot_param);
  1292. MS_LOG(ERROR) << "get OneHot param nullptr.";
  1293. return nullptr;
  1294. }
  1295. one_hot_param->axis_ = param->GetAxis();
  1296. return reinterpret_cast<OpParameter *>(one_hot_param);
  1297. }
  1298. OpParameter *PopulateFlattenParameter(const mindspore::lite::PrimitiveC *primitive) {
  1299. FlattenParameter *flatten_param = reinterpret_cast<FlattenParameter *>(malloc(sizeof(FlattenParameter)));
  1300. if (flatten_param == nullptr) {
  1301. MS_LOG(ERROR) << "malloc FlattenParameter failed.";
  1302. return nullptr;
  1303. }
  1304. memset(flatten_param, 0, sizeof(FlattenParameter));
  1305. flatten_param->op_parameter_.type_ = primitive->Type();
  1306. return reinterpret_cast<OpParameter *>(flatten_param);
  1307. }
  1308. OpParameter *PopulateQuantDTypeCastParameter(const mindspore::lite::PrimitiveC *primitive) {
  1309. QuantDTypeCastParameter *parameter =
  1310. reinterpret_cast<QuantDTypeCastParameter *>(malloc(sizeof(QuantDTypeCastParameter)));
  1311. if (parameter == nullptr) {
  1312. MS_LOG(ERROR) << "malloc QuantDTypeCastParameter failed.";
  1313. return nullptr;
  1314. }
  1315. memset(parameter, 0, sizeof(QuantDTypeCastParameter));
  1316. parameter->op_parameter_.type_ = primitive->Type();
  1317. auto quant_dtype_cast_param =
  1318. reinterpret_cast<mindspore::lite::QuantDTypeCast *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1319. parameter->srcT = quant_dtype_cast_param->GetSrcT();
  1320. parameter->dstT = quant_dtype_cast_param->GetDstT();
  1321. return reinterpret_cast<OpParameter *>(parameter);
  1322. }
  1323. OpParameter *PopulateStridedSliceParameter(const mindspore::lite::PrimitiveC *primitive) {
  1324. StridedSliceParameter *strided_slice_param =
  1325. reinterpret_cast<StridedSliceParameter *>(malloc(sizeof(StridedSliceParameter)));
  1326. if (strided_slice_param == nullptr) {
  1327. MS_LOG(ERROR) << "malloc StridedSliceParameter failed.";
  1328. return nullptr;
  1329. }
  1330. memset(strided_slice_param, 0, sizeof(StridedSliceParameter));
  1331. strided_slice_param->op_parameter_.type_ = primitive->Type();
  1332. auto n_dims = ((lite::StridedSlice *)primitive)->NDims();
  1333. strided_slice_param->num_axes_ = n_dims;
  1334. auto begin = ((lite::StridedSlice *)primitive)->GetBegins();
  1335. memcpy(strided_slice_param->begins_, (begin.data()), begin.size() * sizeof(int));
  1336. auto end = ((lite::StridedSlice *)primitive)->GetEnds();
  1337. memcpy(strided_slice_param->ends_, (end.data()), end.size() * sizeof(int));
  1338. auto stride = ((lite::StridedSlice *)primitive)->GetStrides();
  1339. memcpy(strided_slice_param->strides_, (stride.data()), stride.size() * sizeof(int));
  1340. auto in_shape = ((lite::StridedSlice *)primitive)->GetInShape();
  1341. memcpy(strided_slice_param->in_shape_, (in_shape.data()), in_shape.size() * sizeof(int));
  1342. return reinterpret_cast<OpParameter *>(strided_slice_param);
  1343. }
  1344. OpParameter *PopulateAddNParameter(const mindspore::lite::PrimitiveC *primitive) {
  1345. OpParameter *addn_param = reinterpret_cast<OpParameter *>(malloc(sizeof(OpParameter)));
  1346. if (addn_param == nullptr) {
  1347. MS_LOG(ERROR) << "malloc OpParameter failed.";
  1348. return nullptr;
  1349. }
  1350. memset(addn_param, 0, sizeof(OpParameter));
  1351. addn_param->type_ = primitive->Type();
  1352. return reinterpret_cast<OpParameter *>(addn_param);
  1353. }
  1354. OpParameter *PopulatePriorBoxParameter(const mindspore::lite::PrimitiveC *primitive) {
  1355. PriorBoxParameter *prior_box_param = reinterpret_cast<PriorBoxParameter *>(malloc(sizeof(PriorBoxParameter)));
  1356. if (prior_box_param == nullptr) {
  1357. MS_LOG(ERROR) << "malloc PriorBoxParameter failed.";
  1358. return nullptr;
  1359. }
  1360. memset(prior_box_param, 0, sizeof(PriorBoxParameter));
  1361. prior_box_param->op_parameter_.type_ = primitive->Type();
  1362. auto prior_box_attr =
  1363. reinterpret_cast<mindspore::lite::PriorBox *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1364. if (prior_box_attr->GetMinSizes().size() > PRIOR_BOX_MAX_NUM) {
  1365. MS_LOG(ERROR) << "PriorBox min_sizes size exceeds max num " << PRIOR_BOX_MAX_NUM << ", got "
  1366. << prior_box_attr->GetMinSizes();
  1367. free(prior_box_param);
  1368. return nullptr;
  1369. }
  1370. prior_box_param->min_sizes_size = prior_box_attr->GetMinSizes().size();
  1371. if (prior_box_attr->GetMaxSizes().size() > PRIOR_BOX_MAX_NUM) {
  1372. MS_LOG(ERROR) << "PriorBox max_sizes size exceeds max num " << PRIOR_BOX_MAX_NUM << ", got "
  1373. << prior_box_attr->GetMaxSizes();
  1374. free(prior_box_param);
  1375. return nullptr;
  1376. }
  1377. prior_box_param->max_sizes_size = prior_box_attr->GetMaxSizes().size();
  1378. memcpy(prior_box_param->max_sizes, prior_box_attr->GetMaxSizes().data(),
  1379. prior_box_attr->GetMaxSizes().size() * sizeof(int32_t));
  1380. memcpy(prior_box_param->min_sizes, prior_box_attr->GetMinSizes().data(),
  1381. prior_box_attr->GetMinSizes().size() * sizeof(int32_t));
  1382. if (prior_box_attr->GetAspectRatios().size() > PRIOR_BOX_MAX_NUM) {
  1383. MS_LOG(ERROR) << "PriorBox aspect_ratios size exceeds max num " << PRIOR_BOX_MAX_NUM << ", got "
  1384. << prior_box_attr->GetAspectRatios();
  1385. free(prior_box_param);
  1386. return nullptr;
  1387. }
  1388. prior_box_param->aspect_ratios_size = prior_box_attr->GetAspectRatios().size();
  1389. memcpy(prior_box_param->aspect_ratios, prior_box_attr->GetAspectRatios().data(),
  1390. prior_box_attr->GetAspectRatios().size() * sizeof(float));
  1391. if (prior_box_attr->GetVariances().size() != PRIOR_BOX_VAR_NUM) {
  1392. MS_LOG(ERROR) << "PriorBox variances size should be " << PRIOR_BOX_VAR_NUM << ", got "
  1393. << prior_box_attr->GetVariances().size();
  1394. free(prior_box_param);
  1395. return nullptr;
  1396. }
  1397. memcpy(prior_box_param->variances, prior_box_attr->GetVariances().data(), PRIOR_BOX_VAR_NUM * sizeof(float));
  1398. prior_box_param->flip = prior_box_attr->GetFlip();
  1399. prior_box_param->clip = prior_box_attr->GetClip();
  1400. prior_box_param->offset = prior_box_attr->GetOffset();
  1401. prior_box_param->image_size_h = prior_box_attr->GetImageSizeH();
  1402. prior_box_param->image_size_w = prior_box_attr->GetImageSizeW();
  1403. prior_box_param->step_h = prior_box_attr->GetStepH();
  1404. prior_box_param->step_w = prior_box_attr->GetStepW();
  1405. return reinterpret_cast<OpParameter *>(prior_box_param);
  1406. }
  1407. OpParameter *PopulateLstmParameter(const mindspore::lite::PrimitiveC *primitive) {
  1408. LstmParameter *lstm_param = reinterpret_cast<LstmParameter *>(malloc(sizeof(LstmParameter)));
  1409. if (lstm_param == nullptr) {
  1410. MS_LOG(ERROR) << "malloc LstmParameter failed.";
  1411. return nullptr;
  1412. }
  1413. memset(lstm_param, 0, sizeof(LstmParameter));
  1414. lstm_param->op_parameter_.type_ = primitive->Type();
  1415. auto param = reinterpret_cast<mindspore::lite::Lstm *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1416. if (param == nullptr) {
  1417. free(lstm_param);
  1418. MS_LOG(ERROR) << "get Lstm param nullptr.";
  1419. return nullptr;
  1420. }
  1421. lstm_param->bidirectional_ = param->GetBidirection();
  1422. return reinterpret_cast<OpParameter *>(lstm_param);
  1423. }
  1424. OpParameter *PopulateEmbeddingLookupParameter(const mindspore::lite::PrimitiveC *primitive) {
  1425. EmbeddingLookupParameter *embedding_lookup_parameter =
  1426. reinterpret_cast<EmbeddingLookupParameter *>(malloc(sizeof(EmbeddingLookupParameter)));
  1427. if (embedding_lookup_parameter == nullptr) {
  1428. MS_LOG(ERROR) << "malloc EmbeddingLookupParameter failed.";
  1429. return nullptr;
  1430. }
  1431. memset(embedding_lookup_parameter, 0, sizeof(EmbeddingLookupParameter));
  1432. embedding_lookup_parameter->op_parameter_.type_ = primitive->Type();
  1433. auto param =
  1434. reinterpret_cast<mindspore::lite::EmbeddingLookup *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1435. embedding_lookup_parameter->max_norm_ = param->GetMaxNorm();
  1436. if (embedding_lookup_parameter->max_norm_ < 0) {
  1437. MS_LOG(ERROR) << "Embedding lookup max norm should be positive number, got "
  1438. << embedding_lookup_parameter->max_norm_;
  1439. free(embedding_lookup_parameter);
  1440. return nullptr;
  1441. }
  1442. return reinterpret_cast<OpParameter *>(embedding_lookup_parameter);
  1443. }
  1444. OpParameter *PopulateBiasAddParameter(const mindspore::lite::PrimitiveC *primitive) {
  1445. ArithmeticParameter *arithmetic_param = reinterpret_cast<ArithmeticParameter *>(malloc(sizeof(ArithmeticParameter)));
  1446. if (arithmetic_param == nullptr) {
  1447. MS_LOG(ERROR) << "malloc ArithmeticParameter failed.";
  1448. return nullptr;
  1449. }
  1450. memset(arithmetic_param, 0, sizeof(ArithmeticParameter));
  1451. arithmetic_param->op_parameter_.type_ = primitive->Type();
  1452. return reinterpret_cast<OpParameter *>(arithmetic_param);
  1453. }
  1454. OpParameter *PopulateEluParameter(const mindspore::lite::PrimitiveC *primitive) {
  1455. EluParameter *elu_parameter = reinterpret_cast<EluParameter *>(malloc(sizeof(EluParameter)));
  1456. if (elu_parameter == nullptr) {
  1457. MS_LOG(ERROR) << "malloc EluParameter failed.";
  1458. return nullptr;
  1459. }
  1460. memset(elu_parameter, 0, sizeof(EluParameter));
  1461. elu_parameter->op_parameter_.type_ = primitive->Type();
  1462. auto param = reinterpret_cast<mindspore::lite::Elu *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1463. elu_parameter->alpha_ = param->GetAlpha();
  1464. return reinterpret_cast<OpParameter *>(elu_parameter);
  1465. }
  1466. OpParameter *PopulateL2NormParameter(const mindspore::lite::PrimitiveC *primitive) {
  1467. L2NormParameter *l2_norm_parameter = reinterpret_cast<L2NormParameter *>(malloc(sizeof(L2NormParameter)));
  1468. if (l2_norm_parameter == nullptr) {
  1469. MS_LOG(ERROR) << "malloc L2NormParameter failed.";
  1470. return nullptr;
  1471. }
  1472. memset(l2_norm_parameter, 0, sizeof(L2NormParameter));
  1473. l2_norm_parameter->op_parameter_.type_ = primitive->Type();
  1474. auto param = reinterpret_cast<mindspore::lite::L2Norm *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1475. auto axis_vec = param->GetAxis();
  1476. l2_norm_parameter->axis_num_ = axis_vec.size();
  1477. l2_norm_parameter->axis_ = reinterpret_cast<int *>(malloc(axis_vec.size() * sizeof(int)));
  1478. if (l2_norm_parameter->axis_ == nullptr) {
  1479. MS_LOG(ERROR) << "malloc axis_ data failed";
  1480. free(l2_norm_parameter);
  1481. return nullptr;
  1482. }
  1483. for (size_t i = 0; i < axis_vec.size(); i++) {
  1484. l2_norm_parameter->axis_[i] = axis_vec[i];
  1485. }
  1486. if (param->GetEpsilon() < 1e-6) {
  1487. l2_norm_parameter->epsilon_ = 1e-6;
  1488. } else {
  1489. l2_norm_parameter->epsilon_ = param->GetEpsilon();
  1490. }
  1491. if (param->GetActivationType() == static_cast<int>(schema::ActivationType_RELU)) {
  1492. l2_norm_parameter->act_type_ = ActType_Relu;
  1493. } else if (param->GetActivationType() == static_cast<int>(schema::ActivationType_RELU6)) {
  1494. l2_norm_parameter->act_type_ = ActType_Relu6;
  1495. } else {
  1496. l2_norm_parameter->act_type_ = ActType_No;
  1497. }
  1498. return reinterpret_cast<OpParameter *>(l2_norm_parameter);
  1499. }
  1500. OpParameter *PopulateDetectionPostProcessParameter(const mindspore::lite::PrimitiveC *primitive) {
  1501. DetectionPostProcessParameter *detection_post_process_parameter =
  1502. reinterpret_cast<DetectionPostProcessParameter *>(malloc(sizeof(DetectionPostProcessParameter)));
  1503. if (detection_post_process_parameter == nullptr) {
  1504. MS_LOG(ERROR) << "malloc EluParameter failed.";
  1505. return nullptr;
  1506. }
  1507. memset(detection_post_process_parameter, 0, sizeof(DetectionPostProcessParameter));
  1508. detection_post_process_parameter->op_parameter_.type_ = primitive->Type();
  1509. auto param =
  1510. reinterpret_cast<mindspore::lite::DetectionPostProcess *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1511. detection_post_process_parameter->h_scale_ = param->GetHScale();
  1512. detection_post_process_parameter->w_scale_ = param->GetWScale();
  1513. detection_post_process_parameter->x_scale_ = param->GetXScale();
  1514. detection_post_process_parameter->y_scale_ = param->GetYScale();
  1515. detection_post_process_parameter->nms_iou_threshold_ = param->GetNmsIouThreshold();
  1516. detection_post_process_parameter->nms_score_threshold_ = param->GetNmsScoreThreshold();
  1517. detection_post_process_parameter->max_detections_ = param->GetMaxDetections();
  1518. detection_post_process_parameter->detections_per_class_ = param->GetDetectionsPerClass();
  1519. detection_post_process_parameter->max_classes_per_detection_ = param->GetMaxClassesPerDetection();
  1520. detection_post_process_parameter->num_classes_ = param->GetNumClasses();
  1521. detection_post_process_parameter->use_regular_nms_ = param->GetUseRegularNms();
  1522. return reinterpret_cast<OpParameter *>(detection_post_process_parameter);
  1523. }
  1524. OpParameter *PopulateExpParameter(const mindspore::lite::PrimitiveC *primitive) {
  1525. ExpParameter *exp_parameter = reinterpret_cast<ExpParameter *>(malloc(sizeof(ExpParameter)));
  1526. if (exp_parameter == nullptr) {
  1527. MS_LOG(ERROR) << "malloc ExpParameter failed.";
  1528. return nullptr;
  1529. }
  1530. memset(exp_parameter, 0, sizeof(ExpParameter));
  1531. exp_parameter->op_parameter_.type_ = primitive->Type();
  1532. auto param = reinterpret_cast<mindspore::lite::Exp *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1533. exp_parameter->base_ = param->GetBase();
  1534. exp_parameter->scale_ = param->GetScale();
  1535. exp_parameter->shift_ = param->GetShift();
  1536. if (exp_parameter->base_ != -1 && exp_parameter->base_ <= 0) {
  1537. MS_LOG(ERROR) << "Exp base must be strictly positive, got " << exp_parameter->base_;
  1538. free(exp_parameter);
  1539. return nullptr;
  1540. }
  1541. return reinterpret_cast<OpParameter *>(exp_parameter);
  1542. }
  1543. OpParameter *PopulateSkipGramParameter(const mindspore::lite::PrimitiveC *primitive) {
  1544. SkipGramParameter *skipGramParameter = reinterpret_cast<SkipGramParameter *>(malloc(sizeof(SkipGramParameter)));
  1545. if (skipGramParameter == nullptr) {
  1546. MS_LOG(ERROR) << "malloc SkipGramParameter failed.";
  1547. return nullptr;
  1548. }
  1549. memset(skipGramParameter, 0, sizeof(SkipGramParameter));
  1550. skipGramParameter->op_parameter_.type_ = primitive->Type();
  1551. auto param = reinterpret_cast<mindspore::lite::SkipGram *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1552. skipGramParameter->ngram_size = param->GetNgramSize();
  1553. skipGramParameter->max_skip_size = param->GetMaxSkipSize();
  1554. skipGramParameter->include_all_ngrams = param->GetIncludeAllNgrams();
  1555. return reinterpret_cast<OpParameter *>(skipGramParameter);
  1556. }
  1557. OpParameter *PopulateCommonOpParameter(const mindspore::lite::PrimitiveC *primitive) {
  1558. OpParameter *param = reinterpret_cast<OpParameter *>(malloc(sizeof(OpParameter)));
  1559. if (param == nullptr) {
  1560. MS_LOG(ERROR) << "new OpParameter failed.";
  1561. return nullptr;
  1562. }
  1563. memset(param, 0, sizeof(OpParameter));
  1564. param->type_ = primitive->Type();
  1565. return param;
  1566. }
  1567. OpParameter *PopulateCustomPredictParameter(const mindspore::lite::PrimitiveC *primitive) {
  1568. PredictParameter *param = reinterpret_cast<PredictParameter *>(malloc(sizeof(PredictParameter)));
  1569. if (param == nullptr) {
  1570. MS_LOG(ERROR) << "malloc param failed.";
  1571. return nullptr;
  1572. }
  1573. memset(param, 0, sizeof(PredictParameter));
  1574. param->op_parameter_.type_ = primitive->Type();
  1575. auto prim = reinterpret_cast<mindspore::lite::CustomPredict *>(const_cast<mindspore::lite::PrimitiveC *>(primitive));
  1576. param->output_num = prim->GetOutputNum();
  1577. param->weight_threshold = prim->GetWeightThreshold();
  1578. return reinterpret_cast<OpParameter *>(param);
  1579. }
  1580. PopulateParameterRegistry::PopulateParameterRegistry() {
  1581. populate_parameter_funcs_[schema::PrimitiveType_SparseToDense] = PopulateSparseToDenseParameter;
  1582. populate_parameter_funcs_[schema::PrimitiveType_SoftMax] = PopulateSoftmaxParameter;
  1583. populate_parameter_funcs_[schema::PrimitiveType_Activation] = PopulateActivationParameter;
  1584. populate_parameter_funcs_[schema::PrimitiveType_Clip] = PopulateClipParameter;
  1585. populate_parameter_funcs_[schema::PrimitiveType_Conv2D] = PopulateConvParameter;
  1586. populate_parameter_funcs_[schema::PrimitiveType_Reduce] = PopulateReduceParameter;
  1587. populate_parameter_funcs_[schema::PrimitiveType_Mean] = PopulateMeanParameter;
  1588. populate_parameter_funcs_[schema::PrimitiveType_Pooling] = PopulatePoolingParameter;
  1589. populate_parameter_funcs_[schema::PrimitiveType_ROIPooling] = PopulateROIPoolingParameter;
  1590. populate_parameter_funcs_[schema::PrimitiveType_DepthwiseConv2D] = PopulateConvDwParameter;
  1591. populate_parameter_funcs_[schema::PrimitiveType_DeDepthwiseConv2D] = PopulateDeconvDwParameter;
  1592. populate_parameter_funcs_[schema::PrimitiveType_DeConv2D] = PopulateDeconvParameter;
  1593. populate_parameter_funcs_[schema::PrimitiveType_FusedBatchNorm] = PopulateFusedBatchNorm;
  1594. populate_parameter_funcs_[schema::PrimitiveType_BatchNorm] = PopulateBatchNorm;
  1595. populate_parameter_funcs_[schema::PrimitiveType_FullConnection] = PopulateFullconnectionParameter;
  1596. populate_parameter_funcs_[schema::PrimitiveType_Power] = PopulatePowerParameter;
  1597. populate_parameter_funcs_[schema::PrimitiveType_LocalResponseNormalization] = PopulateLocalResponseNormParameter;
  1598. populate_parameter_funcs_[schema::PrimitiveType_Range] = PopulateRangeParameter;
  1599. populate_parameter_funcs_[schema::PrimitiveType_Transpose] = PopulateTransposeParameter;
  1600. populate_parameter_funcs_[schema::PrimitiveType_Mul] = PopulateArithmetic;
  1601. populate_parameter_funcs_[schema::PrimitiveType_Add] = PopulateArithmetic;
  1602. populate_parameter_funcs_[schema::PrimitiveType_Sub] = PopulateArithmetic;
  1603. populate_parameter_funcs_[schema::PrimitiveType_Div] = PopulateArithmetic;
  1604. populate_parameter_funcs_[schema::PrimitiveType_RealDiv] = PopulateArithmetic;
  1605. populate_parameter_funcs_[schema::PrimitiveType_LogicalAnd] = PopulateArithmetic;
  1606. populate_parameter_funcs_[schema::PrimitiveType_LogicalOr] = PopulateArithmetic;
  1607. populate_parameter_funcs_[schema::PrimitiveType_Equal] = PopulateArithmetic;
  1608. populate_parameter_funcs_[schema::PrimitiveType_Less] = PopulateArithmetic;
  1609. populate_parameter_funcs_[schema::PrimitiveType_Greater] = PopulateArithmetic;
  1610. populate_parameter_funcs_[schema::PrimitiveType_NotEqual] = PopulateArithmetic;
  1611. populate_parameter_funcs_[schema::PrimitiveType_LessEqual] = PopulateArithmetic;
  1612. populate_parameter_funcs_[schema::PrimitiveType_GreaterEqual] = PopulateArithmetic;
  1613. populate_parameter_funcs_[schema::PrimitiveType_Maximum] = PopulateArithmetic;
  1614. populate_parameter_funcs_[schema::PrimitiveType_Minimum] = PopulateArithmetic;
  1615. populate_parameter_funcs_[schema::PrimitiveType_FloorDiv] = PopulateArithmetic;
  1616. populate_parameter_funcs_[schema::PrimitiveType_FloorMod] = PopulateArithmetic;
  1617. populate_parameter_funcs_[schema::PrimitiveType_SquaredDifference] = PopulateArithmetic;
  1618. populate_parameter_funcs_[schema::PrimitiveType_BiasAdd] = PopulateBiasAddParameter;
  1619. populate_parameter_funcs_[schema::PrimitiveType_Eltwise] = PopulateEltwiseParameter;
  1620. populate_parameter_funcs_[schema::PrimitiveType_ExpandDims] = PopulateExpandDimsParameter;
  1621. populate_parameter_funcs_[schema::PrimitiveType_Abs] = PopulateArithmeticSelf;
  1622. populate_parameter_funcs_[schema::PrimitiveType_Cos] = PopulateArithmeticSelf;
  1623. populate_parameter_funcs_[schema::PrimitiveType_Sin] = PopulateArithmeticSelf;
  1624. populate_parameter_funcs_[schema::PrimitiveType_Exp] = PopulateExpParameter;
  1625. populate_parameter_funcs_[schema::PrimitiveType_Log] = PopulateArithmeticSelf;
  1626. populate_parameter_funcs_[schema::PrimitiveType_Neg] = PopulateArithmeticSelf;
  1627. populate_parameter_funcs_[schema::PrimitiveType_NegGrad] = PopulateArithmeticSelf;
  1628. populate_parameter_funcs_[schema::PrimitiveType_LogGrad] = PopulateArithmeticSelf;
  1629. populate_parameter_funcs_[schema::PrimitiveType_Square] = PopulateArithmeticSelf;
  1630. populate_parameter_funcs_[schema::PrimitiveType_Sqrt] = PopulateArithmeticSelf;
  1631. populate_parameter_funcs_[schema::PrimitiveType_Rsqrt] = PopulateArithmeticSelf;
  1632. populate_parameter_funcs_[schema::PrimitiveType_LogicalNot] = PopulateArithmeticSelf;
  1633. populate_parameter_funcs_[schema::PrimitiveType_Floor] = PopulateArithmeticSelf;
  1634. populate_parameter_funcs_[schema::PrimitiveType_Ceil] = PopulateArithmeticSelf;
  1635. populate_parameter_funcs_[schema::PrimitiveType_Round] = PopulateArithmeticSelf;
  1636. populate_parameter_funcs_[schema::PrimitiveType_ArgMax] = PopulateArgMaxParameter;
  1637. populate_parameter_funcs_[schema::PrimitiveType_ArgMin] = PopulateArgMinParameter;
  1638. populate_parameter_funcs_[schema::PrimitiveType_Cast] = PopulateCastParameter;
  1639. populate_parameter_funcs_[schema::PrimitiveType_Scale] = PopulateScaleParameter;
  1640. populate_parameter_funcs_[schema::PrimitiveType_Reshape] = PopulateReshapeParameter;
  1641. populate_parameter_funcs_[schema::PrimitiveType_ConstantOfShape] = PopulateConstantOfShapeParameter;
  1642. populate_parameter_funcs_[schema::PrimitiveType_Shape] = PopulateShapeParameter;
  1643. populate_parameter_funcs_[schema::PrimitiveType_Concat] = PopulateConcatParameter;
  1644. populate_parameter_funcs_[schema::PrimitiveType_Tile] = PopulateTileParameter;
  1645. populate_parameter_funcs_[schema::PrimitiveType_TopK] = PopulateTopKParameter;
  1646. populate_parameter_funcs_[schema::PrimitiveType_Fill] = PopulateFillParameter;
  1647. populate_parameter_funcs_[schema::PrimitiveType_Gather] = PopulateGatherParameter;
  1648. populate_parameter_funcs_[schema::PrimitiveType_GatherNd] = PopulateGatherNdParameter;
  1649. populate_parameter_funcs_[schema::PrimitiveType_Slice] = PopulateSliceParameter;
  1650. populate_parameter_funcs_[schema::PrimitiveType_BroadcastTo] = PopulateBroadcastToParameter;
  1651. populate_parameter_funcs_[schema::PrimitiveType_Reverse] = PopulateReverseParameter;
  1652. populate_parameter_funcs_[schema::PrimitiveType_Stack] = PopulateStackParameter;
  1653. populate_parameter_funcs_[schema::PrimitiveType_Unstack] = PopulateUnstackParameter;
  1654. populate_parameter_funcs_[schema::PrimitiveType_ReverseSequence] = PopulateReverseSequenceParameter;
  1655. populate_parameter_funcs_[schema::PrimitiveType_Unique] = PopulateUniqueParameter;
  1656. populate_parameter_funcs_[schema::PrimitiveType_DepthToSpace] = PopulateDepthToSpaceParameter;
  1657. populate_parameter_funcs_[schema::PrimitiveType_Nchw2Nhwc] = PopulateNchw2NhwcParameter;
  1658. populate_parameter_funcs_[schema::PrimitiveType_Nhwc2Nchw] = PopulateNhwc2NchwParameter;
  1659. populate_parameter_funcs_[schema::PrimitiveType_Pad] = PopulatePadParameter;
  1660. populate_parameter_funcs_[schema::PrimitiveType_Resize] = PopulateResizeParameter;
  1661. populate_parameter_funcs_[schema::PrimitiveType_BatchToSpace] = PopulateBatchToSpaceParameter;
  1662. populate_parameter_funcs_[schema::PrimitiveType_BatchToSpaceND] = PopulateBatchToSpaceParameter;
  1663. populate_parameter_funcs_[schema::PrimitiveType_SpaceToDepth] = PopulateSpaceToDepthParameter;
  1664. populate_parameter_funcs_[schema::PrimitiveType_SpaceToBatch] = PopulateSpaceToBatchParameter;
  1665. populate_parameter_funcs_[schema::PrimitiveType_SpaceToBatchND] = PopulateSpaceToBatchNDParameter;
  1666. populate_parameter_funcs_[schema::PrimitiveType_Crop] = PopulateCropParameter;
  1667. populate_parameter_funcs_[schema::PrimitiveType_Unsqueeze] = PopulateUnsqueezeParameter;
  1668. populate_parameter_funcs_[schema::PrimitiveType_Flatten] = PopulateFlattenParameter;
  1669. populate_parameter_funcs_[schema::PrimitiveType_MatMul] = PopulateMatMulParameter;
  1670. populate_parameter_funcs_[schema::PrimitiveType_OneHot] = PopulateOneHotParameter;
  1671. populate_parameter_funcs_[schema::PrimitiveType_AddN] = PopulateAddNParameter;
  1672. populate_parameter_funcs_[schema::PrimitiveType_StridedSlice] = PopulateStridedSliceParameter;
  1673. populate_parameter_funcs_[schema::PrimitiveType_ScatterND] = PopulateScatterNDParameter;
  1674. populate_parameter_funcs_[schema::PrimitiveType_Squeeze] = PopulateSqueezeParameter;
  1675. populate_parameter_funcs_[schema::PrimitiveType_Split] = PopulateSplitParameter;
  1676. populate_parameter_funcs_[schema::PrimitiveType_PReLU] = PopulatePReLUParameter;
  1677. populate_parameter_funcs_[schema::PrimitiveType_PriorBox] = PopulatePriorBoxParameter;
  1678. populate_parameter_funcs_[schema::PrimitiveType_QuantDTypeCast] = PopulateQuantDTypeCastParameter;
  1679. populate_parameter_funcs_[schema::PrimitiveType_Lstm] = PopulateLstmParameter;
  1680. populate_parameter_funcs_[schema::PrimitiveType_EmbeddingLookup] = PopulateEmbeddingLookupParameter;
  1681. populate_parameter_funcs_[schema::PrimitiveType_Elu] = PopulateEluParameter;
  1682. populate_parameter_funcs_[schema::PrimitiveType_L2Norm] = PopulateL2NormParameter;
  1683. populate_parameter_funcs_[schema::PrimitiveType_DetectionPostProcess] = PopulateDetectionPostProcessParameter;
  1684. populate_parameter_funcs_[schema::PrimitiveType_CustomNormalize] = PopulateCommonOpParameter;
  1685. populate_parameter_funcs_[schema::PrimitiveType_SkipGram] = PopulateSkipGramParameter;
  1686. populate_parameter_funcs_[schema::PrimitiveType_CustomExtractFeatures] = PopulateCommonOpParameter;
  1687. populate_parameter_funcs_[schema::PrimitiveType_LshProjection] = PopulateLshProjectionParameter;
  1688. populate_parameter_funcs_[schema::PrimitiveType_CustomPredict] = PopulateCustomPredictParameter;
  1689. populate_parameter_funcs_[schema::PrimitiveType_HashtableLookup] = PopulateCommonOpParameter;
  1690. }
  1691. PopulateParameterRegistry *PopulateParameterRegistry::GetInstance() {
  1692. static PopulateParameterRegistry populate_parameter_instance;
  1693. return &populate_parameter_instance;
  1694. }
  1695. PopulateParameterFunc PopulateParameterRegistry::GetParameterFunc(int type) {
  1696. return populate_parameter_funcs_[schema::PrimitiveType(type)];
  1697. }
  1698. int PopulateParameterRegistry::AddPopulateParameterFunc(const schema::PrimitiveType &type, PopulateParameterFunc func) {
  1699. if ((type < schema::PrimitiveType_MIN) || (type > schema::PrimitiveType_MAX)) return -1;
  1700. populate_parameter_funcs_[type] = func;
  1701. return 0;
  1702. }
  1703. OpParameter *PopulateParameter(const mindspore::lite::PrimitiveC *primitive) {
  1704. if (primitive == nullptr) {
  1705. MS_LOG(ERROR) << "Primitive is nullptr when populating parameter for op.";
  1706. return nullptr;
  1707. }
  1708. auto op_type = primitive->Type();
  1709. auto func = PopulateParameterRegistry::GetInstance()->GetParameterFunc(op_type);
  1710. if (func == nullptr) {
  1711. MS_LOG(ERROR) << "Get nullptr for Op Parameter Func.";
  1712. return nullptr;
  1713. }
  1714. auto *parameter = func(primitive);
  1715. if (parameter == nullptr) {
  1716. MS_LOG(ERROR) << "Get nullptr for Op Parameter.";
  1717. return nullptr;
  1718. }
  1719. return parameter;
  1720. }
  1721. } // namespace mindspore::kernel