curt-park's picture
Init the space
2cdd41c
raw
history blame
1.96 kB
import pickle as pkl
from pathlib import Path
import cv2
import numpy as np
from isegm.data.base import ISDataset
from isegm.data.sample import DSample
class PascalVocDataset(ISDataset):
def __init__(self, dataset_path, split='train', **kwargs):
super().__init__(**kwargs)
assert split in {'train', 'val', 'trainval', 'test'}
self.dataset_path = Path(dataset_path)
self._images_path = self.dataset_path / "JPEGImages"
self._insts_path = self.dataset_path / "SegmentationObject"
self.dataset_split = split
if split == 'test':
with open(self.dataset_path / f'ImageSets/Segmentation/test.pickle', 'rb') as f:
self.dataset_samples, self.instance_ids = pkl.load(f)
else:
with open(self.dataset_path / f'ImageSets/Segmentation/{split}.txt', 'r') as f:
self.dataset_samples = [name.strip() for name in f.readlines()]
def get_sample(self, index) -> DSample:
sample_id = self.dataset_samples[index]
image_path = str(self._images_path / f'{sample_id}.jpg')
mask_path = str(self._insts_path / f'{sample_id}.png')
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
instances_mask = cv2.imread(mask_path)
instances_mask = cv2.cvtColor(instances_mask, cv2.COLOR_BGR2GRAY).astype(np.int32)
if self.dataset_split == 'test':
instance_id = self.instance_ids[index]
mask = np.zeros_like(instances_mask)
mask[instances_mask == 220] = 220 # ignored area
mask[instances_mask == instance_id] = 1
objects_ids = [1]
instances_mask = mask
else:
objects_ids = np.unique(instances_mask)
objects_ids = [x for x in objects_ids if x != 0 and x != 220]
return DSample(image, instances_mask, objects_ids=objects_ids, ignore_ids=[220], sample_id=index)