{ "

U-Net model for Denoising Diffusion Probabilistic Models (DDPM)

\n

This is a U-Net based model to predict noise _^_0_^_.

\n

U-Net is a gets it's name from the U shape in the model diagram. It processes a given image by progressively lowering (halving) the feature map resolution and then increasing the resolution. There are pass-through connection at each resolution.

\n

_^_1_^_

\n

This implementation contains a bunch of modifications to original U-Net (residual blocks, multi-head attention) and also adds time-step embeddings _^_2_^_.

\n": "

\u0dc0\u0dd2\u0dc3\u0dbb\u0dab \u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d86\u0d9a\u0dd8\u0dad\u0dd2 \u0db1\u0dd2\u0dbb\u0dd6\u0db4\u0dab\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0dc3\u0db3\u0dc4\u0dcf \u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca \u0d86\u0d9a\u0dd8\u0dad\u0dd2\u0dba (\u0da9\u0dd3\u0da9\u0dd3\u0db4\u0dd3\u0d91\u0db8\u0dca)

\n

\u0dc1\u0db6\u0dca\u0daf\u0dba\u0db4\u0dd4\u0dbb\u0ddd\u0d9a\u0dae\u0db1\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0dc3\u0db3\u0dc4\u0dcf \u0db8\u0dd9\u0dba \u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca \u0db4\u0daf\u0db1\u0db8\u0dca \u0d9a\u0dbb\u0d9c\u0dad\u0dca \u0d86\u0d9a\u0dd8\u0dad\u0dd2\u0dba\u0d9a\u0dd2 _^_0_^_.

\n

\u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca\u0dba\u0db1\u0dd4 \u0d86\u0daf\u0dbb\u0dca\u0dc1 \u0dbb\u0dd6\u0db4 \u0dc3\u0da7\u0dc4\u0db1\u0dda \u0dba\u0dd6 \u0dc4\u0dd0\u0da9\u0dba\u0dd9\u0db1\u0dca \u0d91\u0dba \u0db1\u0db8 \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dd3. \u0dc0\u0dd2\u0dc1\u0dda\u0dc2\u0dcf\u0d82\u0d9c \u0dc3\u0dd2\u0dad\u0dd2\u0dba\u0db8\u0dca \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba \u0d9a\u0dca\u0dbb\u0db8\u0dba\u0dd9\u0db1\u0dca \u0d85\u0da9\u0dd4 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dd9\u0db1\u0dca (\u0d85\u0da9\u0d9a\u0dca) \u0dc3\u0dc4 \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba \u0dc0\u0dd0\u0da9\u0dd2 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dd9\u0db1\u0dca \u0d91\u0dba \u0dbd\u0db6\u0dcf \u0daf\u0dd3 \u0d87\u0dad\u0dd2 \u0dbb\u0dd6\u0db4\u0dba\u0d9a\u0dca \u0dc3\u0d9a\u0dc3\u0db1\u0dd4 \u0dbd\u0dd0\u0db6\u0dda. \u0dc3\u0dd1\u0db8 \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba\u0d9a\u0daf\u0dd3\u0db8 \u0db4\u0dcf\u0dc3\u0dca-\u0dc4\u0dbb\u0dc4\u0dcf \u0dc3\u0db8\u0dca\u0db6\u0db1\u0dca\u0db0\u0dad\u0dcf\u0dc0\u0dba\u0d9a\u0dca \u0d87\u0dad.

\n

_^_1_^_

\n

\u0db8\u0dd9\u0db8\u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0dad\u0dca\u0db8\u0d9a \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0db8\u0dd4\u0dbd\u0dca \u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca (\u0d85\u0dc0\u0dc1\u0dda\u0dc2 \u0d9a\u0dd4\u0da7\u0dca\u0da7\u0dd2, \u0db6\u0dc4\u0dd4-\u0dc4\u0dd2\u0dc3 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba) \u0dc3\u0db3\u0dc4\u0dcf \u0dc0\u0dd9\u0db1\u0dc3\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dca \u0dbb\u0dcf\u0dc1\u0dd2\u0dba\u0d9a\u0dca \u0d85\u0da9\u0d82\u0d9c\u0dd4 \u0dc0\u0db1 \u0d85\u0dad\u0dbb \u0d9a\u0dcf\u0dbd-\u0db4\u0dd2\u0dba\u0dc0\u0dbb \u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8\u0dca \u0d91\u0d9a\u0dad\u0dd4 \u0d9a\u0dbb\u0dba\u0dd2 _^_2_^_.

\n", "

U-Net

\n": "

\u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca

\n", "

Attention block

\n

This is similar to transformer multi-head attention.

\n": "

\u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba\u0dc0\u0dcf\u0dbb\u0dab

\n

\u0db8\u0dd9\u0dba \u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dca \u0db6\u0dc4\u0dd4-\u0dc4\u0dd2\u0dc3 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba\u0da7\u0dc3\u0db8\u0dcf\u0db1 \u0dc0\u0dda.

\n", "

Down block

\n

This combines _^_0_^_ and _^_1_^_. These are used in the first half of U-Net at each resolution.

\n": "

\u0db6\u0dca\u0dbd\u0ddc\u0d9a\u0dca\u0da9\u0dc0\u0dd4\u0db1\u0dca

\n

\u0db8\u0dd9\u0dba\u0d92\u0d9a\u0dcf\u0db6\u0daf\u0dca\u0db0 _^_0_^_ \u0dc4\u0dcf _^_1_^_. \u0db8\u0dd9\u0db8 \u0d91\u0d9a\u0dca \u0d91\u0d9a\u0dca \u0dba\u0ddd\u0da2\u0db1\u0dcf\u0dc0 \u0daf\u0dd3 U-Net \u0db4\u0dc5\u0db8\u0dd4 \u0db7\u0dcf\u0d9c\u0dba\u0dda \u0daf\u0dd3 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0dc0\u0dda.

\n", "

Embeddings for _^_0_^_

\n": "

\u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8\u0dca\u0dc3\u0db3\u0dc4\u0dcf _^_0_^_

\n", "

Middle block

\n

It combines a _^_0_^_, _^_1_^_, followed by another _^_2_^_. This block is applied at the lowest resolution of the U-Net.

\n": "

\u0db8\u0dd0\u0daf\u0d9a\u0ddc\u0da7\u0dc3

\n

\u0d91\u0dba\u0dad\u0dc0\u0dad\u0dca \u0d91\u0d9a\u0d9a\u0dca _^_0_^_\u0dc3\u0db8\u0d9f \u0d92\u0d9a\u0dcf\u0db6\u0daf\u0dca\u0db0 _^_2_^_\u0dc0\u0dda. _^_1_^_ \u0db8\u0dd9\u0db8 \u0d9a\u0ddc\u0da7\u0dc3 U-Net \u0dc4\u0dd2 \u0d85\u0da9\u0dd4\u0db8 \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba\u0dd9\u0db1\u0dca \u0dba\u0ddc\u0daf\u0db1\u0dd4 \u0dbd\u0dd0\u0db6\u0dda.

\n", "

Residual block

\n

A residual block has two convolution layers with group normalization. Each resolution is processed with two residual blocks.

\n": "

\u0d85\u0dc0\u0dc1\u0dda\u0dc2\u0d9a\u0ddc\u0da7\u0dc3

\n

\u0d85\u0dc0\u0dc1\u0dda\u0dc2\u0d9a\u0ddc\u0da7\u0dc3\u0d9a\u0daf\u0dd3 \u0d9a\u0dab\u0dca\u0da9\u0dcf\u0dba\u0db8\u0dca \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0dc3\u0db8\u0d9c convolution \u0dc3\u0dca\u0dae\u0dbb \u0daf\u0dd9\u0d9a\u0d9a\u0dca \u0d87\u0dad. \u0dc3\u0dd1\u0db8 \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba\u0d9a\u0dca\u0db8 \u0d85\u0dc0\u0dc1\u0dda\u0dc2 \u0d9a\u0ddc\u0da7\u0dc3\u0dca \u0daf\u0dd9\u0d9a\u0d9a\u0dd2\u0db1\u0dca \u0dc3\u0d9a\u0dc3\u0db1\u0dd4 \u0dbd\u0dd0\u0db6\u0dda.

\n", "

Scale down the feature map by _^_0_^_

\n": "

\u0dc0\u0dd2\u0dc1\u0dda\u0dc2\u0dcf\u0d82\u0d9c\u0dc3\u0dd2\u0dad\u0dd2\u0dba\u0db8 \u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_

\n", "

Scale up the feature map by _^_0_^_

\n": "

\u0dc0\u0dd2\u0dc1\u0dda\u0dc2\u0dcf\u0d82\u0d9c\u0dc3\u0dd2\u0dad\u0dd2\u0dba\u0db8 \u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_

\n", "

Swish actiavation function

\n

_^_0_^_

\n": "

\u0dc3\u0dca\u0dc0\u0dd2\u0dc3\u0dca\u0dc2\u0dca\u0d9a\u0dca\u0dbb\u0dd2\u0dba\u0dcf\u0d9a\u0dcf\u0dbb\u0dd3 \u0dc1\u0dca\u0dbb\u0dd2\u0dad\u0dba

\n

_^_0_^_

\n", "

Up block

\n

This combines _^_0_^_ and _^_1_^_. These are used in the second half of U-Net at each resolution.

\n": "

\u0db6\u0dca\u0dbd\u0ddc\u0d9a\u0dca\u0daf\u0d9a\u0dca\u0dc0\u0dcf

\n

\u0db8\u0dd9\u0dba\u0d92\u0d9a\u0dcf\u0db6\u0daf\u0dca\u0db0 _^_0_^_ \u0dc4\u0dcf _^_1_^_. \u0dc3\u0dd1\u0db8 \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba\u0d9a\u0daf\u0dd3\u0db8 \u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca \u0dc4\u0dd2 \u0daf\u0dd9\u0dc0\u0db1 \u0db7\u0dcf\u0d9c\u0dba\u0dda\u0daf\u0dd3 \u0db8\u0dda\u0dc0\u0dcf \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0dc0\u0dda.

\n", "

First half of U-Net - decreasing resolution

\n": "

U-Net\u0db4\u0dc5\u0db8\u0dd4 \u0db7\u0dcf\u0d9c\u0dba - \u0d85\u0da9\u0dd4 \u0dba\u0ddd\u0da2\u0db1\u0dcf\u0dc0

\n", "

Second half of U-Net - increasing resolution

\n": "

\u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca\u0dc4\u0dd2 \u0daf\u0dd9\u0dc0\u0db1 \u0db7\u0dcf\u0d9c\u0dba - \u0dc0\u0dd0\u0da9\u0dd2 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dda \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba

\n", "

\n": "

\n", "

_^_0_^_ at the same resolution

\n": "

_^_0_^_ \u0d91\u0d9a\u0db8 \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba\u0dda

\n", "

_^_0_^_ is not used, but it's kept in the arguments because for the attention layer function signature to match with _^_1_^_.

\n": "

_^_0_^_ \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0db1\u0ddc\u0d9a\u0dd9\u0dbb\u0dda, \u0db1\u0db8\u0dd4\u0dad\u0dca \u0d91\u0dba \u0dad\u0dbb\u0dca\u0d9a\u0dc0\u0dbd \u0dad\u0db6\u0dcf \u0d87\u0dad\u0dca\u0dad\u0dda \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dba\u0ddc\u0db8\u0dd4 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0dda \u0dc3\u0dca\u0dae\u0dbb \u0dc1\u0dca\u0dbb\u0dd2\u0dad\u0dba\u0dda \u0d85\u0dad\u0dca\u0dc3\u0db1 \u0dc3\u0db8\u0d9f \u0d9c\u0dd0\u0dbd\u0db4\u0dd9\u0db1 \u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dd2 _^_1_^_.

\n", "

_^_0_^_ will store outputs at each resolution for skip connection

\n": "

_^_0_^_ \u0db8\u0d9f \u0dc4\u0dd0\u0dbb\u0dd3\u0db8\u0dda \u0dc3\u0db8\u0dca\u0db6\u0db1\u0dca\u0db0\u0dad\u0dcf\u0dc0\u0dba \u0dc3\u0db3\u0dc4\u0dcf \u0d91\u0d9a\u0dca \u0d91\u0d9a\u0dca \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba\u0dda \u0db4\u0dca\u0dbb\u0dad\u0dd2\u0daf\u0dcf\u0db1\u0dba\u0db1\u0dca \u0d9c\u0db6\u0da9\u0dcf \u0d9a\u0dbb\u0db1\u0dd4 \u0d87\u0dad

\n", "

Activation

\n": "

\u0dc3\u0d9a\u0dca\u200d\u0dbb\u0dd3\u0dba\u0d9a\u0dd2\u0dbb\u0dd3\u0db8

\n", "

Add _^_0_^_

\n": "

\u0d91\u0d9a\u0dad\u0dd4\u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_

\n", "

Add skip connection

\n": "

\u0db8\u0d9f\u0dc4\u0dd0\u0dbb\u0dd3\u0db8\u0dda \u0dc3\u0db8\u0dca\u0db6\u0db1\u0dca\u0db0\u0dad\u0dcf\u0dc0\u0dba \u0d91\u0d9a\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Add the shortcut connection and return

\n": "

\u0d9a\u0dd9\u0da7\u0dd2\u0db8\u0d82\u0dc3\u0db8\u0dca\u0db6\u0db1\u0dca\u0db0\u0dad\u0dcf\u0dc0\u0dba \u0d91\u0d9a\u0dad\u0dd4 \u0d9a\u0dbb \u0d86\u0db4\u0dc3\u0dd4 \u0dba\u0db1\u0dca\u0db1

\n", "

Add time embeddings

\n": "

\u0d9a\u0dcf\u0dbd\u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8\u0dca \u0d91\u0d9a\u0dad\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Calculate scaled dot-product _^_0_^_

\n": "

\u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dad\u0dd2\u0dad\u0dca \u0db1\u0dd2\u0dc2\u0dca\u0db4\u0dcf\u0daf\u0db1\u0dba\u0d9a\u0dca \u0d9c\u0dab\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_

\n", "

Change _^_0_^_ to shape _^_1_^_

\n": "

_^_0_^_ \u0dc4\u0dd0\u0da9\u0dba\u0da7 \u0dc0\u0dd9\u0db1\u0dc3\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_1_^_

\n", "

Change to shape _^_0_^_

\n": "

\u0dc4\u0dd0\u0da9\u0dba\u0da7\u0dc0\u0dd9\u0db1\u0dc3\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_

\n", "

Combine the set of modules

\n": "

\u0db8\u0ddc\u0da9\u0dd2\u0dba\u0dd4\u0dbd\u0d9a\u0da7\u0dca\u0da7\u0dbd\u0dba \u0d92\u0d9a\u0dcf\u0db6\u0daf\u0dca\u0db0 \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Create sinusoidal position embeddings same as those from the transformer

\n_^_0_^_

where _^_1_^_ is _^_2_^_

\n": "

\u0da7\u0dca\u0dbb\u0dcf\u0db1\u0dca\u0dc3\u0dca\u0dc6\u0ddd\u0db8\u0dbb\u0dba\u0da7 \u0dc3\u0db8\u0dcf\u0db1\u0dc3\u0dba\u0dd2\u0db1\u0ddc\u0dc3\u0ddc\u0dba\u0dd2\u0da9\u0dbd\u0dca \u0dc3\u0dca\u0dae\u0dcf\u0db1 \u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8\u0dca \u0dc3\u0dcf\u0daf\u0db1\u0dca\u0db1

\n_^_0_^_

_^_1_^_ \u0d9a\u0ddc\u0dc4\u0dda\u0daf _^_2_^_

\n", "

Default _^_0_^_

\n": "

\u0db4\u0dd9\u0dbb\u0db1\u0dd2\u0db8\u0dd2 _^_0_^_

\n", "

Down sample at all resolutions except the last

\n": "

\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba\u0dc4\u0dd0\u0dbb \u0d85\u0db1\u0dd9\u0d9a\u0dd4\u0dad\u0dca \u0dc3\u0dd2\u0dba\u0dbd\u0dd4 \u0dba\u0ddd\u0da2\u0db1\u0dcf \u0daf\u0dd3 \u0d86\u0daf\u0dbb\u0dca\u0dc1 \u0db4\u0dc4\u0dc5

\n", "

Final block to reduce the number of channels

\n": "

\u0db1\u0dcf\u0dbd\u0dd2\u0d9a\u0dcf\u0d9c\u0dab\u0db1 \u0d85\u0da9\u0dd4 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0dc3\u0db3\u0dc4\u0dcf \u0d85\u0dc0\u0dc3\u0dcf\u0db1 \u0d9a\u0ddc\u0da7\u0dc3

\n", "

Final normalization and convolution

\n": "

\u0d85\u0dc0\u0dc3\u0dcf\u0db1\u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0dc3\u0dc4 \u0d9a\u0dd0\u0da7\u0dd2 \u0d9a\u0dd2\u0dbb\u0dd3\u0db8

\n", "

Final normalization and convolution layer

\n": "

\u0d85\u0dc0\u0dc3\u0dcf\u0db1\u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0dc3\u0dc4 \u0d9a\u0dd0\u0da7\u0dd2 \u0d9c\u0dd0\u0dc3\u0dd4\u0dab\u0dd4 \u0dc3\u0dca\u0dae\u0dbb\u0dba

\n", "

First convolution layer

\n": "

\u0db4\u0dc5\u0db8\u0dd4\u0d9a\u0dd0\u0da7\u0dd2 \u0d9c\u0dd0\u0dc3\u0dd4\u0dab\u0dd4 \u0dc3\u0dca\u0dae\u0dbb\u0dba

\n", "

First half of U-Net

\n": "

\u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca\u0dc4\u0dd2 \u0db4\u0dc5\u0db8\u0dd4 \u0db7\u0dcf\u0d9c\u0dba

\n", "

First linear layer

\n": "

\u0db4\u0dc5\u0db8\u0dd4\u0dbb\u0dda\u0d9b\u0dd3\u0dba \u0dc3\u0dca\u0dae\u0dbb\u0dba

\n", "

For each resolution

\n": "

\u0d91\u0d9a\u0dca\u0d91\u0d9a\u0dca \u0dba\u0ddd\u0da2\u0db1\u0dcf\u0dc0 \u0dc3\u0db3\u0dc4\u0dcf

\n", "

Get image projection

\n": "

\u0dbb\u0dd6\u0db4\u0db4\u0dca\u0dbb\u0d9a\u0dca\u0dc2\u0dda\u0db4\u0dab\u0dba \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1

\n", "

Get query, key, and values (concatenated) and shape it to _^_0_^_

\n": "

\u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8\u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1, \u0dba\u0dad\u0dd4\u0dbb, \u0dc3\u0dc4 \u0d85\u0d9c\u0dba\u0db1\u0dca (concatenated) \u0dc3\u0dc4 \u0d91\u0dba \u0dc4\u0dd0\u0da9\u0d9c\u0dc3\u0dca\u0dc0\u0dcf _^_0_^_

\n", "

Get shape

\n": "

\u0dc4\u0dd0\u0da9\u0dba\u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1

\n", "

Get the skip connection from first half of U-Net and concatenate

\n": "

\u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca\u0dc4\u0dd2 \u0db4\u0dc5\u0db8\u0dd4 \u0db7\u0dcf\u0d9c\u0dba\u0dda \u0dc3\u0dd2\u0da7 \u0db8\u0d9f \u0dc4\u0dd0\u0dbb\u0dd3\u0db8\u0dda \u0dc3\u0db8\u0dca\u0db6\u0db1\u0dca\u0db0\u0dad\u0dcf\u0dc0\u0dba \u0dbd\u0db6\u0dcf\u0d9c\u0dd9\u0db1 \u0dc3\u0d82\u0dba\u0dd4\u0d9a\u0dca\u0dad \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Get time-step embeddings

\n": "

\u0d9a\u0dcf\u0dbd-\u0db4\u0dd2\u0dba\u0dc0\u0dbb\u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8\u0dca \u0dbd\u0db6\u0dcf \u0d9c\u0db1\u0dca\u0db1

\n", "

Group normalization and the first convolution layer

\n": "

\u0d9a\u0dab\u0dca\u0da9\u0dcf\u0dba\u0db8\u0dca\u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0dc3\u0dc4 \u0db4\u0dc5\u0db8\u0dd4 \u0d9a\u0dd0\u0da7\u0dd2 \u0d9c\u0dd0\u0dc3\u0dd4\u0dab\u0dd4 \u0dc3\u0dca\u0dae\u0dbb\u0dba

\n", "

Group normalization and the second convolution layer

\n": "

\u0d9a\u0dab\u0dca\u0da9\u0dcf\u0dba\u0db8\u0dca\u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0dc3\u0dc4 \u0daf\u0dd9\u0dc0\u0db1 \u0d9a\u0dd0\u0da7\u0dd2 \u0d9c\u0dd0\u0dc3\u0dd4\u0dab\u0dd4 \u0dc3\u0dca\u0dad\u0dbb\u0dba

\n", "

If the number of input channels is not equal to the number of output channels we have to project the shortcut connection

\n": "

\u0d86\u0daf\u0dcf\u0db1\u0db1\u0dcf\u0dbd\u0dd2\u0d9a\u0dcf \u0d9c\u0dab\u0db1 \u0db4\u0dca\u0dbb\u0dad\u0dd2\u0daf\u0dcf\u0db1 \u0db1\u0dcf\u0dbd\u0dd2\u0d9a\u0dcf \u0d9c\u0dab\u0db1\u0da7 \u0dc3\u0db8\u0dcf\u0db1 \u0db1\u0ddc\u0dc0\u0dda \u0db1\u0db8\u0dca \u0d9a\u0dd9\u0da7\u0dd2\u0db8\u0d82 \u0dc3\u0db8\u0dca\u0db6\u0db1\u0dca\u0db0\u0dad\u0dcf\u0dc0\u0dba \u0db4\u0dca\u0dbb\u0d9a\u0dca\u0dc2\u0dda\u0db4\u0dab\u0dba \u0d9a\u0dc5 \u0dba\u0dd4\u0dad\u0dd4\u0dba

\n", "

Linear layer for final transformation

\n": "

\u0d85\u0dc0\u0dc3\u0dcf\u0db1\u0db4\u0dbb\u0dd2\u0dc0\u0dbb\u0dca\u0dad\u0db1\u0dba \u0dc3\u0db3\u0dc4\u0dcf \u0dbb\u0dda\u0d9b\u0dd3\u0dba \u0dc3\u0dca\u0dae\u0dbb\u0dba

\n", "

Linear layer for time embeddings

\n": "

\u0d9a\u0dcf\u0dbd\u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8\u0dca \u0dc3\u0db3\u0dc4\u0dcf \u0dbb\u0dda\u0d9b\u0dd3\u0dba \u0dc3\u0dca\u0dae\u0dbb\u0dba

\n", "

Middle (bottom)

\n": "

\u0db8\u0dd0\u0daf(\u0db4\u0dc4\u0dc5)

\n", "

Middle block

\n": "

\u0db8\u0dd0\u0daf\u0d9a\u0ddc\u0da7\u0dc3

\n", "

Multiply by values

\n": "

\u0d85\u0d9c\u0dba\u0db1\u0dca\u0d85\u0db1\u0dd4\u0dc0 \u0d9c\u0dd4\u0dab \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Normalization layer

\n": "

\u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba\u0dc3\u0dca\u0dae\u0dbb\u0dba

\n", "

Number of channels

\n": "

\u0db1\u0dcf\u0dbd\u0dd2\u0d9a\u0dcf\u0d9c\u0dab\u0db1

\n", "

Number of output channels at this resolution

\n": "

\u0db8\u0dd9\u0db8\u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba\u0dda \u0db4\u0dca\u0dbb\u0dad\u0dd2\u0daf\u0dcf\u0db1 \u0db1\u0dcf\u0dbd\u0dd2\u0d9a\u0dcf \u0d9c\u0dab\u0db1

\n", "

Number of resolutions

\n": "

\u0dba\u0ddd\u0da2\u0db1\u0dcf\u0d9c\u0dab\u0db1

\n", "

Project image into feature map

\n": "

\u0dc0\u0dd2\u0dc1\u0dda\u0dc2\u0dcf\u0d82\u0d9c\u0dc3\u0dd2\u0dad\u0dd2\u0dba\u0db8\u0da7 \u0dc0\u0dca\u0dba\u0dcf\u0db4\u0dd8\u0dad\u0dd2 \u0dbb\u0dd6\u0db4\u0dba

\n", "

Projections for query, key and values

\n": "

\u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8, \u0dba\u0dad\u0dd4\u0dbb \u0dc3\u0dc4 \u0d85\u0d9c\u0dba\u0db1\u0dca \u0dc3\u0db3\u0dc4\u0dcf \u0db4\u0dca\u0dbb\u0d9a\u0dca\u0dc2\u0dda\u0db4\u0dab

\n", "

Reshape to _^_0_^_

\n": "

\u0db1\u0dd0\u0dc0\u0dad\u0dc4\u0dd0\u0da9\u0d9c\u0dc3\u0dca\u0dc0\u0db1\u0dca\u0db1 _^_0_^_

\n", "

Scale for dot-product attention

\n": "

\u0dad\u0dd2\u0dad\u0dca\u0db1\u0dd2\u0dc2\u0dca\u0db4\u0dcf\u0daf\u0db1 \u0d85\u0dc0\u0db0\u0dcf\u0db1\u0dba \u0dc3\u0db3\u0dc4\u0dcf \u0db4\u0dbb\u0dd2\u0db8\u0dcf\u0dab\u0dba

\n", "

Second convolution layer

\n": "

\u0daf\u0dd9\u0dc0\u0db1\u0d9a\u0dd0\u0da7\u0dd2 \u0d9c\u0dd0\u0dc3\u0dd4\u0dab\u0dd4 \u0dc3\u0dca\u0dae\u0dbb\u0dba

\n", "

Second half of U-Net

\n": "

\u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca\u0dc4\u0dd2 \u0daf\u0dd9\u0dc0\u0db1 \u0db7\u0dcf\u0d9c\u0dba

\n", "

Second linear layer

\n": "

\u0daf\u0dd9\u0dc0\u0db1\u0dbb\u0dda\u0d9b\u0dd3\u0dba \u0dc3\u0dca\u0dae\u0dbb\u0dba

\n", "

Softmax along the sequence dimension _^_0_^_

\n": "

\u0d85\u0db1\u0dd4\u0d9a\u0dca\u0dbb\u0db8\u0dd2\u0d9a\u0db8\u0dcf\u0db1\u0dba \u0d94\u0dc3\u0dca\u0dc3\u0dda \u0dc3\u0ddc\u0dc6\u0dca\u0da7\u0dca\u0db8\u0dd0\u0d9a\u0dca\u0dc3\u0dca _^_0_^_

\n", "

Split query, key, and values. Each of them will have shape _^_0_^_

\n": "

\u0dc0\u0dd2\u0db8\u0dc3\u0dd4\u0db8, \u0dba\u0dad\u0dd4\u0dbb \u0dc3\u0dc4 \u0d85\u0d9c\u0dba\u0db1\u0dca \u0db6\u0dd9\u0daf\u0dd3\u0db8\u0dca. \u0d94\u0dc0\u0dd4\u0db1\u0dca \u0d91\u0d9a\u0dca \u0d91\u0d9a\u0dca \u0dc4\u0dd0\u0da9\u0dba \u0d87\u0dad _^_0_^_

\n", "

The input has _^_0_^_ because we concatenate the output of the same resolution from the first half of the U-Net

\n": "

\u0d86\u0daf\u0dcf\u0db1\u0dba\u0da7\u0d87\u0dad\u0dca\u0dad\u0dda \u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca \u0dc4\u0dd2 \u0db4\u0dc5\u0db8\u0dd4 \u0db7\u0dcf\u0d9c\u0dba\u0dda \u0dc3\u0dd2\u0da7 \u0d91\u0d9a\u0db8 \u0dc0\u0dd2\u0db7\u0dda\u0daf\u0db1\u0dba\u0dda \u0db4\u0dca\u0dbb\u0dad\u0dd2\u0daf\u0dcf\u0db1\u0dba \u0d85\u0db4 \u0dc3\u0d82\u0dba\u0dd4\u0d9a\u0dca\u0dad \u0d9a\u0dbb\u0db1 _^_0_^_ \u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dd2

\n", "

Time embedding layer. Time embedding has _^_0_^_ channels

\n": "

\u0d9a\u0dcf\u0dbd\u0dba\u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8 \u0dc3\u0dca\u0dae\u0dbb\u0dba. \u0d9a\u0dcf\u0dbd \u0d9a\u0dcf\u0dc0\u0dd0\u0daf\u0dca\u0daf\u0dd3\u0db8 _^_0_^_ \u0db1\u0dcf\u0dbd\u0dd2\u0d9a\u0dcf \u0d87\u0dad

\n", "

Transform to _^_0_^_

\n": "

\u0db6\u0dc0\u0da7\u0db4\u0dbb\u0dd2\u0dc0\u0dbb\u0dca\u0dad\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1 _^_0_^_

\n", "

Transform with the MLP

\n": "

\u0d91\u0db8\u0dca\u0d91\u0dbd\u0dca\u0db4\u0dd3\u0dc3\u0db8\u0d9f \u0db4\u0dbb\u0dd2\u0dc0\u0dbb\u0dca\u0dad\u0db1\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1

\n", "

Up sample at all resolutions except last

\n": "

\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba\u0dc4\u0dd0\u0dbb \u0d85\u0db1\u0dd9\u0d9a\u0dd4\u0dad\u0dca \u0dc3\u0dd2\u0dba\u0dbd\u0dd4 \u0dba\u0ddd\u0da2\u0db1\u0dcf \u0daf\u0dd3 \u0d86\u0daf\u0dbb\u0dca\u0dc1 \u0daf\u0d9a\u0dca\u0dc0\u0dcf

\n", "\n": "\n", "\n": "\n", "\n": "
  • _^_3_^_ \u0d9a\u0dab\u0dca\u0da9\u0dcf\u0dba\u0db8\u0dca \u0dc3\u0dcf\u0db8\u0dcf\u0db1\u0dca\u0dba\u0d9a\u0dbb\u0dab\u0dba \u0dc3\u0db3\u0dc4\u0dcf \u0d9a\u0dab\u0dca\u0da9\u0dcf\u0dba\u0db8\u0dca\u0dc3\u0d82\u0d9b\u0dca\u0dba\u0dcf\u0dc0 \u0dc0\u0dda
  • \n", "\n": "\n", "\n": "
  • _^_5_^_\u0dc4\u0dd0\u0dbd\u0dc4\u0dd0\u0db4\u0dca\u0db8\u0dda \u0d85\u0db1\u0dd4\u0db4\u0dcf\u0dad\u0dba \u0dc0\u0dda
  • \n", "U-Net model for Denoising Diffusion Probabilistic Models (DDPM)": "\u0dc0\u0dd2\u0dc3\u0dbb\u0dab \u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d86\u0d9a\u0dd8\u0dad\u0dd2 \u0db1\u0dd2\u0dbb\u0dd6\u0db4\u0dab\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8 \u0dc3\u0db3\u0dc4\u0dcf \u0dba\u0dd6-\u0db1\u0dd9\u0da7\u0dca \u0d86\u0d9a\u0dd8\u0dad\u0dd2\u0dba (\u0da9\u0dd3\u0da9\u0dd3\u0db4\u0dd3\u0d91\u0db8\u0dca)", "UNet model for Denoising Diffusion Probabilistic Models (DDPM)": "Denoising Diffusion \u0dc3\u0db8\u0dca\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0 \u0d86\u0d9a\u0dd8\u0dad\u0dd2 \u0dc3\u0db3\u0dc4\u0dcf UNET \u0d86\u0d9a\u0dd8\u0dad\u0dd2\u0dba (DDPM)" }