【StableDiffusion】プロンプトから画像を生成してみよう/様々なパラメータを調整しよう

StableDiffusionアイキャッチ画像09 「パラメータを調整する BREAK構文」
StableDiffusion
この記事は約8分で読めます。

おはようございます!

9月9日 月曜日。モクモクした夏っぽい雲が多めですが晴れ🌞
最高気温34℃。ι(´Д`υ)アツィー

月曜日なので週間天気予報を貼っておくか。。

週間天気(2024年9月11日~9月16日)

 

明日危険…(゚Д゚;)

 

夜寝苦しいの早くなんとかしてほしい。。

 

あと一週間!気合で過ごす!😬

 

さあ!今日も学んでまいります。

今日の教材はこちら、

[PR]

 

 

よしやっていこう!

 

 

CHAPTER3 プロンプトから画像を生成してみよう

 

Section 3-5

様々なパラメータを調整しよう

 

 プロンプトは基本的に単語ごとにカンマで区切るが、長い文章で書くこともできる。

<例>

緑色の神に青い瞳の女の子がピンクのシャツと黄色いスカートを履いて赤いリボンと茶色のベルトを身に着けていて白い靴を履いている

<長いプロンプト>

masterpiece, best quality, ultra detailed, 1girl, having green hair and blue eyes wearing pink shirt and yellow skirt with red ribbon and brown belt putting white shoes

<単語で区切ったプロンプト>

masterpiece, best quality, ultra detailed, 1girl, green hair, blue eyes, pink shirt, yellow skirt, red ribbon, brown belt, white shoes

 

←長いプロンプト                単語で区切ったプロンプト→

長い文章のプロンプトでの生成画像
単語で区切ったプロンプトでの生成画像

 

う~ん、、「単語で区切ったプロンプト」のほうは、バッチ回数を10回ほど試しました。

 

教材には「細かい単語のまとまりでプロンプトの区切りを増やして生成すると、きちんと白い靴が生成され・・・」とあったのですが、青い靴だったり、ピンクの靴だったり、緑のスカートだったり白いシャツだったりで、あんまりうまくいかんけどなぁ。。↙↓↘

単語で区切ったプロンプトでの生成画像(番外1)
単語で区切ったプロンプトでの生成画像(番外2)
単語で区切ったプロンプトでの生成画像(番外3)

 

まあでも「プロンプトの区切り方に共通のルールはなく、使用するモデルや生成したい画像によっても異なります。」ともあるので、どっちが正解ということでもなさそうです。試してみて正解を探していくって感じかな。

 

 

 

 プロンプトはトークンに分割される。これは、入力されたテキストが「意味のある文字列」に分割されることを指す。例えば、「white shoes」というプロンプトは「white」と「shoes」の2つのトークンに分割される。

カンマ(,)も一つのトークンとして数えられる。

必ずしも1単語1トークンではなさそう。。「1girl」は2トークンで数えられるし、embeddingの「EasyNegative」は8トークン分もある。

 

記述しているトークン数は、プロンプトとネガティブプロンプトを入力する枠の右上の表示で確認できる。

トークン数表示箇所

 

分母の「75」という数字は、トークンの最大数という意味ではなくCLIPというモデルが処理するプロンプトの区切り目。

CLIP(Contrastive Language-Image Pre-training)
→ 画像とテキストの関係を理解するためのモデル

画像とテキストのペア学習: CLIPは大量の画像とその説明文をペアで学習し、画像とテキストの関係を理解
テキストから画像生成: 学習した関係を利用して、テキストプロンプトから対応する画像を生成
多様な応用: 画像検索、キャプション生成、画像分類など、さまざまなタスクに応用可能

 

トークン数が75を超えると、分母は「150、225、300・・・」のように75刻みで増加する。

例えば、トークン数が「76/150」であった場合、1~75のトークンとして関連してCLIPで処理され、76は2グループ目のトークンとしてCLIPで処理される。

<イメージ>

2グループあるトークンを処理するイメージ図

 

プロンプトは、先頭に近いトークンほど生成結果に与える影響が強い。1トークン目の影響が最も強く、75トークン目の影響は弱くなる。76トークン目は、2グループ目の先頭のトークンなので影響は強くなる。

つまり、76トークン目に追加したプロンプトが意図せず強い影響を持ってしまう場合がある

各グループの先頭に並んでいるトークンが与える影響を示したイメージ図

 

これを解決するのが「BREAK構文」↓

 

 

 

 「BREAK構文」は、強制的にトークンの区切りを作りプロンプトの影響を調節する仕組みとして実装されているもの。

大文字の「BREAK」を記述することでトークンを強制的に区切らせ、次のプロンプトから別のトークングループにさせる。

つまり、

トークンの区切りを意識していないプロンプトのイメージ図

と書くよりは、

BREAK構文を使ったプロンプトのイメージ図

と書いたほうが、76トークン目の思わぬ影響は防げて各トークンの影響の差は少なくなる

 

大文字の「BREAK」が有効 ※小文字は有効ではない

「BREAK」の直後にカンマ(,)をつけると、それが2グループ目の最初のトークンとして扱われてしまうので注意
 →「BREAK」のあとはスペースのあとにプロンプトを記述

 

例えば、

「紺のドレス」を出したいときに、その直前の「白い長い髪」に影響されてしまい、ドレスの色が白になってしまう際には、「白い」というプロンプトの影響を防ぐため、「紺のドレス」の前にBREAK構文を使う。

<BREAK構文なし>

absurdres, masterpiece, best quality, ultra detailed, cinematic lighting, pastel color, classic, 1girl, upper body, white long hair, indigo dress, gorgeous classical long dress, castle, night, multiple candle,

<BREAK構文あり>

absurdres, masterpiece, best quality, ultra detailed, cinematic lighting, pastel color, classic, 1girl, upper body, white long hair, BREAK indigo dress, gorgeous classical long dress, castle, night, multiple candle,

 

←BREAK構文なし                BREAK構文あり→

BREAK構文を使用せずに生成した画像
BREAK構文を使用して生成した画像

 

おお~これは明確に違いが出ましたな。

いいね~

 

 

 

 

ここの項目は何やら小難しい、、、いや大切な話が4ページに渡って書いてあるのでじっくり読んでおきます。ここではスキップで。。

※是非、この記事の冒頭のリンクから書籍を買っていただいて。。\_(・ω・`)ココ重要!!

