エロイ~ム エッサイム♪
えろい~む えっさいむ♪
我はLoRA学習したいなり!
いでよ! LoRAミノ子!!
要約
PaperspaceでのStable Diffusionにおけるkohya版LoRA学習方法を紹介します。……ご参照ください、ばかりでほとんど内容がないのですが、失敗談をお役に立てていただければ幸いです。
エラーが出ているあいだは藁をもつかむ思いでしたので、同じようなことでつまずかれているかたのご参考になれば嬉しいです。今回の教訓は「他人の言うことは素直に聞く」です。
はじめに
ようやくオリジナルキャラのLoRA学習ができました! ネットを見るとわりとみんな普通にやってるので、もっと何とかなるもんだと思ってました。まさか一週間もかかるとは……。
まずは上手くいった結果を紹介して、最後に失敗談を記載します。ほんと、いろいろあったんですよ。もはやできないかと思って何度逃げようとしたことか。……しかし! 諦めないで良かった!
↓Paperspaceのまとめ記事作りました。ほとんど自作LoRA学習まとめですけど。
↓Paperspaceの登録、Stable Diffusionで遊ぶ方法はこちらです。
祝! オリジナルキャラLoRA学習達成!!
参考にしたサイト
最初に参考にさせていただいたのは、あいおえおえかきのさんのサイトです。
ともかくフォルダ構造の説明が丁寧。ありがとうございます! 難しくてわかりませんけど、真似してやったらできました!
詰まった時に参考にさせていただいたのは、Zennさんのサイトです。
kohya版LoRAの他、pythonのバージョンに関する記事もあって勉強になりました! いやー、奥が深いですなぁ。
これらのサイトにすべて手順が書いてあるので、特に問題なくLoRA学習できるかと思います。このサイトで紹介することは何もないです。……失敗談はまとめて後述します。なんか上手くいかないって人はご参照ください。
あいおえおえかきのさんの言うことを聞いていれば、たぶん私もすぐにLoRA学習できていたんだろうと思います。変な所で手を抜いたので、Zennさんのサイトで勉強したり、いろいろやってなんとかなった、って感じです。教訓、他人の言うことは素直に聞きましょう。
LoRA学習の前に
LoRA学習の前に確認しなければならないことがあります。私自身がStable Diffusionに慣れていないのでイマイチな画像しか出てこない。もうちょっとマシにならないと学習成果確認も何もない。
ということでShigeruさんのサイトを拝見してちょっと勉強しました。
具体的に言うとVAEとネガティブプロンプトの設定です。ずっとPixAI.artのお世話になっているもんで、そういうの知らないんですよね。あ、あと今回のモデルはすべて「SukiyakiMixV1」です。容量の問題で「Anyshing V4.0」は泣く泣く削除。
プロンプト、元画像は前回、前々回と同じです。ようやく鮮やかなAIイラストを生成してもらえるようになりました。少なくとも死神ではないので満足です。
LoRA学習画像の準備
当サイトが準備したのは、VRoid Studioで作成した3Dキャラクター、ミノ子の画像です。
上記はその例です。背景なしのものは色を変えましたし、背景ありは全部違う背景です。表情、ポーズも様々で、後ろから見た画像も準備しました。サイズは512×512pixelで統一しています。
背景なしで全身がおさまっている画像が六枚、Dream by WOMBOのAIイラストを背景にして撮影した画像が二十四枚、計三十枚用意しました。これらを所定のフォルダに保存して、プログラムを走らせれば学習完了です。
LoRAミノ子登場!
LoRAの使い方についても、あいおえおえかきのさんが書かれています。またShigeruさんのサイトにもLoRAについての記述があります。所定のフォルダに学習結果の「.safetensors」を保存し、プロンプト冒頭にLoRAの記述を追加すればOK。
プロンプトはLoRAの他「girl 1, smile」のみ、元画像なしです。「epoch」違い三種類のLoRAを用いて、「強調」を変化させた画像は以下のとおり。
……おおぉ、出来てるっぽい。まず気になるのは「epoch : 7、強調 : 0.6」左側の黄色い物体ですけど、問題はそこではないです。
黒髪ショートカット、白いローブは……、まあおおむねイイ感じ? 胸元のリボンと左胸の校章は難しいっぽいですが、これも再現率はそこそこです。リボンの色はひとつもかすってませんけど。
個人的に面白いのが「強調:1」の髪の毛のハイライトの入り方。めっちゃVRoidっぽいです。さらに背景の不思議感までも再現されてます。正直、袖の内側の手が見えなかったらどうしようかと思ったんですけど、そこは空気を読んでくれました。
その他プロンプトを追加して遊んでみました。リボンと校章の両立がムズイ。下手すると両方なくなってバスローブみたいになります。
これはかなり光明が見えているんじゃないかなー、と思ってます。オリジナルキャラのLoRA学習は貧乏人でも可能、ってことはラノベの挿絵として、これまで以上に使い勝手が良くなりそうです。
VRoidキャラクターを作ればLoRA学習できますし、なくてもオリジナルキャラに近いイメージのAIイラストを集めれば学習可能。これってかなりハードル低くないですかね? わりと誰でもできそうな感じです。
この方向でもうちょっと試行錯誤してみます。……何はともあれ、LoRA学習できて良かった!
*Paperspaceは誰かの紹介で始めたほうがお得です。詳しくは「PaperspaceでWebUIなStable Diffusion」をご参照ください。以下のリンクから登録すると当サイト経由ということで割引コードが適用されます。
クレジットカード登録が気乗りしないならVプリカの使用をおすすめします。貧乏性でVプリカの手数料が気になる or ポイ活的に補いたいって人は、ポイントインカムからVプリカに交換して資金を調達する方法もあります。
失敗談
kohya_SD_PaperSpace.ipynbの入手
あいおえおえかきのさんのサイトを参考にして、まずつまずいたのがここです。素人は年寄りと同じで、何もないところでもつまずくんです。
コードをコピーしてメモ帳に貼りつけて、拡張子を「.ipynb」に変更。しかし、Paperspaceにアップロードしたファイルが読めません(左画像)。何か変な操作をしてしまっている感アリアリです。
考えた末、コードをコピーするのではなく「Open in Colab」で開くことにしました(右画像)。あ、もちろんGoogle Colabは設定済みですよ。
以前使った経験がここで役に立つとは思いませんでした。
Google Colabでファイルが開いたら「ドライブにコピー」ボタンを押します(左画像)。さっきまで「kohya_SD_PaperSpace.ipynb」だったファイル名の後ろに「のコピー」と追加されます(真ん中画像)。
Google ドライブを見ると「kohya_SD_PaperSpace.ipynbのコピー」があるかと思います。これを自分のパソコンにダウンロードして、Paperspaceにアップロードです。これでPaperspaceでエラーが出ずに読めるようになりました(右画像)。
ここではPaperspaceの画面上でフォルダを選んで右クリック⇒ファイルをアップロードしました。後述のGoogle ドライブからのダウンロードではないですが、特に問題は起こりませんでした。
最強の敵登場
その後特に問題なく最後の一文「accelerate launch~」まで進みました。なんだ、けっこうイケるじゃん、とか思ってました。ここで最強の敵が登場します。
左側が最初のエラー「RuntimeError: self.size(-1) must be divisible by 2 to view Byte as Half (different element sizes), but got 11316981」です。いちおう文句を言いながらも、この後しばらく動いてくれます。
次がヤバい。「CalledProcessError: Command ‘[‘/usr/bin/python3.9’, ‘train_network.py’, ‘–pretrained_model_name_or_path=/notebooks/models/anything-v4.0-pruned-fp16.safetensors’, ‘–train_data_dir=/notebooks/trainminokoschool’, ‘–reg_data_dir=/notebooks/regminokoschool’, ‘–output_dir=/notebooks/dreambooth’, ‘–resolution=320,960’, ‘–train_batch_size=1’, ‘–learning_rate=8e-5’, ‘–max_train_epochs=1’, ‘–save_every_n_epochs=1’, ‘–save_model_as=safetensors’, ‘–clip_skip=2’, ‘–seed=42’, ‘–color_aug’, ‘–network_module=networks.lora’, ‘–keep_tokens=7’, ‘–enable_bucket’]’ returned non-zero exit status 1.」と来ました。
これはほとんど自分で打ち込んだコマンドと同じものです。ともかく、最後の一文がダメっぽい。解決を目指し、試したことは以下のとおりです。
- フォルダ名、ファイル名の確認。
- 「–num_cpu_threads_per_process 12」の変更。借りていた仮想マシンのCPUに合わせて「12」を「8」に。
- 「–resolution=320,960」の変更。「512」とか「512, 512」とかに。
- 「identifier」と「class」が悪い? 「min」と「okoschool」なんだけど「min」って一般的だよね。あいおえおえかきのさんの「identifier」と「class」を完全に拝借。
- 検索すると同じようなエラーがPythonのバージョン変更で解消している。Zennさんの記事を参考にしてPython 3.10でやってみる。
- 何が何だかわからないのでnotebookを一度消して新しく作り直す。あいおえおえかきのさんの方法も、Zennさんの方法も同じように試す。さらには混ぜてみる。
この他にも色々試しましたがエラーは解消せず。エラーの原因が複数あって、上記のうち何かが正解だったかもしれないですけど、少なくとも「CalledProcessError:~」は出続けました。
モデルファイルをGoogle ドライブからダウンロード
それまでずっと、フォルダを選んで右クリック⇒アップロードでもってモデルファイル「anything-v4.0-pruned-fp16.safetensors」をPaperspaceに送っていました。
色々やっているうちに「ファイルが上手くアップロードできなかったかも」みたいなウィンドウが出てきたので、試しにGoogle ドライブからのダウンロードをおこないました。あいおえおえかきのさんが推奨している方法です。
この方法に関しては当サイトでも前回紹介しています。Google ドライブ経由でPaperspaceにモデルを持っていくわけですよ。
フォルダは違うので、イイ感じに書き換えていただく必要がありますけど、Hugging Faceからのダウンロード、Google ドライブでの設定など書いてありますよ。
これによって「CalledProcessError:~」が出なくなりました! どうやら私の場合、モデルファイルがおかしかったために上手くいかなかったみたいです。
余裕ができたら、最初から検証してみようかと思っています。けど最後のほうは混ぜこぜでいろいろやったので、同じことをやろうとしてできないってのが怖い。それにしても難しい世界ですなぁ。
……ああ、「アップロード三十分くらいかかるって言っても、そのあいだご飯食べてればいいや」なんて思わず、あいおえおえかきのさんの言うことを聞いておけばよかった。
まとめ
PaperspaceでのStable Diffusionにおけるkohya版LoRA学習方法を紹介しました。……ご参照ください、ばかりでほとんど内容がないのですが、失敗談をお役に立てていただければ幸いです。
エラーが出ているあいだは藁をもつかむ思いでしたので、同じようなことでつまずかれているかたのご参考になれば嬉しいです。今回の教訓は「他人の言うことは素直に聞く」です。
……さて、それではブラッシュアップしていきますかね! 苦労した分だけ嬉しさもひとしおです!!
↓AI4コマ漫画にLoRAミノ子登場の可能性!? ……ちょっと気が早いですかね。
↓少なくとも貧乏人でもオリジナルキャラのLoRA学習が出来ました!
↓この記事も書き換えが必要? 嬉しい悲鳴ですなぁ。
↓学習したオリキャラLoRAファイルはPixAI神に再現してもらうこともできます!
↓LoRAキャラクターを作成できても、こういうのは難しい。……どうするんだろう?
↓epoch=20までやってみましたけど、よくわかりませんでした!
↓あれ? なんかどんどんダメな方向に進んでいるような……。
↓画像からキーワードを抽出すれば再現性が高まるのでは?