Exemplo n.º 1
0
def test_concatenate():
    x1 = sym.Variable("x", shape=(10, 20))
    x2 = sym.Variable("y", shape=(10, 30))
    z = sym.concatenate(x1, x2, name="concat")
    g, ldict = correct_layout(z, {"x": "HW", "y": "HW"})
    assert (ldict["x"][0] == "HW")
    assert (ldict["y"][0] == "HW")
    assert (ldict["concat"][0] == "HW")
    # second pass will insert layout transform
    _, ldict = correct_layout(g, {"x": "HW16w", "y": "HW16w"})
    assert (ldict["x"][0] == "HW16w")
    assert (ldict["y"][0] == "HW16w")
    assert (ldict["concat"][0] == "HW16w")

    x1 = sym.Variable("x", shape=(10, 20, 60))
    x2 = sym.Variable("y", shape=(10, 20, 40))
    z = sym.concatenate(x1, x2, axis=2, name="concat")
    g, ldict = correct_layout(z, {"x": "H20wW", "y": "H20wW"})
    assert (ldict["x"][0] == "H20wW")
    assert (ldict["y"][0] == "H20wW")
    assert (ldict["concat"][0] == "H20wW")
    # second pass will insert layout transform
    _, ldict = correct_layout(g, {"x": "HW", "y": "HW"})
    assert (ldict["x_H20wW"][0] == "H20wW")
    assert (ldict["x_H20wW"][0] == "H20wW")
    assert (ldict["concat"][0] == "H20wW")
Exemplo n.º 2
0
def test_concatenate():
    x1 = sym.Variable("x", shape=(10, 20))
    x2 = sym.Variable("y", shape=(10, 30))
    z = sym.concatenate(x1, x2, name="concat")
    g, ldict = correct_layout(z, {"x": "HW", "y": "HW"})
    assert(ldict["x"][0] == "HW")
    assert(ldict["y"][0] == "HW")
    assert(ldict["concat"][0] == "HW")
    # second pass will insert layout transform
    _, ldict = correct_layout(g, {"x": "HW16w", "y": "HW16w"})
    assert(ldict["x"][0] == "HW16w")
    assert(ldict["y"][0] == "HW16w")
    assert(ldict["concat"][0] == "HW16w")

    x1 = sym.Variable("x", shape=(10, 20, 60))
    x2 = sym.Variable("y", shape=(10, 20, 40))
    z = sym.concatenate(x1, x2, axis=2, name="concat")
    g, ldict = correct_layout(z, {"x": "H20wW", "y": "H20wW"})
    assert(ldict["x"][0] == "H20wW")
    assert(ldict["y"][0] == "H20wW")
    assert(ldict["concat"][0] == "H20wW")
    # second pass will insert layout transform
    _, ldict = correct_layout(g, {"x": "HW", "y": "HW"})
    assert(ldict["x_H20wW"][0] == "H20wW")
    assert(ldict["x_H20wW"][0] == "H20wW")
    assert(ldict["concat"][0] == "H20wW")
Exemplo n.º 3
0
def test_concatenate():
    x1 = sym.Variable("x", shape=(10, 20))
    x2 = sym.Variable("y", shape=(10, 30))
    z = sym.concatenate(x1, x2, name="concat")
    sdict = infer_shape(z)
    assert(sdict["concat"][0] == [10, 50])
    z = sym.concatenate(x1, x1, axis=0, name="concat")
    sdict = infer_shape(z)
    assert(sdict["concat"][0] == [20, 20])
Exemplo n.º 4
0
def test_concatenate():
    x1 = sym.Variable("x", shape=(10, 20))
    x2 = sym.Variable("y", shape=(10, 30))
    z = sym.concatenate(x1, x2, name="concat")
    sdict = infer_shape(z)
    assert(sdict["concat"][0] == [10, 50])
    z = sym.concatenate(x1, x1, axis=0, name="concat")
    sdict = infer_shape(z)
    assert(sdict["concat"][0] == [20, 20])
