Beispiel #1
0
    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,
        )
Beispiel #2
0
    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,
        )
Beispiel #3
0
    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,
        )
Beispiel #4
0
 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
     ]
Beispiel #5
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"])
Beispiel #6
0
 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(),
         )
     )
Beispiel #7
0
    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"])
Beispiel #8
0
 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"]),
     )
Beispiel #9
0
 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"]),
     )
Beispiel #10
0
    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()),
        )
Beispiel #11
0
    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),
        )
Beispiel #12
0
    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
Beispiel #13
0
 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]