見出し画像

低グラボのゲーミングPCでAI画像学習させてみた(StableDiffusion Lora sd-scripts web-ui).Vroid(VRM)から画像を作り,学習させる方法.


はじめに

こんにちは,ザッキーラボのザッキーです.
今回は低グラフィックボードのゲーミングPCでLoraの画像追加学習をしてみました.この学習内容をStable-Diffusionに入れて使い物になるかという検証です.

画像学習・Stable-Diffusion・Loraとは

画像学習とは

画像学習は、コンピュータにたくさんの画像を見せて、それを学ばせることです。学んだ知識を使って、新しい画像を作り出す技術です。これにより、コンピュータが自動的に画像を分類・生成できるようになります。例えば、犬の写真をたくさん与えると、コンピュータは犬の特徴を学び、新しい犬の写真を作り出せます。画像学習は、アートやデザイン、映画特殊効果などで使われ、新しい視覚的な体験を提供します。

ChatGPT

Stable-Diffusionとは

Stable-Diffusionとは、潜在拡散モデル(英: latent diffusion model)を使用している画像生成AIです。ユーザーが入力した呪文(プロンプト)を基にイラストを生成してくれるため、自分の思い通りのイラストを作ることができます。Stable-Diffusionは、ミュンヘン大学のCompVisグループが開発した深層生成ニューラルネットワークの一種であり、高度な技術が必要なため、専門家や研究者向けのサービスとなっています。

Bing AI

Loraとは

Loraとは、既存のモデルに新たな被写体を学習させる、追加学習の手法の一種です。LoRA (Low-Rank Adaptation) を使用すると、比較的低コストで画像を追加で学習できモデルを作成できます。作成したモデルをStable Diffusionで読み込み既存のモデルと組み合わせて画像生成に利用できます

Bing AI

この記事について

私の使っているPCはWindowsのノートPCで,メモリが32GB,グラボが4GBです.
この環境では一般的にはAI画像学習(追加学習)はできないといわれています.ほとんどの場合ではエラーで動きすらしないのではないでしょうか.

今回,とりあえずエラーが起きないプロントをなんとか見つけたので,そのプロントの公開と,実際に作ったモデルは使い物になるのかということを検証していきたいと思います.

実際のやり方についてはこのYoutubeを参考にさせていただきました.
この方法と違う点を中心にお話していきたいと思います.

なお,この記事はあくまで私がうまくいったやり方の紹介です.この方法によりいかなる損害が生じても責任は負いかねますのでご了承ください.

方法

Windowsの実行ポリシーの変更

上記Youtubeでは実行ポリシーの変更方法が書いてあります.
私がこれを行うとエラーが出てしまいました.
しかし,そのまま進めることができましたので,とりあえずエラーが出てもそのまま続けてみることをおすすめします.

sd-scriptsの導入

基本的には下記のURLのREADME.jaに書いてあるWindows環境でのインストールに沿って行います.

基本的には動画の通りに行うのですが,一番最後にaccelerate configを行った際に出てくる選択肢を変更しました.
そのままのものも含め順番に,this machine,No distributed training ,NO,NO,NO,1,NOを選びました.
この設定はあくまで動いたというだけなので,どういう意味なのかなどについては省略させていただきます.

素材の準備

今回私は自作のキャラクターの画像を作ることにしました.
前準備として,Vroidで作成したアバターをvrm方式で保存してあります.

このアバターをVRM Automatic Photographingでポージングし,計110枚の背景透過画像を作成しました.
ポーズを選ぶ際には,動きが激しすぎないこと(足を上げすぎていたり座っていたりしないこと),服から体がはみ出ていたり股などが見えるポーズなどではないことなどを確認しました.

作成した画像を縮小革命というソフトを使い,640×640に縮小しました.
この際に画像形式はPNG,保存名に書いてある「s-」を削除し連番にし,連番をクリックすると出てくる桁数を2に現在値を01にしました.こうすることで01から連番にした名前で出力されます.

