def _collate_and_decode_sample( self, data, *, decoder: Optional[Callable[[io.IOBase], torch.Tensor]]) -> Dict[str, Any]: key, image_data, ann_data = data category, _ = key image_path, image_buffer = image_data ann_path, ann_buffer = ann_data label = self.info.categories.index(category) image = decoder(image_buffer) if decoder else image_buffer ann = read_mat(ann_buffer) bbox = torch.as_tensor(ann["box_coord"].astype(np.int64)) contour = torch.as_tensor(ann["obj_contour"]) return dict( category=category, label=label, image=image, image_path=image_path, bbox=bbox, contour=contour, ann_path=ann_path, )
def _collate_and_decode_sample( self, data: Tuple[Tuple[str, str], Tuple[Tuple[str, io.IOBase], Tuple[str, io.IOBase]]], *, decoder: Optional[Callable[[io.IOBase], torch.Tensor]], ) -> Dict[str, Any]: key, (image_data, ann_data) = data category, _ = key image_path, image_buffer = image_data ann_path, ann_buffer = ann_data label = self.info.categories.index(category) image = decoder(image_buffer) if decoder else image_buffer ann = read_mat(ann_buffer) bbox = BoundingBox(ann["box_coord"].astype( np.int64).squeeze()[[2, 0, 3, 1]], format="xyxy") contour = Feature(ann["obj_contour"].T) return dict( category=category, label=label, image=image, image_path=image_path, bbox=bbox, contour=contour, ann_path=ann_path, )
def _collate_and_decode_sample( self, data: Tuple[Tuple[Any, Tuple[str, io.IOBase]], Tuple[str, io.IOBase]], *, config: DatasetConfig, decoder: Optional[Callable[[io.IOBase], torch.Tensor]], ) -> Dict[str, Any]: split_and_image_data, ann_data = data _, image_data = split_and_image_data image_path, image_buffer = image_data ann_path, ann_buffer = ann_data image = decoder(image_buffer) if decoder else image_buffer if config.boundaries or config.segmentation: boundaries, segmentation = self._decode_ann( read_mat(ann_buffer), decode_boundaries=config.boundaries, decode_segmentation=config.segmentation) else: boundaries = segmentation = None return dict( image_path=image_path, image=image, ann_path=ann_path, boundaries=boundaries, segmentation=segmentation, )
def _extract_categories_and_wnids(self, data: Tuple[str, BinaryIO]) -> List[Tuple[str, str]]: synsets = read_mat(data[1], squeeze_me=True)["synsets"] return [ (self._WNID_MAP.get(wnid, category.split(",", 1)[0]), wnid) for _, wnid, category, _, num_children, *_ in synsets # if num_children > 0, we are looking at a superclass that has no direct instance if num_children == 0 ]
def _generate_categories(self) -> List[str]: resources = self._resources() devkit_dp = resources[1].load(self._root) meta_dp = Filter(devkit_dp, path_comparator("name", "cars_meta.mat")) _, meta_file = next(iter(meta_dp)) return list(read_mat(meta_file, squeeze_me=True)["class_names"])
def _read_images_and_labels(self, data: Tuple[str, BinaryIO]) -> List[Tuple[np.ndarray, np.ndarray]]: _, buffer = data content = read_mat(buffer) return list( zip( content["X"].transpose((3, 0, 1, 2)), content["y"].squeeze(), ) )
def _generate_categories(self, root: pathlib.Path) -> List[str]: config = self.info.make_config(split="train") resources = self.resources(config) devkit_dp = resources[1].load(root) meta_dp = Filter(devkit_dp, path_comparator("name", "cars_meta.mat")) _, meta_file = next(iter(meta_dp)) return list(read_mat(meta_file, squeeze_me=True)["class_names"])
def _2010_load_ann( self, data: Tuple[str, Tuple[str, io.IOBase]], *, decoder: Optional[Callable[[io.IOBase], torch.Tensor]]) -> Dict[str, Any]: _, (path, buffer) = data content = read_mat(buffer) return dict( ann_path=path, bounding_box=BoundingBox([ int(content["bbox"][coord]) for coord in ("left", "bottom", "right", "top") ], format="xyxy"), segmentation=Feature(content["seg"]), )
def _2010_prepare_ann(self, data: Tuple[str, Tuple[str, BinaryIO]], image_size: Tuple[int, int]) -> Dict[str, Any]: _, (path, buffer) = data content = read_mat(buffer) return dict( ann_path=path, bounding_box=BoundingBox( [ int(content["bbox"][coord]) for coord in ("left", "bottom", "right", "top") ], format="xyxy", image_size=image_size, ), segmentation=_Feature(content["seg"]), )
def _prepare_sample(self, data: Tuple[Tuple[Any, Tuple[str, BinaryIO]], Tuple[str, BinaryIO]]) -> Dict[str, Any]: split_and_image_data, ann_data = data _, image_data = split_and_image_data image_path, image_buffer = image_data ann_path, ann_buffer = ann_data anns = read_mat(ann_buffer, squeeze_me=True)["GTcls"] return dict( image_path=image_path, image=EncodedImage.from_file(image_buffer), ann_path=ann_path, # the boundaries are stored in sparse CSC format, which is not supported by PyTorch boundaries=_Feature(np.stack([raw_boundary.toarray() for raw_boundary in anns["Boundaries"].item()])), segmentation=_Feature(anns["Segmentation"].item()), )
def _prepare_sample( self, data: Tuple[Tuple[str, str], Tuple[Tuple[str, BinaryIO], Tuple[str, BinaryIO]]] ) -> Dict[str, Any]: key, (image_data, ann_data) = data category, _ = key image_path, image_buffer = image_data ann_path, ann_buffer = ann_data image = EncodedImage.from_file(image_buffer) ann = read_mat(ann_buffer) return dict( label=Label.from_category(category, categories=self._categories), image_path=image_path, image=image, ann_path=ann_path, bounding_box=BoundingBox(ann["box_coord"].astype( np.int64).squeeze()[[2, 0, 3, 1]], format="xyxy", image_size=image.image_size), contour=_Feature(ann["obj_contour"].T), )
def _generate_categories(self, root: pathlib.Path) -> List[Tuple[str, ...]]: resources = self.resources(self.default_config) devkit_dp = resources[1].load(root) devkit_dp = Filter(devkit_dp, path_comparator("name", "meta.mat")) meta = next(iter(devkit_dp))[1] synsets = read_mat(meta, squeeze_me=True)["synsets"] categories_and_wnids = cast( List[Tuple[str, ...]], [ (self._WNID_MAP.get(wnid, category.split(",", 1)[0]), wnid) for _, wnid, category, _, num_children, *_ in synsets # if num_children > 0, we are looking at a superclass that has no direct instance if num_children == 0 ], ) categories_and_wnids.sort( key=lambda category_and_wnid: category_and_wnid[1]) return categories_and_wnids
def __iter__(self) -> Iterator[Tuple[int, int, int, int, int, str]]: for _, file in self.datapipe: data = read_mat(file, squeeze_me=True) for ann in data["annotations"]: yield tuple(ann) # type: ignore[misc]