Source code for tensorbay.opendataset.VOC2012Segmentation.loader
#!/usr/bin/env python3
#
# Copyright 2021 Graviti. Licensed under MIT License.
#
# pylint: disable=invalid-name
"""Dataloader of VOC2012Segmentation dataset."""
import os
from tensorbay.dataset import Data, Dataset
from tensorbay.label import InstanceMask, SemanticMask
_SEGMENT_NAMES = ("train", "val")
DATASET_NAME = "VOC2012Segmentation"
[docs]def VOC2012Segmentation(path: str) -> Dataset:
"""`VOC2012Segmentation <http://host.robots.ox.ac.uk/pascal/VOC/voc2012/>`_ dataset.
The file structure should be like::
<path>/
JPEGImages/
<image_name>.jpg
...
SegmentationClass/
<mask_name>.png
...
SegmentationObject/
<mask_name>.png
...
ImageSets/
Segmentation/
train.txt
val.txt
...
...
...
Arguments:
path: The root directory of the dataset.
Returns:
Loaded :class: `~tensorbay.dataset.dataset.Dataset` instance.
"""
root_path = os.path.abspath(os.path.expanduser(path))
image_path = os.path.join(root_path, "JPEGImages")
semantic_mask_path = os.path.join(root_path, "SegmentationClass")
instance_mask_path = os.path.join(root_path, "SegmentationObject")
image_set_path = os.path.join(root_path, "ImageSets", "Segmentation")
dataset = Dataset(DATASET_NAME)
dataset.load_catalog(os.path.join(os.path.dirname(__file__), "catalog.json"))
for segment_name in _SEGMENT_NAMES:
segment = dataset.create_segment(segment_name)
with open(os.path.join(image_set_path, f"{segment_name}.txt"), encoding="utf-8") as fp:
for stem in fp:
stem = stem.strip()
data = Data(os.path.join(image_path, f"{stem}.jpg"))
label = data.label
mask_filename = f"{stem}.png"
label.semantic_mask = SemanticMask(os.path.join(semantic_mask_path, mask_filename))
label.instance_mask = InstanceMask(os.path.join(instance_mask_path, mask_filename))
segment.append(data)
return dataset