見出し画像

Paperspace で 人物顔画像の LoRA 学習を行ったメモ SDXL / SD どちらも対応

忘れないうちに、作業のメモのつもりで書き残しておきますよ。

参考とした記事はこちら。

記事ではローカル環境での構築が前提となっているので、これを俺たちの Paperspace でも運用できるよう、ところどころアレンジをしながら作業を進めてみました。細かい技術要求などはいちいち検証しておらず、とにかく動けばいいや、という気持ちで進めてみたので、これを読んで自分もヤッてみようという人は参考程度に止めておいてくださいな。とりあえず動かしてみて、そこからいろいろと検証してみてね。

あ、ちなみに、私は実写系(写真)画像専門なので、イラストやアニメ表現に関しては全く試していません。


前提条件など

Paperspace のプランについて

Paperspace のプランは月額費用が発生して 15GB までのストレージが確保できる Pro プランを想定しとります。基本的な使い方については解説しないので、わからんところは適宜調べてちょうだい。

gdown について

モデルファイルは GoogleDrive からダウンロードして使う、という運用を想定しています。Notebook のアップロードを使うと、恐ろしく時間がかかるので。

前準備として、GD内のファイルを「共有」し、さらに「URLを持っている人にダウンロードを許可」の設定にしておいて、ダウンロードURLを取得しておきます。gdown を実行する際に、ダウンロードURLに含まれているIDが必要となるので、そいつを抜きだして gdown のコマンド内に書き込んでおきます。実際の使い方は後述の Jupiter Notebook ファイル内に記載しておきました。

ところで、この gdown が時々癇癪を起こして上手く動作しない場合があったりするのですよ。その場合は少し時間を置くか、共有リンクを設定し直してみるか、いろいろ試してみて下さい。gdown のアップデートをしてみるのもいいかもしれない。

JupyterLab について

私は基本的に使っておりません。一旦これに入ると、戻り方?止め方?がよくわからんのですよね。コイツを使ったほうが便利だよ、という方は、そちらを使っていただても構いません。むしろなんで便利なのか、ぜひ教えてほしいです。

トレーニング画像とキャプションファイルの準備

まずは最も肝となるトレーニング画像の準備をしましょうね。これの解説は、先程紹介した記事に詳しく載っております。

私は一人の人物の顔LoRAを作るために、20枚の画像を準備しました。Photoshop を使ってサイズを 1024x1024 に統一し、背景を削除し、見切れている部分は生成塗りつぶしで補完したりしてます。

キャプションファイルは、なくてもトレーニングすることは可能。トレーニング画像の内容から「こいつは学習してほしくない」という要素を指定するためのもの、だと理解しているので、無いよりはあったほうがいいかも。キャプションファイルの作り方は、次の記事で紹介されている、A1111 の機能拡張 ”tagger” を使う方法を参考にしました。

キャプションファイルは該当する画像ファイルと同じファイル名にしておく必要があるみたいです。例えば 1.jpg のキャプションなら、1.txt みたいに。

Paperspace の環境設定

まずはいつもの notebook の作成から。Start from Scratch で作成する前に、ページ下段にある Advanced options を選択。予め Python のバージョンを予め指定しておくための設定を行います。

START NOTEBOOK を押す前に option 設定をすること!

Python 3.10.* 系でないと都合が悪いようなので、Container の Name 欄に以下の文言をコピペしておきます。

cyberes/gradient-base-py3.10:latest


GPUは A4000 なんかが取れればいいけど、とりあえずどんなGPUでもいいから、そいつを使って設定だけを済ませるというのはアリかな。

Jupiter Notebook ファイルを導入する

からっぽの notebook に、次のファイルをアップロードする。

作業手順については、記載の内容に従っていれば多分大丈夫。操作などがわからない場合は、適宜なんちゃらGPTとかに聞いてみて。大まかな流れとしては、

  1. sd-script の関連ファイルをコピーしてきて、セットアップする

  2. accelerate config を実行する(コマンド手入力)

  3. gdown のアップデート

  4. 作業ディレクトリの作成、コンフィグファイルの作成

  5. コンフィグファイル config.toml の内容を書き込む(コマンド手入力)

  6. gdown を使って、GoogleDrive からベースモデルをダウンロード(一部手作業)

  7. トレーニング画像とキャプションファイルをアップロード(手作業)

  8. sd-script の実行(コマンド手入力)

トレーニングにかかる時間は、A4000、SDXL、エポック20で、1時間半くらいでした。SDだと40分くらいかな。


最終的なファイル構造


トレーニング画像、キャプションファイルは、ここに保存

LoRA ファイルの運用について

この記事を読んでいる方であれば、今更LoRAの使い方について説明するまでも無いと思いますので、私が実際に使ってみて気づいたことをいくつか書いておきます。

トレーニングに使用したモデルファイルを使用する

これは大前提な気がしますね。もしかしたら相性の良い別のモデル同士の組み合わせもあるかもしれないけど、同じものを選ぶのが無難っぽい。お好みのモデルファイルがあれば、それごとにトレーニングLoRAを用意するくらいでいいのかもしれない。

LoRAの重み付けについて

0.8 が限界っぽいです。これ以上上げると途端に顔画像が崩れてくる。もしかしたらトレーニング内容によっては条件が異なるかもしれないけど、私は今のところこれで固定しています。数値を下げると別の人になっちゃう。

インペイントは難しい?!

これについて現在進行系で試行錯誤してるのだけど、img2img の inpaint でトレーニングLoRAを使うのは、ちょっと難しいかもしれない。元となっているモデルが非inpaintだったりすると、範囲指定で生成を行うと上手く周りとなじまない(そこの範囲内だけで別の絵を描きがち)し、かと言って重みを薄くするとLoRAの効果も薄くなっちゃう。

対策としては、まずは txt2img か img2img でLoRA付きで作っておいて、細かい顔のパーツを一つずつインペイントで修正していく、という方法が、今のところ「なんとかなる」レベルで使えています。

インペイント用のモデルでトレーニングをしようとすると、何故かエラーで実行できないのですよね。どなたかこの点で解決方法をご存知でしたら、ぜひ教えて頂きたいです。

一旦LoRAを作っても、そこからパラメーター調整が必要となってきます。これは、まあ、楽しみながらいろいろとトライしてみたらよろしいのではないでしょうか。

あるいは、ガチャ気分で大量生産してみる?!

大量のバッチを当てて、一度に大量に画像を作ってみて、その中から比較的マシなものを選び、インペイントで修正する、というやりかたも良さそうです。もし高速のGPUが確保できたら、この方法もトライしてみてはどうでしょうか。


この記事が気に入ったらサポートをしてみませんか?