最新の高性能 Diffusion Models （2024年）

最近、Transformerベースのdiffusion modelが高いパフォーマンス（ImageNetのFID基準）を出している。ということで、特に性能の高い最新モデルを2つ紹介する。加えて、これらを調査していたら、それらの性能をさらに底上げする手法とCNNベースでさらに高い性能を出してSOTAを達成したぞという論文にもさらに行き着いたので、それら2本も併せて追加で紹介する。

（追記）2024/2/23に発表されたStable Diffusion 3や2/15に発表されたOpenAIのSoraでは、今回紹介するDiTがDiffusion Transformer（拡散トランスフォーマー）のベース技術に採用されている。

※以降の図は論文からそのまま引用、もしくはそれに多少の加工を加えたものとなる。
※以降の[paperswithcode](https://paperswithcode.com/task/image-generation)の順位は2024/1時点



# 目次
1. [DiT (ICCV'23): Diffusion Model + Transformer](#dit-iccv23-diffusion-model--transformer)
2. [DiffiT: Diffusion Model + Transformer (+ U-Net)](#diffit-diffusion-model--transformer--u-net)
3. [CADS (ICLR'24): 多様性を向上させるsampling](#cads-iclr24-%E5%A4%9A%E6%A7%98%E6%80%A7%E3%82%92%E5%90%91%E4%B8%8A%E3%81%95%E3%81%9B%E3%82%8Bsampling)
4. [EDM2: CNNベースの高性能 Diffusion Model](#edm2-cnn%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E9%AB%98%E6%80%A7%E8%83%BD-diffusion-model)
5. [感想](#感想)




# DiT (ICCV'23): Diffusion Model + Transformer
:::note info
ImageNet 256 － 10位　(paperswithcode)
:::

- [［論文］Scalable Diffusion Models with Transformers (arXiv)](https://arxiv.org/abs/2212.09748)
- [［実装］github](https://github.com/facebookresearch/DiT)

### 概要
Diffusion modelの基幹であるCNNベースのU-Netを、Transformerベースのアーキテクチャに置き換えることで性能向上を実現している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/9e3d62b4-6bbf-80c5-5794-6759ab453f9e.png)

### モデル解説
従来からのDiffusionモデルが持つU-Net構造を捨て、新たにViT構造を採用したアーキテクチャであるDiTが提案されている。DiTは、ViTから以下に説明する入出力とself-attention blockの2点を変更した生成モデルである。
※全体アーキテクチャのベースはLDM (Stable Diffusion)
※ロスは通常のDDPM

##### (ViTからの変更点1) 入出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/de611dcc-31b6-67b6-198b-53d7b3d6147d.png)
ViTとはタスクが異なるため、ViT（上図の左）の入出力を生成モデル用（上図の右）の入出力に変更する。
- ViT
    - ［入力］ 画像
    - ［出力］ クラス分類結果
- DiT
    - ［入力］ 画像＋時刻t＋クラスラベルy
        - 正確には、「画像」でなく「ノイズ画像」である
        - LDMと同様、画像はVAEのencoderによりコンパクト化された状態で扱うため、`Latent`と表記される
        - ちなみに、入力としてtext embeddingを追加すればtextも扱える
    - ［出力］ 画像（＋標準偏差Σ）
        - 正確には、「画像」でなく「入力のノイズ画像に載っているノイズ成分」である
        - 画像を出力させるために、最終段でunpatchify処理(patchifyの逆)を行っている
        - 標準偏差Σはオプション（Diffusion modelの学習方式次第）

##### (ViTからの変更点2) DiT Block
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/dfb39df3-36a5-6b63-6ec0-8df1e9d9e62b.png)
ViTには存在しない入力である条件情報（＝Conditioning＝時刻t＋クラスラベルy）を扱えるように変更する。具体的には、ViTのself-attention blockに対して、上図のように[AdaLN機構](https://qiita.com/takoroy/items/f5b888d0155a22e179ae)(γ/βによるScale/Shift)を追加する。このAdaLN機構により、Scale γ, Shift βを通じた条件情報の注入が達成される。

このように、基本的には元のself-attentionにAdaLNを追加するだけのシンプルな変更であるが、性能向上のために追加で以下の2つの工夫を加えている。
- AdaLNのγ・βに加え、Scale αを新規に追加: 条件情報を参照するパラメータを増やすことで、条件情報をより強く画像に反映させることができる
    - Scale αの実装: 上図にあるように残差結合の直前にα倍のスケーリング処理を追加する
- AdaLNのγ・βを算出するMLPの重み・バイアスを0初期化: 学習初期は条件情報を全く注入しないことになり、学習が安定化する
    - まともな画像を出力できていない段階で、条件情報でその画像をさらに大きく変化させてしまうと、学習が安定しないため

※Tensorの並び順等の都合で実装上はAdaLNであるが、動作イメージとしてはAdaINである。
※論文上ではDiT blockの候補として他に3案を挙げているが、ここでは最終的に採用された方式のみを説明した。

### Experiment
classifier-free guidance付きの高GFlops（patch size=2、XLargeサイズ）なDiTモデルを用意して、SOTA級のモデルら（GANで現状最強のStyleGAN-XL や classifier-free guidance付きLDM）と比較した。結果、以下の通りFID=2.27でDiTが首位を獲得した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/5092017f-d6d3-fe1f-6a87-53885b93d1ea.png)
※Precisionは画像の品質、Recallは画像のcover率(≒多様性)




# DiffiT: Diffusion Model + Transformer (+ U-Net)
:::note info
ImageNet 256 － 2位　(paperswithcode)
ImageNet 512 － 7位　(paperswithcode)
:::

- [［論文］DiffiT: Diffusion Vision Transformers for Image Generation (arXiv)](https://arxiv.org/abs/2312.02139)
- [［実装］github（2024/1/31 まだコード上がってない）](https://github.com/NVlabs/DiffiT)

### 概要
上述のDiTと同じで、Diffusion modelの基幹であるCNNベースのU-Netを、Transformerベースのアーキテクチャに置き換えることで性能向上を実現している。この際、U-Net構造を継承する効率的なバージョンも用意しており、U-Netの高い効率性を得ることができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/66bfa046-ff54-9c91-9f64-91c69a8dc4ec.png)


### モデル解説
DiTと同様にViTベースの構成をしており、主な特徴（≒DiTとの差分）は独自のDiffiT blockとオプションのU-Net構造にある。（上図はU-Net構造なし版）

##### 入出力
ViTに対して、[DiTと同様の変更](https://qiita.com/drafts/8546c784bc94d94ef0b2/edit#vit%E3%81%8B%E3%82%89%E3%81%AE%E5%A4%89%E6%9B%B4%E7%82%B91-%E5%85%A5%E5%87%BA%E5%8A%9B)が行われている。
つまり、入力は画像（noised）に加えて時刻・クラス情報が追加され、出力は画像（noised）に変更されている。

##### DiffiT Block
DiTと同様に、ViTからself-attention blockが変更されている。DiTではself-attention処理にAdaLNを適用することで条件情報の注入を実現したが、DiffiTでは下図のようにself-attentionの入力であるQ, K, Vに条件情報トークンを加算することで注入する。また図には載っていないが、Relative positional encodingを採用することで、時刻情報を追加で与えている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/ca2a0821-46b2-f301-ddf3-39652eecb6e2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/8c1a2a4f-a458-b1a3-61b6-8f9684a67dba.png)

##### (オプション) U-Net構造
規模の小さい（解像度が低い、複雑性が低い）データセットでは、下図のようなU-Net構造による軽量化・効率化が提案されている。本構造では、DownsamplingやWindow attentionの導入によりself-attentionの計算量を削減することで、大幅な軽量化を実現している。
※ImageNetの規模だと大量のパラメータが必要なためか、U-Net構造は採用されていない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/4c3c4651-c98d-831d-bc20-b7b0d103a5bd.png)



### Experiments
以下の通り、DiT越えのFID=1.73を達成した。（ImageNet-256）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/782dbd9b-8459-6c29-e509-8e32c7b248ac.png)

以下の表の上2つはFFHQ-64データセット、下2つはImageNet-256データセット(Latent空間)の結果である。DiffiTは、FFHQでは高効率なU-Net有りモデルを採用し、ImageNetでは高性能なU-Net無しモデルを採用している。それぞれ同規模の従来モデルと比較しているが、DiffiTの方が高い性能(FID)を出せている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/eab25474-9eb8-c1f2-2da7-21536533b62f.png)



# CADS (ICLR'24): 多様性を向上させるsampling
:::note info
ImageNet 256 － 1位　(paperswithcode) ‥ DiTベース
:::

- [［論文］CADS: Unleashing the Diversity of Diffusion Models through Condition-Annealed Sampling (arXiv)](https://arxiv.org/abs/2310.17347)
- ［実装］公式実装なし（[SD-WebUIでの実装例](https://github.com/v0xie/sd-webui-cads)）

### 概要
Diffusion modelのアーキテクチャ変更はなしで、samplingの工夫のみで多様性の向上を実現している。下図の左が通常sampling、右がCADS samplingの例であるが、CADSの方が高い多様性を表現できているのが見て取れる。
CADSはsamplingの工夫であるため、任意のDiffusion modelへ容易に適用可能である。本論文では、CADSを先に紹介したDiTへ適用することでImageNet 256のSOTAを叩き出している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/d1db4a25-b713-9136-4793-bb517d02387c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/f8b85f9c-91cc-f6c2-bca6-a9f6012284b3.png)


### CADS Sampling手法
やり方は極めてシンプルで、条件情報yを徐々に弱まるノイズnで補正するだけである。（ここでの**条件**はクラスやテキストを指す）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/967622fe-0630-dd05-6da4-7e470a9a22d7.png)
sはノイズスケール、γ(t)∈[0,1] はノイズ割合調整用係数（時刻と共に徐々に小さくなる）である。

ノイズ付与によりyの平均・標準偏差が変質してしまうのを防ぐために、以下のrescale手法が追加で提案されている。ただし、これを適用すると品質は上がるものの多様性向上効果が下がるので、resclaeをどの程度行うかはハイパーパラメータψで調整可能にしている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/a88d56a9-363b-8bce-6d8c-5955d06c26dc.png)

ちなみに、このようなノイズ付与機構なんかを追加するんでなく、単にCFG重み値（＝条件の強さ）を徐々に増やせば同等のことをできるのではないか（=Dynamic CFG）、と考える人もいるかもしれない。だが、著者らもそれを考えて実際に比較実験をした結果、下表のようにCADSが性能・多様性の両面で圧倒した。画像デノイズ（＝Reverse process）の初期段階で、ノイズで条件をかき乱して画像の方向性を固定化させないことが多様性に繋がるっぽい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/cd7cb9a7-ce8c-15f6-5b05-2da384b770e1.png)
※Recallは画像のcover率(≒多様性)

### Experiment
結果は下表の通りで、DiTにCADSを適用することで、DiffiT（FID=1.73）を上回るFID=1.70を達成した。（ImageNet-256）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/9aac1a47-ba4d-284b-1e58-bb679fe50919.png)




# EDM2: CNNベースの高性能 Diffusion Model
:::note info
ImageNet 512 － 1位　(paperswithcode)
:::

- [［論文］Analyzing and Improving the Training Dynamics of Diffusion Models (arXiv)](https://arxiv.org/abs/2312.02696)
- [［実装］github](https://github.com/mmathew23/improved_edm)

### 概要
CNNベースのDiffusion modelを、最新の知見を生かしてチューニングしていくことで高性能・高効率なモデルを実現している。ImageNet 512では、DiT・DiffiT(下図に載ってないが)を上回る性能・効率を達成した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/9d4e134f-db5b-4a83-67ad-2bb58ffcb552.png)

### モデル解説（チューニング）
下表のA→...→Gのように、モデルや学習方式を少しずつ改良していくことで高性能・高効率なモデルを作り上げた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/a91c9606-8d01-ff66-72b8-45ff0843cf2f.png)
特に、全体の値のスケールを上手く調整するような構造(Magnitude Preserving)を取ることで、微妙に邪魔だった正規化層を大きく排することに成功しており、これによりかなり簡素なレイヤー構造になっているのが特徴的である。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/e46836c4-fd11-1224-bc37-cec0451c5121.png)
ちなみにこの論文では、少数パターンのEMAパラメータのモデルから、任意のEMAパラメータのモデルを高精度に近似する手法も提案しており、この分析手法により最適なEMAパラメータを効率的に求めている。

### Experiment
以下の表の通り、**ImageNet-512**でDiffiT（FID=2.63）やCADS（FID=2.31）を上回るFID=1.91を達成した。（ImageNet-256の評価は無い）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261709/ed1fd2cc-1e93-6ec8-ce5a-a373a0ea3095.png)




# 感想
Diffusion modelでもCNNからTransformerにしてくのが良いのかと思ったら、EDM2でCNNベースが猛追してきて、現状どっちが優れてるのかまだまだ判断できないという感じだった。
（ViTに対するConvNeXtと同じような構図）