def build_graph_deconv(xyz, xyz_unpool, radius, nn_uplimit):
    # intra_idx, intra_cnt, intra_dst = neighbor_fn(xyz, xyz, radius=radius,
    #                                               nnsample=nn_uplimit)
    # inter_idx, inter_cnt, inter_dst = neighbor_fn(xyz, xyz_unpool, radius=radius,
    #                                               nnsample=nn_uplimit)
    intra_idx, intra_cnt, intra_dst = None, None, None
    inter_idx, inter_cnt, inter_dst = build_nearest_neighbor(xyz, xyz_unpool)

    return intra_idx, intra_cnt, intra_dst, inter_idx, inter_cnt, inter_dst
        xyz = xyz - np.mean(xyz, axis=0)
        scale = np.sqrt(np.amax(np.sum(np.square(xyz), axis=1)))
        xyz /= scale
        tmp1[i, ...] = xyz

        xyz = tmp2[i, ...]
        xyz = xyz - np.mean(xyz, axis=0)
        scale = np.sqrt(np.amax(np.sum(np.square(xyz), axis=1)))
        xyz /= scale
        tmp2[i, ...] = xyz

    maxIter = 100
    with tf.device('/gpu:0'):
        database = tf.constant(tmp1)
        query = tf.constant(tmp2)
        nn_index, nn_count, nn_dist = build_nearest_neighbor(database, query)
        weight = dist2weight(nn_count, nn_dist)
    with tf.Session(config=config) as sess:
        now = time.time()
        for _ in range(maxIter):
            nnIndex, nnCount, nnDist, Weight = sess.run(
                [nn_index, nn_count, nn_dist, weight])
        cpp_gpu_time = (time.time() - now) / maxIter
    print(cpp_gpu_time)

    now = time.time()
    check_weight = check_weight_inv(nnCount, nnDist)
    cpu_time = time.time() - now
    print(cpp_gpu_time, cpu_time)

    T = np.sum(check_weight, axis=-1)
    tmp0 = np.random.random((B, N, 3)).astype('float32')
    tmp1 = tmp0[:, np.random.choice(N, M, False), :]
    tmp2 = np.random.random((B, N, C)).astype('float32')
    tmp3 = np.random.random((B, M, C)).astype('float32')
    tmp4 = np.random.random((B, N, nnsample)).astype('float32')

    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    config.allow_soft_placement = True
    config.log_device_placement = False

    print(tmp0.shape, tmp1.shape)
    with tf.device('/gpu:0'):
        xyz0 = tf.constant(tmp0)
        xyz1 = tf.constant(tmp1)
        nn_index, nn_count, _ = build_nearest_neighbor(xyz1, xyz0)
    with tf.Session(config=config) as sess:
        unpoolIndex, unpoolCount = sess.run([nn_index, nn_count])

    print(unpoolIndex.shape, unpoolCount.shape)

    with tf.device('/gpu:0'):
        featIn = tf.constant(tmp3)
        weight = tf.constant(tmp4)
        gradOut = tf.constant(tmp2)
        feat_out = weighted_interpolate(featIn, weight, nn_index)
        grad_in = tf.gradients(feat_out, featIn, gradOut)

    with tf.Session(config=config) as sess:
        now = time.time()
        for _ in range(100):
Пример #4
0
    #     print(np.array_equal(nnIndex, check_nn_index), \
    #           np.allclose(nnDist, check_nn_dist))

    cpp_gpu_time = timeit.timeit(lambda: build_sphere_neighbor(
        database, query, nvDatabase, nvQuery, radius=radius, nnsample=nnsample
    ),
                                 number=maxIter)
    print(
        colored('sphereNN elapsed time: {}\n'.format(cpp_gpu_time / maxIter),
                'magenta'))

    cpp_gpu_time = timeit.timeit(
        lambda: build_cube_neighbor(database,
                                    query,
                                    nvDatabase,
                                    nvQuery,
                                    length=2 * radius,
                                    nnsample=nnsample,
                                    gridsize=gridSize),
        number=maxIter)
    print(
        colored('cubeNN elapsed time: {}\n'.format(cpp_gpu_time / maxIter),
                'magenta'))

    cpp_gpu_time = timeit.timeit(
        lambda: build_nearest_neighbor(database, query, nvDatabase, nvQuery),
        number=maxIter)
    print(
        colored('NN3 elapsed time: {}\n'.format(cpp_gpu_time / maxIter),
                'magenta'))