Example #1
0
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)
Example #2
0
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()
Example #3
0
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)
Example #4
0
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()
Example #5
0
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.')
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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