SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

画像生成AI「Stable Diffusion」

自宅のPCでここしばらく、画像生成AI「Stable Diffusion」を試していますが、なかなか面白いです。
数日試行錯誤してできた画像がこちら。ローカル線の列車旅をイメージして作りました。

こちらは記念撮影風。

PCの前で数日あれこれやれば、こんな画像ができてしまいます。
「どうしてもこの場所で撮りたい」という観光や宣伝の写真はともかく、一般的な広告画像などは今後ほとんどがAI生成に置き換わってしまうのではないでしょうか。モデル・カメラマン・スタイリストなどの方々は仕事の危機だと思います。

環境作り

Stable DiffisionをローカルPCで動かす方法は、ネット上にいろいろな情報が出ています。
私はこちらを参考にしました。
freeblog-video.com

PCのハードウェアですが、CPUはそこそこで大丈夫ですが、RAMは16GBは必要。
そしてVRAMを大量に搭載したNVIDIAグラフィックカードが必要です(グラフィックカードのCUDA機能で計算するため)。
満足に使えるのはVRAM 12GBのカードで、4万5千円くらいします。これで画像1枚を生成するのに15秒~1分くらい(設定によって変わる)。
VRAMが少ないと、画像生成でエラーになったり、ものすごく時間がかかったりします。
私はこちらのカードを購入しました。
kakaku.com

画像作成の環境作り

作成したい画像によって、Stable Diffusionへモデルや拡張機能をインストールします。
gitのほか、こちらのサイトから探してダウンロードできます(※会員登録が必要)。
civitai.com
今回使ったのは以下のとおりです。

  • モデル:kisaragiMix
    • 標準搭載モデルではあまり可愛い女の子が描けなかったので導入。インストール後にStable Diffusion内で「このモデルを使って生成する」と指定します。
      使うモデルによって人物だけでなく背景もかなり変わります。いくつかのモデルを試しましたが、モデルによっては何度生成しても駅や線路を描いてくれません。
  • 拡張機能:ControlNet
    • 拡張機能は一種のプラグインで、インストールするとStable Diffusionに機能が追加されます。ControlNet内の「openpose」という機能を使うと、人物画像からスケルトン(骨組み)を解析して、それを元に同じポーズの人物を描画してくれます。横向きの女の子を描くのに使いました。
  • 拡張機能:Tiled Diffusion
    • Stable Diffusionが生成する画像は、基本的に512×512ドットのサイズです。1024×1024ドットも指定できるのですが、VRAM 12GBでも足りず生成画像が荒れてガサガサになります。
      ですので、512ドットで生成した画像の中から使えそうなものを選んで、img2img(画像を見本にして別の画像を作る機能)で1024ドットに高解像度化して完成作品にします。
      (単なる解像度変更ではなく、プロンプトや設定に従って画像を再生成します)
      この時にTiled Diffusionが元画像をタイル分割して処理するので、VRAMが少なくても高解像度化できます。
  • LoRA:Pure Innocent Girl
    • LoRAも一種のプラグインで、モデルと同じように特定の人物や背景を描画します。
      img2imgで高解像度化する時にこのLoRAを使うと、女の子の顔が可愛く修正されます。本当は最初の画像生成で使いたいのですが、使うと駅や線路を全く描いてくれなくなります。
  • 拡張機能:Config Presets
    • Stable Diffusion内で指定したプロンプトや設定は、ソフトを終了するとリセットされて消えてしまいます。
      この拡張機能を入れると、現在の設定に名前を付けて保存して、プルダウンリストで呼び出すことができます。

失敗作いろいろ

AIが勝手に描画するので、指示してもなかなか思ったとおりの画像になりません。100枚画像生成して、使えるのは2~3枚くらい。「下手な鉄砲、数打ちゃ当たる」方式です。予想外なものを描いてくれて逆に面白かったりもしますが。
以下、「下手な鉄砲」の失敗作を。「AIってこんな画像を作るんだ」と参考になれば。

駅や線路が全くありません。生成された画像の半分くらいはこんな感じです。


なぜか山の中へ。廃線跡


列車が登場。どこの国でしょうか。


海を走る列車。幻想世界。


列車はやめて、船に乗ることに。


竜宮城へ着きました。出迎えもいるようです。

駅少女シリーズ

その他の作品。

追記:その後

Stable Diffusionがとにかく駅や線路をまともに描いてくれなくて苦労しています。
Microsoft Bing の Image Creatorを使うとそれなりに描いてくれることがわかったので、

  • 背景はBing Image Creatorで出力
  • 女の子はStable Diffusionで描画
    • 立っている女の子だけなら、生成画像サイズを縦長にすれば解像度を上げてもメモリ不足にならず、一発で綺麗な女の子が描けます。
  • 2枚の画像をPhotoshopで合成

という手順で作ってみました。


だいぶましな風景になりましたが、もっとホームが短くて、架線が無い非電化のローカル線の駅を、自分の中ではイメージしていました。
AIの時代になっても、結局は「本当に欲しいものは自分で作るしかない」という、ものづくりの基本に立ち返るお話でした。

追記:完結編

駅や線路の風景がうまく描けなくて四苦八苦してきました。使う学習モデルを選択して画像を作成するのですが、

  • (1)指示のテキスト(プロンプト)から512×512ドットの画像を生成
  • (2)その画像を元に再度描き直して1024×1024ドットに拡大

と2段階で作成します。
(学習モデルは元々512×512ドットの画像で学習しているので、いきなり1024×1024ドットの画像を生成すると絵がおかしくなる)
そこで、(1)では風景に強い学習モデル、(2)では女の子が可愛く描ける学習モデルと、2種類のモデルを使い分けて生成すると、だいぶいい感じの絵が描けました。

まだまだソフトの使用レベルは序の口ですが、これで一応完結編とします。

いろいろトライして改めて気づいたのですが、学習モデルはネット上に存在する多数の画像から学習しているので、

  • 生成される画像の造形・画角などが、ネット上によくある画像に引きずられる
  • 逆にネット上に無いような造形は生成されない

コミック・アニメ調のイラストだと架空世界なのでまた違うのでしょうが、こうした実写の画像は現実にかなり引きずられます。逆に現実に無いような新しい画像はなかなか作られません。よくも悪くも学習AIの限界でしょうか。