Re:シルの日々の戯言。

散財が生き甲斐になりかけている、デジタルガジェット大好き自称黄色いネズミの戯言。

画像生成AIのStable Diffusionに興味を持って遊んでる

最近は何事も興味を抱くことが世間様より1周以上遅れている感がありますが、画像生成AIのStable Diffusionに興味を持ちました。
ja.stability.ai

ちょうど手持ちのNUC9i7QNXが仮想化環境の移行暫定環境としての用途*1を終えたため、NUC9i7QNXに収まるサイズのGeForce RTX 3050(VRAM8GBモデル)を見つけたこともあり、画像生成AIを動かす環境として利用しています。
sylve.hatenablog.jp

参考書を片手にゴニョゴニョと遊び、ダニング・クルーガー効果の「バカの壁」(近年のネタで言うと「完全に理解した」の辺り)で調子付いている時期*2なので、調子に乗ってブログ記事なんかにしてしまおうと言う魂胆です。

動作環境について

上記の「グラボ買ったよ!」記事で環境は紹介していますが、改めて私がStable Diffusionを動かすために利用している環境を記載します。

  • NUC9i7QNX
    • Core i7-9750H(6C/12H)
    • DDR4-3200 32GB(16GB*2)
    • M.2 NVMe SSD(System 500GB/Data 1TB)
  • GeForce RTX 3050(VRAM 8GB)
  • Windows11 Pro

まずベアボーンPCとして手持ちの旧Intel NUCを利用していますが、現在グラフィックボードで利用される規格のPCIe x16が利用可能な特殊(ゲテモノ)モデルを利用しています。
ただし、NUC9i7QNXを利用するがために搭載可能なグラフィックボードに制限が発生*3してしまい、予算面も鑑みて中古でGeForce RTX 3050(VRAM 8GB)を選択することとなりました・・・。
OSはメインPCからリモートデスクトップ経由で操作するため意図して「Pro」を選択しています・・・が、手持ちライセンスが「Home」だったので*4人生始めてのMicrosoft Store経由エディション変更を実施して「Pro」化させました。

恐らく画像生成AI環境としては貧弱の限りを尽くした酷い環境ですが、手持ちのミニPCで・予算を抑えて環境を整える条件下では上等な環境ではないかと思います。*5

参考にした書籍

今回は数多存在する画像生成AIの中からStable Diffusionに興味を持った次第ですが、知名度の高いプロダクトなら様々な情報がネットに存在するだろう・・・と言うのが動機です。
ただし、今回はあまりにも無知すぎる状態で興味を持ったため、スタートアップとして必要な情報がまとまっているであろう書籍に頼ることとしました。

情報鮮度の観点ではネットに掲載されている・生成AIに特化したメディア記事を参考にするのがベストとは思いますが、個人的にネットの情報と言うのは内容が薄い・そもそもほぼ無いのに広告は満載・SEO対策だけは完璧と言う酷い偏見から、近年の「ソースはネット」と言うものは信用できません。*6

そのため、今回私がStable Diffusionに手を出すためにスタートアップとしてgihyo.jpさんトコの書籍に頼ることとしました。

店頭でパラパラと見る限り(大体Stable Diffusionの入門書系統は)導入方法・お便利ツールの紹介の他は基本的にプロンプト(俗称:呪文)の解説がメインですが、ページ数は他の章より少ないものの「画像生成AIと著作権」と言う章が存在するため、何かと学習データ周りで他人の著作物を勝手に使っている印象が強い生成AI界隈としては良心的な内容が書かれている感があり購入の決め手となりました。

個人的には本書の導入から基本的な使い方が書かれてる1章~3章+著作権周りに触れてる5章を読破すれば、最低限Stable Diffusionで遊んでいけそうな気がするので、実際に購入した書籍と言うこともありますが個人的にはスタートアップとして見るにはオススメな書籍です。

・・・書籍=発刊時点での情報になるため、3ヶ月後・半年後・1年後に役立つ内容なのかと問われると微妙ですが、この記事の草稿を書いている時点で発売4ヶ月目ですが何とかなってるので情報鮮度の観点ではまだ何とかなる範囲かと・・・。*7

Stability Matrixがあれば導入はOK

上記の参考書籍を見た上での話ですが、Stable Diffusionを始めようと考えている場合、基本的にStability Matrixがあれば面倒なこと無しに導入できます。
github.com

もっと言うと特定バージョンのPythonをセットアップし、git経由でリポジトリからクローンすればほぼほぼOKと、ある程度エンジニアやってきた人ならば手動での(Stable Diffusion)導入も難しいことはありませんでした。

