SoraとかFlux.1とかSD3で使われてる、Diffusion Transformer(DiT)をよく知らなかったから、ざっくり勉強していた。
まだざっくりした理解だけど、latentをシーケンスに変形したものと、プロンプトと時間情報を条件として共にtransformerブロックに入力し、予測ノイズを出力する、みたいな感じかな。
なんかLatent Diffusion Modelに比べてずいぶんシンプルな構造だなあ、というのが第一印象。LDMではU-Net構造を用いて、画像の全体構造から細部構造にかけて順番に処理していくところが、ちょっと人間のお絵描きプロセスを模倣してる部分があったようにも思ったが、DiTではノイズをtransformerに入れて、除去すべきノイズを直接推論するというのは、LLMみたいだし、力技というかそれでいけるんや…という感想。
https://www.reddit.com/r/LocalLLaMA/comments/1ekr7ji/fluxs_architecture_diagram_dont_think_theres_a/
ググって見つけたFluxのアーキテクチャ図。なんだこれ。と思ったけどテキストエンコーダーがCLIPとT5 Encoderの2系統あって、このうちT5 Encoderでもself attentionしてるところがオリジナルのDiTと比較すると複雑さを増す主因になってるのかな。
なんで各ブロックをこう繋ぐと精度高い絵が出るのかは全く分からんけど、そう繋いだらうまくいくというなら、受け入れるしかあるまい。
https://henatips.com/page/63/
SD3もなんだか複雑だなあ。眠くなってきたのでまた今度見よう…