キャプションの準備

動画の通りにキャプションを作成します.

キャプションの編集にはBooruDatasetTagManagerを使用すると便利です.
私は右側のALL tagsで学習させたい要素を削除しました.(×はその右にあります)

datasetconfogのコマンド

学習ステップ数を減らすために

num_repeats = 1

と変更しました.

commandlineのコマンド

以下のように変更しました.

accelerate launch
 --num_cpu_threads_per_process 1 train_network.py
 --pretrained_model_name_or_path="モデルの場所"
 --output_dir=outputsの場所
 --output_name=作った学習モデルにつけたい名前
 --dataset_config="datasetconfig.tomlの場所"
 --train_batch_size=1
 --max_train_epochs=1
 --resolution=512,512
  --optimizer_type=AdaFactor
 --learning_rate=1e-4
 --network_dim=128
 --network_alpha=64
 --enable_bucket
 --bucket_no_upscale
 --lr_scheduler=cosine_with_restarts
 --lr_scheduler_num_cycles=4
 --keep_tokens=1
 --shuffle_caption
 --caption_dropout_rate=0.05
 --save_model_as=safetensors
 --clip_skip=2 --seed=42
 --color_aug
 --mixed_precision=no
 --network_module=networks.lora
 --persistent_data_loader_workers
 --max_data_loader_n_workers=1

一応解説

  • 基本的には数字を小さくして学習ステップを減らしています.

  • モデルの場所はstable-diffusion-webui\models\Stable-diffusionの中です.入れていない場合はネットで探して入れてください.

  • optimizer_typeも変更しなくては動かなかったので変更しています.

  • ただでさえ学習ステップが少ないので,lr_warmup_stepsを削除します.

  • xformersを入れると軽くなるらしいですが,これも動かないので削除.

  • mixed_precision=fp16はsd-scriptを入れる際にNOにしたため,削除(NOにしないと動かなかったです).

  • メモリの使用も抑えたいため --max_data_loader_n_workers=1を追加.

そんなこんなの設定で何とか動きました.

実行

今回は
110枚の画像×繰り返し1回×エポック1÷バッチサイズ1=110ステップ
で学習を行いました.
この学習に約1時間15分かかりました.

作ったモデルから画像を生成してみる

outputsの中にできたモデルを,stable-diffusion-webui\models\Loraの中に入れます.

いつも通りStable Diffusion web uiを起動して,txt2imgでGenrerateの下にあるピンクの四角いマーク(花札?)をクリック.
Loraをクリック.
作ったモデルをクリックするとプロンプトに<lora:モデルの名前:1>と出ます.(もしモデルが出なければRefreshをクリック)
好きなようにプロンプトを入れてGenerateを入れれば出来上がり.
※<lora:モデルの名前:1>の1を小さくすればするほど(0に近づけるほど)学習の影響を弱められる(同じような画像しか出ない→数字を小さくする.関係ない画像になった→数字を大きくする)

結論:キャラクターは出力されない

今回のモデルでいろいろ値をいじりながら,プロンプトも変えながら推論を行いましたが,学習させたキャラクターらしきものは出力されませんでした.

おそらく学習ステップが少なすぎるのだと思います.

まとめ

今回,Vroidから作った画像から追加学習を行ってみました.
1時間15分の学習を行いましたが,キャラクターを生成することはできませんでした.
学習ステップを増やす必要がありそうです.

この記事自体が無駄なのかとも考えたのですが,このプロンプトにたどり着くまで学習を実行することすらできませんでした.
なので,学習にすら至らない方がいれば是非参考にしてください.

追記

うまくいった学習(ステップ数を増やしたりモデルを変えたり)についての記事を書きました.ぜひこちらもごらんください.


よろしければサポートをよろしくお願いします! これからの活動経費としてつかわせていただきます. でも無理はしないでくださいね.