def find_matches(self, examples): """ """ print(f'Finding matches for {self.dname}') save_dir = f'temp_files/target_visual_check_{self.dname}' for split in ['train', 'val']: split_txt_fpath = f'{_ROOT}/mseg/dataset_lists/{self.dname}/list/{split}.txt' pairs = generate_all_img_label_pair_fpaths(self.dataroot, split_txt_fpath) for (title, annot_fname, data_split) in examples: parent, fname_stem, _ = get_unique_mask_identifiers( self.dname, annot_fname, data_split) for (rgb_fpath, label_fpath) in pairs: if Path(rgb_fpath).stem == fname_stem and Path( label_fpath).parts[-2] == parent: rgb_img = imageio.imread(rgb_fpath) label_img = imageio.imread(label_fpath) save_fpath = f'{save_dir}/{self.dname}_{title}_{annot_fname}' save_classnames_in_image_maxcardinality( rgb_img, label_img, self.id_to_classname_map, font_color=(255, 255, 255), # (0,0,0), save_to_disk=True, save_fpath=save_fpath)
def verify_all_relabeled_dataset_segments(num_processes: int, mld: Any, dname: str, dataroot: str, update_records, require_strict_boundaries: bool): """ By using remap.py, we already have converted label img from original taxonomy, to universal taxonomy. Args: - num_processes: number of processes to launch; shouldn't exceed number of cores on machine - mld: Mask Level Dataset - dname: string representing name of a dataset taxonomy - dataroot: string representing path to a file directory - update_records Returns: - None """ classname_to_id_map = get_classname_to_dataloaderid_map( dname, include_ignore_idx_cls=True) # Check for incorrect class names. for rec in update_records: valid_orig = rec.orig_class in classname_to_id_map.keys() valid_relabeled = rec.relabeled_class in classname_to_id_map.keys() if not (valid_orig and valid_relabeled): print(rec.__dict__) print( f'Invalid universal classname: {rec.orig_class}, {rec.relabeled_class}' ) quit() for split in ['train', 'val']: # Create for each split separately, since SUNRGBD has same file names for different images in train vs. val parent_fname_to_updatelist_dict = form_fname_to_updatelist_dict( dname, update_records, split) split_txt_fpath = f'{_ROOT}/mseg/dataset_lists/{dname}/list/{split}.txt' # load up the data root and all absolute paths from the txt file img_label_pairs = generate_all_img_label_pair_fpaths( data_root=dataroot, split_txt_fpath=split_txt_fpath) if num_processes > 1: send_list_to_workers( num_processes=num_processes, list_to_split=img_label_pairs, worker_func_ptr=verify_mask_worker, parent_fname_to_updatelist_dict=parent_fname_to_updatelist_dict, mld=mld, classname_to_id_map=classname_to_id_map, require_strict_boundaries=require_strict_boundaries, split=split) elif num_processes == 1: # useful for debugging in a single thread for (img_fpath, label_img_fpath) in img_label_pairs: verify_label_img_masks(img_fpath, label_img_fpath, parent_fname_to_updatelist_dict, mld, classname_to_id_map, require_strict_boundaries, split)
def visual_sanitychecks(): """ Save every 1000th image of each dataset, with classnames embedded. """ save_dir = 'temp_files/MSeg_verify' for dname, d_info in infos.items(): print(f'Writing visual sanity checks for {dname}...') if dname in [ 'coco-panoptic-inst-201', 'mapillary-public66', 'ade20k-151-inst' ]: continue # is in RGB format and not comparable id_to_classname_map = get_dataloader_id_to_classname_map(dname) splits = ['train', 'val'] split_lists = [d_info.trainlist, d_info.vallist] for split, split_list in zip(splits, split_lists): pairs = generate_all_img_label_pair_fpaths(d_info.dataroot, split_list) # Save 5 examples from each dataset split step_sz = math.floor(len(pairs) // 5) for i, (rgb_fpath, label_fpath) in enumerate(pairs[::step_sz]): print(f'On {i} of {dname}') rgb_img = cv2_imread_rgb(rgb_fpath) label_img = imageio.imread(label_fpath) fname_stem = Path(rgb_fpath).stem save_fpath = f'{save_dir}/{dname}_{fname_stem}.jpg' blend_save_fpath = f'{save_dir}/{dname}_{fname_stem}_blended.jpg' if rgb_img.ndim == 2: # this image was grayscale rgb_img = grayscale_to_color(rgb_img) form_mask_triple_embedded_classnames(rgb_img, label_img, id_to_classname_map, save_fpath, save_to_disk=True) frame_visualizer = Visualizer(rgb_img, metadata=None) output_img = frame_visualizer.overlay_instances( label_map=label_img, id_to_class_name_map=id_to_classname_map) imageio.imwrite(blend_save_fpath, output_img)
def verify_all_dataset_paths_exist(): """ Loop through all of the datasets and ensure that the absolute paths exist and are valid. """ for dname, d_info in infos.items(): print(f'Verifying {dname}...') if dname in ['ade20k-151-inst']: # no such explicit list continue for split_list in [d_info.trainlist, d_info.vallist]: pairs = generate_all_img_label_pair_fpaths(d_info.dataroot, split_list) for (rgb_fpath, label_fpath) in pairs: assert Path(rgb_fpath).exists() assert Path(label_fpath).exists() print(f'Verified {dname}.')
def extract_semantic_imgs(self, num_processes: int) -> None: """ Args: - num_processes: number of workers to exploit Returns: - None """ for split in ['train', 'val']: split_txt_fpath = f'{ROOT}/dataset_lists/{self.orig_dname}/list/{split}.txt' # load up the data root and all absolute paths from the txt file img_label_pairs = generate_all_img_label_pair_fpaths(self.orig_dataroot, split_txt_fpath) send_list_to_workers( num_processes=num_processes, list_to_split=img_label_pairs, worker_func_ptr=semantic_extractor_worker, cse=self, split=split)
def find_matches(self, examples): """ """ print(f'Finding matches for {self.dname}...') save_dir = f'temp_files/target_visual_check_{self.dname}' for split in ['train', 'val']: split_txt_fpath = f'{_ROOT}/mseg/dataset_lists/{self.dname}/list/{split}.txt' pairs = generate_all_img_label_pair_fpaths(self.dataroot, split_txt_fpath) for (title, annot_fname, data_split, coords) in examples: parent, fname_stem, _ = get_unique_mask_identifiers( self.dname, annot_fname, data_split) for (rgb_fpath, label_fpath) in pairs: if Path(rgb_fpath).stem == fname_stem and Path( label_fpath).parts[-2] == parent: y, x = coords rgb_img = imageio.imread(rgb_fpath) label_img = imageio.imread(label_fpath) assert label_img[ y, x] == self.get_classname_to_id_map[title]
def main(): """ """ save_dir = 'temp_files' # beforehand # orig_dname = 'cityscapes-19' # orig_dataroot = '/export/share/Datasets/cityscapes' # rel_dname = 'cityscapes-19' # rel_dataroot = '/export/share/Datasets/MSeg/mseg_dataset/Cityscapes' orig_dname = 'coco-panoptic-133' orig_dname_lists = 'coco-panoptic-133-temp' orig_dataroot = '/export/share/Datasets/COCO2017' rel_dname = 'coco-panoptic-133' rel_dataroot = '/export/share/Datasets/MSeg/mseg_dataset/COCOPanoptic' orig_id_to_classname_map = get_dataloader_id_to_classname_map(orig_dname) rel_id_to_classname_map = get_dataloader_id_to_classname_map(rel_dname) for split in ['train', 'val']: orig_split_txt_fpath = f'../mseg/dataset_lists/{orig_dname_lists}/list/{split}.txt' orig_pairs = generate_all_img_label_pair_fpaths(orig_dataroot, orig_split_txt_fpath) rel_split_txt_fpath = f'../mseg/dataset_lists/{rel_dname}/list/{split}.txt' rel_pairs = generate_all_img_label_pair_fpaths(rel_dataroot, rel_split_txt_fpath) for i in range(len(orig_pairs))[::100]: orig_pair = orig_pairs[i] orig_rgb_fpath, orig_label_fpath = orig_pair orig_rgb_img = imageio.imread(orig_rgb_fpath) orig_label_img = imageio.imread(orig_label_fpath) rel_pair = rel_pairs[i] rel_rgb_fpath, rel_label_fpath = rel_pair rel_rgb_img = imageio.imread(rel_rgb_fpath) rel_label_img = imageio.imread(rel_label_fpath) if not np.allclose(orig_label_img,rel_label_img): pdb.set_trace() fname_stem = Path(orig_rgb_fpath).stem orig_save_fpath = f'{save_dir}/{split}_{i}_noguide_orig_{fname_stem}.png' orig_guide_save_fpath = f'{save_dir}/{split}_{i}_guide_orig_{fname_stem}.png' rel_save_fpath = f'{save_dir}/{split}_{i}_noguide_rel_{fname_stem}.png' rel_guide_save_fpath = f'{save_dir}/{split}_{i}_guide_rel_{fname_stem}.png' if orig_rgb_img.ndim == 2: # this image was grayscale orig_rgb_img = grayscale_to_color(orig_rgb_img) if rel_rgb_img.ndim == 2: # this image was grayscale rel_rgb_img = grayscale_to_color(rel_rgb_img) #save_classnames_in_image(img_rgb, label_img, id_to_class_name_map, save_to_disk=True, save_fpath=save_fpath) form_mask_triple_embedded_classnames(orig_rgb_img, orig_label_img, orig_id_to_classname_map, orig_save_fpath, save_to_disk=True) save_mask_triple_with_color_guide(orig_rgb_img, orig_label_img, orig_id_to_classname_map,fname_stem,save_dir, orig_guide_save_fpath) form_mask_triple_embedded_classnames(rel_rgb_img, rel_label_img, rel_id_to_classname_map, rel_save_fpath, save_to_disk=True) save_mask_triple_with_color_guide(rel_rgb_img, rel_label_img, rel_id_to_classname_map,fname_stem,save_dir, rel_guide_save_fpath)