File size: 726 Bytes
64671d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
"""
@author: Yanzuo Lu
@author: oliveryanzuolu@gmail.com
"""

import diffusers
import torch
import torch.nn as nn


class VariationalAutoencoder(nn.Module):
    def __init__(self, pretrained_path):
        super().__init__()
        self.model = diffusers.AutoencoderKL.from_pretrained(pretrained_path, use_safetensors=True)
        self.model.requires_grad_(False)
        self.model.enable_slicing()

    @torch.no_grad()
    def encode(self, x):
        z = self.model.encode(x).latent_dist
        z = z.sample()
        z = self.model.scaling_factor * z
        return z

    @torch.no_grad()
    def decode(self, z):
        z = 1. / self.model.scaling_factor * z
        x = self.model.decode(z).sample
        return x