Source code for tensorbay.opendataset.CIHP.loader

#!/usr/bin/env python3
#
# Copyright 2021 Graviti. Licensed under MIT License.
#
# pylint: disable=invalid-name

"""Dataloader of CIHP dataset."""

import os

from tensorbay.dataset import Data, Dataset
from tensorbay.label import InstanceMask, SemanticMask

DATASET_NAME = "CIHP"
_SEGMENTS_INFO = {"train": "Training", "val": "Validation", "test": "Testing"}


[docs]def CIHP(path: str) -> Dataset: """`CIHP <https://github.com/Engineering-Course/CIHP_PGN>`_ dataset. The file structure should be like:: <path> Testing/ Images/ 0000002.jpg ... test_id.txt Training/ Images/ 0000006.jpg ... Category_ids/ 0000006.png ... Instance_ids/ 0000006.png ... train_id.txt Validation/ Images/ 0000001.jpg ... Category_ids/ 0000001.png ... Instance_ids/ 0000001.png ... val_id.txt Arguments: path: The root directory of the dataset. Returns: Loaded :class:`~tensorbay.dataset.dataset.Dataset` instance. """ root_path = os.path.join( os.path.abspath(os.path.expanduser(path)), "instance-level_human_parsing" ) dataset = Dataset(DATASET_NAME) dataset.load_catalog(os.path.join(os.path.dirname(__file__), "catalog.json")) for segment_name, segment_path in _SEGMENTS_INFO.items(): segment = dataset.create_segment(segment_name) segment_abspath = os.path.join(root_path, segment_path) image_path = os.path.join(segment_abspath, "Images") with open(os.path.join(segment_abspath, f"{segment_name}_id.txt"), encoding="utf-8") as fp: if segment_name == "test": for stem in fp: segment.append(Data(os.path.join(image_path, f"{stem.rstrip()}.jpg"))) else: category_path = os.path.join(segment_abspath, "Category_ids") instance_path = os.path.join(segment_abspath, "Instance_ids") for stem in fp: stem = stem.rstrip() data = Data(os.path.join(image_path, f"{stem}.jpg")) label = data.label png_filename = f"{stem}.png" label.semantic_mask = SemanticMask(os.path.join(category_path, png_filename)) label.instance_mask = InstanceMask(os.path.join(instance_path, png_filename)) segment.append(data) return dataset