Skip to main content

Module time_embedding

Module time_embedding 

Source
Expand description

Time-step sinusoidal positional encoding + the MLP that follows it.

These match diffusers.models.embeddings.{Timesteps, TimestepEmbedding} 1:1 for SD-1.5’s settings (flip_sin_to_cos = true, freq_shift = 0).

Timesteps(C):           t -> [B, C]
  half = C / 2
  exponent = -log(max_period) * arange(half) / half
  freqs = exp(exponent)
  args  = t.float() * freqs
  emb   = cat([cos(args), sin(args)], dim=-1)   (flip_sin_to_cos = true)

TimestepEmbedding(C, time_emb_dim):
  Linear(C, time_emb_dim) -> SiLU -> Linear(time_emb_dim, time_emb_dim)

Diffusers’ Timesteps is parameter-free — it’s just an arithmetic recipe. We keep it as a Module<T> for ergonomic composition but parameters() is empty.

§REQ status (per .design/ferrotorch-diffusion/time_embedding.md)

REQStatusEvidence
REQ-1SHIPPEDTimesteps::new at ferrotorch-diffusion/src/time_embedding.rs:57..75; consumer: ferrotorch-diffusion/src/unet.rs:50 imports Timesteps for UNet2DConditionModel::new
REQ-2SHIPPEDTimesteps::forward_t at ferrotorch-diffusion/src/time_embedding.rs:87..152; consumer: ferrotorch-diffusion/src/unet.rs invokes the time-projection forward path
REQ-3SHIPPEDTimestepEmbedding::new at ferrotorch-diffusion/src/time_embedding.rs:217..226; consumer: ferrotorch-diffusion/src/unet.rs:50 builds the MLP inside UNet2DConditionModel::new
REQ-4SHIPPEDnamed_parameters at ferrotorch-diffusion/src/time_embedding.rs:248..257; consumer: ferrotorch-diffusion/src/safetensors_loader.rs:151..175 routes HF UNet keys through the layout
REQ-5SHIPPEDModule<T> for Timesteps empty-parameter impl at ferrotorch-diffusion/src/time_embedding.rs:156..186; consumer: ferrotorch-diffusion/src/unet.rs enumerates parameters without Timesteps contributing

Structs§

TimestepEmbedding
TimestepEmbeddingLinear -> SiLU -> Linear applied to the sinusoidal encoding.
Timesteps
Timesteps — sinusoidal positional encoding of a scalar timestep.