Exemplo n.º 1
0
def iter_l2_attack_1_sampling_all(model, x, y, params):
    epsilon = params["epsilon"]
    n = params["n"]
    k = params["k"]
    kappa = params["kappa"]
    tri_all_points = params["tri_all_points"]

    epsilon = epsilon / float(n)
    x_perturb = x

    for i in range(n):
        grad = model.grad_fn(x_perturb, y)
        perturb = epsilon * grad / np.sqrt(np.sum(grad**2))
        x_perturb = x_perturb + perturb

    sort_idx = np.argsort(np.linalg.norm(x_perturb - x, axis=1))
    perturbed = x_perturb[sort_idx[k:]]

    border_points, border_triangles = alpha_shape_border(
        x_perturb if tri_all_points else perturbed)

    triangles = []

    for tri in border_triangles:
        triangles.append(border_points[tri])

    sampled = farthest_point_sampling(np.array(triangles), None,
                                      len(x_perturb), kappa)

    return sampled
Exemplo n.º 2
0
def example_alpha_shape(label="chair"):
    np.random.seed(1234)

    view_label = label
    offset_idx = 0
    num_points = 1024
    f = h5py.File("../data/point_clouds.hdf5", "r")
    shape_names = [line.rstrip() for line in open("../data/shape_names.txt")]

    pc = f["points"][:][:, :num_points]
    labels = f["labels"][:]

    f.close()
    
    print("Shape:", pc.shape)
    print("Number of points:", num_points)
    print("Labels:", [shape_names[idx] for idx in np.unique(labels)])
    print("Selected label:", view_label)

    match_idx = np.where(labels == shape_names.index(view_label))[0]
    view_pc = pc[match_idx[offset_idx]]

    print("Shape index:", match_idx[offset_idx])

    plt.figure(figsize = (30, 15))

    plt.subplot(121, projection = "3d")

    plt.gca().scatter(*view_pc.T, zdir = "y", s = 20, c = view_pc.T[1], cmap = "winter")

    scale_plot()

    plt.subplot(122, projection = "3d")

    alpha_points, alpha_triangles = alpha_shape_border(view_pc, alpha_std = 0.0, epsilon = 0.001)
    alpha_points = alpha_points[:, (0, 2, 1)]

    print("Number of points in alpha shape:", alpha_points.shape[0])
    print("Number of triangles in alpha shape:", alpha_triangles.shape[0])

    plt.gca().plot_trisurf(*alpha_points.T, triangles = alpha_triangles, cmap = "winter")

    scale_plot()

    plt.subplots_adjust(left = 0, bottom = 0, right = 1, top = 1, wspace = 0, hspace = 0)
    plt.show()
    def __init__(self, x, alpha_std = 0.0, thickness = 0.0):
        self.thickness = thickness

        # construct the bounding triangles of the points
        border_points, border_tri = alpha_shape_border(x, alpha_std = alpha_std)
        triangles, tri_center, self.max_radius = _calc_tri_center(border_points, border_tri)
        triangles = np.array(triangles)
        tri_center = np.vstack(tri_center)

        self.center = np.empty((len(triangles) * 2, 3))
        self.radius_lo = np.empty(len(triangles) * 2)
        self.radius_hi = np.empty(len(triangles) * 2)
        self.inside_node = np.empty(len(triangles) * 2, dtype = int)
        self.outside_node = np.empty(len(triangles) * 2, dtype = int)
        self.triangle = np.empty((len(triangles) * 2, 3, 3))
        self.is_leaf = np.empty(len(triangles) * 2, dtype = bool)
        self.curr_idx = 0

        self.root = self.build(triangles, tri_center)
    def __init__(self, x, alpha_std = 0.0, thickness = 0.0):
        self.thickness = thickness

        # construct the bounding triangles of the points
        border_points, border_tri = alpha_shape_border(x, alpha_std = alpha_std)
        triangles = []
        tri_center = []
        self.max_radius = 0.0

        for tri in border_tri:
            # get the minimum bounding sphere of each triangle
            tri = border_points[tri]
            center, radius = bounding_sphere(tri)
            triangles.append(tri)
            tri_center.append(center)
            self.max_radius = max(self.max_radius, radius)

        triangles = np.array(triangles)
        tri_center = np.vstack(tri_center)

        self.root = self.build(triangles, tri_center)
Exemplo n.º 5
0
def iter_l2_attack_n_sampling_rbf(model, x, y, params):
    epsilon = params["epsilon"]
    n = params["n"]
    k = params["k"]
    kappa = params["kappa"]
    num_farthest = params["num_farthest"]
    shape = params["shape"]

    epsilon = epsilon / float(n)
    x_perturb = x

    for i in range(n):
        grad = model.grad_fn(x_perturb, y)
        perturb = epsilon * grad / np.sqrt(np.sum(grad**2))
        x_perturb = x_perturb + perturb

        sort_idx = np.argsort(np.linalg.norm(x_perturb - x, axis=1))
        perturbed = x_perturb[sort_idx[k:]]

        border_points, border_triangles = alpha_shape_border(x_perturb)

        triangles = []

        for tri in border_triangles:
            triangles.append(border_points[tri])

        sampled = radial_basis_sampling(np.array(triangles), perturbed, k,
                                        kappa, num_farthest, shape)

        x_sample = np.empty((len(x_perturb), 3))

        for i in range(len(sort_idx)):
            if i < k:
                x_sample[sort_idx[i]] = sampled[i]
            else:
                x_sample[sort_idx[i]] = x_perturb[sort_idx[i]]

        x_perturb = x_sample

    return x_perturb
