1 /**
2 * Copyright 2021 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
17 #include "schema/model_v0_generated.h"
18 #include "src/ops/populate/populate_register.h"
19 #include "nnacl/conv_parameter.h"
20
21 namespace mindspore {
22 namespace lite {
23 namespace {
PopulateDeconvParameter(const void * prim)24 OpParameter *PopulateDeconvParameter(const void *prim) {
25 MS_CHECK_TRUE_RET(prim != nullptr, nullptr);
26 auto *primitive = static_cast<const schema::v0::Primitive *>(prim);
27 auto deconv2d_prim = primitive->value_as_DeConv2D();
28 if (deconv2d_prim == nullptr) {
29 MS_LOG(ERROR) << "deconv2d_prim is nullptr";
30 return nullptr;
31 }
32 auto *conv_param = reinterpret_cast<ConvParameter *>(malloc(sizeof(ConvParameter)));
33 if (conv_param == nullptr) {
34 MS_LOG(ERROR) << "malloc ConvParameter failed.";
35 return nullptr;
36 }
37 memset(conv_param, 0, sizeof(ConvParameter));
38 conv_param->op_parameter_.type_ = schema::PrimitiveType_Conv2dTransposeFusion;
39 conv_param->group_ = 1;
40
41 conv_param->kernel_h_ = deconv2d_prim->kernelH();
42 conv_param->kernel_w_ = deconv2d_prim->kernelW();
43 conv_param->stride_h_ = deconv2d_prim->strideH();
44 conv_param->stride_w_ = deconv2d_prim->strideW();
45
46 conv_param->pad_u_ = deconv2d_prim->padUp();
47 conv_param->pad_d_ = deconv2d_prim->padDown();
48 conv_param->pad_l_ = deconv2d_prim->padLeft();
49 conv_param->pad_r_ = deconv2d_prim->padRight();
50 conv_param->dilation_h_ = deconv2d_prim->dilateH();
51 conv_param->dilation_w_ = deconv2d_prim->dilateW();
52 auto act_type = deconv2d_prim->activationType();
53 switch (act_type) {
54 case schema::v0::ActivationType_RELU:
55 conv_param->act_type_ = ActType_Relu;
56 break;
57 case schema::v0::ActivationType_RELU6:
58 conv_param->act_type_ = ActType_Relu6;
59 break;
60 default:
61 conv_param->act_type_ = ActType_No;
62 break;
63 }
64 auto pad_mode = deconv2d_prim->padMode();
65 switch (pad_mode) {
66 case schema::v0::PadMode_SAME_UPPER:
67 conv_param->pad_mode_ = Pad_same;
68 break;
69 case schema::v0::PadMode_VALID:
70 conv_param->pad_mode_ = Pad_valid;
71 break;
72 default:
73 conv_param->pad_mode_ = Pad_pad;
74 break;
75 }
76 return reinterpret_cast<OpParameter *>(conv_param);
77 }
78 } // namespace
79
80 Registry g_deConv2DV0ParameterRegistry(schema::v0::PrimitiveType_DeConv2D, PopulateDeconvParameter, SCHEMA_V0);
81 } // namespace lite
82 } // namespace mindspore
83