Exemplo n.º 5
0
def test_concatenate_conv2d():
    ch = 3
    size = 8
    data = sym.Variable(name="data")
    concat = sym.concatenate(data, data, axis=1)
    conv = sym.conv2d(data=concat,
                      kernel_size=(1, 1),
                      channels=ch * 2,
                      use_bias=False,
                      name="conv")
    net = sym.elemwise_add(concat, conv)

    dtype = "float32"
    dshape = (1, ch, size, size)
    kshape = (ch * 2, ch * 2, 1, 1)
    oshape = (1, ch * 2, size, size)
    shape_dict = {"data": dshape}

    for target, ctx in ctx_list():
        graph, lib, _ = nnvm.compiler.build(net, target, shape_dict)
        # data, conv weight, conv op, concat
        assert graph.index.num_nodes == 4

        data = tvm.nd.array(np.random.uniform(size=dshape).astype(dtype))
        kernel = tvm.nd.array(np.random.uniform(size=kshape).astype(dtype))
        m = graph_runtime.create(graph, lib, ctx)
        m.run(data=data, conv_weight=kernel)
        # get output
        out = m.get_output(0, tvm.nd.empty(oshape, dtype))

        concat = np.concatenate((data.asnumpy(), data.asnumpy()), axis=1)
        conv = topi.testing.conv2d_nchw_python(concat, kernel.asnumpy(),
                                               (1, 1), 'SAME')
        ref = concat + conv
        np.testing.assert_allclose(out.asnumpy(), ref, rtol=1e-5)
Exemplo n.º 6
0
def test_concatenate_conv2d():
    ch = 3
    size = 8
    data = sym.Variable(name="data")
    concat = sym.concatenate(data, data, axis=1)
    conv = sym.conv2d(data=concat, kernel_size=(1,1), channels=ch*2, use_bias=False, name="conv")
    net = sym.elemwise_add(concat, conv)

    dtype="float32"
    dshape = (1, ch, size, size)
    kshape = (ch*2, ch*2, 1, 1)
    oshape = (1, ch*2, size, size)
    shape_dict = {"data": dshape}

    for target, ctx in ctx_list():
        graph, lib, _ = nnvm.compiler.build(net, target, shape_dict)
        # data, conv weight, conv op, concat
        assert graph.index.num_nodes == 4

        data = tvm.nd.array(np.random.uniform(size=dshape).astype(dtype))
        kernel = tvm.nd.array(np.random.uniform(size=kshape).astype(dtype))
        m = graph_runtime.create(graph, lib, ctx)
        m.run(data=data, conv_weight=kernel)
        # get output
        out = m.get_output(0, tvm.nd.empty(oshape, dtype))

        concat = np.concatenate((data.asnumpy(), data.asnumpy()), axis=1)
        conv = topi.testing.conv2d_nchw_python(
            concat, kernel.asnumpy(), (1,1), 'SAME')
        ref = concat + conv
        tvm.testing.assert_allclose(out.asnumpy(), ref, rtol=1e-5)
Exemplo n.º 7
0
def verify_concatenate(ishape, axis):
    x = [sym.Variable("x%d" % i, shape=ishape[i]) for i in range(len(ishape))]
    y = sym.concatenate(*x, axis=axis) + 1

    def forward(**kwargs):
        return np.concatenate(list(kwargs.values()), axis=axis) + 1

    check_function(y, forward)
def verify_concatenate(ishape, axis):
    x = [sym.Variable("x%d" % i, shape=ishape[i]) for i in range(len(ishape))]
    y = sym.concatenate(*x, axis=axis) + 1

    def forward(**kwargs):
        return np.concatenate(list(kwargs.values()), axis=axis) + 1

    check_function(y, forward)
Exemplo n.º 9
0
def _make_fire(net, squeeze_channels, expand1x1_channels, expand3x3_channels):
    net = _make_fire_conv(net, squeeze_channels, 1, 0)

    left = _make_fire_conv(net, expand1x1_channels, 1, 0)
    right = _make_fire_conv(net, expand3x3_channels, 3, 1)
    # NOTE : Assume NCHW layout here
    net = sym.concatenate(left, right, axis=1)

    return net
Exemplo n.º 10
0
def test_concatenate_split():
    x = sym.Variable('x')
    y = sym.Variable('y')
    y = sym.concatenate(x, y)
    assert y.list_input_names() == ['x', 'y']
    z = sym.split(y, indices_or_sections=10)
    assert len(z.list_output_names()) == 10
    z = sym.split(y, indices_or_sections=[10, 20])
    assert len(z.list_output_names()) == 3