Exemplo n.º 6
0
def iter_l2_attack_n_sampling(model, x, y, params):
    epsilon = float(params["epsilon"])
    n = int(params["n"])
    k = int(params["k"])
    kappa = int(params["kappa"])
    tri_all_points = str(params["tri_all_points"]) == "True"

    epsilon = epsilon / float(n)
    x_perturb = x

    for i in range(n):
        grad = model.grad_fn(x_perturb, y)
        perturb = epsilon * grad / np.sqrt(np.sum(grad**2))
        x_perturb = x_perturb + perturb

        sort_idx = np.argsort(np.linalg.norm(x_perturb - x, axis=1))
        perturbed = x_perturb[sort_idx[k:]]

        border_points, border_triangles = alpha_shape_border(
            x_perturb if tri_all_points else perturbed)

        triangles = []

        for tri in border_triangles:
            triangles.append(border_points[tri])

        sampled = farthest_point_sampling(np.array(triangles), perturbed, k,
                                          kappa)

        x_sample = np.empty((len(x_perturb), 3))

        for i in range(len(sort_idx)):
            if i < k:
                x_sample[sort_idx[i]] = sampled[i]
            else:
                x_sample[sort_idx[i]] = x_perturb[sort_idx[i]]

        x_perturb = x_sample

    return x_perturb
view_pc = pc[match_idx[offset_idx]]

print("Shape index:", match_idx[offset_idx])

plt.figure(figsize=(30, 15))


def scale_plot():
    plt.gca().auto_scale_xyz((-1, 1), (-1, 1), (-1, 1))
    plt.gca().view_init(0, 0)
    plt.axis("off")


plt.subplot(121, projection="3d")

alpha_points, alpha_triangles = alpha_shape_border(view_pc)
alpha_points = alpha_points[:, (0, 2, 1)]

print("Number of points in alpha shape:", alpha_points.shape[0])
print("Number of triangles in alpha shape:", alpha_triangles.shape[0])

plt.gca().plot_trisurf(*alpha_points.T, triangles=alpha_triangles)

rand_perturb = (np.random.random(view_pc.shape) * 0.03 +
                0.03) * np.random.choice(np.array([-1, 1]), size=view_pc.shape)
perturbed = view_pc + rand_perturb

colors = np.random.random(num_points)
plt.gca().scatter(*perturbed.T, zdir="y", s=300, c=colors, cmap="rainbow")

scale_plot()
print("Shape index:", match_idx[offset_idx])

plt.figure(figsize = (30, 15))

def scale_plot():
    plt.gca().auto_scale_xyz((-1, 1), (-1, 1), (-1, 1))
    plt.gca().view_init(0, 0)
    plt.axis("off")

plt.subplot(121, projection = "3d")

plt.gca().scatter(*view_pc.T, zdir = "y", s = 20, c = view_pc.T[1], cmap = "winter")

scale_plot()

plt.subplot(122, projection = "3d")

alpha_points, alpha_triangles = alpha_shape_border(view_pc, alpha_std = 0.0, epsilon = 0.001)
alpha_points = alpha_points[:, (0, 2, 1)]

print("Number of points in alpha shape:", alpha_points.shape[0])
print("Number of triangles in alpha shape:", alpha_triangles.shape[0])

plt.gca().plot_trisurf(*alpha_points.T, triangles = alpha_triangles, cmap = "winter")

scale_plot()

plt.subplots_adjust(left = 0, bottom = 0, right = 1, top = 1, wspace = 0, hspace = 0)
plt.show()
# plt.savefig("", bbox_inches = 0)
def example_perturb_proj_tree(label="chair"):

    np.random.seed(1234)

    view_label = label
    offset_idx = 0
    num_points = 1024
    f = h5py.File("../data/point_clouds.hdf5", "r")
    shape_names = [line.rstrip() for line in open("../data/shape_names.txt")]

    pc = f["points"][:][:, :num_points]
    labels = f["labels"][:]

    f.close()

    print("Shape:", pc.shape)
    print("Number of points:", num_points)
    print("Labels:", [shape_names[idx] for idx in np.unique(labels)])
    print("Selected label:", view_label)

    match_idx = np.where(labels == shape_names.index(view_label))[0]
    view_pc = pc[match_idx[offset_idx]]

    print("Shape index:", match_idx[offset_idx])

    plt.figure(figsize=(30, 15))

    plt.subplot(121, projection="3d")

    alpha_points, alpha_triangles = alpha_shape_border(view_pc)
    alpha_points = alpha_points[:, (0, 2, 1)]

    print("Number of points in alpha shape:", alpha_points.shape[0])
    print("Number of triangles in alpha shape:", alpha_triangles.shape[0])

    plt.gca().plot_trisurf(*alpha_points.T, triangles=alpha_triangles)

    rand_perturb = (np.random.random(view_pc.shape) * 0.03 +
                    0.03) * np.random.choice(np.array([-1, 1]),
                                             size=view_pc.shape)
    perturbed = view_pc + rand_perturb

    colors = np.random.random(num_points)
    plt.gca().scatter(*perturbed.T, zdir="y", s=300, c=colors, cmap="rainbow")

    scale_plot()

    plt.subplot(122, projection="3d")

    plt.gca().plot_trisurf(*alpha_points.T, triangles=alpha_triangles)

    print("Projection started.")
    start_time = time.time()
    tree = PerturbProjTree(view_pc, thickness=0.01)
    projected = tree.project(perturbed, rand_perturb)
    end_time = time.time()
    print("Projection ended in %f seconds." % (end_time - start_time))

    plt.gca().scatter(*projected.T, zdir="y", s=300, c=colors, cmap="rainbow")

    scale_plot()

    plt.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=0, hspace=0)
    plt.show()