見出し画像

CLIP Text Deprojectorを使って画像生成してみる ~EOS前とEOS後の組み合わせ~

前回は、訓練データの一部を学習に使わない方法を試しましたが、今回は後から生成した状態を繋ぎ合わせる実験を試みます。

前回の記事

他のStable Diffusionの関連記事

Layered Diffusion Pipelineを使うためのリンク集


動機と手法

前回の記事で試したのは、EOSトークン位置より前の状態を生成するモデルと、EOSトークン位置より後の状態を生成するモデルでした。ということは、2つのモデルの出力を適当な位置でつなぎ合わせれば、全ての状態を生成する合成モデルを作ることができるのではないでしょうか?

状態のつなぎ合わせ

具体的には、上図のように単語トークンとEOSトークンで学習したモデル1と、EOSトークン以降で学習したモデル2の両方を用い、それぞれにEOS以前の状態とEOS以後の状態を生成させ、それらを適当な位置で切ってつなぎ合わせることで全体のシーケンスを生成します。

ただし、生成された状態におけるEOSトークン位置がどこにあるかは不明なので、適当な数字を外から与えることとします。今回の実験では、10番目のトークンがEOSトークンであると固定しました。

実験

EOSトークン位置より前の状態を学習したモデル(モデル1)としては、次の2つを使います。

  • 単語とEOSのみ

  • 単語とEOSのみ(逆順)

EOSトークン位置より後の状態を学習したモデル(モデル2)としては、次のものを使います。

  • EOS以降のみ(再帰的入力)

これらの組み合わせを含む実験結果の比較画像は次の順に並んでいます。

  1. Deprojectorなし

  2. EOS以降のみ(再帰的入力)

  3. 単語とEOSのみ + EOS以降のみ(再帰的入力)

  4. 単語とEOSのみ(逆順) + EOS以降のみ(再帰的入力)

使用したプロンプトはこれまでと同様、次の通りです。

単一embedding

  • cat maid (猫耳メイド)

  • 1girl red hair blue eye black skirt(赤髪 青目 黒スカート)

  • 1boy 1girl in class room(少年 少女 教室)

複数embeddingの合成

  • cat, maid (猫 メイド)

  • 1girl, red hair, blue eye, black skirt (赤髪 青目 黒スカート)

  • 1boy, 1girl, in class room (少年 少女 教室)

単一embedding
複数embeddingの合成

前回の記事の結果と異なり、今回は「単語とEOSのみ(逆順)」の方が「単語とEOSのみ」よりもノイズの少ない画像が生成されています。

しかし、繋ぎ合わせを行っていない「EOS以降のみ(再帰的入力)」が最もプロンプトに即した画像を生成している点に変化はないようです。

まとめ

EOSトークン位置より前の状態を生成するモデルと、後の状態を生成するモデルの出力を繋ぎ合わせる実験を行いましたが、後の状態を生成するモデルの出力を単独で使う方が良い結果となりました。

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