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'))
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: