Models / sd-vae-ft-mse

SD VAE ft-MSE (decoder)

Stability AI's MSE-finetuned autoencoder for Stable Diffusion, decoder half: group-normalized residual blocks, one spatial self-attention, and nearest-neighbour upsampling turn a 4-channel latent into an RGB image.

49.5M parameterssd-vaeMITimage-generationvisionconvolutionaldiffusionautoencoder

The decode entry with one level of blocks expanded. Every edge carries the tensor type the compiler inferred at that point, in the model's own generics.

SD VAE ft-MSE (decoder): decodeSD VAE ft-MSE (decoder): decode

Entries ​

EntrySignature
decodedecode<B: Dim>(latent: Tensor[B, 4, H, W; T]) -> Tensor[B, 3, 8 * H, 8 * W; T]

Generics ​

The root block's generics as this checkpoint binds them.

H16
W16
Tf32

Blocks ​

Every block of the program with its members and functions, as linnet inspect prints them.

Conv1d ​

text
std.nn.conv::Conv1d<Cin: Dim, Cout: Dim, K: Dim, Stride: Dim, Pad: Dim, T: Float = f32>
  param weight: Tensor[Cout, Cin, K; T]
  param bias: Tensor[Cout; T]?
  pub fn forward<B: Dim, L: Dim>(x: Tensor[B, Cin, L; T]) -> Tensor[B, Cout, 1 + (-1 * K + L + 2 * Pad) / Stride; T]

Conv2d ​

text
std.nn.conv::Conv2d<Cin: Dim, Cout: Dim, K: Dim, Stride: Dim, Pad: Dim, T: Float = f32>
  param weight: Tensor[Cout, Cin, K, K; T]
  param bias: Tensor[Cout; T]?
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, Cin, H, W; T]) -> Tensor[B, Cout, 1 + (-1 * K + H + 2 * Pad) / Stride, 1 + (-1 * K + W + 2 * Pad) / Stride; T]

Conv2dRect ​

text
std.nn.conv::Conv2dRect<Cin: Dim, Cout: Dim, KH: Dim, KW: Dim, StrideH: Dim, StrideW: Dim, PadH: Dim, PadW: Dim, T: Float = f32>
  param weight: Tensor[Cout, Cin, KH, KW; T]
  param bias: Tensor[Cout; T]?
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, Cin, H, W; T]) -> Tensor[B, Cout, 1 + (-1 * KH + H + 2 * PadH) / StrideH, 1 + (-1 * KW + W + 2 * PadW) / StrideW; T]

GroupNorm ​

text
sd_vae::GroupNorm<C: Dim, T: Float>
  param weight: Tensor[C; T]
  param bias: Tensor[C; T]
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, C, H, W; T]) -> Tensor[B, C, H, W; T]

Linear ​

text
std.nn.linear::Linear<In: Dim, Out: Dim, T: Float = bf16>
  param weight: Tensor[Out, In; T]
  param bias: Tensor[Out; T]?
  pub fn forward<*S: Shape>(x: Tensor[*S, In; T]) -> Tensor[*S, Out; T]

MidBlock ​

text
sd_vae::MidBlock<C: Dim, T: Float>
  sub first: ResBlock<C, T>
  sub attention: SpatialAttention<C, T>
  sub second: ResBlock<C, T>
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, C, H, W; T]) -> Tensor[B, C, H, W; T]

Model ​

text
sd_vae::Model<H: Dim, W: Dim, T: Float = f32>
  sub post_quant_conv: Conv2d<4, 4, 1, 1, 0, T>
  sub conv_in: Conv2d<4, 512, 3, 1, 1, T>
  sub mid_block: MidBlock<512, T>
  sub up_block_0: UpBlock<512, T>
  sub up_block_1: UpBlock<512, T>
  sub up_block_2: UpBlockWiden<512, 256, T>
  sub up_block_3: UpBlockWidenFinal<256, 128, T>
  sub norm_out: GroupNorm<128, T>
  sub conv_out: Conv2d<128, 3, 3, 1, 1, T>
  pub entry decode<B: Dim>(latent: Tensor[B, 4, H, W; T]) -> Tensor[B, 3, 8 * H, 8 * W; T]

ResBlock ​

text
sd_vae::ResBlock<C: Dim, T: Float>
  sub norm1: GroupNorm<C, T>
  sub conv1: Conv2d<C, C, 3, 1, 1, T>
  sub norm2: GroupNorm<C, T>
  sub conv2: Conv2d<C, C, 3, 1, 1, T>
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, C, H, W; T]) -> Tensor[B, C, H, W; T]

ResBlockWiden ​

text
sd_vae::ResBlockWiden<Cin: Dim, Cout: Dim, T: Float>
  sub norm1: GroupNorm<Cin, T>
  sub conv1: Conv2d<Cin, Cout, 3, 1, 1, T>
  sub norm2: GroupNorm<Cout, T>
  sub conv2: Conv2d<Cout, Cout, 3, 1, 1, T>
  sub shortcut: Conv2d<Cin, Cout, 1, 1, 0, T>
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, Cin, H, W; T]) -> Tensor[B, Cout, H, W; T]

RmsNorm ​

text
std.nn.norm::RmsNorm<H: Dim, T: Float = bf16>
  param weight: Tensor[H; T]
  pub fn forward<*S: Shape>(x: Tensor[*S, H; T]) -> Tensor[*S, H; T]

SpatialAttention ​

text
sd_vae::SpatialAttention<C: Dim, T: Float>
  sub norm: GroupNorm<C, T>
  sub query: Linear<C, C, T>
  sub key: Linear<C, C, T>
  sub value: Linear<C, C, T>
  sub proj: Linear<C, C, T>
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, C, H, W; T]) -> Tensor[B, C, H, W; T]

UpBlock ​

text
sd_vae::UpBlock<C: Dim, T: Float>
  sub first: ResBlock<C, T>
  sub second: ResBlock<C, T>
  sub third: ResBlock<C, T>
  sub upsample: Conv2d<C, C, 3, 1, 1, T>
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, C, H, W; T]) -> Tensor[B, C, 2 * H, 2 * W; T]

UpBlockWiden ​

text
sd_vae::UpBlockWiden<Cin: Dim, Cout: Dim, T: Float>
  sub first: ResBlockWiden<Cin, Cout, T>
  sub second: ResBlock<Cout, T>
  sub third: ResBlock<Cout, T>
  sub upsample: Conv2d<Cout, Cout, 3, 1, 1, T>
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, Cin, H, W; T]) -> Tensor[B, Cout, 2 * H, 2 * W; T]

UpBlockWidenFinal ​

text
sd_vae::UpBlockWidenFinal<Cin: Dim, Cout: Dim, T: Float>
  sub first: ResBlockWiden<Cin, Cout, T>
  sub second: ResBlock<Cout, T>
  sub third: ResBlock<Cout, T>
  pub fn forward<B: Dim, H: Dim, W: Dim>(x: Tensor[B, Cin, H, W; T]) -> Tensor[B, Cout, H, W; T]