こんにちは、たねやつです。
今年に入ってAI関連技術が爆発的に広がってきていますが、自分もようやっと最近GPUを現代的なものに乗せ換えたのでローカル環境でいろいろ試してみました。手始めにVRoidで作成した推しキャラをLoRAを使用して好きに画像生成してみました。結果的にはかなり満足の行くものとなりましたので、備忘録等も兼ねて残しておきます。
- PC環境
- 手順
- stable-diffusion-webuiを導入
- kohya_ssを導入
- モデル取得
- 生成
- VRoidからモデルを学習対象3Dキャラを作成
- 学習用画像を作成
- 学習準備
- 学習
- 学習ファイルを使用してtxt2imgで画像生成
- 最後に
- 参考
PC環境
LoRA学習およびStable Diffusionによる画像生成に使用しているPCのスペックは以下の通りです。Windows 11で行っています。
NO | モジュール | 製品 | 備考 |
---|---|---|---|
1 | ケース | NZXT H210i | mini-ITX |
2 | マザーボード | ASUS PRIME 320I-K | |
3 | CPU | AMD Ryzen 5 3600 | |
4 | GPU | GeForce RTX 3060 (ASUS) | |
5 | RAM | CORSAIR VENGENCE RGB PRO 16GB | |
6 | CPUクーラー | NZXT Kraken M22 | 簡易水冷 |
7 | 電源 | オウルテック 650W SILVER RA-650S |
ちょっと前に新調したときの記事がコチラです。ここからGPUだけ変わっています。
GTX1060(VRAMが6GB)でもStable Diffusionはとりあえず動くのですが、LoRAを行おうとするとVRAMが足りないためなかなかキビシイです。仮に処理を行うことができても途方もない時間がかかりそうです...
PyTorchの方でメモリ確保方法セットしないとダメっぽいね? pic.twitter.com/SsC0MmzoF4
— たねやつ@キーキャップ作る人 (@taneyats) March 26, 2023
お手頃価格でVRAMの多い(12GB)RTX 3060にしました。
手順
以下手順となります。各環境が整っている場合は飛ばしてください。また記事作成時点から変わることも往々にしてあるので、上手く行かない場合はリンク先のREADME等を参考にしてください。
stable-diffusion-webuiを導入
インストール
まずは画像生成するためのStable Diffusion web UI
を導入していきます。といってもそこまで変なことは行わず、Python 3.10.6(以上)をインストール、git for Windowsをインストール後、READMEを参考に以下のコマンドをPowerShellで実行します。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui .\webui-user.bat
初回起動時に必要ファイルをダウンロードしたりするので時間がかかります。完了後コマンドライン上に以下のURLが表示されるのでブラウザからアクセスします。PowerShellであればCtrl
を押しながら左クリックで標準のブラウザで開くことができます。
Running on local URL: http://127.0.0.1:7860
既に後述のkohya_ss等も起動していて7860
番ポートが開いていない場合は7861
番ポート以降で起動します。
LAN内の他の端末(スマホ等)からアクセスできるようにする
今の状態だとwebuiを起動しているPC上でしか作業できないので、スマホ等で同一LAN内にいる他端末からもアクセスできるようにします。
stable-diffusion-webui
内の先ほど起動に使用したwebui-user.bat
ファイルを以下のようにCOMMANDLINE_ARGS
に--listen
を追加します。
@echo off set PYTHON= set GIT= set VENV_DIR= set COMMANDLINE_ARGS=--listen call webui.bat
その状態で起動してみると以下のようなログが表示されると思います。その状態でPCのIPアドレス:7860
をスマホなどからアクセスして確認してください。
Launching Web UI with arguments: --listen ... Running on local URL: http://0.0.0.0:7860 ↑ 0.0.0.0となっていればOK
これで寝っ転がりながらでも風呂に入りながらでも画像生成できるようになります👀。後はリモートデスクトップやWakeOnLanの設定等で起動・停止、PCの電源管理まで行えるようにすれば完璧ですね!
kohya_ssを導入
インストール
次にLoRAを行うための環境を作成します。
以下のコマンドを実行します。stable-diffusion-webui
をインストールしたディレクトリと同じ場所がいいと思います。
git clone https://github.com/bmaltais/kohya_ss.git cd kohya_ss .\setup.bat
setup.bat
を実行すると先ほどと同じように必要ファイルをダウンロードし始めます。これも結構時間がかかるので完了まで待ちましょう。
最近初期設定方法が変わったみたいですが、ダウンロードが完了するといくつか質問を聞かれます。
In which compute environment are you running? This machine ------------------------------------------------------------------------------------------------------------------------Which type of machine are you using? No distributed training Do you want to run your training on CPU only (even if a GPU is available)? [yes/NO]: Do you wish to optimize your script with torch dynamo?[yes/NO]: Do you want to use DeepSpeed? [yes/NO]: What GPU(s) (by id) should be used for training on this machine as a comma-seperated list? [all]: ------------------------------------------------------------------------------------------------------------------------Do you wish to use FP16 or BF16 (mixed precision)? fp16
よくわからない場合は全部エンターを押しておけばOKです。ちなみに日本語環境で矢印キーでmixed precisionの選択を行うとするとエラーで落ちます。1
や2
等数字キーで設定してください。
後で設定を変更したければ以下で再度設定することができます。
(kohya_ssディレクトリ内で) .\venv\Scripts\activate accelerate config
RTX 3000/4000系を使用している人は追加設定をすると学習が早くなります
追加設定でNvidia RTX 3000/4000系を使用している場合は以下の手順で設定を行うと学習速度が早くなるそうです。(4090で約50%程)
ここからファイルをダウンロードしてkohya_ss
内に置きます。リンク切れ等の場合はREADMEから取得してください。
ファイルを置いたら以下のコマンドをkohya_ss
内で実行します。
.\venv\Scripts\activate python .\tools\cudann_1.8_install.py
以上で完了です。
起動確認
kohya_ss
内でgui.bat
を実行することで起動します。stable-diffusion-webui
と同じく表示されたURLにアクセスして起動を確認してください。
.\gui.bat ... Running on local URL: http://127.0.0.1:7860
モデル取得
Stable Diffusionで使用するためのモデル(.ckpt
や.safetensors
のファイル)を取得します。今回は3Dキャラを追加学習してやる予定なのでアニメっぽいモデルを取得しておきます。とりあえずAbyssOrangeMix2
を使用します。以下リンクからダウンロードしてください。
露出表現の具合がファイルによって違います。sfw
(suitable for work)が露出少な目(ナシ?)、nsfw
(NOT suitable for work)が露出あり、hard
が過度な露出ありとなっているようです。自分はとりあえずネガティブプロンプトで何とでもなるからと思ってhard
を使っています👀
取得したファイルをstable-diffusion-webui
内の以下のディレクトリに配置してくだださい。
\stable-diffusion-webui\models\Stable-diffusion
配置した状態で、webUIの画面下部にあるReload UI
もしくは再度起動しなおう等すれば読み込まれます。
Stable Diffusion checkpoint
に表示されていればOKです。
生成
試しにちゃんと出力できるかやってみます。適当にプロンプトをmagin.AI
等から拾ってきます。
Prompt、Sampling method、width x height、Seed、CFG Scaleを合わせて生成すると以下のようになりました。
使用しているモデルがリンク先(SFW)と異なりHardを使用しているためか出力結果が若干違いますが出力には問題ないですね。このふたり、靴下を共有している...w
VRoidからモデルを学習対象3Dキャラを作成
ここまででstable-diffusion-webui
の動作は確認できたので、LoRA学習を行うモデルを作成していきます。
VRoid Studioを持っていない方は以下のリンクからインストールしてください。サンプルモデルも一緒についてきます。
自分で作ったモデルを使用
以前作ったたねやつちゃんというモデルがいるので私はそれを使用します🐂
銀髪、褐色、アンダーリムメガネがかわいい!!!!!!!!!!!
面倒な場合はサンプルモデルを使用する
とりあえず動作だけでも確認したい場合はサンプルモデルを使用するのが手っ取り早いと思います。
学習用画像を作成
モデルが決まったところで、とりあえず学習用の画像を30枚ほど生成します。VRoidの撮影機能を利用していろんな角度・ポーズ・表情で生成しまくります。もはやただのイチャイチャしてるだけの時間となります🥳
自分が使っているVRoid Studioのバージョンが古いので若干レイアウトが違うかもしれませんが、画面右側ペインの表情
やポーズ&アニメーション
からいろいろ試してみます。
学習準備
生成した学習用ファイルを既定のディレクトリに置く
上記で作成した画像を以下のディレクトリ構造で置きます。私はとりあえずkohya_ss
内にtrainning
というディレクトリをつくって置いています。
kohya_ss └ trainning ├ model1 │ └ train │ └ 20_taneyats 1girl ├ model2 └ model3 ... (model1の部分は各自好きな名前で置き換えてください)
最後の20_taneyats 1girl
はclass+identifier方式にのっとっています。20
は学習の繰り返し回数で、taneyats
はプロンプト内でLoRA学習した内容を使用するidentifier(起動フラグみたいな)、1girl
はその学習モデルのクラス(どういう内容を学習したか)になります。identifierには絶対にかぶらない、現実で存在しないような文言にする必要があります。例えば、以下のようなものをkohya_ssのREADMEにてかかれています。
shs sts scs cpc coc cic msm usu ici lvl cic dii muk ori hru rik koo yos wny
私はとりあえず分かりやすく and 存在しないtaneyats
を使用していますが問題ないです👀
詳細は以下で説明されています。
正則化画像はとりあえずいらない
もう一つ重要な要素として正則化画像を使用するか否かがありますが、今回は特に使わないで進めます。
正則化画像を使用しないと、例えば上記のようにクラスに1girl
を指定して学習すると、1girl
の出力結果がどうしても学習したものに引っ張られてしまうということが発生します。とりあえずVRoidの学習したキャラが出力したいだけなので無視で問題ないです。
学習
本当は追加で各画像にタグ付けを行った方がいいのですが、一旦何もせずに学習を進めます。
kohya_ss
の方の画面を開いて、Dreambooth LoRA
を選択します。Pretrained model name or path
にStable Diffusion用に取得したAbyssOrangeMix2のパスを指定します。
次にFolder
タブに移動して、Image folder
の部分に先ほど作成した学習用ディレクトリ構造のtrain
までのディレクトリを指定します。Output folder
にはその一つ上のmodel1
を指定しておきます。Model output name
には出力される.safetensors
ファイルにつく名前を指定できます。
(パスは適当にトリミングしています)
Training Parameter
タブに移って細かい設定をします。Train batch size
をあげることによって学習を早くすることができますがGPUの性能と相談して設定してみてください。性能を超過した設定の場合すぐにエラーとなり止まりますので、下げてトライしてください。
Epoch
は何世代(?)学習するかを設定しています。この数が多いほどしっかり学習してくれますが、学習しすぎて上手く行かない場合もあります。とりあえず20
をセットしておきます。
Save every N epochs
で学習途中の世代をどこまで保存しておくかを設定します。1
にしておくと各世代毎に保存するので20 epochsの場合は20ファイル出来上がることになります。20世代目で学習しすぎで上手く行かない場合でも15世代目ぐらいが丁度イイ場合もあるらしいので、とりあえずディスク容量が許す限り全世代を残しておきます。
他の細かい設定は追々設定していけばいいのでとりあえず学習を回してみましょう!
画面下部のTrain model
を押すと学習が始まります。進捗等はこのブラウザ画面上にはでず、batファイルを起動したPowerShellの方に出力されます。
いろいろ表示された後に以下のような表示が出ます。
running training / 学習開始 num train images * repeats / 学習画像の数×繰り返し回数: 420 num reg images / 正則化画像の数: 0 num batches per epoch / 1epochのバッチ数: 420 num epochs / epoch数: 20 batch size per device / バッチサイズ: 1 gradient accumulation steps / 勾配を合計するステップ数 = 1 total optimization steps / 学習ステップ数: 8400 steps: 4%|██▎ | 321/8400 [01:47<44:59, 2.99it/s, loss=0.0611]
その後にプログレスバーが表示されます。マシン性能によると思いますが、RTX3060で上設定の場合50分ほどで完了します。
学習が完了するとOutput folder
に指定した場所に.safetensors
ファイルが出来ているはずです。
学習ファイルを使用してtxt2imgで画像生成
LoRA学習ファイルを指定場所に置く
最後にその学習ファイルを使用して画像生成してみます。先ほど生成したファイルの連番がついていないもの(最終世代)をstable-diffusion-webui
の以下の場所に置きます。
\stable-diffusion-webui\models\Lora
Stable Diffusion WebUIでそのファイルを指定する
Generate
ボタンの下にある花札の芒に月みたいな赤地に白丸のボタンを押して、LoRA
タブを選択してRefresh
を押します。そうすると先ほどの.safetensors
ファイルが表示されます。
表示されたファイルをクリックするとプロンプトに<lora:[設定したidentifier]:1>
と表示されるはずです。後は指定したクラス(1girl
)を追加して生成してみます。
とりあえず何も指定してないのに銀髪褐色眼鏡っ子が生成されていますね!大分プレステ初代って感じのポリゴン感ですが、ここからmajinAIとかから拾ってきたプロンプトを使用して仕上げたものが以下になります。
<lora:taneyats:1.1> 1girl, ((masterpiece)), detailed, solo, ((night view background:1.2)), bokeh effects, hime-cut, under rim glasses, (subtle smiling:1.2), beautiful eyes, hair blowing, window Negative prompt: jpeg artifacts, cropped, normal quality, jpeg artifacts, signature, (worst quality:1.3), (low quality:1.3), thick lips, jumbled fingers, Nsfw, fat, ugly, blurry, blur, stain, lettering, elf ears, (Low Quality Low-res:1.4), (Poorly Made Bad 3D, Lousy Bad Realistic:1.1) Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 352324809, Size: 512x512, Model hash: cadf2c6654, Model: abyssorangemix2_Hard, Denoising strength: 0.7, Clip skip: 2, Hires upscale: 2, Hires upscaler: Latent
<lora:taneyats:0.8> 1girl, ((masterpiece)), detailed, solo, bokeh effects, hime-cut, under rim glasses, ahoge, (jitome:1.1), beautiful eyes, hair blowing, ((school)), ((shiney sun lighting)), real shadowing, sitting on floor Negative prompt: jpeg artifacts, cropped, normal quality, jpeg artifacts, signature, (worst quality:1.3), (low quality:1.3), thick lips, jumbled fingers, Nsfw, fat, ugly, blurry, blur, stain, lettering, elf ears, (Low Quality Low-res:1.4), (Poorly Made Bad 3D, Lousy Bad Realistic:1.1) Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 9, Seed: 856847891, Size: 512x512, Model hash: cadf2c6654, Model: abyssorangemix2_Hard, Denoising strength: 0.5, Clip skip: 2, Hires upscale: 2, Hires upscaler: SwinIR 4x
いい感じですね!!!!
ついでにChilled_Remix
でも生成してみました。元のモデルがイラスト系のモデルを使って学習しているのでちょっと塗り感がありますがこれはこれでアリな作例ができますね...!!個人的にはこの2.5次元な感じのがたまらなく好きです👀
<lora:taneyats:1.13> 1girl, High detail RAW color photo, professional photograph, hime-cut, under rim glasses, cowboyshot, ((best quality)), cinematic light, (finerly detailed face:1.2), (masterpiece:1.5), (best quality:1.2), (smiling:1.2), night view background Negative prompt: (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, (outdoor:1.6), hused arms, neck lace, analog, analog effects, (sunglass:1.4), nipples, blonde, short hair Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 90328974, Size: 512x512, Model hash: 70e66e96d7, Model: chilled_remix_v1vae, Denoising strength: 0.5, Clip skip: 2, Hires upscale: 2, Hires upscaler: Latent
こんな雰囲気のキャラを生成したいんだけど。。?という例示としては大いに使えそうです!
最後に
満足のいく感じに画像が生成することができました。ただ、どんなプロンプトを入れても髪の毛の毛束感がVRoidのままだったり、褐色肌を再現するのが難しい(モデルのサンプルが少ない?)、メガネの造形が安定しないなどいろんな問題点はありますが、VRoidで生成したキャラのいろんな画像を無限に生成できるのでメチャクチャ捗ります!!!
参考
自作キーボード仲間のめかぶさん(@sashimi_hangaku)の記事を最初に参考にさせていただきました。キーボードやゲームやいろいろと刺激を与えてくれるお方です🥰
https://note.com/uunin/n/n3f09b93df575
https://blogcake.net/sd-webui-smartphone/
https://note.com/kohya_ss/n/nba4eceaa4594
https://github.com/kohya-ss/sd-scripts/blob/main/train_README-ja.md