# Stable Diffusion Samplers

# Dive deep into stable diffusion samplers.

We will learn what is a sampler in stable diffusion and basic maths involved in it. Sampler is a very essential topic in stable diffusion because we will use it in various text to image creation tools like AUTOMATIC1111 Stable Diffusion GUI and comfyUI etc.

You may see something like this ⬇️ while using automatic1111 or comyfyUI.

## What Happens Behind the Sampler ?

The noise predictor model (model) will predict the noise from the text to image creation process, next the sampler contains a set of mathematic equations to perform sampling and denoising to create a final result. This is process occurs several times.

The mathematic equation looks like this

```
xt = αt/αs * xs − αt Z λt λs e −λ ϵˆθ(xˆλ, λ)dλ,
```

above equation is a ODE solver I didn't understand a single thing from the equation 😅

We're not going to learn that equation but You will understand how it works.

## Sampling

We start with random noise and another type of noise that we want to remove, which we call predicted noise. This process is repeated several times to achieve a clear end result. In each iteration, the sampler modifies the image to improve it from the previous version, and this overall process is known as "sampling."

### Sampling steps

Each individual modification or adjustment made by the sampler is referred to as a **"sampling step."**

### Denoising

During each sampling step, the original noise is gradually reduced to create the final, cleaned-up image. This reduction of noise in each step is specifically termed **"denoising."**

Example of sampling

## Sampler Methods

We will learn how each sampler method in the AUTOMATIC1111 Stable Diffusion GUI works and beyond it. I categorized the samplers for better understanding.

## Fastest Methods

### DPM++ 2M

It's the fastest and most advanced solver in the DPM family. It produces high-quality images in 14 to 20 steps, which is a bit slow compared to Euler but still faster than other solvers.

#### Break down the name

**D**- Diffusion (Spreading out the noise)**P**- Probabilistic (Predicting)**M**- Model**(++)**- Improved version of DDIM sampler (Oldest sampler)**2**- Second order mathematic equation**M**- Multistep process involved

**what makes it faster ?**

It uses `Multistep Variant`

to prevent **instability**(where the noise becomes unpredictable), Basically it takes smaller steps when solving the equation. Think of it like breaking down the problem into smaller, more manageable pieces to get a more stable and accurate result.

Example image

```
Prompt: red car driving in the highway, night background,4k
Model: SDXL base 1.0.safetensor
```

### DPM++ SDE

My personal favorite because it is neither too slow nor too fast, but it serves the job well. It takes 10 to 20 steps to create a high-quality image. We will learn what is SDE later on this documentation.

Example image

```
Same prompt
Steps : 20 steps
```

### Euler

The **fastest** and **simplest** diffusion solver in the list. It is a first-order solver, which means it does one computation with its takes its step.

To make more sense, think of it like a first order solvers being a person who can change strategies in each step to work at different level and speed depending on the workload but the second order solvers are the person who always works efficient and fast in all the time.

#### For better understand

When we use Euler and DPM++ 2M and set the step size to 15 for both, the first sampler takes random noise. With Euler, the process involves taking big jumps to obtain a clear image. On the other hand, DPM++2M jumps equal distance to achieve the result. However, if we increase the step size to 200, Euler takes small jumps in each steps, and by the 200th step, we get a clear result. In contrast, DPM++2M achieves a clear result in just middle steps. The second order solver is more stable and accurate than first order.

Still can't understand watch this video

Brock Webb. He talks about how the euler works.

Example image

```
Same prompt
Steps : 20 steps
```

### LMS

A Linear Multi-Step method is like a smarter version of Euler's method. Instead of only looking at the immediate past step to predict the next one, it looks at several past steps. This helps make the predictions more accurate.

Example image

## Stable Methods

### Heun

Heun is like the update euler. It is half as fast because it is a second order solver and it uses the same calculation that euler does but it has second mathematic equation. Which provides more stable and better results than euler.

Example image

### Restart

Yilun Xu and team came up with a new sampling algorithm. It works by doing something called "restarts," where it adds extra noise at intervals during the usual noise reduction process. According to the authors, this method combines the benefits of both deterministic and stochastic samplers. It's fast like deterministic samplers and doesn't get stuck in one place like stochastic samplers.

Example image

## Ancestral sampler

Ancestral samplers is a addtional layer for each solvers, which is denoted as "A" at the end of the sampler names

For example

Euler A, DPM++ 2s A, DPM2 A

### When to choose Ancestral samplers

It is more suitable for creating randomness images. It changes the image in each steps and the end results are also usually quite different from the non-ancestral counterpart, often regarded as more "creative".

### Image converge

Mostly all the ancestral sampler are Image converge.

Here a example

In the above example of image converge, The bear's position is changing in each steps and the end result is way different.

In the above example of doesn't converge, The bear's position is changing but not like the Euler ancestral

## karras Methods

You can identify the karras methods very easily because it has the word karras at the end.

For example

DPM++ 2M karras DPM++ 2S karras DPM++ SDE karras

Generally, it's effective to take big steps initially and smaller steps later on. The Karras schedule is a slight adjustment to the standard schedule, which has been found to work better based on practical experience.

## Comparison

I added example images for all the samplers below. Maybe all look the same but they are slightly different from each others.

## My Final Verdict

**Verdict 1:** I choose Euler for its simplicity and speed.

**Verdict 2:** If I want a stable and better quality image, then I prefer to use DPM++ 2M.

Always explore on your own, experiment with different parameters, and find what works best for you.