Spaces:
Running
on
Zero
Running
on
Zero
import os | |
import numpy as np | |
from abc import abstractmethod | |
from torch.utils.data import Dataset, ConcatDataset, ChainDataset, IterableDataset | |
class Txt2ImgIterableBaseDataset(IterableDataset): | |
''' | |
Define an interface to make the IterableDatasets for text2img data chainable | |
''' | |
def __init__(self, num_records=0, valid_ids=None, size=256): | |
super().__init__() | |
self.num_records = num_records | |
self.valid_ids = valid_ids | |
self.sample_ids = valid_ids | |
self.size = size | |
print(f'{self.__class__.__name__} dataset contains {self.__len__()} examples.') | |
def __len__(self): | |
return self.num_records | |
def __iter__(self): | |
pass | |
class PRNGMixin(object): | |
""" | |
Adds a prng property which is a numpy RandomState which gets | |
reinitialized whenever the pid changes to avoid synchronized sampling | |
behavior when used in conjunction with multiprocessing. | |
""" | |
def prng(self): | |
currentpid = os.getpid() | |
if getattr(self, "_initpid", None) != currentpid: | |
self._initpid = currentpid | |
self._prng = np.random.RandomState() | |
return self._prng | |