def get_ds(cat_desc, regime='e'): view_index = 5 edge_length_threshold = 0.02 cat_id = cat_desc_to_id(cat_desc) model_id = '%s_%s' % (regime, cat_desc) image_ds = RenderConfig().get_dataset(cat_id, view_index) cloud_ds = get_cloud_manager( model_id, pre_sampled=True, n_samples=n_samples).get_lazy_dataset() mesh_ds = get_inferred_mesh_dataset( model_id, edge_length_threshold=edge_length_threshold) gt_mesh_ds = get_mesh_dataset(cat_id) voxel_ds = get_voxel_dataset( model_id, edge_length_threshold=edge_length_threshold, filled=False) selected_template_ds = get_selected_template_idx_dataset(model_id) template_meshes = [] with gt_mesh_ds: for template_id in get_template_ids(cat_id): mesh = gt_mesh_ds[template_id] template_meshes.append( {k: np.array(mesh[k]) for k in ('vertices', 'faces')}) template_mesh_ds = selected_template_ds.map(lambda i: template_meshes[i]) return Dataset.zip( image_ds, gt_mesh_ds, cloud_ds, mesh_ds, voxel_ds, template_mesh_ds)
def vis_voxels(model_id, edge_length_threshold, filled, shuffle=False): from mayavi import mlab from util3d.mayavi_vis import vis_voxels from shapenet.core import cat_desc_to_id from template_ffd.inference.voxels import get_voxel_dataset from template_ffd.data.voxels import get_gt_voxel_dataset from template_ffd.model import load_params from template_ffd.data.ids import get_example_ids cat_id = cat_desc_to_id(load_params(model_id)['cat_desc']) gt_ds = get_gt_voxel_dataset(cat_id, filled) inf_ds = get_voxel_dataset(model_id, edge_length_threshold) example_ids = get_example_ids(cat_id, 'eval') if shuffle: example_ids = list(example_ids) example_ids.shuffle with gt_ds: with inf_ds: for example_id in example_ids: gt = gt_ds[example_id].data inf = inf_ds[example_id].data vis_voxels(gt, color=(0, 0, 1)) mlab.figure() vis_voxels(inf, color=(0, 1, 0)) mlab.show()
def clear_results(model_id, actual=False): import os import shutil from template_ffd.inference.predictions import get_predictions_dataset from template_ffd.inference.meshes import InferredMeshManager from template_ffd.inference.clouds import get_cloud_manager from template_ffd.inference.voxels import get_voxel_dataset from template_ffd.eval.chamfer import \ get_chamfer_manager, get_template_chamfer_manager from template_ffd.eval.iou import IouAutoSavingManager def maybe_remove(path): if os.path.isfile(path): print('Removing file %s' % path) if actual: os.remove(path) elif os.path.isdir(path): print('Removing subdir %s' % path) if actual: shutil.rmtree(path) predictions_dataset = get_predictions_dataset(model_id) maybe_remove(predictions_dataset.path) maybe_remove(get_cloud_manager(model_id, pre_sampled=True).path) maybe_remove(get_chamfer_manager(model_id, pre_sampled=True).path) for elt in (None, 0.1, 0.05, 0.02, 0.01): maybe_remove(InferredMeshManager(model_id, elt).path) maybe_remove( get_cloud_manager(model_id, pre_sampled=False, edge_length_threshold=elt).path) for filled in (True, False): dataset = get_voxel_dataset(model_id, elt, filled=filled, auto_save=False) maybe_remove(dataset.root_dir) maybe_remove(IouAutoSavingManager(model_id, elt, filled).path) maybe_remove( get_chamfer_manager(model_id, pre_sampled=False, edge_length_threshold=elt).path) maybe_remove(get_template_chamfer_manager(model_id).path) if not actual: print('NOTE: this was a dry run. Files not actually removed') print('Use -a for actual run.')
def get_lazy_dataset(self): cat_id = cat_desc_to_id(load_params(self._model_id)['cat_desc']) example_ids = get_example_ids(cat_id, 'eval') inferred_dataset = get_voxel_dataset( self._model_id, self._edge_length_threshold, self._voxel_config, filled=self._filled, example_ids=example_ids) gt_dataset = get_gt_voxel_dataset(cat_id, filled=self._filled) voxel_datasets = Dataset.zip(inferred_dataset, gt_dataset) voxel_datasets = voxel_datasets.subset(example_ids) def map_fn(v): return intersection_over_union(v[0].data, v[1].data) iou_dataset = voxel_datasets.map(map_fn) return iou_dataset
def get_lazy_dataset(self): cat_id = cat_desc_to_id(load_params(self._model_id)['cat_desc']) example_ids = get_example_ids(cat_id, 'eval') inferred_dataset = get_voxel_dataset(self._model_id, self._edge_length_threshold, self._voxel_config, filled=self._filled, example_ids=example_ids) gt_dataset = get_gt_voxel_dataset(cat_id, filled=self._filled) voxel_datasets = Dataset.zip(inferred_dataset, gt_dataset) voxel_datasets = voxel_datasets.subset(example_ids) def map_fn(v): return intersection_over_union(v[0].data, v[1].data) iou_dataset = voxel_datasets.map(map_fn) return iou_dataset
def get_lazy_dataset(self): cat_id = cat_desc_to_id(load_params(self._model_id)['cat_desc']) if not isinstance(cat_id, (list, tuple)): cat_id = [cat_id] inferred_dataset = get_voxel_dataset(self._model_id, self._edge_length_threshold, self._voxel_config, filled=self._filled) gt_dataset = get_gt_voxel_dataset(cat_id, filled=self._filled) gt_dataset = gt_dataset.map_keys(lambda key: key[:2]) with inferred_dataset: keys = tuple(inferred_dataset.keys()) voxel_datasets = Dataset.zip(inferred_dataset, gt_dataset) voxel_datasets = voxel_datasets.subset(keys) def map_fn(v): return intersection_over_union(v[0].dense_data(), v[1].dense_data()) iou_dataset = voxel_datasets.map(map_fn) return iou_dataset