Exemplo n.º 11
0
def _make_fire(net, squeeze_channels, expand1x1_channels, expand3x3_channels):
    net = _make_fire_conv(net, squeeze_channels, 1, 0)

    left = _make_fire_conv(net, expand1x1_channels, 1, 0)
    right = _make_fire_conv(net, expand3x3_channels, 3, 1)
    # NOTE : Assume NCHW layout here
    net = sym.concatenate(left, right, axis=1)

    return net
Exemplo n.º 12
0
def test_concatenate_split():
    x = sym.Variable('x')
    y = sym.Variable('y')
    y = sym.concatenate(x, y)
    assert y.list_input_names() == ['x', 'y']
    z = sym.split(y, indices_or_sections=10)
    assert len(z.list_output_names()) == 10
    z = sym.split(y, indices_or_sections=[10, 20])
    assert len(z.list_output_names()) == 3
Exemplo n.º 13
0
def verify_concatenate(ishape, axis):
    x = [sym.Variable("x%d" % i) for i in range(len(ishape))]
    y = sym.concatenate(*x, axis=axis) + 1

    def forward(**kwargs):
        return np.concatenate(tuple(kwargs.values()), axis=axis) + 1

    dtype = "float32"
    inputs = dict(("x%d" % i, (ishape[i], )) for (i, input) in enumerate(x))
    helper(y, inputs, dtype, forward)
Exemplo n.º 14
0
    def Inception7A(data, num_1x1, num_3x3_red, num_3x3_1, num_3x3_2,
                    num_5x5_red, num_5x5, pool, proj, name):
        # num_1x1 = 64
        # num_3x3_red = 64
        # num_3x3_1 = 96
        # num_3x3_2 = 96
        # num_5x5_red = 48
        # num_5x5 = 64
        tower_1x1 = Conv(data, num_1x1, name=('%s_conv' % name))

        tower_5x5 = Conv(data,
                         num_5x5_red,
                         name=('%s_tower' % name),
                         suffix='_conv')
        tower_5x5 = Conv(tower_5x5,
                         num_5x5,
                         kernel=(5, 5),
                         pad=(2, 2),
                         name=('%s_tower' % name),
                         suffix='_conv_1')

        tower_3x3 = Conv(data,
                         num_3x3_red,
                         name=('%s_tower_1' % name),
                         suffix="_conv")
        tower_3x3 = Conv(tower_3x3,
                         num_3x3_1,
                         kernel=(3, 3),
                         pad=(1, 1),
                         name=('%s_tower_1' % name),
                         suffix='_conv_1')
        tower_3x3 = Conv(tower_3x3,
                         num_3x3_2,
                         kernel=(3, 3),
                         pad=(1, 1),
                         name=('%s_tower_1' % name),
                         suffix='_conv_2')
        pooling = Pooling(data,
                          kernel=(3, 3),
                          stride=(1, 1),
                          pad=(1, 1),
                          pool_type=pool,
                          name=('%s_pool_%s_pool' % (pool, name)))

        cproj = Conv(pooling, proj, name=('%s_tower_2' % name), suffix='_conv')
        concat = sym.concatenate(*[tower_1x1, tower_5x5, tower_3x3, cproj],
                                 axis=3,
                                 name='ch_concat_%s_chconcat' % name)
        return concat
Exemplo n.º 15
0
    def Inception7D(data, num_3x3_red, num_3x3, num_d7_3x3_red, num_d7_1,
                    num_d7_2, num_d7_3x3, pool, name):
        tower_3x3 = Conv(data=data,
                         num_filter=num_3x3_red,
                         name=('%s_tower' % name),
                         suffix='_conv')
        tower_3x3 = Conv(data=tower_3x3,
                         num_filter=num_3x3,
                         kernel=(3, 3),
                         pad=(0, 0),
                         stride=(2, 2),
                         name=('%s_tower' % name),
                         suffix='_conv_1')

        tower_d7_3x3 = Conv(data=data,
                            num_filter=num_d7_3x3_red,
                            name=('%s_tower_1' % name),
                            suffix='_conv')
        tower_d7_3x3 = Conv(data=tower_d7_3x3,
                            num_filter=num_d7_1,
                            kernel=(1, 7),
                            pad=(0, 3),
                            name=('%s_tower_1' % name),
                            suffix='_conv_1')
        tower_d7_3x3 = Conv(data=tower_d7_3x3,
                            num_filter=num_d7_2,
                            kernel=(7, 1),
                            pad=(3, 0),
                            name=('%s_tower_1' % name),
                            suffix='_conv_2')
        tower_d7_3x3 = Conv(data=tower_d7_3x3,
                            num_filter=num_d7_3x3,
                            kernel=(3, 3),
                            stride=(2, 2),
                            name=('%s_tower_1' % name),
                            suffix='_conv_3')
        pooling = Pooling(data=data,
                          kernel=(3, 3),
                          stride=(2, 2),
                          pool_type=pool,
                          pad=(0, 0),
                          name=('%s_pool_%s_pool' % (pool, name)))

        concat = sym.concatenate(*[tower_3x3, tower_d7_3x3, pooling],
                                 axis=3,
                                 name='ch_concat_%s_chconcat' % name)
        return concat
Exemplo n.º 16
0
def verify_concatenate(ishape, axis):
    x = [sym.Variable("x%d" % i) for i in range(len(ishape))]
    y = sym.concatenate(*x, axis=axis) + 1
    dtype = "float32"
    for target, ctx in ctx_list():
        # set input
        data = []
        for i, shape in enumerate(ishape):
            data.append(np.random.uniform(size=shape).astype(dtype))
        pdict = {"x%d" % i: v for i, v in enumerate(data)}
        shape = {"x%d" % i: v.shape for i, v in enumerate(data)}
        graph, lib, _ = nnvm.compiler.build(y, target, shape)
        m = graph_runtime.create(graph, lib, ctx)
        m.run(**pdict)
        out_np = np.concatenate(data, axis=axis) + 1
        out = m.get_output(0, tvm.nd.empty(out_np.shape))
        np.testing.assert_allclose(out.asnumpy(), out_np, atol=1e-5, rtol=1e-5)
Exemplo n.º 17
0
def verify_concatenate(ishape, axis):
    x = [sym.Variable("x%d" % i) for i in range(len(ishape))]
    y = sym.concatenate(*x, axis=axis) + 1
    dtype = "float32"
    for target, ctx in ctx_list():
        # set input
        data = []
        for i, shape in enumerate(ishape):
            data.append(np.random.uniform(size=shape).astype(dtype))
        pdict = {"x%d" % i :  v for i, v in enumerate(data)}
        shape = {"x%d" % i :  v.shape for i, v in enumerate(data)}
        graph, lib, _ = nnvm.compiler.build(y, target, shape)
        m = graph_runtime.create(graph, lib, ctx)
        m.run(**pdict)
        out_np = np.concatenate(data, axis=axis) + 1
        out = m.get_output(0, tvm.nd.empty(out_np.shape))
        np.testing.assert_allclose(out.asnumpy(), out_np, atol=1e-5, rtol=1e-5)
Exemplo n.º 18
0
def test1():

    in_shape = [3, 3, 3]
    out_shape = [3, 3, 3, 2]
    data = {
        "x": np.arange(np.prod(in_shape), dtype=np.float32).reshape(in_shape),
        "y": np.arange(np.prod(in_shape), dtype=np.float32).reshape(in_shape)
    }

    axis = -4
    x = sym.Variable("x")
    y = sym.Variable("y")

    x = sym.expand_dims(x, axis=axis, num_newaxis=1)  # sym.elemwise_add(x,y)
    y = sym.expand_dims(y, axis=axis, num_newaxis=1)  # sym.elemwise_add(x,y)
    z = sym.concatenate(x, y, axis=-4)

    nnvm_graph = nnvm.graph.create(z)
    print('Got NNVM graph')
    print(nnvm_graph.json())

    in_shapes_dict = {n: list(np.shape(v)) for n, v in data.items()}
    tvm_graph, lib, params = nnvm.compiler.build(nnvm_graph, 'llvm',
                                                 in_shapes_dict)
    print('Got TVM graph')

    ctx = tvm.cpu(0)
    graph_module = graph_runtime.create(tvm_graph, lib, ctx)
    print('Got graph module')

    print(tvm_graph.__dir__())
    print(tvm_graph.json())

    for name, value in data.items():
        graph_module.set_input(name, value)

    graph_module.run()

    out_value = graph_module.get_output(0, tvm.nd.empty((out_shape),
                                                        'float32'))

    # print('Inputs:\nX:', data["x"], "\nY:", data["y"])
    print('Output value:', type(out_value), '\nShape:', out_value.shape,
          '\nO:', out_value)
Exemplo n.º 19
0
    def Inception7B(data, num_3x3, num_d3x3_red, num_d3x3_1, num_d3x3_2, pool,
                    name):
        tower_3x3 = Conv(data,
                         num_3x3,
                         kernel=(3, 3),
                         pad=(0, 0),
                         stride=(2, 2),
                         name=('%s_conv' % name))

        tower_d3x3 = Conv(data,
                          num_d3x3_red,
                          name=('%s_tower' % name),
                          suffix='_conv')
        tower_d3x3 = Conv(tower_d3x3,
                          num_d3x3_1,
                          kernel=(3, 3),
                          pad=(1, 1),
                          stride=(1, 1),
                          name=('%s_tower' % name),
                          suffix='_conv_1')
        tower_d3x3 = Conv(tower_d3x3,
                          num_d3x3_2,
                          kernel=(3, 3),
                          pad=(0, 0),
                          stride=(2, 2),
                          name=('%s_tower' % name),
                          suffix='_conv_2')

        pooling = Pooling(data=data,
                          kernel=(3, 3),
                          stride=(2, 2),
                          pad=(0, 0),
                          pool_type="max",
                          name=('max_pool_%s_pool' % name))
        concat = sym.concatenate(*[tower_3x3, tower_d3x3, pooling],
                                 axis=3,
                                 name='ch_concat_%s_chconcat' % name)
        return concat
Exemplo n.º 20
0
def test_alter_conv2d_layout():
    data = sym.Variable("data", shape=(1, 32, 512, 512))
    conv = sym.conv2d(data,
                      name="conv",
                      channels=16,
                      kernel_size=(3, 3),
                      padding=(1, 1),
                      use_bias=False,
                      layout="NCHW")
    # split here
    convs = sym.split(conv, indices_or_sections=2)
    relus = [sym.relu(x, name="relu") for x in convs]
    relu = sym.concatenate(*relus)
    flatten = sym.flatten(relu, name="flatten")
    softmax = sym.softmax(flatten, name="softmax")
    g = graph.create(softmax)

    g = g.apply("CorrectLayout")
    g = graph_attr.set_dtype_inputs(g, "float32")
    g = g.apply(["InferShape", "InferType"])
    layouts_origin = get_layouts(g)

    @reg.register_alter_op_layout("conv2d", level=100)
    def alter_conv2d_layout(attrs, inputs, tinfos):
        new_attrs = {k: attrs[k] for k in attrs.keys()}
        new_attrs["layout"] = "NCHW16c"
        new_attrs["kernel_layout"] = "NCHW16c"
        new_attrs["name"] = "conv_alter"
        return sym.conv2d(inputs[0], inputs[1], **new_attrs)

    g = g.apply("AlterOpLayout")
    layouts = get_layouts(g)

    # check copy layouts
    for node in ["data", "relu", "flatten", "softmax", "conv_weight"]:
        assert layouts[node] == layouts_origin[node]
    assert layouts["conv_alter"] == layouts_origin["conv"]