それは大事。。

 

 

 「Sampling method(サンプリング方法)」で、デノイズ処理を行うサンプラーを選択することができる。サンプラーとは、デノイズ処理を行う際のアルゴリズムのこと。

最新のStable Diffusionのバージョンでは、「Sampling method(サンプリング方法)」から「Schedule type」が分離した。

 →つまり、アルゴリズムを「アルゴリズムA」「アルゴリズムB」でそれぞれ選択できるようになった(しなければならなくなった)。。ってことかな。

 

<Sampling method(サンプリング方法)>

各サンプリング方法で生成した画像集1
各サンプリング方法で生成した画像集2
各サンプリング方法で生成した画像集3
各サンプリング方法で生成した画像集4

 

<Sampling method(サンプリング方法)=「Euler a」のときの全「Schedule type」>

サンプリング方法「Euler a」で生成した画像集1
サンプリング方法「Euler a」で生成した画像集2

 

<Sampling method(サンプリング方法)=「DPM++ 3M SDE」のときの全「Schedule type」>

サンプリング方法「DPM++ 3M SDE」で生成した画像集1
サンプリング方法「DPM++ 3M SDE」で生成した画像集2

 

 

 

 デノイズ処理を何回行うかという設定。Step数が多くなるほどデノイズ処理の回数が増えるため画像に変化が加わり、処理時間もかかる。

<Step数:1~150>

サンプリングステップ数の値を変えて生成した画像集1
サンプリングステップ数の値を変えて生成した画像集2

 

 

 

 Stable Diffusionは画像を生成するためにプロンプトを処理する方法としてCLIPを利用しているが、SD1.5に使われているCLIPは12層の構造を持っていて、深い層ほどより複雑な特徴を持つプロンプトを処理するという性質がある。

 CLIP SKIPの値を設定することで、入力したプロンプト(呪文)をどれだけ正確に反映するかを調整できる。例えば、CLIP SKIPの値が小さいとプロンプトどおりのイラストが生成されやすくなり値が大きいとプロンプトを無視した抽象的なイラストが生成されやすくなる。一般的にはCLIP SKIP=2が推奨されているとのこと。

<Clip skip:1~12>

Clip skipの値を変えて生成した画像集1
Clip skipの値を変えて生成した画像集2

※「Clip skip:1」は、「最後から1層目のCLIPを用いる」という意味。つまり、一番深い層。

 

ちなみに「Clip skip」の設定欄を出現させるには、

StableDiffusionトップ画面のClip skip設定欄

①[Setting(設定)]タブをクリック
②[User interface]→[QuicksettingsList]にて「CLIP_stop_at_last_layers」を選択
③上部の「Apply setting(設定を適用)」をクリックし、WebUIを再起動(「UIの再読み込み」押下」)

 

 

よし!終わろう!

 

夜になってもうた。いい加減疲れたぞ。。

 

 

月曜日から疲れ果てたためこれにて終了です。

 

お疲れさまでした~( 一一)ノ

 

 

 

コメント

PAGE TOP
タイトルとURLをコピーしました