2022-07-24 13:23:50 +02:00
|
|
|
import os
|
|
|
|
import numpy as np
|
2021-12-21 03:23:41 +01:00
|
|
|
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
|
|
|
|
|
|
|
|
@abstractmethod
|
|
|
|
def __iter__(self):
|
2022-07-24 13:23:50 +02:00
|
|
|
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.
|
|
|
|
"""
|
|
|
|
@property
|
|
|
|
def prng(self):
|
|
|
|
currentpid = os.getpid()
|
|
|
|
if getattr(self, "_initpid", None) != currentpid:
|
|
|
|
self._initpid = currentpid
|
|
|
|
self._prng = np.random.RandomState()
|
|
|
|
return self._prng
|