Stable DiffusionでText Encoderの出力の順序を変えてみる
Diffusers版のStable Diffusion (v1.5)のコードを読んでいて、ふと、次のことに気が付きました。
SD v1.5では、Text Encoderの出力は最終隠れ状態全体をそのまま加工せずにUNetの各ブロックのCross Attentionに入力されています。その際、マスクも位置エンコーディングなども付加されている様子がないため、Attentionの性質からおそらく順不同ではないかと思いました。
そこで、簡単な実験を行ってみました。
他のStable Diffusionの関連記事
実験
Text Encoderの出力のEmbedding列を、以下の方法で並び替えて画像生成をしてみます。
順序変更なし
逆順に並べ替え
左に10トークンずらし、溢れたトークンは右端に移動
4トークンごとにグループ化して並び替え
使用したプロンプトは、次のものになります。
1girl
cat maid
1girl red hair blue eye black skirt
1boy 1girl in class room
生成画像は次のようになりました。
細かい差異(猫の尻尾など)はおそらく計算順序が変わったことによる誤差が積み重なったものだと考えられます。
それを除けば、Text Encoderの出力の順序を並び替えることは、生成画像に影響は全く与えないことが分かりました。
この記事が気に入ったらサポートをしてみませんか?