MarkdownとBullet Journal

いわゆるプログラマーのつぶやき

【NovelAI Diffusion】パラメータ変化が絵に与える影響:step, scale, etc

NovelAIDiffusionの編集画面

NovelAIDiffusionの画面右側には画像調整に使える色々なパラメータが揃っている。そこで各パラメーターを調整することで絵がどの様に変化するか実証してみた。

実証①:Add Quality Tags

本日サービスがアップデートされ、リッチなイメージで生成する「masterpiece, best quality, 」をプロンプトの先頭に付与するAdd Quality Tagsボタンが追加された。

デフォルトでONなのでその状態で「丸メガネをかけた青いワンピースを着た黒髪のロングヘアの20歳の女性、胸は小さい」→「A 20-year-old woman with long black hair wearing a blue dress with round glasses and small breasts.」で生成してみたのが下の写真。

Add Quality TagsボタンONで生成(標準)

それに対してボタンをOFF(前の状態)にして生成したのが下の写真。

Add Quality TagsボタンOFFで生成

比較すると説明通りONの方が立体感があってリッチで、OFFはややフラットなイメージだ。この様にプロンプトのちょっとした違いで絵はかなり変化する(以降の実証は標準:Add Quality TagsをONで行う)。

とりあえず上記のプロンプトで何回か絵を生成してお気に入りの絵が出たとする(下の写真)。フォーカスも顔から胸あたりまでシャープで後はボケる加工も加わって美しい。

steps:28、scale11、seed:3522514917

生成条件:Add Quality Tags:ON、steps:28、scale11、seed:3522514917で生成

ちなみにsteps,scale,seedが皆同じでもAdd Quality TagsをOFFにするとプロンプトが異なるので違う絵になるが構図などは同じだ。

同一SEEDでAdd Quality TagsボタンONとOFFの違い

実証②:stepを変える

ではAdd Quality Tags:ON、scaleとseedを固定した上でstepを調整してみよう。NovelAIのサイトの説明を転載する。

ステップは、プロンプトの最初の作成から AI が調整する必要がある反復回数を定義します。少量を使用して、イメージコンポジションの方向をすばやく生成して確認することも、より多くのステップを使用して完全なイメージを生成することもできます。ステップが多すぎると逆効果になり、世代がほとんど改善されないこともあります。好きなコンポジションの世代が見つかるまでステップを比較的低く保ち、その世代で「強化」ボタンを使用してさらに洗練することをお勧めします。

  • ステップ値2 - 8:AIがテキストプロンプトを自由に解釈できるようにする
  • ステップ値9 - 13:わずかなガイダンスステップ値
  • 14 - 18:テキストプロンプトに従うステップ値
  • 19+:テキストプロンプトに強い焦点を当てる

説明は今ひとつ分かりにくいので実際に1つずつ値をずらして確認してみる。

STEP 1 - 4

STEP 1から4は何やらよく分からない絵になる。

STEP 5 - 8

STEP 8あたりから女性の顔がはっきりする。

STEP 9 - 12

STEP 9 - 12は顔がかなり変化していく。12で服装が安定する。

STEP 13 - 16

STEP 16になってSTEP28とほぼ同じ顔になる。

STEP 17 - 20

STEP17から20は微妙に表情や服装が変化する(間違い探しレベル)。

STEP 24, 28, 32, 36

ほぼ安定したので24,28(標準),32,36にする。少しずつ顔が変化していくのが分かる。

STEPSの値は上限50なので標準28と上限50の2枚を並べてみる。

STEP数28(標準)と50(MAX)の違い

28に比較すると50の方が細かな部分まで書き込まれていることが分かる。またSTEP数を調整することで、顔や服などに微妙な変化を与えることが分かる。

STEP数が少ないほど生成時間は短くなる(Anlasの消費も少ない)。逆にSTEP数が多いと絵のクオリティが上がる反面、時間がかかる(Anlasの消費が増える)。STEPは8から50の間で色々と調整しても良さそうだ。

 

実証③:SCALEを変える

同じキャラクタで今度はstepとseedを固定した上でscaleを調整してみよう。なおscaleは0.1単位で調整できるがこの実証では1刻みで行う(最小値は1.1)

こちらもNovelAIのscaleの説明を転載する。

Scale 値は、AI がプロンプトにどの程度応答するかを示します。値を大きくすると、AI がテキスト プロンプトの全体的な意図に近づきますが、設定が高すぎると悪影響を及ぼす可能性があります。値が大きいほど、より多くの計算が必要になり、生成に時間がかかります。Scaleの値によって、効果の洗練度と強さが調整されることがあります。Scaleの数値を小さくすると、より絵画的で柔らかくなり、Scaleの値が大きいほど、より細かいディテールとシャープネスが得られます。

