大変ご無沙汰しています…
年明けからYoutube動画投稿もTwitter投稿もなかなかできていませんでしたが、その間、画像生成AIについて、ローカル環境でいろいろ試していて、一定の成果があったので、今回記事にいたします!
今年1月末あたりから、オープンソースの画像生成AI『Stable Diffusion』をローカル環境でブラウザUIから操作できる『Stable Diffusion Web UI』を導入して、いろいろなモデルを読み込んで生成を楽しんでいたのですが、少し慣れてきて、私エルティアナのイラストを、プロンプトを入れたら描いてくれないかなぁという欲求が出てきました。
そこで、既存のモデルに追加学習をさせる『ファインチューニング』というものがあることを、イチゼロシステム ゆうさんの動画で知って、画像生成AI、とりわけ『Stable Diffusion』においてはどうやってやるんだろう?と調べてみたら、今回ご紹介する【DreamBooth】という手法を見つけて実践してみたので、そのレポートをいたします!
私みたいに、『Stable Diffusion Web UI』に慣れてきたけど、自分らしいイラストを描いてほしい!追加学習してみたい!という方におすすめの記事になるかな!?と思います。
※ローカル環境のPCで『Stable Diffusion Web UI』はすでに使える方、かつVRAM24GB以上のグラボを搭載している方が大前提になってしまっているので、ちょっと敷居が高いかもしれませんが、こんなものがあるんだなぁ的にお読いみただけるとうれしいです!
※後述の『NMKD Stable Diffusion GUI』がローカル環境で動く方であればかならずしも『Stable Diffusion Web UI』は使えなくても大丈夫です(作成完了したモデルをセットして画像生成できればOK)
DreamBoothとは?
いろんな方のブログなど拝見しましたが、私なりの理解で簡単にまとめると、StableDiffusionにおいて『既存のモデルに数枚の画像を与えるだけで追加学習が出来、学習した画像(概念)を自分が指定したプロンプトで描いてもらうことが可能となる』学習方法の一つ、のようです!
まずは成果物!
DreamBoothでこんなことができたよ!ということをまずはご紹介したいと思いますが、バ美肉Vtuberとして(ほそぼそ)活動している私エルティアナの姿を【eruthiana】というプロンプト(+その他クオリティアップのためのプロンプトとネガティブプロンプト)で、以下のように、かわいらしいイラストを描いてくれました!これはほんとに感動します!
手がぐちゃぐちゃ以外はほぼ理想的でほんとにうれしい!手の課題も、これまでは自分で頑張って直したり、クリスタで手の3Dモデルをかぶせてもう一度img2imgしたり工夫して修正してましたが、最近話題のContotolNetという技術を使って、もっと効率的に修正できないかも研究してみたいと思っています!
私が試した方法の大前提
今回私が試した方法の大前提なのですが、DreamBoothの実現においては、もともとPythonというプログラム言語でいろいろな命令をしなければならず、私のような非エンジニアには不可能かなぁと思っていたところ、GUI(グラフィカルユーザーインターフェイス)という、Wordなどのように目で見てプルダウンで設定を選んで実行!できる【NMKD Stable Diffusion GUI】というツールで出来ることを、下記の『経済的生活日誌』様の記事で知って、実行してみました。
正規化画像不要!たった数枚の画像でDreamBoothのキャラ学習。ローカル(Windows)で実行する方法
https://economylife.net/dreambooth-windows-local/
上記を使えば、難しいことはおいておいて、自分が学習させたい画像を数枚(4枚~20枚程度)を用意さえすれば、出力したいプロンプトを自分で決めて、学習させることができます!
…そう、VRAM24GB以上のグラボを積んでさえいればね…
ということで、実はDreamBoothという名前自体は以前から知っていたのですが、プログラムの命令が難しいことと、実行にはグラボのVRAMがかなり必要であるということも同時に知っていて、その時点でいったんあきらめていました…しかし今の私には強力な相棒がいます(*・v・)g
日本HPのゲーミングデスクトップPC OMEN45Lを購入したのです!
こちら、標準で24GBのVRAMを持つ『RTX 3090』のグラボを搭載していて、CPUメモリは標準32GBなのですが、12,000円程度で32GB→64GBへ増設もできました。これまで長年、レッツノートが大好きでずっとノートPCしか使ってこなかったのですが、初めてのデスクトップPC、とても早くて快適で、とっても頼れる相棒!!といった感じで活用しています!※いきなりのアフィリエイトすみません…でもほんとにおすすめの逸品です!
…ということで、つよつよPCを導入したから、今回DreamBoothも実施できた!という形になっていて、もし同じように新しいPCを導入してでもやってみたい!という方には、OMEN45Lはほんとにおすすめです!(とにかくでかいので、ご購入の際は公式HPなどよーくみてご検討くださいね)
ちなみにRTX-3090は単品でも20万円程度するようです…
実施手順
以下に、私が『NMKD Stable Diffusion GUI』を利用して、上記の私のイラストが出力できるようになった手順をご紹介します!
①NMKD Stable Diffusion GUIをインストール
まずはこれがなくては始まらないので、『NMKD Stable Diffusion GUI』を以下の公式サイトからダウンロードして、インストールします!
NMKD Stable Diffusion GUI
※詳細なダウンロード方法は割愛します(『経済的生活日誌』様の記事にくわしーい詳細が載っています!)
②Vroidで8パターンの私の画像を出力
エルティアナの3Dモデルは、だれでも簡単に3Dモデルを作成することができる【Vroid】というツールで自分で作っているので、このツールの撮影機能を使って、DreamBooth学習用の基本となる私のキャラクター画像を出力しました。
『経済的生活日誌』様の記事でも、学習用に8枚の画像を用意。となっていたので、その通りにやってみました。↓のようにアップ目のもの、角度違いのもの、全身などパターンを作ってみました。(次の項目で、Stable Diffusion Web UIに読み込ませる都合上、1024*1024の正方形に各種画像をリサイズ)
③Vroidで8パターン画像をStable Diffusionでimg2img
②の工程で出力した8枚の画像を、3Dモデルっぽさをとるために、Stable Difussionでimd2img(画像をもとに新しい画像を作成する手法)で、原画に忠実な設定に近づけてイラスト化しました。↓がその結果です(サイズ小さくしていてわかりづらいですが、3Dモデルっぽさがなくなっていて、イラスト化されています)
④背景画像をStableDiffusionで8枚作成
DreamBoothの学習用画像は、キャラクターが様々な角度やポーズのパターンがあることが望ましいことに加え、背景もそれぞれ異なっている方がいいとのことだったので、8枚それぞれの背景画像もStableDiffusionで作成してみました。
最初、適当な画像をWEBで集めてこないといけないなぁ…めんどくさいなあ…と思っていたのですが、そうか、背景画像もAIに描いてもらえばいいんだ!と思って急に気が楽になりました。
しかも、背景を描いてもらうためのプロンプトもChatGPTにお願いして出してもらいました。(いったん日本語で出てきたものを英語化してもらいました)
ChatGPTのプロンプトからStableDiffusionが出してくれた背景がこちら
⑤エルティアナのイラストと背景画像を合成
③と④の生成画像を合成して、それぞれポーズや角度などが異なるエルティアナ画像にそれぞれ異なる背景を反映しました。
⑥いよいよDreamBooth実行
これまでの工程で学習に必要な画像が作成できたので、いよいよ『NMKD Stable Diffusion GUI』を使ってDreamBoothの学習を実行します。
1.『NMKD Stable Diffusion GUI』で【Train Dream Booth Model】を押下
NMKD Stable Diffusion GUIを起動して、以下のアイコンをクリックします。
24GB以上のVRAMを積んでいると、以下のように使えますよー的なメッセージが出るので、OKを押下
2.学習のための各種設定を行う
次の画面で、以下の感じで、学習にむけた各種設定を行いました。
①Base Model…学習させる元となるモデル(普段利用しているモデルなど)を指定
②Training Preset…学習させる濃さと勝手に表現しましたが、6分コース、20分コース、40分コース、80分コースがあり、時間をかければかけるほど、高品質な学習(?)がされるようです。今回は40分コースにしてみました。
③Training Image Folder…学習用に作成した画像(今回私の場合8枚)を格納しているフォルダを指定
④Class Token…学習結果を反映した画像を出せるようにするために指定するプロンプトをここで自分で設定します(この場合、エルティアナを描いてほしいので【eruthiana】としています)
⑤と⑥と⑦…何か詳細な設定のようですが、⑤のLearning Rateはよくわからずデフォルトの1のまま、Training Stepsはおそらく数が多ければそれだけたくさん学習を試行するはずですが、まあこれくらいかな…と今回は3000にしてみました(デフォルトは1000でした)
3.学習済みのモデルが生成される
上記手順で【Start Training】押下後、学習が開始され、気長に待って、特にエラーなく完了すると、NMKD Stable Diffusion GUIのモデルを格納しているフォルダに、以下のように学習結果が反映された新しいモデルが生成されています。
4.学習済みのモデルを『Stable Diffusion Web UI』のモデル格納フォルダに移動/複製して、イラスト出力
ついに学習済みモデルをゲットできたので、Stable Diffusion Web UIで早速使ってみます。
学習済みモデルをStable Diffusion Web UIのモデル格納フォルダに移動または複製して、Stable Diffusion Web UI起動→学習済みモデルを設定して、Text to Imageで画像を出力します。
出力時は以下のプロンプトでやってみました。
■プロンプト
{{{masterpiece}}},{best quality},beautiful ,(illustration)+, {{eruthiana}},1 girl
■ネガティブプロンプト
multiple angle, blurry, lowres, extra digit, fewer digits, cropped, worst quality, low quality,text,error,fewer digits,cropped,worst quality,low quality,normal quality,jpeg artifacts,signature,watermark,username,blurry, 2koma, panel layout
Step数などは割愛しますが、結果としてこちらの成果物が生成できました!
まだ試せてはいませんが、表情やポーズ、服装に背景など、事細かにプロンプトを書けば、いろんなエルティアナを描いてくれるはず…こう考えると楽しみで仕方ないです!しかもこのクオリティでバンバン描いてもらえます…すごい時代になったなぁと…(*・v・)
まとめ
今回のDreamBoothは、24GB以上のVRAMという少々厳しい前提条件と、仕組みとして、元となるモデルに追加学習を行った新しいモデルをまるっと作成する仕様になっているのですが、最近は【LoRA】(Low-Rank Adaptation)という、学習済みデータと既存のモデルをそれぞれ読み込むことで、追加学習の効果を反映できる、トッピングのような学習データを作成する手法もあるようですので、こちらも研究してみたいと思っています!
※しかもVRAMが8GB程度でもできるらしい!?
私としても、おそらくLoRAのほうが、すでに持っている様々なモデルにすぐ反映できるし、軽くて便利そうなので、手法さえ確率できたら、LoRAをメインに今後やっていきたいと思っていて、自分なりに成功次第、こんな感じでまた記事を書きたいと思います!