ただStability Matrixを利用すると様々なWebUIを簡単に利用できる上、生成に必要なモデルデータもStability Matrix経由・Stability Matrix生成のフォルダに格納するだけで済むため、導入の容易さ以外にも利便性の観点で個人的にはStability Matrixの利用を推奨したいところです。

ちなみに、私は参考書に従い有名なAUTOMATIC1111版・AUTOMATIC1111からNVIDIA GPU向けに最適化を行われたと謳われているFORGE版を利用しています。
2種類利用しているのは、生成速度の観点ではFORGE版のほうが優れているらしい・・・のですが、一部拡張機能がAUTOMATIC1111版でないと正しく動作しなかったため現在は2種類を利用している次第です。ただ、コンマ1秒単位で急がない限りAUTOMATIC1111版があれば必要十分と思うので、この辺はお好みでどうぞ・・・と言ったところでしょうか。
github.com
github.com

モデルデータは今のところ2種類

生成に必要なモデルデータは恐らくデフォルトでも入ってくると思いますが、画像生成AIと言ったら二次元の女の子と言う印象が強いので(!?)、然るべきモデルデータを利用します。

参考書ではHimawariMixsを勧めているため、まずは書籍の内容に従いHimawariMixsを導入しています。
huggingface.co

その他、慣れた頃合いに別のモデルデータでも・・・と探し、ShiratakiMixと言うものも別途導入しています。
huggingface.co

いずれも2次元の女の子に強いモデルデータのようで、雑に生成しても概ね可愛い女の子が生成されるため、スタートアップとしてはこの2種類のモデルデータがあれば不自由することは無さそうです。
ちなみに、モデルデータ側のライセンスとしてShiratakiMixは結構自由度が高いようなので、画像生成AI絵師として頑張っていきたい場合はShiratakiMixを利用したほうが都合がいいのかも知れません。*8

実はLoRAモデル作成もチャレンジした

Stable Diffusionでは、モデルデータの他に好みの絵柄を学習したデータ(LoRAモデル)を利用して「いい感じ」にするデータもあり、広く配布されているものを利用する他に自分で作ると言うことも可能です。
ただ、学習させるにもデータが必要なので書籍にはやり方が書かれてるもののデータが無いから無理か・・・と思っていましたが、意外なところにデータが存在しています。・・・えぇ、ゲーム実況系の動画投稿者ならばお世話になることの多い、とある一派から正式にデータが配布されてるのです・・・。

zunko.jp

東北ずん子・ずんだもんプロジェクトでは様々な素材データが配布されていますが、その中にAI画像モデル用学習データと言う願ったり叶ったりなデータが配布されています。

一番手軽なのは「01_LoRA学習用データ_A氏提供版_背景白」を利用することで、学習に必要な(イラストにどのような要素が含まれているかを示す)タグ付けテキストファイルも付属し、先頭にキャラクター名(zunko/itako/kiritan)が付与されているので、そのままLoRAモデル学習用ツールにぶち込むことが可能です。
ただ、「01_LoRA学習用データ_A氏提供版_背景白」の学習データだけでは細かなディティールを再現出来ない事が多く、特に東北イタコさんの(リンゴをモチーフにした赤い)髪飾りの再現が試行回数の暴力でやっと出現するくらいでした・・・。*9

そのため、「02_LoRA学習用データ_B氏提供版_背景透過」の学習データも読み込ませてLoRAモデルを作ったほうが、より正確性は高くなるんじゃないかな・・・と思います。なお、「02_LoRA学習用データ_B氏提供版_背景透過」にはキャラクター名はタグに付与されていないため、必要に応じてタグ編集が必要になります。

ちなみに、LoRAモデル学習用のツールはここで配布されているようです。
github.com

合わせて、LoRAモデル学習時に利用するモデルデータの指定が必要です。事前にモデルデータは何を利用するか決めておくと、スムーズに学習データ作成に移れるかと思います。
・・・あ、学習速度は利用するGPU次第なのでご注意ください。私のRTX 3050(VRAM8GBモデル)の場合、「01_LoRA学習用データ_A氏提供版_背景白」だけだと設定次第ですが2~3時間、「01_LoRA学習用データ_A氏提供版_背景白」+「02_LoRA学習用データ_B氏提供版_背景透過」で一部重複するデータを除いたものだと(同じく設定次第ですが)10時間くらい時間を要します。

色々とゴニョった結果

長々と綴ってきましたが、「それじゃお前なにを作ったんだ?」と言われそうなので、いくつか生成物を残しておこうと思います。
生成データは以下のモデルデータ・LoRAを利用して生成しました。

  • HimawariMixs
  • EasyNegative(ネガティブプロンプト(生成されたくない要素)の一括指定ツール)
  • flat2(のっぺりとした2次元絵を支援するLoRA)
  • ずんずんプロジェクト提供の「01_LoRA学習用データ_A氏提供版_背景白」で作成した自作LoRAモデル
  • ずんずんプロジェクト提供の「01_LoRA学習用データ_A氏提供版_背景白」+「02_LoRA学習用データ_B氏提供版_背景透過」で作成した自作LoRAモデル

自作LoRAモデルが2種類あるのは、この記事の草稿を作成しつつ両方のデータを読み込ませたLoRAモデルを作ったからなのです。

東北きりたん


Prompt: Night view, observatory, city, 1 girl, camera, kiritan, kimono, +自作LoRAモデル
Negative Promtp: easynegative

最初の自作LoRAモデルが完成したタイミングで、割とお試しで生成したのが東北きりたんでした。
・・・頭部があまりに特徴的なので、再現し易いだろうと言うことと、この時に夜景撮影するフォトグラファー女子*10を生成していたため、夜景撮影フォトグラファー女子のプロンプトを流用してきりたんを生成しました。

思惑通り(きりたん砲はありませんが)きりたんが生成できたので、調子に乗り特徴的な要素の多いイタコさん(東北イタコ)を生成しようと思ったら・・・。

東北イタコ


Promtp: night view, observatory, urban, 1 girl, happiness, itako, (cat girl:1.5), kimono, ponytail, silver hair, huge breasts, cleavage, +自作LoRAモデル
Negative Prompt: easynegative, (cat tail:1.5)

イタコさんはケモミミ完備なのできりたんと同じく容易に生成できるだろう・・・と思ったら、ケモミミなしの銀髪でキレイなお姉さんが量産されてしまい、結構プロンプトで苦労しました。

まずはケモミミ生成のために、Stable Diffusionにも分かりやすく猫耳を生成する「cat girl」をプロンプトに指定し・・・たら猫尻尾も生えてしまったため、ネガティブプロンプトに「cat tail」を指定しました。・・・なんだかんだ猫尻尾消えませんでしたが・・・。

髪色も(過去設定から)銀髪・黒髪*11と安定しなかったこと・髪型もロングヘアーに設定されたり安定しなかったことから、明示的に「ponytail, silver hair」を指定して両方とも固定化させました。

更に「東北3姉妹含めたずんずんプロジェクトのキャラクター一式」でLoRAモデルを作った影響なのか、「kimono」のキーワードを指定するときりたんに引っ張られてしまうのか、イタコさんのお胸がデチューンされてしまいました・・・。
そのため、明示的に大きな胸を示す「huge breasts」・胸の谷間を意味する「cleavage」を指定して、胸部の補強をしています。・・・ただ、「cleavage」は胸元がはだけた衣装が生成され気味だったので、指定不要だったのなのかも知れません。

ちなみに、この時のLoRAモデルは「01_LoRA学習用データ_A氏提供版_背景白」だけのLoRAモデルなので、イタコさんの赤い髪飾りは試行回数の暴力で奇跡的に生成された次第だったりします。

東北ずん子


Prompt: Night View, In Tokyo, Observation Deck, Rooftop, photography,1 girl, zunko, green headband, School Uniforms, very wide shot, +自作LoRAモデル
Negative Prompt: easynegative, worst quality, low quality, normal quality, out of focus, blurry, bokeh, ugly, bad anatomy

草稿を書き進めている間に「01_LoRA学習用データ_A氏提供版_背景白」+「02_LoRA学習用データ_B氏提供版_背景透過」のLoRAモデルが完成したので、満を持しての東北ずん子さん生成です。
学習データを増やしたものの枝豆風のヘッドバンドは明示的な指定が必須でしたが、その他はほぼ完璧に生成できました。

・・・ちなみに、もう1パターン作ってありまして・・・。

少しスレンダー気味だったのでイタコさん生成時に使った「huge breasts」を付与したら・・・、・・・どうやらモルペコが頑張りすぎた感がありますが、これはこれで悪くない・・・かな?

いずれにせよ、学習データを増やしたお陰なのか、きりたんよりは生成に苦労せずに済みました。

ずんだもん

Prompt: 1gril,zundamon, small breasts ,Skirt-style bikini,clear sky,beach,laugh,jumping,+自作LoRAモデル
Negative Prompt: easynegative, worst quality, low quality, normal quality, out of focus, blurry, bokeh, ugly, bad anatomy,nsfw

東北3姉妹を生成したので、ずんだもんも生成してみることとしました。
ただ、ずんだもんの人間体の衣装を(学習時のタグ付けをなににしたのかチェックしないと)うまく再現できず、ずんだもんだけひん剥いて水着での生成です。