scale: 1.1,2,3,4

3以下は変だが4から標準に近くなる。

scale: 5,6,7,8

5から8は少しずつ変化する。

scale: 9,10,11(標準),12

9から12も同様。

scale:16,20,24,28

少しステップを上げて4飛ばしで進めると差がよくわかる。しかし24あたりからシャープ感が出て雰囲気が変わる。

scale:40,50,60,100

さらに大胆に40〜100にすると絵が破綻した。

scaleも変更することで絵の調整が出来ることが分かる。値が少ないと柔らかい絵になり、高いとピーキーな絵になる(度を超えると破綻)。scaleの適正範囲は5から30程度だろう。

 

実証④:SEED(シード)

SEEDは42億もの値を取り、かつ1つ違っても絵の構図やキャラが大きく変化する。例として今まで使ったSEED:3522514917に対して前後の3522514916、3522514918で生成してみるとそれぞれ全く違う絵になることが分かる。

SEED:3522514916, 3522514918

同様にNovelAIのSEEDの説明を転載する。

SEEDは、AI が特定の画像を計算するために使用した正確な方法です。各ランダム世代には一意のSEEDがあります。以前に使用したSEEDを使うと、AI が同じ方向に生成するのに役立ちます。SEEDは、NovelAI以外のStable Diffusionに対応していないことに注意してください。

この文言の解釈は色々と出来るが、Stable Diffusionでは構図などのランダムな生成の種としてSEEDを使うのに対して、NovelAIはキャラの個性や特徴などにも紐づいているようだ(推定)。

よってSEEDが変わると、構図に加えてキャラの個性も変化する。SEEDに関しては下記の検証記事を参照してほしい。

programmingforever.hatenablog.com

 

実証⑤:モデルの違い

NovelAIは現在3モデルを搭載している。

  • NovelAIDiffusionアニメ(キュレーション):優れたベースライン品質と予測可能な主題
  • NovelAIDiffusionアニメ(フル):拡張されたトレーニングセットにより、より多様な世代に対応
  • NovelAIDiffusion Furry(ベータ版):毛皮のような動物をテーマにしたコンテンツを簡単に作成するためのベータモデル

モデルが異なると通常は全く異なる絵になるが(他のStableDiffusionなど)、NovelAiDiffusionでは構図やキャラは同じで描き方が異なるという面白い違いになる。

左からAnime:curated,Anime:full,Furry

NovelAIDiffusionアニメ(キュレーション)は2Dアニメ風(フォーカスが全面に合っている)、NovelAIDiffusionアニメ(フル)は3Dアニメ風(フォーカスが一部に当たる)、NovelAIDiffusion Furryは何だか別世界だ。でもいずれも同じ女性を異なったアプローチで描いていることが分かる。

 

実証⑥:画像のサイズや形状

画像の形状やサイズは、縦長のポートレート、横長のランドスケープ、真四角のスクエアの3つの形状及びサイズ大中小、合計9パターン+カスタムとあるが、いずれも生成される構図やキャラが変化する。

 

実証⑦:Undesired content

ネガティブプロンプトの設定。Low quality+Bad Anatomy、Low quality、noneの3択(低品質+悪い解剖学、低品質、なし)が標準で用意されており、その下の空欄に追加のネガティブプロンプトを入力できる。

標準の「Low Quality + Bad Anatomy」を選択すると自動的に下記のネガティブプロンプトが入力される。

nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry,

「Low Quality」を選択すると下記のネガティブプロンプトだけが入力される。

nsfw, lowres, text, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry

※「none」の場合はネガティブプロンプトに lowres, のみ入る。

Low quality+Bad AnatomyとLow quality

 

実証⑧:サンプラー

標準のk_euler_ancestral以外に、k_euler、k_lms、plms、ddimのサンプラーがある。NovelAIではk_euler_ancestralを使えば問題ないとしている。

サンプラーを切り替えるとやはり絵が変わる。興味深いことにk_euler_ancestralに対して異なる絵になるが4つのサンプラーの生成される絵のベクトルは同じ傾向にある。下図は今まで使ってきた絵に対してサンプラーをk_lms、plms、ddim、k_eulerに変えたもの。

別の4つのサンプラーを試す

 

img2img:絵を使った生成

NovieAIDIffusionはimg2imgに関しても豊富な機能を有している。まとめた記事はこちら。

programmingforever.hatenablog.com