|
|
import os.path |
|
|
from data.base_dataset import BaseDataset, get_transform, get_params |
|
|
from data.image_folder import make_dataset |
|
|
from PIL import Image |
|
|
import random |
|
|
|
|
|
class UnalignedDayNightDataset(BaseDataset): |
|
|
@staticmethod |
|
|
def modify_commandline_options(parser, is_train): |
|
|
parser.add_argument('--dataroot', required=True, |
|
|
help='path to images (should have subfolders train/val containing day/night)') |
|
|
parser.set_defaults(preprocess_mode='resize_and_crop', load_size=286, crop_size=256) |
|
|
if not is_train: |
|
|
parser.set_defaults(no_flip=True) |
|
|
return parser |
|
|
|
|
|
def __init__(self, opt): |
|
|
BaseDataset.__init__(self) |
|
|
self.opt = opt |
|
|
|
|
|
root = opt.dataroot |
|
|
phase = opt.phase |
|
|
|
|
|
self.dir_A = os.path.join(root, phase, 'day') |
|
|
self.dir_B = os.path.join(root, phase, 'night') |
|
|
|
|
|
self.A_paths = sorted(make_dataset(self.dir_A, recursive=True)) |
|
|
self.B_paths = sorted(make_dataset(self.dir_B, recursive=True)) |
|
|
|
|
|
self.A_size = len(self.A_paths) |
|
|
self.B_size = len(self.B_paths) |
|
|
|
|
|
if self.A_size == 0 or self.B_size == 0: |
|
|
raise (RuntimeError(f"Found 0 images in one of the data directories: {self.dir_A} or {self.dir_B}")) |
|
|
|
|
|
def __getitem__(self, index): |
|
|
A_path = self.A_paths[index % self.A_size] |
|
|
index_B = random.randint(0, self.B_size - 1) |
|
|
B_path = self.B_paths[index_B] |
|
|
|
|
|
A_img = Image.open(A_path).convert('RGB') |
|
|
B_img = Image.open(B_path).convert('RGB') |
|
|
|
|
|
params = get_params(self.opt, A_img.size) |
|
|
transform = get_transform(self.opt, params) |
|
|
|
|
|
A = transform(A_img) |
|
|
B = transform(B_img) |
|
|
|
|
|
return {'day': A, 'night': B, 'cpath': A_path, 'spath_night': B_path} |
|
|
|
|
|
def __len__(self): |
|
|
return max(self.A_size, self.B_size) |