見出し画像

Stable DiffusionでText Encoderの出力の順序を変えてみる

Diffusers版のStable Diffusion (v1.5)のコードを読んでいて、ふと、次のことに気が付きました。

SD v1.5では、Text Encoderの出力は最終隠れ状態全体をそのまま加工せずにUNetの各ブロックのCross Attentionに入力されています。その際、マスクも位置エンコーディングなども付加されている様子がないため、Attentionの性質からおそらく順不同ではないかと思いました。

そこで、簡単な実験を行ってみました。

他のStable Diffusionの関連記事

実験

Text Encoderの出力のEmbedding列を、以下の方法で並び替えて画像生成をしてみます。

  1. 順序変更なし

  2. 逆順に並べ替え

  3. 左に10トークンずらし、溢れたトークンは右端に移動

  4. 4トークンごとにグループ化して並び替え

使用したプロンプトは、次のものになります。

  1. 1girl

  2. cat maid

  3. 1girl red hair blue eye black skirt

  4. 1boy 1girl in class room

生成画像は次のようになりました。

Text Encoderの出力を並び替え

細かい差異(猫の尻尾など)はおそらく計算順序が変わったことによる誤差が積み重なったものだと考えられます。

それを除けば、Text Encoderの出力の順序を並び替えることは、生成画像に影響は全く与えないことが分かりました。

この記事が気に入ったらサポートをしてみませんか?