ArtifyAI / code /utils /utils.py
sushmitah01's picture
Initial clean project upload, removing large files and reseting the commit
77b48d9
Raw
History Blame Contribute Delete
1.87 kB
from torch.utils.data import Dataset
import os
from PIL import Image
from torchvision import transforms
class ImageFolderDataset(Dataset):
def __init__(self, root, transform=None):
super(ImageFolderDataset,self).__init__()
self.root=root
self.transform=transform
self.files=list(os.listdir(root))
self.files=[p for p in self.files if p.endswith(('.jpg','.png','.jpeg'))]
def __len__(self):
return len(self.files)
def __getitem__(self,idx):
image_path=os.path.join(self.root,self.files[idx])
image=Image.open(image_path).convert('RGB')
if self.transform:
image=self.transform(image)
return image
def get_transform(size,crop,final_size):
transform_list=[]
if size>0:
transform_list.append(transforms.Resize(size))
if crop:
transform_list.append(transforms.RandomCrop(final_size))
else:
transform_list.append(transforms.Resize(final_size))
transform_list.append(transforms.ToTensor())
return transforms.Compose(transform_list)
def adaptive_instance_normalization(content_feat, style_feat):
size=content_feat.size()
style_mean, style_std=calc_mean_std(style_feat)
content_mean, content_std= calc_mean_std(content_feat)
normalized_content_feat = (content_feat - content_mean.expand(size)) / content_std.expand(size)
return normalized_content_feat*style_std.expand(size)+style_mean.expand(size)
def calc_mean_std(feat, eps=1e-5):
size=feat.size()
assert(len(size)==4)
batch_size, channels=size[:2]
feat_mean=feat.view(batch_size,channels,-1).mean(dim=2).view(batch_size,channels,1,1)
feat_var = feat.view(batch_size, channels, -1).var(dim=2, unbiased=False) + eps
feat_std = feat_var.sqrt().view(batch_size, channels, 1, 1)
return feat_mean, feat_std