Exemplo n.º 1
0
    def test_import_empty_dim_tensor(self):
        shape = (None, )
        onnx_tensor = onnx.helper.make_tensor_value_info("test0", onnx.TensorProto.FLOAT, shape)
        onnx_tensor.type.tensor_type.shape.dim[0].ClearField("dim_value")
        onnx_tensor.type.tensor_type.shape.dim[0].ClearField("dim_param")

        tensor = OnnxImporter.import_tensor(onnx_tensor)
        assert type(tensor) == Variable
        assert tuple(tensor.shape) == shape
Exemplo n.º 2
0
 def test_import_constant_tensor(self):
     shape = (3, 3, 3)
     dtype = np.float32
     onnx_tensor = onnx.numpy_helper.from_array(
         np.ones(shape=shape, dtype=dtype))
     tensor = OnnxImporter.import_tensor(onnx_tensor)
     assert type(tensor) == Constant
     assert tensor.dtype == dtype
     assert tensor.shape == shape
Exemplo n.º 3
0
 def test_import_variable_tensor(self):
     name = "test0"
     shape = (1, 2, 3, 4)
     onnx_tensor = onnx.helper.make_tensor_value_info(name, onnx.TensorProto.FLOAT, shape)
     tensor = OnnxImporter.import_tensor(onnx_tensor)
     assert type(tensor) == Variable
     assert tensor.name == name
     assert tensor.dtype == np.float32
     assert tuple(tensor.shape) == shape
Exemplo n.º 4
0
def initializer_is_output_model():
    path = os.path.join(TEST_ROOT, "models", "initializer_is_output.onnx")
    model = onnx.load(path)

    X = Constant(name="X", values=np.ones((64, 64), dtype=np.float32))

    return Model(path,
                 inputs=[],
                 outputs=[X],
                 nodes=[],
                 opset=OnnxImporter.get_opset(model))
Exemplo n.º 5
0
def identity_model():
    path = os.path.join(TEST_ROOT, "models", "identity.onnx")
    model = onnx.load(path)

    x = Variable(name="x", dtype=np.float32, shape=(1, 1, 2, 2))
    y = Variable(name="y", dtype=np.float32, shape=(1, 1, 2, 2))
    node = Node(op="Identity", inputs=[x], outputs=[y])

    return Model(path,
                 inputs=[x],
                 outputs=[y],
                 nodes=[node],
                 opset=OnnxImporter.get_opset(model))
Exemplo n.º 6
0
def dim_param_model():
    path = os.path.join(TEST_ROOT, "models", "dim_param.onnx")
    model = onnx.load(path)

    x = Variable(name="Input:0", dtype=np.float32, shape=("dim0", 16, 128))
    y = Variable(name="Output:0", dtype=np.float32, shape=("dim0", 16, 128))
    node = Node(op="Identity", inputs=[x], outputs=[y])

    return Model(path,
                 inputs=[x],
                 outputs=[y],
                 nodes=[node],
                 opset=OnnxImporter.get_opset(model))
Exemplo n.º 7
0
def scan_model():
    path = os.path.join(TEST_ROOT, "models", "scan.onnx")
    model = onnx.load(path)

    # Body graph
    sum_in = Variable(name="sum_in", dtype=np.float32, shape=(2, ))
    next = Variable(name="next", dtype=np.float32, shape=(2, ))
    sum_out = Variable(name="sum_out", dtype=np.float32, shape=(2, ))
    scan_out = Variable(name="scan_out", dtype=np.float32, shape=(2, ))

    body_nodes = [
        Node(op="Add", inputs=[sum_in, next], outputs=[sum_out]),
        Node(op="Identity", inputs=[sum_out], outputs=[scan_out]),
    ]
    body_graph = Graph(nodes=body_nodes,
                       inputs=[sum_in, next],
                       outputs=[sum_out, scan_out],
                       name="scan_body")

    # Outer graph
    inputs = [
        Variable(name="initial", dtype=np.float32, shape=(2, )),
        Variable(name="x", dtype=np.float32, shape=(3, 2)),
    ]
    outputs = [
        Variable(name="y", dtype=np.float32, shape=(2, )),
        Variable(name="z", dtype=np.float32, shape=(3, 2)),
    ]

    attrs = OrderedDict()
    attrs["body"] = body_graph
    attrs["num_scan_inputs"] = 1
    scan_node = Node(op="Scan", inputs=inputs, outputs=outputs, attrs=attrs)
    return Model(
        path,
        inputs=inputs,
        outputs=outputs,
        nodes=[scan_node],
        opset=OnnxImporter.get_opset(model),
    )
