🖼️

高解像度画像生成AIモデル:SDXLとは

2024/09/02に公開

画像生成モデルSDXL

https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0

SDXLは、画像生成のデファクトスタンダードです。

本記事ではSDXLが何なのか(what it is)の解説を行います。SDが何なのかの記事はコチラ

SDXLは、latent diffusionをensemble of expertsしたものです。

だから、latentとdiffusionとexpertとensemble of expertsがわからないとわかりません。

1. Latentについて

https://en.wikipedia.org/wiki/Latent_space

Latent Spaceは、Latent Variablesで張る空間です。

Latent VariablesはLatent Dirichlet Allocationなどの階層ベイズアルゴリズムで主に使われる変数です。ベイズでなくともPrincipal ComponentでもAutoEncoderでも良いですが、いずれにせよ、直接観測はできないが、何らかの値を持っており、さらにそれが観測可能変数に影響するということを

p(x|z)

という式で表した時、zにあたる変数のことです。

xは画像だと思いがちですが、CLIPという手法によって、xは画像と文章のペアとなっています。zが何なのかわからないと思いますが、さしあたってはxのクラスタのクラスタ番号と思っておけば良いと思います。CLIPはOpenCLIP-ViT/GCLIP-ViT/Lでpre-trainされています。

2. Diffusionについて

https://arxiv.org/abs/1503.03585

を読むとわかります。

この論文ではマルコフ遷移行列Tπのことです。これにちなんで、逆関数をDeep Neural Networkなどでモデリングして、ノイズから画像の再構成を行うアルゴリズムをDiffusionとかDenoiserと呼びます。

実際DNNでモデリングされるのは逆関数の微分、Fθの部分です。

逆関数を実行すると生成画像にちょっと近づくのですが、逆関数の実行はOrdinal Differential Equationを解くことと同値で、それは統計学でいうスコア関数を求めることと同じです。

3. Expertについて

Expert Denoiserの略です。

https://arxiv.org/abs/2211.01324

を読むとわかります。

pが多次元すぎるので、直接解を求めることが困難です。

pをΣpiの部分和に分けて、piをFiで学習したものDi(Fi)をExpert Denoiserと言います。

4. Ensemble of Expertsについて

Expert Denoiserをたくさん繋げた方が、Denoiserをたくさん繋げるより性能が出て、それがEnsemble of Expertsと呼ばれています。DN(DN-1(...(D1)...))ですね

SDXLは、latent diffusionをensemble of expertsしたものです。

そこで、latentとdiffusionとexpertとensemble of expertsを解説しました。では実装を見ていきましょう。

BaseとRefineについて

SDXLは、noisy latentを生成する”Base Model”と、それをより綺麗な画像にする”Refinement Model”から構成されています。

Modelのソースコード

diffusersで実装されています。

https://github.com/huggingface/diffusers

Modelの構造を知りたければ、このあたりが参考になるのでは無いでしょうか。

Base:

https://github.com/Stability-AI/generative-models/blob/main/configs/inference/sd_xl_base.yaml

Refinement:

https://github.com/Stability-AI/generative-models/blob/main/configs/inference/sd_xl_refiner.yaml

そういえばCLIPも説明してませんがUNetも説明していませんでしたね、まぁ深入りしすぎると取っ付きにくすぎるので、本記事の大枠を理解した上で取り組むと良いと思います。

各パーツの専門的な知識を得るためのガイド

  • DenoiserをなぜDeep Neural Networkで学習できるか知りたい→Deep LeaningとUNet

  • Latent Spaceが何なのか知りたい→PRML(パターン認識と機械学習)下巻やMackayを読む

  • Refinerが何をしてるか知りたい→超解像アルゴリズムの歴史

  • CLIP→まずはContrastive Learningを勉強

https://amzn.to/3X9VC43

https://amzn.to/3AQKrG3

https://amzn.to/3Tefi5M

おわりに

本記事では「SDXLとは何か」の解説をしました。

SDXLとは、latent diffusionをensemble of expertsしたもので、BaseとRefinementで実装されています。

LatentがCLIPされているので、text2imageなどが可能なModelです。

これ以上の解像度で理解するには、各パーツの専門的な知識が必要になります。

Discussion