Ejemplo n.º 1
0
        indices[BATCH_SIZE // 2:] = torch.tensor(np.random.choice(
            negative_indices, BATCH_SIZE // 2),
                                                 device=device)

        sdf_net.zero_grad()
        predicted_sdf = sdf_net(points[indices, :], latent_code)
        batch_sdf = sdf[indices]
        loss = torch.mean(torch.abs(predicted_sdf - batch_sdf))
        loss.backward()
        optimizer.step()

        if loss.item() < error_targets[image_index]:
            try:
                viewer.set_mesh(
                    sdf_net.get_mesh(latent_code[0, :],
                                     voxel_resolution=64,
                                     raise_on_empty=True))
                if save_images:
                    image = viewer.get_image(flip_red_blue=True)
                    cv2.imwrite("images/frame-{:05d}.png".format(image_index),
                                image)
                image_index += 1
            except ValueError:
                pass
        step += 1
        print('Step {:04d}, Image {:04d}, loss: {:.6f}, target: {:.6f}'.format(
            step, image_index, loss.item(), error_targets[image_index]))
    except KeyboardInterrupt:
        viewer.stop()
        break
Ejemplo n.º 2
0
                         checkpoints_latent_codes[i])).detach()
        latent_code = latent_codes[MODEL_INDEX, :]
        plot.set_image(render_image(sdf_net, latent_code, crop=True), i)

    plot.save('plots/deepsdf-checkpoints.pdf')

if "deepsdf-interpolation-stl" in sys.argv:
    from rendering.raymarching import render_image_for_index, render_image
    sdf_net, latent_codes = load_sdf_net(return_latent_codes=True)

    STEPS = 5

    indices = random.sample(list(range(latent_codes.shape[0])), 2)
    print(indices)
    code_start = latent_codes[indices[0], :]
    code_end = latent_codes[indices[1], :]

    print("Generating codes...")
    with torch.no_grad():
        codes = torch.zeros([STEPS, LATENT_CODE_SIZE], device=device)
        for i in range(STEPS):
            codes[
                i, :] = code_start * (1.0 - i /
                                      (STEPS - 1)) + code_end * i / (STEPS - 1)

    for i in range(STEPS):
        print(i)
        mesh = sdf_net.get_mesh(codes[i, :],
                                voxel_resolution=256,
                                sphere_only=False)
        mesh.export('plots/mesh-{:d}.stl'.format(i))