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
def get_data_fields(cfg, mode='train'): ''' Returns the data fields. Args: cfg (dict): imported yaml config mode (str): the mode which is used ''' resize_img_transform = data.ResizeImage(cfg['data']['img_size']) all_images = mode == 'render' with_depth = (cfg['model']['lambda_depth'] != 0) depth_from_visual_hull = cfg['data']['depth_from_visual_hull'] random_view = True if ( mode == 'train' or ((cfg['data']['dataset_name'] == 'NMR') and mode == 'test') or ((cfg['data']['dataset_name'] == 'NMR') and mode == 'val') ) else False fields = {} if mode in ('train', 'val', 'render'): img_field = data.ImagesField( cfg['data']['img_folder'], cfg['data']['mask_folder'], cfg['data']['depth_folder'], transform=resize_img_transform, extension=cfg['data']['img_extension'], mask_extension=cfg['data']['mask_extension'], depth_extension=cfg['data']['depth_extension'], with_camera=cfg['data']['img_with_camera'], with_mask=cfg['data']['img_with_mask'], with_depth=with_depth, random_view=random_view, dataset_name=cfg['data']['dataset_name'], all_images=all_images, n_views=cfg['data']['n_views'], depth_from_visual_hull=depth_from_visual_hull, visual_hull_depth_folder=cfg['data']['visual_hull_depth_folder'], ignore_image_idx=cfg['data']['ignore_image_idx'], ) fields['img'] = img_field if cfg['model']['lambda_sparse_depth'] != 0: fields['sparse_depth'] = data.SparsePointCloud( ignore_image_idx=cfg['data']['ignore_image_idx'], ) elif cfg['data']['dataset_name'] == 'DTU': fields['camera'] = data.CameraField( cfg['data']['n_views'], ) return fields
def get_img_inputs_field(mode): transform = transforms.Compose([ transforms.Resize((IMG_SIZE)), transforms.ToTensor(), ]) with_camera = False if mode == 'train': random_view = True else: random_view = False inputs_field = data.ImagesField('img_choy2016', transform, with_camera=with_camera, random_view=random_view) return inputs_field
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
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
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
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
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