def generic_test(self, dataset_info, n_inst, loader_fun): datasets_root = DENSEPOSE_ANNOTATIONS_DIR annotations_fpath = maybe_prepend_base_path( datasets_root, dataset_info.annotations_fpath) images_root = maybe_prepend_base_path(datasets_root, dataset_info.images_root) image_annotation_dicts = loader_fun( annotations_json_file=annotations_fpath, image_root=images_root, dataset_name=dataset_info.name, ) num_valid = sum(1 for image_annotation_dict in image_annotation_dicts for ann in image_annotation_dict["annotations"] if DensePoseDataRelative.validate_annotation(ann)[0]) self.assertEqual(num_valid, n_inst)
def _extract_data_for_visualizers_from_entry( cls: type, vis_specs: List[str], entry: Dict[str, Any] ): dp_list = [] bbox_list = [] for annotation in entry["annotations"]: is_valid, _ = DensePoseDataRelative.validate_annotation(annotation) if not is_valid: continue bbox = torch.as_tensor(annotation["bbox"]) bbox_list.append(bbox) dp_data = DensePoseDataRelative(annotation) dp_list.append(dp_data) datas = [] for vis_spec in vis_specs: datas.append(bbox_list if "bbox" == vis_spec else (bbox_list, dp_list)) return datas
def _transform_densepose(self, annotation, transforms): if not self.densepose_on: return annotation # Handle densepose annotations is_valid, reason_not_valid = DensePoseDataRelative.validate_annotation( annotation) if is_valid: densepose_data = DensePoseDataRelative(annotation, cleanup=True) densepose_data.apply_transform(transforms, self.densepose_transform_data) annotation["densepose"] = densepose_data else: # logger = logging.getLogger(__name__) # logger.debug("Could not load DensePose annotation: {}".format(reason_not_valid)) DensePoseDataRelative.cleanup_annotation(annotation) # NOTE: annotations for certain instances may be unavailable. # 'None' is accepted by the DensePostList data structure. annotation["densepose"] = None return annotation