MarkdownとBullet Journal

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

【NovelAI Diffusion】キャラの固定に使えるシード

キャラの固定

一貫性のあるキャラクタを出そうとした場合は、例えば初音ミクなどの有名なキャラクタを指定すれば作成されるキャラが安定する。

初音ミクを指定して生成した例

これに対して自分好みのキャラに固定して、色々と絵を生成しようとした場合、以下のような要素をプロンプトで固める必要がある。

  • 年齢(省略可能)
  • 身長(省略可能)
  • 髪の色(固定のためには指定が望ましい)
  • 目の色(省略可能)
  • 胸のサイズ(省略可能、小さめなど)
  • 細身・太めなど(省略可能)
  • 服(上半身、下半身、靴:固定のためには指定が望ましい)
  • 作風や作家名、描画スタイル(固定のためには指定が望ましい)

例えば「赤いTシャツとダメージジーンズを着たブロンドのショートボブの18歳の女性、胸は小さい」というプロンプト「18-year-old woman with short blonde bob in a red T-shirt and distressed jeans, small breasts」で生成してみる。

プロンプト:18-year-old woman with short blonde bob in a red T-shirt and distressed jeans, small breasts,

プロンプト:18-year-old woman with short blonde bob in a red T-shirt and distressed jeans, small breasts,

上の4枚の絵を見比べると、わずかに顔の雰囲気が異なることが分かる。例えばこの4枚の内、右下の女性の顔が気に入ったとしよう。その絵の生成の際に、絵の左下に数字が出ていると思う。これがシードと呼ばれるパラメータだ。

左下にある数字「1376610978」がシードの値

シード(seed)

シードはStable Diffusionなどで絵の生成を行う上で与える乱数で、この値が異なるとAIによる生成画像が全く別の絵に変化する。しかしNobelAIDiffusionでは「シードは通常のDiffusionとは異なる扱いである」と明記されており、内部での3Dモデル化などにおける基数になっているようだ(推定)。よってシードを固定すると同じような顔(個性)を持つキャラの生成が作りやすくなる(100%ではない)。

実際に画面右側にあるシードの値に「1376610978」を入力してシードを固定してみる。すると1枚目は生成できるがさらにもう1枚生成しようとすると「同じシードです(同じ絵になります)」というメッセージで絵が生成できない。これは同じプロンプト、同じシードの場合、全く同じ絵が生成されてしまうのでその無駄を省く(エラー排除)のためにある。

要はプロンプトかシードのいずれかが異なる組み合わせになれば良いので、シードを固定した上でキャラに動きを与えるべくプロンプトを変えると、問題なく絵が生成できる。下は動作として「芝生の上で寝ている」、を加えたもの。

芝生の上で寝ている条件を加えた「1376610978」

同じキャラが描かれていることが分かる。

 

作風、作家名、描画スタイル

次にプロンプトに宮崎駿風を加えてみる(シードは固定しない)。

プロンプト:18-year-old woman with short blonde bob in a red T-shirt and distressed jeans, small breasts, Hayao Miyazaki(style)

プロンプト:18-year-old woman with short blonde bob in a red T-shirt and distressed jeans, small breasts, Hayao Miyazaki(style)

いずれも顔の雰囲気が変化した。また宮崎駿の作品には色々な美少女が登場することもあり、上の4枚はいずれも宮崎駿らしさを感じつつも別々の女性になっている。仮に右下の女性:シード「2481628271」が気に入ったとして、シードを「2481628271」に固定して海辺を走らせてみる。

シードを固定してシチュエーションを与える

なおシードを固定しても同じキャラが生成されない時もある。そのような場合はプロンプトにキャラの制約条件をさらに追加すると良好な結果が得られるようだ。

 

パラメータ調整による変化

次にSEEDを固定した上でstepやscaleなどのパラメータを色々と変えて実証した記事はこちら。

programmingforever.hatenablog.com