📷

【Stable Diffusion】無料Colab環境とrandom promptで究極の一枚を生成したい

2022/12/17に公開

この記事は創作+機械学習 Advent Calendar 2022の17日目の記事になります。
4日目のうすいさんの記事を拝見し触発されたため、急遽 筆を執ることにしました。
https://zenn.dev/usui/articles/aa6e2457cfd6e9

Stable Diffusionが公開されてから、日々多くの人達が潜在空間を探索しています。
高精度な画像を出力するにはプロンプトエンジニアリングと呼ばれる「Promptの調整」が必要ですが、それなりに手間がかかる作業です。

実際に画像生成をしてみて感じたことですが、プロンプトエンジニアリングの過程で、様々な単語を組み合わて出力結果を検証したいと思うことがありました。

うすいさんの記事ではローカル環境でランダムプロンプトを実行するコードが紹介されておりましたが、
本記事では
・環境構築が不要な無料Colab環境で
・ランダムプロンプトを実行する
方法を紹介させていただきます。

実装したコードは下記になります。
https://drive.google.com/file/d/1BhsSy5lULZgo0o0oKevoOZOeHrzVOJMr/view?usp=sharing

ランタイムから「すべてのセルを実行する」を選択すると10分ほどでAUTOMATIC1111 Web UIが起動します。
使用しているモデルはStable Diffusion v1.4になりますが、
モデルのダウンロードにはhuggingfaceのTokenが必要になりますので、ご準備のうえ下記にご入力ください。

ランダムプロンプトの実行方法

ランダムプロンプトはWeb UIの拡張機能「sd-dynamic-prompts」を使用します。
https://github.com/adieyal/sd-dynamic-prompts

この拡張機能を使うことで手軽にランダムプロンプトを使用することが可能です。
具体的には下記のようにプロンプトを入力するだけです。

A {house|apartment|lodge|cottage} in {summer|winter|autumn|spring} by {2$$akasMhi Tarmkaui|Alexis imsno lhBe|Spaelerd eirFay}

ランダムで入れ替えたい部分の語を {house|apartment|lodge|cottage} のように | で区切ると、画像を生成する度にhouse, apartment, lodge, cottageの中からどれか1つが選ばれ使用されます。

あとは、右クリック>Generate Forever を使えば様々な語の組み合わせで画像を生成し続けることができますので、望む画像が手に入るまで根気よく待ちましょう。

Samplerは20ステップ程度で高精度な画像が生成されるDPM++ 2Mがおすすめです。

サンプルで生成した結果

こちらはWeb UIの拡張機能を使用しているだけですので、他のモデルにも適用可能な手法です。

また、おまけで下記の拡張機能も入れておきました。こちらは好きなものを追加することが可能です。

  • DreamArtist
  • UnivAICharGen
  • training-picker
  • batch-checkpoint-merger

DreamArtist の使い方はうすいさんの記事をご覧ください。
https://zenn.dev/usui/articles/aa6e2457cfd6e9

応用

{2$$akasMhi Tarmkaui|Alexis imsno lhBe|Spaelerd eirFay}

2$$と指定すると、akasMhi Tarmkaui, Alexis imsno lhBe, Spaelerd eirFay の中から2つの語が選択され使用されます。

プロンプトでは by でアーティスト名を指定しておりますが、アーティストの名前は実在の人物名をアナグラムし、架空の人物に変換しています。
架空の人物でもそれなりに効力は発揮すると思われるため、このように対応しました。

プロンプトの確認

生成された画像をPING infoタブからアップロードすれば、ランダムプロンプトで組み合わされたプロンプトを確認することが可能です。

まとめ

いかがだったでしょうか。
良い単語の組み合わせを発見できれば、その付近で潜在空間を探索しさらにクオリティを上げていくことが可能です。

ランダムな組み合わせを試していくにも時間はかかりますが、生成する環境をセッティングさえしてしまえば後は放置するだけですので、作業の手間はほとんどかかりません。(生成画像の絞り込みは手間がかかります。)

PCを24時間働かせることは(現時点では)問題ありませんので、究極の一枚が生成されるまでひたすら待ちましょう。

運が良ければ、下記のような究極の一枚を生成する……こともできるかもしれませんね。(sd-dynamic-promptsでは総当たりを試すこともできます)
https://mobile.twitter.com/fladdict/status/1598684017637093376

この記事がプロンプトの生成に悩んでいる方の一助になれば幸いです。

Discussion