Esempio n. 1
0
                           dirname=os.path.join(conf.ckpt_path, conf.exp_name),
                           epoch=conf.model_epoch,
                           strict=True)

# set models to evaluation mode
for m in models:
    m.eval()

# test over all test shapes
with torch.no_grad():
    objA = PartNetDataset.load_object(
        os.path.join(conf.data_path, '%s.json' % conf.shapeA))
    objB = PartNetDataset.load_object(
        os.path.join(conf.data_path, '%s.json' % conf.shapeB))
    objC = PartNetDataset.load_object(
        os.path.join(conf.data_path, '%s.json' % conf.shapeC))

    encoder.encode_tree(objA)
    diffAB = Tree.compute_shape_diff(objA.root, objB.root)
    code = encoder.encode_tree_diff(objA, diffAB)

    encoder.encode_tree(objC)
    recon_obj_diff = decoder.decode_tree_diff(code, objC)
    recon_obj = Tree(Tree.apply_shape_diff(objC.root, recon_obj_diff))

    PartNetDataset.save_object(objA, os.path.join(result_dir, 'shapeA.json'))
    PartNetDataset.save_object(objB, os.path.join(result_dir, 'shapeB.json'))
    PartNetDataset.save_object(objC, os.path.join(result_dir, 'shapeC.json'))
    PartNetDataset.save_object(recon_obj,
                               os.path.join(result_dir, 'output.json'))
Esempio n. 2
0
        obj_B = PartNetDataset.load_object(
            os.path.join(conf.data_path1, name_B + '.json')).to(device)
        PartNetDataset.save_object(obj_B,
                                   os.path.join(cur_res_dir, 'obj_B.json'))
        obj_C = PartNetDataset.load_object(
            os.path.join(conf.data_path2, name_C + '.json')).to(device)
        PartNetDataset.save_object(obj_C,
                                   os.path.join(cur_res_dir, 'obj_C.json'))
        obj_D = PartNetDataset.load_object(
            os.path.join(conf.data_path2, name_D + '.json')).to(device)
        PartNetDataset.save_object(obj_D,
                                   os.path.join(cur_res_dir, 'obj_D.json'))

        # compute e := A --> B
        diff_AB = Tree.compute_shape_diff(obj_A.root,
                                          obj_B.root,
                                          device=device)
        encoder.encode_tree(obj_A)
        e = encoder.encode_tree_diff(obj_A, diff_AB)

        # compute Dp := e(C)
        encoder.encode_tree(obj_C)
        recon_diff_CD = decoder.decode_tree_diff(e, obj_C)
        recon_D = Tree(Tree.apply_shape_diff(obj_C.root, recon_diff_CD))
        PartNetDataset.save_object(recon_D,
                                   os.path.join(cur_res_dir, 'recon_D.json'))

        # compute dist between D and Dp
        cd = geometry_dist(obj_D, recon_D)
        sd = struct_dist(obj_D.root, recon_D.root) / len(obj_D.root.boxes())
        with open(os.path.join(cur_res_dir, 'stats.txt'), 'w') as fout: