Exemplo n.º 1
0
def get_fields():
    fields = {}
    input_field = config.get_inputs_field('train', cfg)
    fields['inputs'] = input_field
    fields['idx'] = data.IndexField()
    fields['viewid'] = data.ViewIdField()
    return fields
Exemplo n.º 2
0
def get_inputs_field(mode, cfg):
    ''' Returns the inputs fields.

    Args:
        mode (str): the mode which is used
        cfg (dict): config dictionary
    '''
    input_type = cfg['data']['input_type']

    if input_type is None:
        inputs_field = None
    elif input_type == 'img_seq':
        if mode == 'train' and cfg['data']['img_augment']:
            resize_op = transforms.RandomResizedCrop(cfg['data']['img_size'],
                                                     (0.75, 1.), (1., 1.))
        else:
            resize_op = transforms.Resize((cfg['data']['img_size']))

        transform = transforms.Compose([
            resize_op,
            transforms.ToTensor(),
        ])

        if mode == 'train':
            random_view = True
        else:
            random_view = False

        inputs_field = data.ImageSubseqField(cfg['data']['img_seq_folder'],
                                             transform,
                                             random_view=random_view)
    elif input_type == 'pcl_seq':
        connected_samples = cfg['data']['input_pointcloud_corresponding']
        transform = transforms.Compose([
            data.SubsamplePointcloudSeq(cfg['data']['input_pointcloud_n'],
                                        connected_samples=connected_samples),
            data.PointcloudNoise(cfg['data']['input_pointcloud_noise'])
        ])
        inputs_field = data.PointCloudSubseqField(
            cfg['data']['pointcloud_seq_folder'],
            transform,
            seq_len=cfg['data']['length_sequence'])
    elif input_type == 'end_pointclouds':
        transform = data.SubsamplePointcloudSeq(
            cfg['data']['input_pointcloud_n'],
            connected_samples=cfg['data']['input_pointcloud_corresponding'])

        inputs_field = data.PointCloudSubseqField(
            cfg['data']['pointcloud_seq_folder'],
            only_end_points=True,
            seq_len=cfg['data']['length_sequence'],
            transform=transform)
    elif input_type == 'idx':
        inputs_field = data.IndexField()
    else:
        raise ValueError('Invalid input type (%s)' % input_type)
    return inputs_field
Exemplo n.º 3
0
def get_inputs_field(mode, cfg):
    ''' Returns the inputs fields.

    Args:
        mode (str): the mode which is used
        cfg (dict): config dictionary
    '''
    input_type = cfg['data']['input_type']
    with_transforms = cfg['data']['with_transforms']

    if input_type is None:
        inputs_field = None
    elif input_type == 'img':
        if mode == 'train' and cfg['data']['img_augment']:
            resize_op = transforms.RandomResizedCrop(
                cfg['data']['img_size'], (0.75, 1.), (1., 1.))
        else:
            resize_op = transforms.Resize((cfg['data']['img_size']))

        transform = transforms.Compose([
            resize_op, transforms.ToTensor(),
        ])

        with_camera = cfg['data']['img_with_camera']

        if mode == 'train':
            random_view = True
        else:
            random_view = False

        inputs_field = data.ImagesField(
            cfg['data']['img_folder'], transform,
            with_camera=with_camera, random_view=random_view
        )
    elif input_type == 'pointcloud':
        transform = transforms.Compose([
            data.SubsamplePointcloud(cfg['data']['pointcloud_n']),
            data.PointcloudNoise(cfg['data']['pointcloud_noise'])
        ])
        with_transforms = cfg['data']['with_transforms']
        inputs_field = data.PointCloudField(
            cfg['data']['pointcloud_file'], transform,
            with_transforms=with_transforms
        )
    elif input_type == 'voxels':
        inputs_field = data.VoxelsField(
            cfg['data']['voxels_file']
        )
    elif input_type == 'idx':
        inputs_field = data.IndexField()
    else:
        raise ValueError(
            'Invalid input type (%s)' % input_type)
    return inputs_field
Exemplo n.º 4
0
def get_dataset(mode, cfg, return_idx=False, return_category=False):
    ''' Returns the dataset.

    Args:
        model (nn.Module): the model which is used
        cfg (dict): config dictionary
        return_idx (bool): whether to include an ID field
    '''
    method = cfg['method']
    dataset_type = cfg['data']['dataset']
    dataset_folder = cfg['data']['path']
    categories = cfg['data']['classes']

    # Get split
    splits = {
        'train': cfg['data']['train_split'],
        'val': cfg['data']['val_split'],
        'test': cfg['data']['test_split'],
    }
    split = splits[mode]
    # Create dataset
    if dataset_type == 'Humans':
        # Dataset fields
        # Method specific fields (usually correspond to output)
        fields = method_dict[method].config.get_data_fields(mode, cfg)
        # Input fields
        inputs_field = get_inputs_field(mode, cfg)
        if inputs_field is not None:
            fields['inputs'] = inputs_field

        if return_idx:
            fields['idx'] = data.IndexField()

        if return_category:
            fields['category'] = data.CategoryField()

        dataset = data.HumansDataset(
            dataset_folder,
            fields,
            split=split,
            categories=categories,
            length_sequence=cfg['data']['length_sequence'],
            n_files_per_sequence=cfg['data']['n_files_per_sequence'],
            offset_sequence=cfg['data']['offset_sequence'],
            ex_folder_name=cfg['data']['pointcloud_seq_folder'],
            n_intervals=cfg['data']['n_intervals'])
    else:
        raise ValueError('Invalid dataset "%s"' % cfg['data']['dataset'])

    return dataset
Exemplo n.º 5
0
def get_dataset(dataset_root, mode, input_type='img', absolute_depth=True):
    if input_type == 'img':
        inputs_field = get_img_inputs_field(mode)
    elif input_type == 'img_with_depth':
        inputs_field = get_img_with_depth_input_field(mode, absolute_depth=absolute_depth)
    elif input_type == 'depth_pointcloud':
        inputs_field = get_depth_pointcloud_field(mode)

    fields = {}

    fields['inputs'] = inputs_field
    fields['idx'] = data.IndexField()
    fields['category'] = data.CategoryField()

    dataset = data.Shapes3dDataset(
        dataset_root, fields,
        split=mode,
        categories=None,
    )
    return dataset
Exemplo n.º 6
0
def get_dataset(mode, cfg, return_idx=False, return_category=False):
    ''' Returns the dataset.

    Args:
        model (nn.Module): the model which is used
        cfg (dict): config dictionary
        return_idx (bool): whether to include an ID field
    '''
    method = cfg['method']
    dataset_type = cfg['data']['dataset']
    dataset_folder = cfg['data']['path']
    categories = cfg['data']['classes']

    # Get split
    splits = {
        'train': cfg['data']['train_split'],
        'val': cfg['data']['val_split'],
        'test': cfg['data']['test_split'],
    }

    split = splits[mode]

    # Create dataset
    if dataset_type == 'Shapes3D':
        # Dataset fields
        # Method specific fields (usually correspond to output)
        fields = method_dict[method].config.get_data_fields(mode, cfg)
        # Input fields
        inputs_field = get_inputs_field(mode, cfg)
        if inputs_field is not None:
            fields['inputs'] = inputs_field

        if return_idx:
            fields['idx'] = data.IndexField()

        if return_category:
            fields['category'] = data.CategoryField()

        dataset = data.Shapes3dDataset(
            dataset_folder,
            fields,
            split=split,
            categories=categories,
        )
    elif dataset_type == 'kitti':
        dataset = data.KittiDataset(dataset_folder,
                                    img_size=cfg['data']['img_size'],
                                    return_idx=return_idx)
    elif dataset_type == 'online_products':
        dataset = data.OnlineProductDataset(
            dataset_folder,
            img_size=cfg['data']['img_size'],
            classes=cfg['data']['classes'],
            max_number_imgs=cfg['generation']['max_number_imgs'],
            return_idx=return_idx,
            return_category=return_category)
    elif dataset_type == 'images':
        dataset = data.ImageDataset(
            dataset_folder,
            img_size=cfg['data']['img_size'],
            return_idx=return_idx,
        )
    else:
        raise ValueError('Invalid dataset "%s"' % cfg['data']['dataset'])

    return dataset
