def build_from_onnx()

in onnxconverter_common/optimizer.py [0:0]


    def build_from_onnx(onnx_nodes, nchw_inputs, inputs, outputs, initializers=None, target_opset=None):
        view = []
        var_map = {}
        for o_ in onnx_nodes:
            ln = LinkedNode(o_, target_opset=target_opset)
            view.append(ln)
            for var_ in o_.output:
                assert var_map.get(var_) is None
                var_map[var_] = ln

        additional_nodes = []
        count_nchw = 0
        initializer_map = None
        if initializers is not None:
            initializer_map = {k.name: k for k in initializers}
        for n_ in view:
            for var_ in n_.origin.input:
                target = var_map.get(var_)
                if target is None:
                    assert var_ == '' or var_ in inputs
                    if initializer_map is not None and var_ in initializer_map:
                        target = LinkedNode(out_n=[var_],
                                            tensors_n=[initializer_map[var_]],
                                            target_opset=target_opset)  # create an empty node as input
                    else:
                        target = LinkedNode(out_n=[var_], target_opset=target_opset)
                    new_output = var_ + '_nhwc'
                    if var_ in nchw_inputs:
                        nnode = LinkedNode(
                            helper.make_node(
                                'Transpose',
                                [var_],
                                [new_output],
                                name='Transpose_nchw_' + str(count_nchw),
                                perm=[0, 2, 3, 1]),
                            target_opset=target_opset)
                        count_nchw = count_nchw + 1
                        var_map[new_output] = nnode
                        nnode.add_precedence(target, var_)
                        n_.in_redirect(var_, new_output)
                        target = nnode
                        var_ = new_output
                        additional_nodes.append(nnode)

                n_.add_precedence(target, var_)

        for n_ in view:  # add a dummy output node.
            for var_ in n_.origin.output:
                if var_ in outputs:
                    LinkedNode(in_n=[var_], target_opset=target_opset).add_precedence(n_, var_)

        return view + additional_nodes