【AutoencoderKL】基于stable-diffusion-v1.4的vae对图像重构

模型地址:https://huggingface.co/CompVis/stable-diffusion-v1-4/tree/main/vae
主要参考:Using-Stable-Diffusion-VAE-to-encode-satellite-images
在这里插入图片描述

sd1.4 vae

下载到本地

from diffusers import AutoencoderKL
from PIL import Image
import  torch
import torchvision.transforms as T

#  ./huggingface/stable-diffusion-v1-4/vae 切换为任意本地路径
vae = AutoencoderKL.from_pretrained("./huggingface/stable-diffusion-v1-4/vae",variant='fp16')
# c:\Users\zeng\Downloads\vae_config.json

def encode_img(input_img):
    # Single image -> single latent in a batch (so size 1, 4, 64, 64)
        # Transform the image to a tensor and normalize it
    transform = T.Compose([
        # T.Resize((256, 256)),
        T.ToTensor()
    ])
    input_img = transform(input_img)
    if len(input_img.shape)<4:
        input_img = input_img.unsqueeze(0)
    with torch.no_grad():
        latent = vae.encode(input_img*2 - 1) # Note scaling
    return 0.18215 * latent.latent_dist.sample()



def decode_img(latents):
    # bath of latents -> list of images
    latents = (1 / 0.18215) * latents
    with torch.no_grad():
        image = vae.decode(latents).sample
    image = (image / 2 + 0.5).clamp(0, 1)
    image = image.detach().cpu()
    # image = T.Resize(original_size)(image.squeeze())
    return T.ToPILImage()(image.squeeze())

if __name__ == '__main__':
    # Load an example image
    input_img = Image.open("huge.jpg")
    original_size = input_img.size
    print('original_size',original_size)

    # Encode and decode the image
    latents = encode_img(input_img)
    reconstructed_img = decode_img(latents)

    # Save the reconstructed image
    reconstructed_img.save("reconstructed_example2.jpg")
    # Concatenate the original and reconstructed images
    concatenated_img = Image.new('RGB', (original_size[0] * 2, original_size[1]))
    concatenated_img.paste(input_img, (0, 0))
    concatenated_img.paste(reconstructed_img, (original_size[0], 0))
    # Save the concatenated image
    concatenated_img.save("concatenated_example2.jpg")

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 13:10:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 13:10:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 13:10:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 13:10:03       69 阅读

热门阅读

  1. 每天一个数据分析题(四百二十三)- 置信区间

    2024-07-12 13:10:03       18 阅读
  2. 原来没分库分表,后期如何分库分表?

    2024-07-12 13:10:03       22 阅读
  3. js 移动数组元素的几个方法

    2024-07-12 13:10:03       18 阅读
  4. 使用C# 实现期望最大化算法

    2024-07-12 13:10:03       20 阅读
  5. [NLP Begin] Classical NLP Methods - HMM

    2024-07-12 13:10:03       26 阅读
  6. 【ELK】filebeat 和logstash区别

    2024-07-12 13:10:03       18 阅读
  7. 行为模式9.策略模式------促销活动设计方案

    2024-07-12 13:10:03       21 阅读
  8. Vim 编辑文件时中文乱码的解决方法

    2024-07-12 13:10:03       18 阅读