見出し画像

Stable DiffusionのCLIP Skipとは?基本を知りたい人向けにわかりやすく解説!


はじめに

Stable Diffusionを使った画像生成の推奨設定を見ると、よく「CLIP Skip」の値が書いてあります。

例えばアニメ調に特化したモデルの「Agelesnate」ではClip Skip 2 が推奨されています。

CLIP Skipを設定しないと、同じモデル・同じプロンプトでも全く別の画像が出力されてしまいます。今回はCLIP Skipとは何か?全くわからない人向けに基本をわかりやすく解説していきます。

そもそもCLIPとは?

プロンプトを画像に反映するため、テキスト → 特徴量への変換を行うのがCLIP(Text Encoder)です。

CLIPモデルは、複数のレイヤーで構成されます。例えばStable Diffusion 1.5モデルには12層の深さがあります。

CLIPのレイヤーを簡単にイメージしてみましょう。

各レイヤーは、一つ前のレイヤーよりも具体的です。例えば、レイヤー1が「人間」であれば、レイヤー2は「男性」「女性」になります。「男性」の次のレイヤー3は「男の子」「成人男性」「おじいちゃん」になるかもしれません。
※ただのイメージであり、実際にCLIPモデルがこのように構成されているというわけではありません

参考:https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/5674

Stable DiffusionのCLIP Skipとは?

文字通り「CLIP」の処理を「スキップ」する設定です。

では、なぜCLIPのレイヤーを一つ前で止めたいのでしょうか?

「牛」の画像がほしいのであれば、テキストモデルが持つ「牛」のサブカテゴリーなど気にしないかもしれないからです。「牛」がほしいわけで、「アベダディーン・アンガス牛」がほしいわけではないことが多いですよね。

CLIP Skipは、基本的に「テキストモデルをどの程度正確にしたいのか」を設定するものだと考えられます。

「森の中に立っている若い男性」というプロンプトがあったら、CLIPのステージが低ければ「立っている男性」の画像が得られ、次の深さで「立っている若い男性」が得られ、その次で「森の中に立っている若い男性」が得られる、などとなります。

参考:https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/5674

CLIP Skipの比較

試しに「森の中に立っている、りんごを持った若い女性」(young girl with short blonde hair holding an apple, standing in a forest)というプロンプトで画像生成してみましょう。シード値など他の設定は一緒のまま、CLIP Skipの値だけを変えています。

使用モデル:blue_pencil v8
https://huggingface.co/bluepen5805/blue_pencil

CLIP Skip: 1
プロンプトに書かれた全ての特徴を捉えています。想像していた通りの画像が得られました。

CLIP Skip: 2
あらかわいい。

CLIP Skip: 3
このレイヤーからはりんごがなくなっています。

CLIP Skip: 4
りんごは戻りましたが、画像のクオリエティが徐々に低くなっているのを感じます。

CLIP Skip: 7
りんごを持っていないのと、少し大人になった女性が描かれています。 

CLIP Skip: 9
ここまでくると、アニメ調のイラストらしさもなくなっています。

いつCLIP Skipを設定するべきか?

CLIP skipは、Danbooruタグを用いたアニメイラスト系のモデルで使うと、よい結果が得られるといわれています。(「1girl」といった主要タグは、多くのサブタグに分解されるので)。

ただ、基本的に試行錯誤するしかありません。モデルが推奨している値がなければ、まずはCLIP Skipは小さい値 (1) から始めてみましょう。

最近ではもともとCLIP Skip: 2でファインチューニングしているモデルも多く、生成時も2に設定することが増えています。

Stable DiffusionではCLIPの最後の層の出力を用いていますが、それを最後から二番目の層の出力を用いるよう変更できます。NovelAIによると、これによりより正確にプロンプトが反映されるようになるとのことです。 元のまま、最後の層の出力を用いることも可能です。 ※Stable Diffusion 2.0では最後から二番目の層をデフォルトで使います。

sd-scriptファインチューニングガイドから
https://github.com/kohya-ss/sd-scripts/blob/main/docs/fine_tune_README_ja.md#clipの出力の変更

参考:https://blog.novelai.net/novelai-improvements-on-stable-diffusion-e10d38db82ac

Stable Diffusion web UIでCLIP Skipを設定する方法

初期状態の WebUI には CLIP skipの設定項目がありません。
AUTOMATIC1111版Stable Diffusion web UIの場合、まずは「Settings」 → 「User Interface」を選択します。


「User Interface」の下の方にスクロールし、「Quicksettings list」項目に以下のように入力します:

sd_model_checkpoint,sd_vae,CLIP_stop_at_last_layers

「Apply settings」をクリックし、「Reload UI」をクリックすると、見具上にCLIP skipの設定が表示されます。

環境構築・GPUなしで画像生成したいなら…

CLIP Skipが設定できる画像生成サービス「Akuma.ai

Akuma.aiはどんなStable Diffusionモデルを使ってでも画像生成ができるサービスです。環境構築やGPUは必要ありません。アカウント登録だけで、Clip Skipなど、Stable Diffusion web UIのような高度な設定が行なえます。

今なら無料クレジットがもらえるので、ぜひお試しください。
サービスURL👉 https://akuma.ai/ja/

Akuma.aiでCLIP Skipを設定する方法

https://akuma.ai/ にアクセスしたら、「無料で始める」または「登録」をクリック。

無料アカウント作成が必要なので、「Googleで続行」をクリックします。

画像生成画面の「AI設定」にCLIP Skipの項目があります。ぜひお試しください。


いいなと思ったら応援しよう!