Exemplo n.º 21
0
    def Inception7E(data, num_1x1, num_d3_red, num_d3_1, num_d3_2,
                    num_3x3_d3_red, num_3x3, num_3x3_d3_1, num_3x3_d3_2, pool,
                    proj, name):

        tower_1x1 = Conv(data=data,
                         num_filter=num_1x1,
                         kernel=(1, 1),
                         name=('%s_conv' % name))

        tower_d3 = Conv(data=data,
                        num_filter=num_d3_red,
                        name=('%s_tower' % name),
                        suffix='_conv')
        tower_d3_a = Conv(data=tower_d3,
                          num_filter=num_d3_1,
                          kernel=(1, 3),
                          pad=(0, 1),
                          name=('%s_tower' % name),
                          suffix='_mixed_conv')
        tower_d3_b = Conv(data=tower_d3,
                          num_filter=num_d3_2,
                          kernel=(3, 1),
                          pad=(1, 0),
                          name=('%s_tower' % name),
                          suffix='_mixed_conv_1')

        tower_3x3_d3 = Conv(data=data,
                            num_filter=num_3x3_d3_red,
                            name=('%s_tower_1' % name),
                            suffix='_conv')
        tower_3x3_d3 = Conv(data=tower_3x3_d3,
                            num_filter=num_3x3,
                            kernel=(3, 3),
                            pad=(1, 1),
                            name=('%s_tower_1' % name),
                            suffix='_conv_1')
        tower_3x3_d3_a = Conv(data=tower_3x3_d3,
                              num_filter=num_3x3_d3_1,
                              kernel=(1, 3),
                              pad=(0, 1),
                              name=('%s_tower_1' % name),
                              suffix='_mixed_conv')
        tower_3x3_d3_b = Conv(data=tower_3x3_d3,
                              num_filter=num_3x3_d3_2,
                              kernel=(3, 1),
                              pad=(1, 0),
                              name=('%s_tower_1' % name),
                              suffix='_mixed_conv_1')

        pooling = Pooling(data=data,
                          kernel=(3, 3),
                          stride=(1, 1),
                          pad=(1, 1),
                          pool_type=pool,
                          name=('%s_pool_%s_pool' % (pool, name)))
        cproj = Conv(data=pooling,
                     num_filter=proj,
                     kernel=(1, 1),
                     name=('%s_tower_2' % name),
                     suffix='_conv')

        concat = sym.concatenate(*[
            tower_1x1, tower_d3_a, tower_d3_b, tower_3x3_d3_a, tower_3x3_d3_b,
            cproj
        ],
                                 axis=3,
                                 name='ch_concat_%s_chconcat' % name)
        return concat
Exemplo n.º 22
0
    def Inception7C(data, num_1x1, num_d7_red, num_d7_1, num_d7_2, num_q7_red,
                    num_q7_1, num_q7_2, num_q7_3, num_q7_4, pool, proj, name):
        tower_1x1 = Conv(data=data,
                         num_filter=num_1x1,
                         kernel=(1, 1),
                         name=('%s_conv' % name))

        tower_d7 = Conv(data=data,
                        num_filter=num_d7_red,
                        name=('%s_tower' % name),
                        suffix='_conv')
        tower_d7 = Conv(data=tower_d7,
                        num_filter=num_d7_1,
                        kernel=(1, 7),
                        pad=(0, 3),
                        name=('%s_tower' % name),
                        suffix='_conv_1')
        tower_d7 = Conv(data=tower_d7,
                        num_filter=num_d7_2,
                        kernel=(7, 1),
                        pad=(3, 0),
                        name=('%s_tower' % name),
                        suffix='_conv_2')

        tower_q7 = Conv(data=data,
                        num_filter=num_q7_red,
                        name=('%s_tower_1' % name),
                        suffix='_conv')
        tower_q7 = Conv(data=tower_q7,
                        num_filter=num_q7_1,
                        kernel=(7, 1),
                        pad=(3, 0),
                        name=('%s_tower_1' % name),
                        suffix='_conv_1')
        tower_q7 = Conv(data=tower_q7,
                        num_filter=num_q7_2,
                        kernel=(1, 7),
                        pad=(0, 3),
                        name=('%s_tower_1' % name),
                        suffix='_conv_2')
        tower_q7 = Conv(data=tower_q7,
                        num_filter=num_q7_3,
                        kernel=(7, 1),
                        pad=(3, 0),
                        name=('%s_tower_1' % name),
                        suffix='_conv_3')
        tower_q7 = Conv(data=tower_q7,
                        num_filter=num_q7_4,
                        kernel=(1, 7),
                        pad=(0, 3),
                        name=('%s_tower_1' % name),
                        suffix='_conv_4')

        pooling = Pooling(data=data,
                          kernel=(3, 3),
                          stride=(1, 1),
                          pad=(1, 1),
                          pool_type=pool,
                          name=('%s_pool_%s_pool' % (pool, name)))
        cproj = Conv(data=pooling,
                     num_filter=proj,
                     kernel=(1, 1),
                     name=('%s_tower_2' % name),
                     suffix='_conv')

        concat = sym.concatenate(*[tower_1x1, tower_d7, tower_q7, cproj],
                                 axis=3,
                                 name='ch_concat_%s_chconcat' % name)
        return concat