Exemplo n.º 7
0
def get_inputs_field(mode, cfg):
    ''' Returns the inputs fields.

    Args:
        mode (str): the mode which is used
        cfg (dict): config dictionary
    '''
    input_type = cfg['data']['input_type']
    with_transforms = cfg['data']['with_transforms']

    if input_type is None:
        inputs_field = None
    elif input_type == 'img':
        if mode == 'train' and cfg['data']['img_augment']:
            resize_op = transforms.RandomResizedCrop(cfg['data']['img_size'],
                                                     (0.75, 1.), (1., 1.))
        else:
            resize_op = transforms.Resize((cfg['data']['img_size']))

        transform = transforms.Compose([
            resize_op,
            transforms.ToTensor(),
        ])

        with_camera = cfg['data']['img_with_camera']

        if mode == 'train':
            random_view = True
        else:
            random_view = False

        if 'img_extension' in cfg['data']:
            inputs_field = data.ImagesField(
                cfg['data']['img_folder'],
                transform,
                extension=cfg['data']['img_extension'],
                with_camera=with_camera,
                random_view=random_view)
        else:
            inputs_field = data.ImagesField(cfg['data']['img_folder'],
                                            transform,
                                            with_camera=with_camera,
                                            random_view=random_view)
    elif input_type == 'img_with_depth':
        # data augment not supported
        transform = transforms.Compose([
            transforms.Resize((cfg['data']['img_size'])),
            transforms.ToTensor(),
        ])

        with_camera = cfg['data']['img_with_camera']

        if mode == 'train':
            random_view = True
        else:
            random_view = False

        data_params = {
            'with_camera': with_camera,
            'random_view': random_view,
        }

        if 'absolute_depth' in cfg['data']:
            data_params['absolute_depth'] = cfg['data']['absolute_depth']

        if 'with_minmax' in cfg['data']:
            data_params['with_minmax'] = cfg['data']['with_minmax']

        if 'img_extension' in cfg['data']:
            data_params['extension'] = cfg['data']['img_extension']

        inputs_field = data.ImagesWithDepthField('img', 'depth', 'mask',
                                                 transform, **data_params)
    elif input_type == 'depth_pred':
        # data augment not supported
        transform = transforms.Compose([
            transforms.Resize((cfg['data']['img_size'])),
            transforms.ToTensor(),
        ])

        with_camera = cfg['data']['img_with_camera']

        if mode == 'train':
            random_view = True
        else:
            random_view = False

        data_params = {
            'with_camera': with_camera,
            'random_view': random_view,
        }

        if 'absolute_depth' in cfg['data']:
            data_params['absolute_depth'] = cfg['data']['absolute_depth']

        if 'with_minmax' in cfg['data']:
            data_params['with_minmax'] = cfg['data']['with_minmax']

        if 'pred_with_img' in cfg['model']:
            data_params['with_img'] = cfg['model']['pred_with_img']

        if 'img_extension' in cfg['data']:
            data_params['extension'] = cfg['data']['img_extension']

        inputs_field = data.DepthPredictedField('img', 'depth', 'mask',
                                                cfg['data']['depth_pred_root'],
                                                'depth_pred', transform,
                                                **data_params)
    elif input_type == 'depth_pointcloud':
        t_lst = []
        if 'depth_pointcloud_n' in cfg['data'] and cfg['data'][
                'depth_pointcloud_n'] is not None:
            t_lst.append(
                data.SubsampleDepthPointcloud(
                    cfg['data']['depth_pointcloud_n']))
        if 'depth_pointcloud_noise' in cfg['data'] and cfg['data'][
                'depth_pointcloud_noise'] is not None:
            t_lst.append(
                data.PointcloudNoise(cfg['data']['depth_pointcloud_noise']))
        transform = transforms.Compose(t_lst)

        if mode == 'train':
            random_view = True
        else:
            random_view = False

        data_params = {
            'random_view': random_view,
            'with_camera': True,
            'img_folder_name': 'img'
        }

        if 'view_penalty' in cfg['training'] and cfg['training'][
                'view_penalty']:
            data_params['with_mask'] = True
            data_params['mask_folder_name'] = 'mask'
            data_params['mask_flow_folder_name'] = 'mask_flow'
            data_params['extension'] = 'png'
            img_transform = transforms.Compose([
                transforms.Resize((cfg['data']['img_size'])),
                transforms.ToTensor(),
            ])
            data_params['img_transform'] = img_transform
            data_params['with_depth_pred'] = True
            data_params['depth_pred_folder_name'] = 'depth_pred'

        inputs_field = data.DepthPointCloudField(
            cfg['data']['depth_pointcloud_root'],
            cfg['data']['depth_pointcloud_folder'], transform, **data_params)
    elif input_type == 'multi_img':
        if mode == 'train' and cfg['data']['img_augment']:
            resize_op = transforms.RandomResizedCrop(cfg['data']['img_size'],
                                                     (0.75, 1.), (1., 1.))
        else:
            resize_op = transforms.Resize((cfg['data']['img_size']))

        transform = transforms.Compose([
            resize_op,
            transforms.ToTensor(),
        ])

        with_camera = cfg['data']['img_with_camera']

        if mode == 'train':
            random_view = True
        else:
            random_view = False

        inputs_field = data.ImagesField(cfg['data']['img_folder'],
                                        transform,
                                        with_camera=with_camera,
                                        random_view=random_view)
    elif input_type == 'pointcloud':
        transform = transforms.Compose([
            data.SubsamplePointcloud(cfg['data']['pointcloud_n']),
            data.PointcloudNoise(cfg['data']['pointcloud_noise'])
        ])
        with_transforms = cfg['data']['with_transforms']
        inputs_field = data.PointCloudField(cfg['data']['pointcloud_file'],
                                            transform,
                                            with_transforms=with_transforms)
    elif input_type == 'voxels':
        inputs_field = data.VoxelsField(cfg['data']['voxels_file'])
    elif input_type == 'idx':
        inputs_field = data.IndexField()
    else:
        raise ValueError('Invalid input type (%s)' % input_type)
    return inputs_field
Exemplo n.º 8
0
    out_file = os.path.join(generation_dir, 'eval_meshes_full.pkl')
    out_file_class = os.path.join(generation_dir, 'eval_meshes.csv')
else:
    out_file = os.path.join(generation_dir, 'eval_input_full.pkl')
    out_file_class = os.path.join(generation_dir, 'eval_input.csv')

# Dataset
points_field = data.PointsField(
    cfg['data']['points_iou_file'],
    unpackbits=cfg['data']['points_unpackbits'],
)
pointcloud_field = data.PointCloudField(cfg['data']['pointcloud_chamfer_file'])
fields = {
    'points_iou': points_field,
    'pointcloud_chamfer': pointcloud_field,
    'idx': data.IndexField(),
}

print('Test split: ', cfg['data']['test_split'])

if args.da:
    dataset_folder = cfg['data']['uda_path']
    categories_to_use = cfg['data']['uda_classes']
else:
    dataset_folder = cfg['data']['path']
    categories_to_use = cfg['data']['classes']

dataset = data.Shapes3dDataset(dataset_folder,
                               fields,
                               cfg['data']['test_split'],
                               categories=categories_to_use)
def get_dataset(cfg, mode='train', return_idx=False, return_category=False,
                **kwargs):
    ''' Returns a dataset instance.

    Args:
        cfg (dict): config dictionary
        mode (string): which mode is used (train / val /test / render)
        return_idx (bool): whether to return model index
        return_category (bool): whether to return model category
    '''
    # Get fields with cfg
    method = cfg['method']
    input_type = cfg['data']['input_type']
    dataset_name = cfg['data']['dataset_name']
    dataset_folder = cfg['data']['path']

    categories = cfg['data']['classes']
    cache_fields = cfg['data']['cache_fields']
    n_views = cfg['data']['n_views']
    split_model_for_images = cfg['data']['split_model_for_images']

    splits = {
        'train': cfg['data']['train_split'],
        'val': cfg['data']['val_split'],
        'test': cfg['data']['test_split'],
        'render': cfg['data']['test_split'],
    }
    split = splits[mode]
    fields = method_dict[method].config.get_data_fields(cfg, mode=mode)

    if input_type == 'idx':
        input_field = data.IndexField()
        fields['inputs'] = input_field
    elif input_type == 'image':
        random_view = True if \
            (mode == 'train' or dataset_name == 'NMR') else False
        resize_img_transform = data.ResizeImage(cfg['data']['img_size_input'])
        fields['inputs'] = data.ImagesField(
            cfg['data']['img_folder_input'],
            transform=resize_img_transform,
            with_mask=False, with_camera=False,
            extension=cfg['data']['img_extension_input'],
            n_views=cfg['data']['n_views_input'], random_view=random_view)

    else:
        input_field = None

    if return_idx:
        fields['idx'] = data.IndexField()

    if return_category:
        fields['category'] = data.CategoryField()

    manager = Manager()
    shared_dict = manager.dict()

    if ((dataset_name == 'Shapes3D') or
        (dataset_name == 'DTU') or
            (dataset_name == 'NMR')):
        dataset = data.Shapes3dDataset(
            dataset_folder, fields, split=split,
            categories=categories,
            shared_dict=shared_dict,
            n_views=n_views, cache_fields=cache_fields,
            split_model_for_images=split_model_for_images)
    elif dataset_name == 'images':
        dataset = data.ImageDataset(
            dataset_folder, return_idx=True
        )
    else:
        raise ValueError('Invalid dataset_name!')

    return dataset
