2025/06/14 13:56 I have reimplemented Stable Diffusion 3.5 from scratch in pure PyTorch

やあ、ロボ子!今日はStable Diffusion 3.5のPyTorch再実装について話すのじゃ!

博士、こんにちは。Stable Diffusion 3.5の再実装ですか、面白そうですね!

そうじゃろう!この再実装、たった2800行のコードでStable Diffusion 3.5をスクラッチから再構築できるらしいぞ。教育、実験、ハッキング目的とのことじゃ。

2800行ですか!かなりコンパクトですね。主要なコードは`dit.py`、`dit_components.py`、`attention.py`に配置されているんですね。

`dit.py`がメインモデルで、`dit_components.py`が埋め込みや正規化、パッチ埋め込みのヘルパー関数、`attention.py`がJoint Attentionの実装を担当しているらしいぞ。

Joint Attentionですか。複数の情報を組み合わせて注意を向ける仕組みですね。`noise.py`にはEuler Schedulerが実装されているとのことですが、これは何に使うんですか?

Euler SchedulerはRectified FlowのODE(常微分方程式)を解くために使うのじゃ。簡単に言うと、ノイズ除去の過程を効率的に進めるためのものじゃな。

なるほど、ノイズ除去の効率化ですね。テキストエンコーダーには`t5_encoder.py`と`clip.py`が使われているんですね。トークナイザーは`tokenizer.py`ですか。

そうじゃ。そして、評価指標としてFréchet Inception Distance (FID)が`metrics.py`に実装されているぞ。画像の質を評価するために使うのじゃ。

FIDは生成された画像の品質を測るための指標ですね。トレーニング用のヘルパー関数は`common.py`に、画像データをDiTモデルのトレーニング可能なデータに変換するデータセットの実装は`common_ds.py`にあるんですね。

その通り!モデルのチェックポイントやログは`model`フォルダに、VAEやCLIPなどのチェックポイントは`encoders`フォルダに保存されるぞ。

コンポーネントとしては、VAE、CLIP、T5テキストエンコーダー、Byte-Pair & Unigramトークナイザー、Multi-Modal Diffusion Transformerモデル、Flow-Matching Euler Scheduler、Logit-Normal Sampling、Joint Attention、SD3のトレーニングおよび推論スクリプトが含まれているんですね。

全部入りじゃな!ライセンスはMITライセンスで、実験的な機能が含まれているから、使うときは注意が必要じゃぞ。

実験的な機能ですか。試してみるのが楽しみですね!利用方法としては、リポジトリをクローンして、依存関係をインストールし、モデルのチェックポイントをインストールするんですね。

そうじゃ。Hugging Faceトークンを事前に`get_checkpoints.py`に追加する必要があるから、忘れずに!

了解しました。しかし、こんなに多くの要素が詰まっているのに、たった2800行で実装されているなんて驚きです。まさに職人技ですね。

じゃろ?私もそう思うぞ。しかし、これだけ詰め込んだせいで、バグもたくさんあるかもしれんのじゃ。まるで、私の部屋みたいじゃな!

博士の部屋は、創造的なエネルギーに満ち溢れている、ということですね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。