おはようございます!
9月9日 月曜日。モクモクした夏っぽい雲が多めですが晴れ🌞
最高気温34℃。ι(´Д`υ)アツィー
月曜日なので週間天気予報を貼っておくか。。

明日危険…(゚Д゚;)
夜寝苦しいの早くなんとかしてほしい。。
あと一週間!気合で過ごす!😬
さあ!今日も学んでまいります。
今日の教材はこちら、
[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回ほど試しました。
教材には「細かい単語のまとまりでプロンプトの区切りを増やして生成すると、きちんと白い靴が生成され・・・」とあったのですが、青い靴だったり、ピンクの靴だったり、緑のスカートだったり白いシャツだったりで、あんまりうまくいかんけどなぁ。。↙↓↘



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

トークン数を考慮してプロンプトを構築する
プロンプトはトークンに分割される。これは、入力されたテキストが「意味のある文字列」に分割されることを指す。例えば、「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で処理される。
<イメージ>

プロンプトは、先頭に近いトークンほど生成結果に与える影響が強い。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構文あり→


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

いいね~

CFGとサンプリングについて知っておこう
ここの項目は何やら小難しい、、、いや大切な話が4ページに渡って書いてあるのでじっくり読んでおきます。ここではスキップで。。
※是非、この記事の冒頭のリンクから書籍を買っていただいて。。\_(・ω・`)ココ重要!!

それは大事。。
Sampling method(サンプリング方法)を変更してみよう
「Sampling method(サンプリング方法)」で、デノイズ処理を行うサンプラーを選択することができる。サンプラーとは、デノイズ処理を行う際のアルゴリズムのこと。
※最新のStable Diffusionのバージョンでは、「Sampling method(サンプリング方法)」から「Schedule type」が分離した。
→つまり、アルゴリズムを「アルゴリズムA」「アルゴリズムB」でそれぞれ選択できるようになった(しなければならなくなった)。。ってことかな。
<Sampling method(サンプリング方法)>




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


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



Sampling Step(サンプリングステップ数)を調整してみよう
デノイズ処理を何回行うかという設定。Step数が多くなるほどデノイズ処理の回数が増えるため画像に変化が加わり、処理時間もかかる。
<Step数:1~150>



CLIP SKIPを変更してみよう(SD 1.5)
Stable Diffusionは画像を生成するためにプロンプトを処理する方法としてCLIPを利用しているが、SD1.5に使われているCLIPは12層の構造を持っていて、深い層ほどより複雑な特徴を持つプロンプトを処理するという性質がある。
CLIP SKIPの値を設定することで、入力したプロンプト(呪文)をどれだけ正確に反映するかを調整できる。例えば、CLIP SKIPの値が小さいとプロンプトどおりのイラストが生成されやすくなり、値が大きいとプロンプトを無視した抽象的なイラストが生成されやすくなる。一般的にはCLIP SKIP=2が推奨されているとのこと。
<Clip skip:1~12>


※「Clip skip:1」は、「最後から1層目のCLIPを用いる」という意味。つまり、一番深い層。
ちなみに「Clip skip」の設定欄を出現させるには、

①[Setting(設定)]タブをクリック
②[User interface]→[QuicksettingsList]にて「CLIP_stop_at_last_layers」を選択
③上部の「Apply setting(設定を適用)」をクリックし、WebUIを再起動(「UIの再読み込み」押下」)
よし!終わろう!
夜になってもうた。いい加減疲れたぞ。。
月曜日から疲れ果てたためこれにて終了です。
お疲れさまでした~( 一一)ノ

コメント