This example compares the different beta schedules available in Diffusers.jl. Code related to the generation of the datasets and the plots is hidden.

Swiss Roll

Double Square

MNIST

dataset = MNIST(:test)[16].features # hide
dataset = rotl90(dataset) # hide
dataset = normalize_neg_one_to_one(dataset) # hide

noise = randn(Float32, size(dataset)) # hide
anim = @animate for t in cat(fill(0, 20), 1:num_timesteps, fill(num_timesteps, 20), dims=1) # hide
  plots = [] # hide
  for (i, (scheduler, beta_schedule)) in enumerate(zip(schedulers, beta_schedules)) # hide
    if t == 0 # hide
      plot = heatmap( # hide
        dataset, # hide
        c=:grayC, # hide
        legend=:none, # hide
        aspect_ratio=:equal, # hide
        grid=false, # hide
        axis=false # hide
      ) # hide
      title!(string(beta_schedule)) # hide
    else # hide
      noisy_data = forward(scheduler, dataset, noise, [t]) # hide
      plot = heatmap( # hide
        noisy_data, # hide
        c=:grayC, # hide
        legend=:none, # hide
        aspect_ratio=:equal, # hide
        grid=false, # hide
        axis=false # hide
      ) # hide
      title!(string(beta_schedule)) # hide
    end # hide

    push!(plots, plot) # hide
  end # hide
  plot(plots...; size=(1200, 800)) # hide
end # hide

gif(anim, anim.dir * ".gif", fps=20) # hide

This page was generated using Literate.jl.