Exemplo n.º 10
0
if not args.eval_input:
    out_file = os.path.join(generation_dir, 'eval_meshes_full.pkl')
    out_file_tmp = os.path.join(generation_dir, 'eval_meshes_full_tmp.pkl')
    out_file_class = os.path.join(generation_dir, 'eval_meshes.csv')
    out_file_class_tmp = os.path.join(generation_dir, 'eval_meshes_tmp.csv')
else:
    out_file = os.path.join(generation_dir, 'eval_input_full.pkl')
    out_file_class = os.path.join(generation_dir, 'eval_input.csv')

# Dataset
fields = {
    'pointcloud_chamfer':
    data.PointCloudSubseqField(cfg['data']['pointcloud_seq_folder'],
                               seq_len=cfg['data']['length_sequence']),
    'idx':
    data.IndexField(),
}
if cfg['test']['eval_mesh_iou']:
    fields['points'] = data.PointsSubseqField(
        cfg['data']['points_iou_seq_folder'],
        all_steps=True,
        seq_len=cfg['data']['length_sequence'])

print('Test split: ', cfg['data']['test_split'])

dataset = data.HumansDataset(
    dataset_folder,
    fields,
    split=cfg['data']['test_split'],
    categories=cfg['data']['classes'],
    length_sequence=cfg['data']['length_sequence'],
Exemplo n.º 11
0
def get_inputs_field(mode, cfg, use_target_domain = False):
    ''' Returns the inputs fields.

    Args:
        mode (str): the mode which is used
        cfg (dict): config dictionary
        use_target_domain (bool): whether to use the target_domain dataset
    '''
    input_type = cfg['data']['input_type']
    with_transforms = cfg['data']['with_transforms']

    if input_type is None:
        inputs_field = None
    elif input_type == 'img':
        if mode == 'train' and cfg['data']['img_augment']:
            resize_op = transforms.RandomResizedCrop(
                cfg['data']['img_size'], (0.75, 1.), (1., 1.))
        else:
            resize_op = transforms.Resize((cfg['data']['img_size']))

        transform = transforms.Compose([
            resize_op, transforms.ToTensor(),
        ])

        with_camera = cfg['data']['img_with_camera']

        if mode == 'train':
            random_view = True
        else:
            random_view = False
        
        if use_target_domain:
            img_folder_name = cfg['data']['uda_img_folder']
            filename_pattern= cfg['data']['uda_bg_configure']
        else:
            img_folder_name = cfg['data']['img_folder']
            filename_pattern = cfg['data']['img_filename_pattern']

        inputs_field = data.ImagesField(
            img_folder_name, transform,
            with_camera=with_camera, random_view=random_view, filename_pattern=filename_pattern, extensions=['jpg', 'jpeg', 'png']
        )
    elif input_type == 'pointcloud':
        transform = transforms.Compose([
            data.SubsamplePointcloud(cfg['data']['pointcloud_n']),
            data.PointcloudNoise(cfg['data']['pointcloud_noise'])
        ])
        with_transforms = cfg['data']['with_transforms']
        inputs_field = data.PointCloudField(
            cfg['data']['pointcloud_file'], transform,
            with_transforms=with_transforms
        )
    elif input_type == 'voxels':
        inputs_field = data.VoxelsField(
            cfg['data']['voxels_file']
        )
    elif input_type == 'idx':
        inputs_field = data.IndexField()
    else:
        raise ValueError(
            'Invalid input type (%s)' % input_type)
    return inputs_field
Exemplo n.º 12
0
def get_dataset(mode, cfg, return_idx=False, return_category=False, use_target_domain = False):
    ''' Returns the dataset.

    Args:
        model (nn.Module): the model which is used
        cfg (dict): config dictionary
        return_idx (bool): whether to include an ID field
        use_target_domain (bool): whether to use the target_domain dataset
    '''

    method = cfg['method']
    dataset_type = cfg['data']['dataset']
    if use_target_domain:
        #dataset_type = cfg['data']['uda_dataset']
        dataset_folder = cfg['data']['uda_path']
        categories = cfg['data']['uda_classes']
    else:
        dataset_folder = cfg['data']['path']
        categories = cfg['data']['classes']

    # Get split
    splits = {
        'train': cfg['data']['train_split'],
        'val': cfg['data']['val_split'],
        'test': cfg['data']['test_split'],
    }

    split = splits[mode]

    # Create dataset
    if dataset_type == 'Shapes3D':
        # Dataset fields
        # Method specific fields (usually correspond to output)
        fields = method_dict[method].config.get_data_fields(mode, cfg)
        # Input fields
        inputs_field = get_inputs_field(mode, cfg, use_target_domain)
        if inputs_field is not None:
            fields['inputs'] = inputs_field

        # adding field for UDA input when training
        if mode == 'train' and cfg['training']['uda_type'] is not None:
            # Also data-augment target domain imgs?
            if cfg['data']['img_augment']:
                resize_op = transforms.RandomResizedCrop(
                    cfg['data']['img_size'], (0.75, 1.), (1., 1.))
            else:
                resize_op = transforms.Resize((cfg['data']['img_size']))
            transform = transforms.Compose([
                resize_op, transforms.ToTensor(),
            ])

            # random_view=True enables randomness
            fields['inputs_target_domain'] = data.ImagesField(
                #cfg['data']['uda_path_train'], transform=transform, random_view=True, image_based_hier=True
                cfg['data']['uda_path_train'], transform=transform, random_view=True, extensions=['jpg', 'jpeg', 'png'], image_based_hier=True
            )

        if return_idx:
            fields['idx'] = data.IndexField()

        if return_category:
            fields['category'] = data.CategoryField()

        dataset = data.Shapes3dDataset(
            dataset_folder, fields,
            split=split,
            categories=categories,
        )
    elif dataset_type == 'kitti':
        dataset = data.KittiDataset(
            dataset_folder, img_size=cfg['data']['img_size'],
            return_idx=return_idx
        )
    elif dataset_type == 'online_products':
        dataset = data.OnlineProductDataset(
            dataset_folder, img_size=cfg['data']['img_size'],
            classes=cfg['data']['classes'],
            max_number_imgs=cfg['generation']['max_number_imgs'],
            return_idx=return_idx, return_category=return_category
        )
    elif dataset_type == 'images':
        dataset = data.ImageDataset(
            dataset_folder, img_size=cfg['data']['img_size'],
            return_idx=return_idx,
        )
    else:
        raise ValueError('Invalid dataset "%s"' % cfg['data']['dataset'])
 
    return dataset
Exemplo n.º 13
0
def get_inputs_field(mode, cfg):
    """ Returns the inputs fields.

  Args:
      mode (str): the mode which is used
      cfg (dict): config dictionary
  """
    input_type = cfg["data"]["input_type"]
    with_transforms = cfg["data"]["with_transforms"]

    if input_type is None:
        inputs_field = None
    elif input_type == "img":
        transform = None
        if mode == "train" and cfg["data"]["img_augment"]:
            # resize_op = transforms.RandomResizedCrop(cfg["data"]["img_size"],(0.75, 1.0), (1.0, 1.0))
            def preprocess(image):
                # image = tf.image.crop_and_resize(
                #     image, crop_size=cfg["data"]["img_size"])  # CHECK
                image = tf.image.resize(
                    image, [cfg["data"]["img_size"], cfg["data"]["img_size"]])
                image /= 255.0
                return image

            transform = preprocess
        else:

            def preprocess(image):
                # image = image[tf.newaxis, ...]
                image = tf.image.resize(
                    image, [cfg["data"]["img_size"], cfg["data"]["img_size"]])
                image /= 255.0
                return image

            transform = preprocess

        # transform = transforms.Compose([
        #     resize_op,
        #     transforms.ToTensor(),
        # ])

        with_camera = cfg["data"]["img_with_camera"]

        if mode == "train":
            random_view = True
        else:
            random_view = False

        inputs_field = data.ImagesField(
            cfg["data"]["img_folder"],
            transform,
            with_camera=with_camera,
            random_view=random_view,
        )
    elif input_type == "pointcloud":

        def preprocess(points):
            output = data.SubsamplePointcloud(
                cfg["data"]["pointcloud_n"])(points)
            output = data.PointcloudNoise(
                cfg["data"]["pointcloud_noise"])(output)
            return output

        transform = preprocess
        with_transforms = cfg["data"]["with_transforms"]
        inputs_field = data.PointCloudField(cfg["data"]["pointcloud_file"],
                                            transform,
                                            with_transforms=with_transforms)
    elif input_type == "voxels":
        inputs_field = data.VoxelsField(cfg["data"]["voxels_file"])
    elif input_type == "idx":
        inputs_field = data.IndexField()
    else:
        raise ValueError("Invalid input type (%s)" % input_type)
    return inputs_field
Exemplo n.º 14
0
def get_dataset(mode,
                cfg,
                batch_size,
                shuffle,
                repeat_count,
                epoch,
                return_idx=False,
                return_category=False):
    """ Returns the dataset.

  Args:
      model (nn.Module): the model which is used
      cfg (dict): config dictionary
      return_idx (bool): whether to include an ID field
  """
    method = cfg["method"]
    dataset_type = cfg["data"]["dataset"]
    dataset_folder = cfg["data"]["path"]
    categories = cfg["data"]["classes"]

    # Get split
    splits = {
        "train": cfg["data"]["train_split"],
        "val": cfg["data"]["val_split"],
        "test": cfg["data"]["test_split"],
    }

    split = splits[mode]

    # Create dataset
    if dataset_type == "Shapes3D":
        # Dataset fields
        # Method specific fields (usually correspond to output)
        fields = method_dict[method].config.get_data_fields(mode, cfg)
        # Input fields
        inputs_field = get_inputs_field(mode, cfg)
        if inputs_field is not None:
            fields["inputs"] = inputs_field

        if return_idx:
            fields["idx"] = data.IndexField()

        if return_category:
            fields["category"] = data.CategoryField()

        dataset = data.Shapes3dDataset(
            dataset_folder,
            fields,
            split=split,
            batch_size=batch_size,
            shuffle=shuffle,
            repeat_count=repeat_count,
            epoch=epoch,
            categories=categories,
        )
    elif dataset_type == "kitti":
        dataset = data.KittiDataset(dataset_folder,
                                    batch_size=batch_size,
                                    shuffle=shuffle,
                                    img_size=cfg["data"]["img_size"],
                                    return_idx=return_idx)
    elif dataset_type == "online_products":
        dataset = data.OnlineProductDataset(
            dataset_folder,
            batch_size=batch_size,
            shuffle=shuffle,
            img_size=cfg["data"]["img_size"],
            classes=cfg["data"]["classes"],
            max_number_imgs=cfg["generation"]["max_number_imgs"],
            return_idx=return_idx,
            return_category=return_category,
        )
    elif dataset_type == "images":
        dataset = data.ImageDataset(
            dataset_folder,
            batch_size=batch_size,
            shuffle=shuffle,
            img_size=cfg["data"]["img_size"],
            return_idx=return_idx,
        )
    else:
        raise ValueError('Invalid dataset "%s"' % cfg["data"]["dataset"])

    return dataset