inverse-and-edit / diffusion_core /diffusion_utils.py
multimodalart's picture
multimodalart HF Staff
Upload folder using huggingface_hub
dc7f251 verified
Raw History Blame Contribute Delete
1.01 kB
import torch
import numpy as np
from PIL import Image
@torch.no_grad()
def latent2image(latents, model, return_type='np'):
latents = latents.detach() / model.vae.config.scaling_factor
image_1 = model.vae.decode(latents)['sample'].detach()
image_2 = model.vae.decode(latents)['sample'].detach()
if return_type == 'np':
image = (image_1 / 2 + 0.5).clamp(0, 1)
image = image.cpu().permute(0, 2, 3, 1).numpy()
image = (image * 255).astype(np.uint8)
return image, image_2
@torch.no_grad()
def image2latent(image, model):
if type(image) is Image:
image = np.array(image)
if type(image) is torch.Tensor and image.dim() == 4:
latents = image
else:
image = torch.from_numpy(image).float() / 127.5 - 1
image = image.permute(2, 0, 1).unsqueeze(0).to(model.device).to(model.unet.dtype)
latents = model.vae.encode(image)['latent_dist'].mean
latents = latents * model.vae.config.scaling_factor
return latents