こんな方にオススメ!
1.LoRA (LyCORIS) を使うことはできるから、オリジナルの LoRA (LyCORIS) を作ってみたい!
2.でも、TrainTrain, kohya-ss で作れなかった…。
3.StableMatrix で入れられる OneTrainer って何?
この記事を最後まで読むと…
補足事項
・OneTrainer の使い方は無料で読めます。
・本記事の内容は 2024/10/21 現在の情報です。
・グラボは RTX 4070 SUPER を用いました。
・本記事は SDXL モデルで手順を紹介していますが、他モデルでも OneTrainer は対応しています。
・本記事はあくまで OneTrainer の使い方を紹介することが目的です。作成したつくよみちゃん LoRA (LyCORIS) の配布はいたしません。
・本記事に掲載したつくよみちゃん生成画像を素材として用いることは禁止とします。
きっかけ
TrainTrain で LoRA を作ってみようとした
モデルマージでオリジナルの SDXL モデルも作れたし、LoRA も自作してみよう!
TrainTrain を使うと楽らしい。
オリジナルマージモデルで、いざ学習開始ぃ!
ん?
では、kohya_ss で
かつ作ってみたら効果が出ないこともありました…。他にLoRAを作れるツールは無いものか。
というのがきっかけです。
1. OneTrainer?
StabilityMatrix で導入可能
困りながら StabilityMatrix の Add Package の Training を見てみましたら、kohya_ss と並んで OneTrainer というものがありました。ググってみると、SDXL, SD1.5 はもちろん flux の LoRA も作れるツールだそうなのでインストールしました。
日本語の情報は少ないが
画面が見やすいのはいいのですが、日本語の情報は検索しても 10 件あるかどうかぐらいしかヒットしません。
ですが、公式の wiki を見るとクイックスタートガイドがあったり、タブの順番どおりに説明が書かれていたりと、こちらも見やすく作られています。
これならば、翻訳サイトにコピペして翻訳すればやっていけそうです。
2. OneTrainer の説明
クイックスタートガイド
※DeepL で訳した文を元にした意訳を記しています。
※長いので、把握しておくと良さそうな部分だけ載せてます。
タブごとの説明~画像を添えて~
※DeepL で訳した文を元にした意訳を記しています。
※長いので、把握しておくと良さそうな部分だけ載せてます。
Training タブはほとんどコンフィグ通りの設定で良いと思われるかつ私が機械学習の専門家でない故に意訳できませんので大半を省略します。ご容赦ください。
Resolution の値を 768 にしたのは、以下のサイトで "768か1024に" とあったからです。
sampling タブと backup タブは wiki に中身が書かれていないページしかなかったので、私の設定画面を貼り付けるだけにします。
Tools タブ と Embedding タブは今回使っていないので省略します。
LoRA rank と alpha の値の参考にしたサイトは以下の 2サイトです。
長々と書きましたが、基本的に #sdxl 1.0 LoRA というプリセットの設定のままで大丈夫だと思います。
①各種データ保存用ディレクトリ、②使用するモデル、③conceptsタブでの設定、④学習率 (Learning Rate), エポック数, 学習する画像の解像度、⑤サンプリングタブでの設定、⑥バックアップタブでの設定、⑦LoRA rank と LoRA alpha がその時その時の学習に応じて変えるであろう設定です。変えるときは先の 2 サイトを参考にすることをオススメします。
3. 学習素材の準備
※OneTrainer の設定だけで大分長くなったので、素材用意の過程で使ったフリーソフトや StableDiffusion Web UI の拡張機能の使い方は割愛します。
つくよみちゃん素材の入手
つくよみちゃんはフリー素材キャラクターです。公式サイトの "画像生成AIに対するつくよみちゃんプロジェクトの方針及びガイドライン" を見ますと、企画者である夢前黎 様がご用意されたイラスト素材および つくよみちゃん公式3Dモデル タイプA は "無制限に加工可能かつ i2i や学習に用いて良い" とあります。ということなので、ありがたく拝借しました。かわいいつくよみちゃんが生成できるように活用いたします。
つくよみちゃん素材の水増し
枚数が心許ない気がしたので、フリーの画像編集ソフトである PhotoScape X を用いて画像を回転させたり切り出したりして枚数を増やしました。
また、和服のイラストは隠れているところが多いので、i2i の inpaint でいい感じに補完された画像が出るまでガチャりました。
用意した素材に自動でタグを付け、タグを消す
Stable Diffusion web UI の拡張機能である stable-diffusion-webui-dataset-tag-editor で自動でタグを付けしました。Interrogators は DeepDanbooru と wd-v1-4-vit-tagger を使いました。
"TsukuyomiChan" というトリガーワードを全て画像のタグに付け加えてから、タグを書き込んだテキストファイルを作りました。
これらから、つくよみちゃんとして学習させたい要素のタグを消します。
ここで、LoRA 作成あるあるだと思いますが、自動でついたタグのうち、どれを消したら良いのでしょうか。
私が色々調べた中ではエマノン様が書かれた記事の解説が一番しっくりきました。
「用意した画像」と、「用意した画像に対応するテキストファイルに書かれたタグで生成された画像」との差分が学習されるというイメージのようです。
つまり、
テキストファイルから学習させたい要素のタグを消しておく。
タグがないので学習したい要素を含んだ画像が生成できなくなる。
入れても生成画像に影響を与えない (意味を持たない) ワードを仕込んでおくと、「用意した画像とタグから生成した画像の差は、このワードによって引き起こされてるんですね!分かりました!覚えます!」となる。
意味を持っていなかったワードに差分が学習され、トリガーワードに進化する。
トリガーワードをプロンプトに入れると、学習したことを出してくれる LoRA が出来上がる。
といった感じなのでしょう (あくまでもイメージです)。だから、「学習させたい要素のタグを消しましょう!」とよく言われてるんですね。
というわけで、今回はつくよみちゃんをつくよみちゃんたらしめている要素である (と私が思っている)「blue eyes, blue hair, long hair, flower, hair flower, japanese clothes, kimono, twintails, white kimono, obi, pink kimono, wide sleeves, floral print, print kimono, pink bow, pink flower, puffy sleeves, bow, yukata」のタグを消しました。
タグを書き込んだテキストファイルを作成して、つくよみちゃんの素材フォルダが出来上がりました。
4. concept をセットしてスタート!
general タブ
OneTrainer の concepts タブを開き、add concept を押します。
追加された concept (虹色の玉) をクリックします。
素材フォルダのパスを general タブ内のフォルダ指定部分に書き込みます。画像が読み込まれたら、concept のサムネイルが虹の玉から変わるはずです。
他の設定については wiki から引用します。
※DeepL で訳した文を元にした意訳を記しています。
※把握しておくと良さそうな部分だけ載せてます。
image augmentation タブ
image augmentation タブでは、画像を回転させたり、色の変化を反映させたりしてから学習に使うように設定できます。
Random を有効にすると文字通りランダムに反映します。Fired を有効にすると入力した設定を反映させたままになります。Update Preview をクリックすれば、どのように変わるのかが見られます。お好みで調整して反映してください。
Update Preview で見られない (と思われる) ものについては wiki から引用します。
※DeepL で訳した文を元にした意訳を記しています。
「回転させられるなら、何で予め回転した画像なんか作ったの?」と思われることでしょう。
OneTrainer による回転では、画像が無くなった部分の背景が真っ黒になります。どうもこの黒い部分も学習されるようで、角から辺にかけて黒い部分が入った画像が生成されるようになったことがありました。
なので、今回は回転済みの画像を予め作ることにしたというわけです。
設定次第では黒い部分は無視されるのかもしれませんが、2024 年 10 月現在の私は平気になる設定を把握できておりません。
Text Augmentation タブ
text augmentation タブではタグをシャッフルするかを設定できます。プロンプトの順番を変えると生成される画像も少し変わりますので、シャッフルした方が良いのではないかと思います。
↓DeepL で訳した文を元にした wiki の文の意訳
上記 3. で記した設定と concept のセットが済めばあとは Start Training をクリックするだけです!
学習開始ぃ!
スタート後に step 数が刻まれ始めてから、右下の Tensorboard をクリックすると Web ブラウザが起動して学習の進み具合が見られます。Sampling タブで設定した保存フォルダには、設定した間隔毎に生成された画像が保存されているので、それを見ても進み具合が分かります。
TrainTrain では私のマージモデルをベースにすると nan と表示されましたが、OneTrainer では問題なく学習が進みました。
ちなみに、今回用意した画像でバッチ数 4 の設定では、1 エポックあたりのステップ数が 6 になりました。エポック数は 300 にしましたので総ステップ数は 1800 でした。かかった時間は、RTX 4070 SUPER で 50 分でした。
1 エポックあたりのステップ数はどうやって算出されているのかは分かりません。もしかすると、今回の設定では、弾かれた学習画像があったのかも知れません。
算出方法が分からないので、「一度スタートして 1 エポックあたりのステップ数を確認したら即止めて、改めてエポック数を設定する」という手順で総ステップ数を変えました。
なお、これまでの経験から「1800 ステップも踏めばいけるやろ」という感覚になっているので、1800 ステップになるようにしました。200 ステップごとにバックアップしているので、やりずぎていたとしても安心です。
5. 完成した LoRA (LyCORIS) の確認
OneTrainer で LoRA (LyCORIS) が作れた!
200 ステップ毎にバックアップをとっていましたので、それらと合わせて効きを確かめました。
生成は StabilityMatrix で導入した Stable Diffusion web UI by AUTOMATIC1111 で行いました。
思っていたより大分低ステップの時点でつくよみちゃんを覚えてくれていたようです。むしろ、1800 ステップまで学習させた LoRA (LyCORIS) は i2i で作った素材画像のつくよみちゃんがほぼそのまま出てきていますので、過学習してしまったようです。あってよかったバックアップ。
着せ替えできるかどうかも試しました。
これらの生成画像を見た感じでは、髪飾りがちゃんと出ているかつ元画像に近すぎないつくよみちゃんが生成されているので、600 ステップの LoRA (LyCORIS) が一番良さげですかね。
ここまで読んでいただきありがとうございました。
これで OneTrainer を使えるようになりました!🙌
ちなみに、ずっと "LoRA (LyCORIS)" と書いている理由ですが、ここから先の手順によって「OneTrainer で作られるのは LyCORIS のようだ」と分かるからです。 分かる人は目次だけで理由が分かるかもしれません。
もっとこだわりたい!
LoRA (LyCORIS) は完成しましたが、ここでこの 2 枚を比べてみましょう。
背景の絵柄は変わってなさげですが、つくよみちゃんの絵柄は大分違いますね (特に頭)。明らかに学習に使った 3D モデル画像の影響を受けています。
キャラが出るのは良いけど、元のモデルの絵柄が消えるのは嫌だ!
と思われている方は、この先の有料部分を是非ご覧ください。
有料部分の手順をこなすと…
このように、3D モデルの頭感が無くなります!頭だけでなく、襟元のリボンも変わってますね!
この先では、生成に役立った拡張機能やプロンプトの紹介もしますので、ご興味があれば是非!