diff --git a/x2paddle/decoder/onnx_decoder.py b/x2paddle/decoder/onnx_decoder.py index 4e01fe3bf8181ebfd0a73c70865a67d0b5b903ae..d1de07ef5fbfa08484adea0ff6c9161a5d44c867 100644 --- a/x2paddle/decoder/onnx_decoder.py +++ b/x2paddle/decoder/onnx_decoder.py @@ -302,7 +302,19 @@ class ONNXGraph(Graph): if opt == in_node: self.connect(nd.name, layer_name) flag = 1 - node.which_child[nd.name] = idx + if nd.name in node.which_child: + for n_i, n_ipt in enumerate(node.inputs): + if first_i == n_i: + continue + if n_ipt == nd.name: + new_nd_name = "{}/{}".format(nd.name, n_i) + if new_nd_name not in node.which_child: + node.which_child[new_nd_name] = idx + break + print(node.which_child) + else: + first_i = node.inputs.index(nd.name) + node.which_child[nd.name] = idx self.node_map[nd.name].index = 0 break if flag == 1: @@ -318,11 +330,18 @@ class ONNXGraph(Graph): if len(node.which_child) == 0: ipt_node = super(ONNXGraph, self).get_node(node.inputs[idx], copy) return ipt_node - else: ipt_node = super(ONNXGraph, self).get_node(node.inputs[idx], copy) - if ipt_node.layer_name in node.which_child: - ipt_node.index = node.which_child[ipt_node.layer_name] + new_ipt_name = "{}/{}".format(ipt_node.layer_name, idx) + if new_ipt_name in node.which_child: + print(new_ipt_name) + ipt_node.index = node.which_child[new_ipt_name] + print("ipt_node.index", ipt_node.index) + else: + if ipt_node.layer_name in node.which_child: + ipt_node.index = node.which_child[ipt_node.layer_name] + print("ipt_node.index", ipt_node.index) + return ipt_node diff --git a/x2paddle/op_mapper/dygraph/onnx2paddle/opset9/opset.py b/x2paddle/op_mapper/dygraph/onnx2paddle/opset9/opset.py index b1c1fd816ef76cee126171b055111bfe764fe705..7257e8268d355ab25721367b22cd062d5ba428d1 100644 --- a/x2paddle/op_mapper/dygraph/onnx2paddle/opset9/opset.py +++ b/x2paddle/op_mapper/dygraph/onnx2paddle/opset9/opset.py @@ -250,6 +250,7 @@ class OpSet9(): def _interpolate(self, node): val_x = self.graph.get_input_node(node, idx=0, copy=True) inputs = {'x': val_x.name} + attrs = dict() if node.layer_type == 'Resize': if len(node.layer.input) == 2: # opset 10 @@ -258,7 +259,7 @@ class OpSet9(): elif len(node.layer.input) == 3: # opset 11 val_scales = self.graph.get_input_node(node, idx=2, copy=True) - inputs['scale_factor'] = val_scales.name + attrs['scale_factor'] = self.weights[val_scales.name].tolist()[2:] elif len(node.layer.input) == 4: # opset 11 val_sizes = self.graph.get_input_node(node, idx=3, copy=True) @@ -281,7 +282,7 @@ class OpSet9(): ipt = inputs.pop("x") inputs["input"] = ipt mode = node.get_attr('mode', 'nearest') - attrs = {"align_corners": False} + attrs.update({"align_corners": False}) self.paddle_graph.add_layer( kernel="fluid.layers.resize_nearest", inputs=inputs, @@ -293,9 +294,9 @@ class OpSet9(): inputs['scale'] = val_scales mode = node.get_attr('mode', 'nearest') - attrs = {"align_corners": False, - "mode": string(mode), - "align_mode": 1} + attrs.update({"align_corners": False, + "mode": string(mode), + "align_mode": 1}) self.paddle_graph.add_layer( kernel="paddle.nn.functional.interpolate", inputs=inputs, @@ -926,16 +927,17 @@ class OpSet9(): 'max': max_value, 'min': min_value, } + self.paddle_graph.add_layer( 'paddle.clip', inputs={"x": val_x.name}, outputs=[node.name], **layer_attrs) else: - max_ipt = self.graph.get_input_node(node, idx=1, copy=True) - min_ipt = self.graph.get_input_node(node, idx=2, copy=True) - max_value = _const_weight_or_none(max_ipt) + min_ipt = self.graph.get_input_node(node, idx=1, copy=True) + max_ipt = self.graph.get_input_node(node, idx=2, copy=True) min_value = _const_weight_or_none(min_ipt) + max_value = _const_weight_or_none(max_ipt) if max_value.shape == (1, ): max_value = max_value[0] if min_value.shape == (1, ): @@ -1095,6 +1097,10 @@ class OpSet9(): dtypes = set() for i in range(len(node.layer.input)): ipt = self.graph.get_input_node(node, idx=i, copy=True) + try: + print(ipt.index) + except: + pass inputs_list.append(ipt.name) dtypes.add(ipt.dtype) if len(dtypes) > 1: diff --git a/x2paddle/op_mapper/static/onnx2paddle/opset9/opset.py b/x2paddle/op_mapper/static/onnx2paddle/opset9/opset.py index e4c5439dcc56d297628198fb537b811ef7b0f1ce..5dd87cffe7ed7c8108c7bad29aae65b87d877c93 100644 --- a/x2paddle/op_mapper/static/onnx2paddle/opset9/opset.py +++ b/x2paddle/op_mapper/static/onnx2paddle/opset9/opset.py @@ -240,6 +240,7 @@ class OpSet9(): def _interpolate(self, node): val_x = self.graph.get_input_node(node, idx=0, copy=True) inputs = {'x': val_x.name} + attrs = dict() if node.layer_type == 'Resize': if len(node.layer.input) == 2: # opset 10 @@ -248,7 +249,7 @@ class OpSet9(): elif len(node.layer.input) == 3: # opset 11 val_scales = self.graph.get_input_node(node, idx=2, copy=True) - inputs['scale_factor'] = val_scales.name + attrs['scale_factor'] = self.params[val_scales.name].tolist()[2:] elif len(node.layer.input) == 4: # opset 11 val_sizes = self.graph.get_input_node(node, idx=3, copy=True) @@ -271,7 +272,7 @@ class OpSet9(): ipt = inputs.pop("x") inputs["input"] = ipt mode = node.get_attr('mode', 'nearest') - attrs = {"align_corners": False} + attrs = attrs.update({"align_corners": False}) self.paddle_graph.add_layer( kernel="fluid.layers.resize_nearest", inputs=inputs, @@ -283,9 +284,9 @@ class OpSet9(): inputs['scale'] = val_scales mode = node.get_attr('mode', 'nearest') - attrs = {"align_corners": False, + attrs.update({"align_corners": False, "mode": string(mode), - "align_mode": 1} + "align_mode": 1}) self.paddle_graph.add_layer( kernel="paddle.nn.functional.interpolate", inputs=inputs, @@ -917,10 +918,10 @@ class OpSet9(): outputs=[node.name], **layer_attrs) else: - max_ipt = self.graph.get_input_node(node, idx=1, copy=True) - min_ipt = self.graph.get_input_node(node, idx=2, copy=True) - max_value = _const_weight_or_none(max_ipt) + min_ipt = self.graph.get_input_node(node, idx=1, copy=True) + max_ipt = self.graph.get_input_node(node, idx=2, copy=True) min_value = _const_weight_or_none(min_ipt) + max_value = _const_weight_or_none(max_ipt) if max_value.shape == (1, ): max_value = max_value[0] if min_value.shape == (1, ):