東北3姉妹と異なり水着衣装を想定して生成したので背景も晴天のビーチ、水着もチョット大胆なビキニスタイルにしてみました。また、ポージングも指定してはしゃいでいる感を出すためにジャンプを指定したところ、いい感じにきららジャンプのような感じになりました。
デフォルトだと些かSDキャラ感があるため、等身を上げる目的でスレンダーな身体を指定したところ少々等身が極端に高くなり過ぎた感はありますが、夏を楽しむビキニ美少女になったのでまぁヨシとします。
なお、今回はビキニ水着と少しセクシーな要素の多い指定をしているため、生成事故防止のために「nsfw」をネガティブプロンプトに設定しています。・・・需要としてはプロンプトに指定のような気がしますが、もし「こっしょり」が必要そうな生成を抑えたい場合は必ずネガティブプロンプトに「nsfw」を不要してください。

・・・若干「ずんだもんじゃない!」感がありますが、これはこれでStable Diffusionで生成した中では気に入っています。
向かって右側の手が若干いびつな描写ですが、普段虐げられることの多いずんだもんなので、画像生成AIで多少美化してもええやろ・・・。

画像生成AIたのちい!たのちい!

とりあえずでStable Diffusionに手を出して遊んでいますが、ツール類の成熟が進んでいるため(動作させるハードウェアの準備を除き)比較的簡単に導入・画像生成AIを楽しめる時代になりました。
また、参考書籍で自作LoRAモデルの作成もうまく作れましたので、冒頭で触れたダニング・クルーガー効果の「バカの壁」にはなんとか辿り着いて楽しめている状況です。
個人的には東北ずん子・ずんだもんプロジェクトからLoRA学習用データが、『オフィシャルで』提供されている点が画像生成AIを学習する上ではポイントが高く、参考書籍の内容に一通り手を出すことができたので学習スタートアップには本当ありがたい限りです。

一通り参考書籍でのやるべきことは終えたのであとはプロンプト(呪文)をどこまで突き詰めるか次第でしょうが、とりあえず今のところは夜間の展望台・晴天のビーチのシチュエーションでしか生成していないため、まずは色々な場所での画像生成を試みたいところです。
人物周りについてはずんずんプロジェクト提供素材で作ったLoRAモデルがあるため、ずんずんプロジェクトのメンバー・特に生成に必要なプロンプトを確認した東北3姉妹で試していきたいところです。・・・まぁ、ポージングによっては「こっしょり」が必要になる場合もあるでしょうから、そういう場合は生成AIに任せた美少女を充てがうとしますが、画像生成AIで勉強する場合のお供(専属モデル)にさせて頂こうと思います。

しかし、ここまで画像生成AIと言うものが楽しいとは思いもしませんでした。正直、手持ちのハードウェア構成では生成に時間を要するので最適な環境とは言い難いですが、少し時間がかかるだけでここまで遊べるとは思いも寄りませんでした。
流石に画像生成AIに精通する予定はありませんが、興味が続く限りもうしばらくの間はStable Diffusionで画像生成AIを楽しんでいこうと思います。

*1:ESXiサーバーとして動いていたサーバーのOSをProxmox VEに入れ替えゴニョゴニョ設定している間、一時的にESXiを導入して仮想化環境として利用していました。

*2:ネタとして「完全に理解した」は知っていますが、然るべき言葉が存在していることは、この記事を作成するまで知りませんでした。

*3:具体的には202mm x 39mm x 131mmと言うサイズ制限があり、小型ITXマザー向けと称するグラフィックボードでも一部採寸が合わないなど、地味に難儀するサイズです。

*4:何かで利用するためにパッケージ版Windows10 Homeを確保したと思うのですが、当時お金の出し惜しみをせずにWindows10 Pro買っておけば良かったな・・・。

*5:ちなみに、GeForce RTX 3060(VRAM 12GBモデル)が画像生成AI入門では鉄板のグラボと言われてます。ミドルエンドなのにVRAMが多いので、VRAM不足で苦しくことが少ないから・・・らしい。

*6:完全に信用していない訳ではありませんが、少しネットの悪い部分に毒されすぎたようで捻くれてしまったようです。

*7:もう既にWebUI周りが書籍の内容から変わってたりするので、多少の注意は必要です・・・。

*8:モデルデータの販売周りがShiratakiMixだと自由度高いだけで、生成した画像はどちらも同じようです・・・が、面倒事を避けたい場合は懐の広いライセンスのほうが・・・と思考停止で考えてます。

*9:東北きりたんは特徴的過ぎるので「kiritan」だけで行けましたが、東北イタコさんは試行錯誤を重ねまくってやーっと出てくれました・・・。

*10:なんで?と思われそうですが、一応私はカメラ趣味で都内の展望台からの夜景撮影を趣味にしていたため、夜景撮影なフォトグラファー女子と言うのが思い浮かんだだけです。

*11:公式小説のネタバレになるのでこの記事では割愛しますが、元々イタコさんは黒髪でした。