Exemplo n.º 8
0
def lstm_model():
    path = os.path.join(TEST_ROOT, "models", "lstm.onnx")
    model = onnx.load(path)
    onnx_graph = model.graph

    def load_initializer(index: int) -> np.ndarray:
        return onnx.numpy_helper.to_array(onnx_graph.initializer[index])

    # Optional inputs are represented by empty tensors
    X = Variable(name="X", dtype=np.float32, shape=(4, 3, 6))
    W = Constant(name="W", values=load_initializer(0))
    R = Constant(name="R", values=load_initializer(1))
    B = Constant(name="B", values=load_initializer(2))
    initial_c = Constant(name="initial_c", values=load_initializer(3))

    Y = Variable(name="Y", dtype=np.float32, shape=(4, 1, 3, 5))
    Y_h = Variable(name="Y_h", dtype=np.float32, shape=(1, 3, 5))
    Y_c = Variable(name="Y_c", dtype=np.float32, shape=(1, 3, 5))

    attrs = OrderedDict()
    attrs["direction"] = "forward"
    attrs["hidden_size"] = 5
    node = Node(
        op="LSTM",
        attrs=attrs,
        inputs=[X, W, R, B,
                Variable.empty(),
                Variable.empty(), initial_c],
        outputs=[Y, Y_h, Y_c],
    )

    # Initializers will not be included in the graph inputs.
    return Model(
        path,
        inputs=[X],
        outputs=[Y, Y_h, Y_c],
        nodes=[node],
        opset=OnnxImporter.get_opset(model),
    )
Exemplo n.º 9
0
    def test_import_node(self):
        op = "Test"
        inputs = ["x"]
        outputs = ["y"]
        float_attr = 4.0
        int_attr = 10
        str_attr = "constant"
        tensor_vals = np.ones(shape=(1, 2, 3, 4), dtype=np.float32)
        tensor_attr = onnx.numpy_helper.from_array(tensor_vals)
        floats_attr = [1.0, 2.0, 3.0, 4.0]
        ints_attr = [4, 3, 2, 1]
        strings_attr = ["constant", "and", "variable"]

        onnx_node = onnx.helper.make_node(op, inputs, outputs, float_attr=float_attr, int_attr=int_attr, str_attr=str_attr, tensor_attr=tensor_attr, floats_attr=floats_attr, ints_attr=ints_attr, strings_attr=strings_attr)
        node = OnnxImporter.import_node(onnx_node, OrderedDict(), OrderedDict())
        assert node.op == op
        assert node.attrs["float_attr"] == float_attr
        assert node.attrs["int_attr"] == int_attr
        assert node.attrs["str_attr"] == str_attr
        # Tensor should turn into a Constant
        assert np.all(node.attrs["tensor_attr"].values == tensor_vals)
        assert node.attrs["floats_attr"] == floats_attr
        assert node.attrs["ints_attr"] == ints_attr
        assert node.attrs["strings_attr"] == strings_attr
Exemplo n.º 10
0
 def test_import_graph_tensor_map_preserved(self):
     model = identity_model()
     tensor_map = OrderedDict()
     graph = OnnxImporter.import_graph(model.load().graph, tensor_map=tensor_map)
     assert len(tensor_map) == 0
     model.assert_equal(graph)
Exemplo n.º 11
0
 def test_import_empty_dim_param_tensor(self):
     shape = (1, 2, "non-empty", "")
     onnx_tensor = onnx.helper.make_tensor_value_info("test0", onnx.TensorProto.FLOAT, shape)
     tensor = OnnxImporter.import_tensor(onnx_tensor)
     assert type(tensor) == Variable
     assert tuple(tensor.shape) == shape
Exemplo n.º 12
0
 def test_import_graph_value_info(self):
     model = onnx.shape_inference.infer_shapes(identity_model().load())
     graph = OnnxImporter.import_graph(model.graph)
     tensors = graph.tensors()
     assert all([type(tensor) == Variable and tensor.dtype is not None and tensor.shape for tensor in tensors.values()])
Exemplo n.º 13
0
 def test_import_graph(self, model):
     graph = OnnxImporter.import_graph(model.load().graph)
     model.assert_equal(graph)
Exemplo n.º 14
0
 def test_import_tensor_unknown_metadata(self):
     name = "test0"
     onnx_tensor = onnx.helper.make_empty_tensor_value_info(name)
     tensor = OnnxImporter.import_tensor(onnx_tensor)
     assert type(tensor) == Variable
     assert tensor.name == name
Exemplo n.º 15
0
 def test_import_graph_with_dim_param(self):
     model = dim_param_model()
     graph = OnnxImporter.import_graph(model.load().graph)
     model.assert_equal(graph)
Exemplo n.º 16
0
 def test_import_graph_with_initializer(self):
     model = lstm_model()
     graph = OnnxImporter.import_graph(model.load().graph)
     model.assert_equal(graph)
Exemplo n.º 17
0
 def test_import_unknown_shape_tensor(self):
     shape = None
     onnx_tensor = onnx.helper.make_tensor_value_info("test0", onnx.TensorProto.FLOAT, shape)
     tensor = OnnxImporter.import_tensor(onnx_tensor)
     assert type(tensor) == Variable
     assert tensor.shape is None
Exemplo n.º 18
0
 def test_export(self):
     with tempfile.NamedTemporaryFile() as f:
         onnx_model = gs.export_onnx(self.imported_graph)
         assert onnx_model
         assert OnnxImporter.import_graph(
             onnx_model.graph) == self.imported_graph
Exemplo n.º 19
0
 def setup_method(self):
     self.imported_graph = OnnxImporter.import_graph(
         identity_model().load().graph)