def rename_Conv()

in mmdnn/conversion/paddle/paddle_parser.py [0:0]


    def rename_Conv(self, source_node):
        IR_node = self.IR_graph.node.add()

        # input edge
        self.convert_inedge(source_node, IR_node)

        # layer and spec
        conv_spec = source_node.layer

        spec = conv_spec.inputs[0].conv_conf

        # width <=> x or height <=> y
        width = spec.filter_size
        height = spec.filter_size_y if spec.HasField('filter_size_y') else spec.filter_size
        inputchannel = spec.channels
        outputchannel = conv_spec.num_filters
        stride_x = spec.stride
        stride_y = spec.stride_y if spec.HasField('stride_y') else stride_x
        padding_x = spec.padding
        padding_y = spec.padding_y if spec.HasField('padding_y') else padding_x
        dilation_x = spec.dilation
        dilation_y = spec.dilation_y if spec.HasField('dilation_y') else dilation_x
        output_x = spec.output_x
        output_y = spec.output_y if spec.HasField('output_y') else output_x
        input_x = spec.img_size
        input_y = spec.img_size_y if spec.HasField('img_size_y') else input_x


        # output shape
        output_shapes = [-1, output_y, output_x, outputchannel]
        self.shape_dict[source_node.name] = output_shapes
        PaddleParser._set_output_shape(source_node, IR_node, output_shapes)


        kwargs = dict()

        if conv_spec.type == 'exconv' or 'cudnn_conv':
            # name, op
            PaddleParser._copy_and_reop(source_node, IR_node, "Conv")
        else:
            kwargs['isDeconvolution'] = True
            PaddleParser._copy_and_reop(source_node, IR_node, "ConvTranspose")


        w_name = conv_spec.inputs[0].input_parameter_name
        w = self.parameters.get(w_name)


        self.set_weight(IR_node.name, 'weights', w.reshape([outputchannel, inputchannel, height, width]).transpose([ 2, 3, 1, 0]))

        #  it should be in the shape of height x width x inputchannel x outputchannel

        # use_bias: TODO
        kwargs['use_bias'] = False
        if conv_spec.HasField('bias_parameter_name'):
            bias_name = conv_spec.bias_parameter_name
            bias = self.parameters.get(bias_name).squeeze()
            self.set_weight(IR_node.name, "bias", bias)
            kwargs['use_bias'] = True



        kwargs['kernel_shape'] = [height, width, inputchannel, outputchannel]



        # pad_dim
        pad_dim = [0, 0, padding_x, padding_y, padding_x, padding_y, 0, 0]

        # fail report because of auto_pad
        # if dilation_x == 1 and dilation_y == 1:
        #     if output_x * stride_x == input_x and output_y * stride_y == input_y:
        #         auto_pad = "SAME"
        #         kwargs['auto_pad'] = auto_pad
        #     elif output_x * stride_x == input_x - width + 1 and output_y * stride_y == input_y - height + 1:
        #         auto_pad = "VALID"
        #         kwargs['auto_pad'] = auto_pad

        if input_x == output_x and input_y == output_y:
            auto_pad = "SAME"
        else:
            auto_pad = "SAME"

        pad_dim = convert_tf_pad_to_onnx(pad_dim)
        kwargs['pads'] = pad_dim

        kwargs['group'] = spec.groups

        kwargs['dilation'] = [1, dilation_x, dilation_y, 1]

        kwargs['strides'] = [1, stride_x, stride_y, 1]

        assign_IRnode_values(IR_node, kwargs)

        # defuse the activation layer

        if conv_spec.HasField('active_type') and  conv_spec.active_type != '':
            IR_node_act = self._defuse_activation(source_node)
            PaddleParser._set_output_shape(source_node, IR_node_act, output_shapes)