← Back to スタジオ真榊

Pixiv Fanbox

キャラLoRA学習が理解る!最初に読んでほしいローカル学習入門

Published 10/31/2025, 04:07:39 PM · Edited 02/17/2026, 01:23:40 PM

キャラLoRA学習が理解る!最初に読んでほしいローカル学習入門







こんばんは、スタジオ真榊です。今回は、2025年10月時点のキャラLoRA作りについての知見をまとめた4万字超の特集記事です。スタジオ真榊ではこれまで、1枚しかないイラストからデータセットを量産してキャラLoRAにしたり、着替え可能なタギングについて掘り下げたりといったLoRA特集をたくさん連載してきましたが、いったんそれらを総まとめして、キャラLoRAの学習に必要な知識を網羅的に理解できる大型記事としました。


学習ではなく、「LoRAとは何で、どうやって使用するか」といった生成の基本はこちらをご参照ください。


この記事では最低限Stability MatrixでSDwebUI「reForge」を動かせる人向けに、ローカルにおけるLoRA学習の環境構築のやり方を解説しています。具体的には、人気のillustriousXL系モデルの学習を念頭に、


①学習用のキャラ画像を数枚~数十枚準備して、

②「WD1.4tagger」と「Dataset tag Editor」という拡張機能を導入して「タグ付け」をし、

③「Kohya LoRA Param GUI」という学習用アプリを使って、

④この記事で配布するキャラ学習用プリセットで簡単学習する


…というところまでの流れと必要知識を一気通貫でまとめました。その上で、できたLoRAで生成実験を行い、LoRA学習時のタグ付けや各種設定をどのようにすべきかなどを考察してみたいと思います。

目次

1.キャラLoRAの基礎知識

  ・「学習段階」の著作権侵害ポイント

  ・学習に必要な機材

2.データセットを作ろう(画像集め編)

  ・キャラLoRA学習に適したデータセットとは

  ・画風も覚えるか?覚えたくないか?

  ①既存キャラクターの場合

  ②オリジナルキャラクターの場合

3.画像はどこに保存する?

4.「正解」のバリエーションを作るには

  ・学習失敗につながる要注意画像

  ・「正解」が一枚しかないときは?

5.画像のサイズ・ファイル名をそろえるには

6.タグ付けの方法

  ・一括タギングできるTaggerを導入しよう

  ・高性能タガー「wd-EVA02-Large-v3」導入法

7.WD1.4taggerの使い方

  <各パラメータの意味>

8.タグ付けについて

  ・トリガーワードと「集約」

  ・「タグ重複」について

  ・「1girl」「solo」「画角タグ」について

9.Dataset tag Editorの使い方

  ・タグの一括削除

  ・"すべての変更を保存"を忘れないこと!

10.Kohya LoRA Param GUIの導入

  ・インストール手順

  ・プリセットをダウンロードしよう

11.Kohya LoRA Param GUIの使い方

12.学習開始

13.できたLoRAをチェック

  ・過学習チェック

14.データセットとタグ付けの修正

  <結論:U-netのみが無難>

【コラム】4枚だけで生成は可能?

  ・avr_lossをチェック

  ・生成テスト

終わりに

1.キャラLoRAの基礎知識

LoRAにもいろいろありますが、最もメジャーで誰もが利用したことがあるのがキャラLoRAでしょう。キャラLoRAはその名の通り、あるキャラクターの容姿を学習しているLoRAで、既存モデルが学習できていない新しい作品のキャラクターや、マイナーなキャラクター、オリジナルキャラクターなどを安定的に再現するためのものです。

有名作品のキャラは基本的にCivitaiですぐに流通する(▲)ので、わざわざ自分でデータセットを用意してまで作らなくてもよいかもしれませんが、そこまで有名でないキャラクターやオリジナルキャラクターを一貫性を持って再現できるようにしたい場合、自分で追加学習をするしかありません。


・「学習段階」の著作権侵害ポイント

キャラLoRA作りで初めて画像生成AIの学習に触れるユーザーが多いと思いますので。改めて注意ポイントをおさらいしておきます。(こちらの記事のかんたん振り返りです)


まず、学習でなく生成段階での著作権侵害ポイントから振り返っておくと、こちらは「類似性」と「依拠性」の両方を満たした画像になっていないかということでした。すなわち、既存の著作物(他者の著作権で保護されているもの)に意識的に依拠して、表現上の本質的特徴が類似したものを作る行為は、手描きでもAIでも著作権侵害になる…というのが基本です。一方、今回問題になる学習段階でやってはいけないことを理解するには、日本の著作権法における「享受」の概念を理解する必要があります。


享受というのは、著作権法第30条の4にある"著作物に表現された思想又は感情の享受"という部分のこと。文化庁は以下のように説明しており、享受目的が併存していた場合、著作権者に許諾を取らないと画像収集行為が違法になるという整理をしています。


(▲文化庁「AIと著作権について」10pより引用)


詳しくは「AIと著作権について」を熟読していただくとして、理解しておきたいのは「AI学習のための画像収集を無断でやっていいのは、学習した著作物と同じものを出すのが目的ではない(生成物に"変容性"がある)から。学習元の著作物がまんま出てくる(変容性がなく"享受"できる)ようなものを無許諾で作れちゃ当然まずいよね」ということです。極端なことを言えば、ドラゴンボール全巻を学習していて、注文すると1ページずつそのまんま生成できるモデルがあったとしたら、それはもうドラゴンボール全巻を無断で配っているのと同じだよねということですね。


先日OpenAIのSora2が日本のアニメをそのまんま出せることで物議を醸し、結局すぐにナーフされましたが、このように国内の権利保護団体から抗議声明が出される事態となりました。

記事本文には「Sora 2のように特定の著作物が出力として再現・類似生成されている状況においては、学習過程での複製行為そのものが、著作権侵害に該当し得る」という団体の見解が書かれていますが、「し得る」というところがポイントで、じゃあ出力がどこまで「そのもの」だったら権利侵害で、どこまでが無許諾でOKなラインなのかは裁判所が判断するところです。


しかしながら、我々学習をこれからするユーザーにとっては、裁判所で勝てるかどうかよりもまず「訴えられないこと」が最重要。つまり、あからさまに学習した原作そのものなタッチだったり、原作のシーンをそのまんま再現してしまうようなLoRAを作った場合、そのデータセットの収集行為そのものが違法になる恐れがあるーというのはまず理解しておきましょう。


このあたりは文化庁の「AIと著作権に関するチェックリスト&ガイダンス」によくまとまっています。以下の③ですね。

いわゆる「狙い撃ちLoRA」を学習する場合、「作風だけではなく創作的表現まで出力することがあり、そうしたLoRAを作る目的での無許諾学習(に伴う画像複製行為)は享受目的が併存していて違法ですよ」ということが書かれていますので、自分のこれからやるデータセット収集はどういうLoRAをつくる目的なのか、今一度よく確認しておきましょう。


・学習に必要な機材

自分のパソコンを使った学習には、生成以上にパワフルなVRAM容量を備えたグラフィックボードがほしいところです。具体的に言うと、RTX3000番台~4000番台、VRAM12GB以上の製品から、ストレスなく学習を楽しめるようになるという感覚です。シンプルなキャラLoRAであれば、RTX3060(VRAM12GB)で30~40分程度、RTX4080(VRAM16GB)で20~30分程度で学習できます。


現在流通しているグラボでいうと、ハイエンドはRTX 5070Ti(VRAM16GB、12万円台~)以上、ミドルクラスでRTX 5060Ti(16GB、7万円台)あたり、低予算ならやはりRTX3060(12GB、3万円台後半)が選択肢かと思います。初めてで予算が限られているなら3060一択ですが、AIイラストは学習ができるようになるといよいよ楽しくなってきますので、ここを読んでいるならちょっと頑張って16GBを選択することをおすすめします。年末には24GB搭載の新型「RTX 5080 Super」や「5070 Ti SUPER」が投入されるという噂もありますので、悩ましいところですね。


2.データセットを作ろう(画像集め編)

では、さっそくキャラLoRAの作り方に入っていきます。まずは「何のキャラLoRAをどんなバリエーションで作りたいか」を考えるところからです。オリジナルキャラクターであれば自分の手で描くか、画像生成で少なくとも1枚はそのキャラクターの全身デザインが分かるイラストを準備する必要がありますし、既存のキャラクターであれば、その容姿を捉えた画像をウェブ上から収集することになります。また、複数の衣装や髪型バリエーションを持つキャラクターの場合、そのバリエーションを学習するかも問題になります。


後者の場合、文化庁の「ガイダンス」の下記ページを参考に、リスクの高いデータセット収集は行わないよう気を付ける必要があります。特に、生成結果を見たら「誰が権利を持つ何を学習させたか一発で分かってしまう」ような場合は高リスクとなります。Sora2は思いっきり日本の公式アニメを学習させていることが絵柄や音声、背景などから丸わかりでしたね。



・キャラLoRA学習に適したデータセットとは

画像収集のポイントは次の5つ。


①追加学習させたい被写体・概念が大きく鮮明・共通に描かれていて、

②学習させたくない「余計な概念」が映り込んでおらず、

③角度や表情、性別などさまざまなバリエーションがある画像を、

④できるだけたくさん集めること。

⑤迷ったら量より質!(最重要)

           ▲キャラLoRA用データセットの例


キャラLoRA学習は1枚からでも行うことができますが、全身の一貫性があり、ポーズ変更や表情変更などいろいろなプロンプト指示にきちんと応えられるまともなLoRAにしたい場合、15枚くらいは欲しいところです。また、背景にも影響するLoRAにはしたくないので(例えばのび太くんを生成するたびにふすまや机のある彼の部屋が生成されると困る)、大半は学習前に切り抜いて白背景にしておくのが基本です。キャラLoRAの場合、他のキャラが映り込んでいる画像も悪影響を及ぼすので取り除きましょう。


LoRAは、ベースモデルに指定したcheckpoint(例:illustriousXLやWAI SDXL等)と

データセットに入れた画像を見比べて、「差異」をタグとともに学習するものです。例えば、1girlとだけ書かれた女の子の画像をデータセットとして与えると、「1girlってこういうものだと思ってたけど(ベースモデルの概念)、このLoRAが適用されて1girlって言われたらこういう風(データセットの概念)に補正するね!」という仕組み。よって、キャラLoRAを作る際に背景が全て海だと、「キャラ+海背景LoRA」になってしまいやすいわけですね。タギングをうまくやることで多少はましになりますが、基本的に「データセットに共通するものは学習される」という認識を持っておきましょう。


つまり、顔のアップが大半を占めていると、顔がやたらアップで描かれやすいキャラLoRAになってしまい、普段使いが難しくなってしまいます。こちらのスクリーンショットは、「cowboy shot」指示をするとほとんどこの画角になってしまう失敗LoRAの例。full bodyなら全身が、cowboy shotなら腰から上が、portraitなら胸から上がきれいに指示通り出るLoRAにしたいので、それらのバランスが取れたデータセットにする必要があります。

また、上の画像のようにすべて黒デニム+白T+ブラ紐見えの服装だと、生成時もその服装で描かれやすいLoRAになります。常にその服装で描いてほしい場合はそれが正解なのですが、プロンプト指示で別衣装に着替えさせたい場合は、データセットもできるだけバリエーションのある服装で準備したほうがよいでしょう。


・画風も覚えるか?覚えたくないか?

最初に意識しておきたいのは、「これから作るキャラLoRAには画風も覚えてほしいのか?」「それとも画風はいっさい覚えてほしくないのか?」ということです。皆さんそれぞれローカル生成で使っているcheckpointは違うと思いますが、せっかくできたLoRAがデータセットの画風に引っ張られていると、そのキャラLoRAを使ったときだけ普段使いのcheckpointと違う画風になってしまって困りますね。では、画風はすべて排除したほうがいいのでしょうか?


ここでちょっと、ドラゴンボールの悟空のキャラクターデザインを思い出してみましょう。悟空のあの特徴的な目は、果たしてキャラクターデザインなのでしょうか?それとも、故鳥山明先生の画風なのでしょうか?

さまざまな有名作家さんの手によるこちらのイラストを見ていると、鳥山先生の絵に大きく寄せたものもあれば、ご自身の普段の絵柄で描いたものもありますね。もしこのように、ツンツンした髪の毛や山吹色の胴着などは共通しているけれども、顔立ちや頭身などはバラバラの画像群でLoRAを学習させたら、我々が悟空と感じるキャラLoRAではなく、そのモデルの素のキャラクターが悟空のコスプレをしていると感じるLoRAになるでしょう。


このことを突き詰めていくと、キャラクターによって、画風と強固に印象が結び付いたキャラクターと、そうではないキャラクターがいることにも気付きます。例えば初音ミクはさまざまな画風で描かれることが多く、原作と全く違う画風だったとしても髪型やニュアンスで「ミク本人だ」と感じてもらいやすいキャラクターですね。一方、クレヨンしんちゃんのように画風とキャラデザが強固に結び付いたキャラは、画風や頭身がちょっと変わっただけで「別人」に見えてしまいそうです。


AIはキャラクターも画風も背景も区別がつかないので、学習時は人間がデータセットによってその違いを教えてあげないと、思ったようなLoRAを作ることができません。キャラLoRAを作る場合は、顔立ち以外の髪型や服装だけを似せる「コスプレLoRA」程度でよいのか、それとも顔立ちも含めてがっつり原作に寄せる「本人LoRA」にするのか、もしそうならどれくらい「寄せる」のかを考えてデータセットを準備する必要があります。


有名作家たちの悟空のように画風をばらけさせたものを覚えさせれば前者に、すべて公式の悟空で覚えさせると後者になります。そしてSora2を見ていると分かるように、後者は「取り扱い注意」ということになります。



では、どうやって白背景かつバリエーション豊かで、普段のcheckpointの画風に影響の少ないデータセットを準備するべきでしょうか。作りたいのが既存キャラの場合と、オリジナルキャラの場合で分けて考えてみます。


①既存キャラクターの場合

既存キャラの場合は、そのキャラクターがきれいに描かれた全身図をまず入手すべきです。データセットはウェブから収集したものだけで構成してもよいのですが、すべて公式画像だけで集めた場合、「キャラLoRA」ではなく「公式絵柄+キャラLoRA」になってしまうので、絵柄はできるだけばらけさせたほうがよいとされます。よって、イラストサイトなど無料で公開されている(誰でも見られる)ものから収集することになりますが、ウォーターマークなどで「AI学習禁止」と明確に意思表示されているものは避けたほうが良いでしょう。


日本の著作権法上、「AI学習禁止」と掲示することで著作30条の4が認める無許諾学習を違法にできるかどうかはこの際関係なく、キャラLoRAを作るにあたって、そうしたリスクを冒す必要はさほどないのが理由です。いまはリファレンス機能によってある程度似通った画像(同キャラ別ポーズ)を出すことができますし、いったんできたLoRAの性能がいまいちだったとしても、その不完全なLoRAでデータセットを水増しすることも簡単にできるようになりました。


NovelAIのリファレンス機能「キャラ参照」についてはこちら。絵柄が多少ぶれるので、むしろ絵柄への影響を少なくしたいキャラLoRA作りには向いています。


ちなみにSeedream4やNanoBananaも1枚の画像からさまざまなバリエーションを作ることができますが、NovelAIと違って規約上、生成画像を別のモデルの学習に使うことが禁じられていますのでご注意ください。


キャラLoRA用にウェブ上から画像を収集する際は、特に「余計な概念」の写り込みに気を配りましょう。背景は以下の方法で消したほうがよいですし、他のキャラクターが映り込んでいる画像は1枚も入れないようにします。別キャラ部分をトリミングするか、不採用にすべきです。データセット全てが1girl(もしくは1boy),soloの状態であるのがキャラLoRAの基本です。


・背景の消し方

画風LoRAや背景LoRAを作りたい場合は別ですが、キャラクターや服などの「前景」を追加学習させたい場合、背景を削除してしまったほうが品質がよくなります。Photoshopの「背景を削除」機能は非常に高性能でオススメですが、Adobe納税者ではない方はこちらのSDwebUI拡張機能「RemBG」を使うとよいでしょう。導入方法はこちらのURLを「URLからインストール」に放り込むか、拡張機能リストの中から「stable-diffusion-webui-rembg」を見つけてインストールするだけです。


インストールすると、「その他(Extra)」タブにこのようなメニューが追加されています。一番左のプルダウンメニューで、背景削除に使用するモデルを選択しましょう。アニメ調イラストから切り抜くなら「isnet-anime」がおすすめです。


あとは「その他」タブの「ディレクトリからバッチ処理」で、画像保存フォルダを入力ディレクトリに指定すればOK。背景がある絵とない絵が混ざるといけないので、出力ディレクトリは適当な別の名前にしておきましょう。(存在しないフォルダを指定するとそこにその名前のフォルダが作られます)


このように背景が一括削除されました。たまに失敗して残すべきところが消えたり、背景が残ってしまったりしていることがありますので、よくチェックしておきましょう。残ってしまった場合は自分で除去するのが手っ取り早いです。



②オリジナルキャラクターの場合

有名キャラクターはすぐにCivitaiなどでLoRAが共有されるので、主に自分で学習したいキャラLoRAといえばオリジナルキャラクターの方が多いでしょう。たまたま生成できたキャラデザをいつでも固定して再現できるようにしたい、というケースも多いと思います。


スタジオ真榊には更木ミナちゃんという赤眼鏡+ポニーテールの女の子のオリキャラがいますが、彼女はふだん次のようなプロンプトで再現されています。

PP:1girl, solo,headphones around neck,white headphones, ponytail, black hair, red-framed eyewear, cardigan, glasses, dark blue sailor collar, blue eyes, looking at viewer, neckerchief, bright pupils, white pupils, ribbon,long sleeves, school uniform, grey cardigan,light green neckerchief,mint scrunchie, hair scrunchie,white shirts, upper teeth only, blue pleated skirt,open clothes, semi-rimless eyewear, under-rim eyewear, open cardigan, medium hair, oversized cardigan,sidelocks,hair between eyes,sleeves past wrist,gradient hair, mint hair,ahoge,oversized sneakers, mint sneakers,converse, loose socks


ただ、タグ指示だけで細部の一貫性を保つのは無理があり、セーラー服やヘッドホンのデザインは基本的に毎回変わってしまいます。彼女はスタジオ設立初期から「時期によってデザインが変わる概念上の存在」という設定なのでこれでよいのですが(笑)、漫画などで一貫したデザインで描きたい場合はさすがにキャラLoRAが必要になります。

こちらの4枚では、よく見ると胸のリボンの結び目やヘッドフォンのデザイン、カーディガンのボタン位置などがブレてしまっていますね。これをキャラLoRAで確定させたい場合、枚数が少なくなったとしてもかまわないので、できるだけ一貫したデザインで準備する必要があります。1枚でもデザインの違う画像が混じると、誤ったデザインが記憶されてしまうからです。


<まとめ>

・既存キャラをウェブ上から収集した画像で学習させる場合は、画風の偏りと「余計な概念」の除去に気を配ること。特に背景や別キャラの写り込みに注意

・オリジナルキャラを手描き絵やAI絵から学習させる場合は、キャラデザの統一が一番重要。色や衣装などの細部が間違っていると、それもしっかり学習されてしまう



3.画像はどこに保存する?

さて、どういう画像を集めるかが決まったら、データセットにする画像を収納する専用フォルダを準備します。まずは好きな場所にルートフォルダ(例:LoRAフォルダ)を作り、その中にトレーニング画像フォルダ(例:training)を作るのがおすすめ。さらにその中に、これから学習するLoRAごとのフォルダを作るわけですが、画像を保存するのはさらにもう一つ下のフォルダになります(下図では10_zarakiminaと4_sakakiioが画像保存先)


LoRA/ ←ルートフォルダ(名前はなんでもよい。)

 └ training/ ←学習データを入れるフォルダ(名前はなんでもよい)

  ├ zaraki_mina/ ←下のフォルダ以外は空っぽ

    └ 10_zaraki_mina/ ←ここに画像を保存する

  └ anna_kinugawa/ ←下のフォルダ以外は空っぽ

    └ 4_anna_kinugawa/ ←ここに画像を保存する


画像を保存するフォルダの冒頭の数字はリピート数といって、「画像1枚あたり何回学習するか」の指示になります。回数が多すぎると学習に時間がかかり、やりすぎると「過学習」が起こって失敗LoRAになりやすくなります。画像を入れるフォルダを複数に分けて、「このフォルダは重点的に学習して」「このフォルダは軽めに覚えて」と傾斜をつけることもできます。


ここの数字をどう設定すべきかはあとで説明しますので、ここでは何も考えず、かけ合わせたら200前後になる数字を入れることにしましょう。用意した画像が20枚くらいなら10、50枚くらいなら4ということです。この記事では今後、この数字つきフォルダを「画像保存フォルダ」と呼ぶことにします。必ず「trainingフォルダの下は2重構造」「画像保存フォルダの冒頭は数字とアンダースコア(_)」のルールを忘れないようにしてください。


4.「正解」のバリエーションを作るには

さて、版権キャラの場合でもオリキャラの場合でも、データセット画像は白背景で「全身・腰から上・肩から上」「正面、斜め、横から」のバランスが取れていて、キャラデザが全てきちんと一致しており、複数の表情バリエーションがあるものが経験上好ましいと感じています。つい可愛く描かれているアップの絵を選びがちなのですが、足先まで描かれた水平からの全身図は多めにしたほうがよく、俯瞰やアオリの画像はできるだけ少ない方がよい結果になります。


背後からの画像もできればあったほうがよいのですが、多すぎるとやたら背面の描かれるキャラLoRAになってしまうので、ごく少なくてOKです。手の描写も覚えてほしいなら、手がきちんと描かれている画像を混ぜましょう。逆に、手が映った画像がデータセットの中に一枚もないと、ベースモデルが覚えている手の画風になります。


・学習失敗につながる要注意画像

先ほども触れましたが、キャラLoRAにおいてやらかしやすいミスが、こういった顔がアップになっていて、下半身がforeshorteningになっている俯瞰画像をデータセットに入れてしまうことです。

こういう画像は「頭が大きいキャラクター」「手前に前傾するキャラクター」という印象を強く呼び起こすようで、full body指定でもcowboy shot指定でもやたらこの構図で生成する「前傾アップキャラLoRA」に仕上がりがち。慎重にタギングしても悪影響が大きいので、遠近法や俯瞰、アオリが強めに利いた画像はできるだけデータセットに入れないようにしましょう。


そのほか、別のキャラが少し映り込んでいる画像などもキャラLoRAには不向きです。「1人の画像だけだと他のキャラと絡ませられなくなってしまうのでは?」「白背景しか生成できなくなるのでは?」と心配になりますが、そんなことはありませんのでご心配なく。


・「正解」が一枚しかないときは?

生成中にたまたま出てきた素敵なキャラクターを、ぜひまた再現したいと思うことは多いと思います。しかし、手元に一枚しかそのキャラの画像がない場合、データセットをどのように準備すればよいでしょうか。


動画生成AIを使って別カットを作る手法も一貫性保持力は高いのですが、絵柄がほどよくばらけてくれるNovelAIを使うのが現状では良いように思います。さきほども紹介したこちらの記事でやり方を詳しく解説しています。


例として、こちらのキャラクター(ミナちゃん)のキャラLoRAを作ってみます。全身像のデザインは、これが「正解」ということにしましょう。さらに、細部を再現できるようなバリエーションを用意する必要があります。


こちらが左から見たアップのミナちゃんです。リボンタイの結び目の色やセーラー服の肩ラインがちゃんと上の画像と同じ一本になっていることを確認します。違っていたら生成やり直し。もしくは加筆、インペイントで直します。その上で、ヘッドホンにマークを付けてみます。


このように、スタジオ真榊のマークを画像編集ソフトでいれてみました。これでは向こう側がどうなっているか分からないので、左右反転したものも入れておきましょう。


いまどきはデフォルトの写真アプリでも簡単に左右反転できますね。


はなはだ雑ですが、LoRAで再現したいミナちゃんの見た目は最低限確保できています。もう少しバリエーションを増やしたいので、NovelAIのキャラ参照機能を使ってみましょう。


このようにモデルにしたい画像を読み込ませ、「1girl, solo,straight-on,headphones around neck,white headphones,smile」としてupper bodyの正面図を出してみます。「絵柄参照」はOFFにしています。別作家に描いてもらったミナちゃんという感じで、キャラデザは維持しているが顔立ちが少し違っている感じにできました。

もしも顔立ちまで学習したい場合は「絵柄参照」をオンにするか、もしくは普段のcheckpointで頑張って一枚一枚同じデザインにして、「正解」のデザインのミナちゃんを十数枚用意する必要があります。ここは作りたいLoRAの内容によって作業内容が変わってくるところかと思います。作りたいのは「ミナちゃんコスプレLoRA」なのか、それとも「ミナちゃん本人LoRA」なのかをよく考えて、データセットの画風も決めるようにしましょう。


さて、ここからはちまちまと正解バリエーションを増やしていくところなのですが、全部が全部ヘッドホンや胸元の正確さを求めると面倒すぎて心が折れてしまうので、ヘッドホンなしの画像も含め多少絵柄にばらつきは持たせつつ、このようなバリエーションを用意しました。これで完成でもよいですし、不十分ならできたLoRAでなお水増しを図ればOKです。


5.画像のサイズ・ファイル名をそろえるには

画像のサイズはすべて同じに揃える必要はありませんが、極端に大きすぎたり、小さすぎたり、縦長や横長過ぎると自動でリサイズ/トリミングされます。画像生成でアップスケールするか、フリーソフトなどで1024x1024pxの正方形からさほど離れていないサイズに縮小しておくと、予期せぬ変更が防げます。一括リサイズにおすすめなツールはこちらの「縮小革命」。


操作は簡単で、このように「1024x〇〇」を選び「短辺基準」「画像の拡大はしない」「PNG」としておき、右下に画像ファイルを複数選択してドラッグ&ドロップすると、「保存場所」で指定した場所に指定通りのサイズに変更された画像がドッと生成されます。

右上の「ファイル名」とある部分をクリックすると、リサイズ画像の保存名を連番数字で出力する設定にできます。 画像のファイル名に日本語や全角文字が入っていても学習はできますし、連番数字が振られている必要もありませんが、こうしておくとテキストファイルとペアにするときに見やすくて便利です。


「Resizedの中に保存」にチェックを入れると、同じ場所に生成された「Resized」フォルダ内にファイル名の頭に「s-」がついた画像が一括生成される仕組みです。リサイズを縦横比のタブで"アスペクト比調整を有効にする"のチェックが外れていることを確認しましょう。ここにチェックがされていると画像がトリミングされてしまいます。集めた画像群をすべて「短辺1024px」にそろえることができたら、次に進みます。


6.タグ付けの方法

データセットは「セット」というくらいですから、学習には画像だけではなく、それに対応した説明文(テキストデータ)が必要です。いま学習用のフォルダ内に「00001.jpg」「00002.png」...と20枚の画像が並んでいるとしたら、このように「00001.txt」「00002.txt」...と20個のテキストファイルを並べる必要があります。(テキストを用意しない場合、データセットの格納フォルダの名前のみが紐づけられて学習されます)


キャラLoRAにつけるテキストファイルの中身はこんな感じ。最初にトリガーワードが書かれ、その概念(この場合は再現したいキャラ)がどこで何をしている画像かがそののちに続いています。語順が重要で、最初にトリガーワードが来るように「タグ付け」しないといけません。

こちらのタグ付けによって、AIは「zaraki mina,headphones around neck,loose socks...」と全く同じプロンプトを指示されたら、このような画像を出力するのが「正解」なんだと学び、複雑な計算式を解いて、ベースモデルをどう補正するとよいかを考えます。手がかりになる画像とテキストのペアが豊富にあり、上手なペースで学習出来れば、データセットにない角度や表情で生成できるLoRAができますし、失敗すれば、覚えた画像の印象が強すぎてプロンプト指示通りに動かせないカチカチのLoRAになってしまいます(過学習)。



・一括タギングできるTaggerを導入しよう

さて、手打ちで何十枚もの画像にテキストデータをいちいち整えるのは大変なので、SDwebUIの拡張機能「wd14-tagger」と「Dataset Tag Editor」をインストールして、自動判別でdanbooruタグを抽出してもらいます。


導入方法は、「URLからインストール」に下記のURLを入れてインストールボタンを押すだけ。Forge Classicは対応していませんので、reForgeやA1111版SDwebUIにインストールするのがおすすめです。


wd14-taggerではさまざまなタグ付け用モデルがプリインストールされているのですが、より高性能なタグ付けモデル「wd-EVA02-Large-v3」を最初に導入しましょう。インストールフォルダ内のテキストをちょこっと書き換えるだけです。


・高性能タガー「wd-EVA02-Large-v3」導入法

①「extensions\stable-diffusion-webui-wd14-tagger\tagger」フォルダ内にある「utils.py」というファイルをテキストエディタで開きます。(右クリックして"メモ帳で開く")

②21行目(※記事執筆時点。アップデートで変更される可能性があります)にある interrogators: Dict[str, Interrogator] = { から改行して、以下の4行を挿入します。行の冒頭に4つ、または8つ半角スペースが入っていますが、これをそのままコピペしてください。pythonではインデント(行下げ)が揃っていないとエラーが起きるので、すぐ下のwd14-vit.v1...などと書かれている行と見比べて、行が揃っているか確認してください。


'wd-EVA02-Large-v3': WaifuDiffusionInterrogator(

'wd-EVA02-Large-v3',

repo_id='SmilingWolf/wd-eva02-large-tagger-v3',

),


④該当部分が次のようになっていればOK。挿入した各行の位置が他の行と揃っていることを確認できたら、テキストエディタ上で「上書き保存」し、webUIを再起動しましょう。


⑤「タグ付け(Tagger)」のタブを開き、画面左側にある「インタロゲーター」のプルダウンメニューに「wd-EVA02-Large-v3」が追加されていれば成功です。


7.WD1.4taggerの使い方

インストールできていれば、「タグ付け」というタブが上部にできているはずです。こちらが起動画面。


こちらのように、タグ付けしたい画像データが入っているフォルダ場所をフルパス指定します。インタロゲーターは先ほど導入した「wd-EVA02-Large-v3」を選んで「インタロゲート」。


しばらく待つと、画面右側にそれぞれの画像から抽出されたタグがランキング形式で並びます。なかなかタグ付けが終わらない場合は、StabilityMatrixの画面を最前面に持ってきましょう。重いのは一回目のタグ付けだけで、そこからの追加や削除は一瞬でできます。


この時点で既に、さきほどのフォルダにもテキストが出力されています。それぞれのテキストは同名の画像に対応しており、何が描かれているかが記入されています。


さて、これを学習用に一括で書き換えていきます。具体的には、一番最初に彼女を一発で呼び出せる「トリガーワード」を設定しましょう。今回は「zaraki mina」としたいので、Additional tags (comma split)にそう記入して「インタロゲート」します。(さきほどフォルダ名は「zaraki_mina」とアンダースコアを使いましたが、タグ付けの際は半角スペースで区切るようにしましょう。のちのちできたLoRAで生成するときも1girl,zaraki minaで生成します)

今度は一瞬で、全部のテキストの一番はじめに「zaraki mina」が追加されました。


<各パラメータの意味>

画面左下で、検出の感度やタグの一括追加・一括削除ができます。一応各パラメータについて意味を解説しておきますが、ごく簡易的な機能ですので、細かくいじりたい場合は次に説明する「Dataset tag Editor」を使いましょう。

・「追加タグ」Additional tags

この入力欄に入れたタグは、全てのテキストの冒頭に書き加えられます。ここにキャラLoRAのトリガーワードにしたい単語を入れます。既存のタグにはない、短めでオリジナルなワードがいいでしょう。例えばミナちゃんなら「zaraki mina」などです。学習時も生成時も、トリガーワードやタグ付けにアンダースコア(_)は使わず、タグ間のすきまは半角スペースに統一することをおすすめします。

(※ちなみに、zaraki minaはBLEACHのzaraki kenpachiと似ているので、既存概念と競合してしまうよくないトリガーワードではあります。"m1na zarak1"などと暗号化すれば避けられますが、つづりをすぐ忘れてしまうので、悩ましいところです)


・「しきい値」Weight threshold

抽出するタグのしきい値調整ができます。下げると「間違っちゃうかもしれないけどたくさんタグ付けするね」、上げると「間違いないタグだけを付けるね」の意味になります。抽出結果を見て調整しましょう。デフォルトは0.35(35%以上)となっていますが、私はたいてい0.28くらいにすることが多いです。キャラLoRA学習時は正確で精選されたタグ付けが重要です。間違ったタグは学習の失敗に直結するので、絶対に混入しないようしきい値を調整しましょう。


・「最低抽出率」Min tag fraction in batch and interrogations

保存するタグの最低抽出率です。デフォルトは「0.05」となっており、抽出されたタグの数が全体の5%未満の場合、そのタグは間違いの可能性が高いとして除外される設定になっています。私は最初0にすることが多いですが、結果を見て調整します。除外されたタグは、右上の「Exclude tags」タブから閲覧でき、除外してほしくない場合は「keep tags」に記入することで救出できます。


・「除外タグ」Exclude tag

ここに入力したタグは、テキストから除外されます。さきほども触れましたが、「red_glasses」のようにタグ内のスペースを半角アンダースコア(_)にすると、検出されたワードと合致せず、除去できなくなるので注意してください。(webUIの"設定"タブから変更可能)

右側のランキング上でタグをクリックすると、「Keep tag」の欄にそのタグがコピーされていきますので、それをExclude tagに移して「インタロゲート」すると、それらのタグが除去されます。


・「検索タグ・置き換えタグ」 Search tag & Replace tag

抽出されたタグを何か別のタグに置き換えたいときはこのウィンドウを使います。あまり使いやすくないので、今回はいじりません。



8.タグ付けについて

さて、LoRAで最も難しいのがこの「タグ付け」の概念です。いま、「AIから見るとこれらの画像はこう見えるよ」というものをWD1.4taggerが提案してくれました。もしこのタグ付けのまま学習開始すると、ベースモデルの知っているそれぞれ(black hairやponytail)との差異を検出して、その違いがそれぞれのタグと紐づいて一つ一つLoRAに焼き込まれます。「serafukuはこうだな」「ponytailはこうだな」というものが積み重なり、同じテキストを打ち込むと同じ傾向の画像が生成できるようになるわけです。


ただ、それでは面倒なので、ふだんキャラ名のタグを打ち込んだらそのキャラを再現できるように、zaraki minaと打ち込んだら基本的にミナちゃんが出てくるようにしたいですね。そのためにさきほど「トリガーワード」を冒頭に入れたわけです。


・トリガーワードと「集約」

こちらの画像には、このようなタギングがなされています。冒頭に書かれた「zaraki mina」がトリガーワードとなり、以降はzaraki minaが何をしている画像かを説明する内容になっています。


このタギングでは「zaraki minaが赤い眼鏡を掛けてヘッドホンをしている」等となっているので、逆に言うと「zaraki minaは眼鏡をしなかったり、ヘッドホンをつけなかったりすることがある存在ですよ」ということを示唆しています。一方、髪色に関するタグはないので、zaraki minaはつねにこういう髪色なんだなということも示唆されます(※そう完璧に覚えてもらえるわけではなく、おおむねそう印象付けられる程度)


さきほども書きましたが、ここが非常に重要なポイントです。もしタグが「zaraki mina」一つだけなら、画面内にある全てをAIは「zaraki mina」の概念として学んでしまいますので、例えば机やバッグや同級生などが映り込んでいたら、それらもzaraki minaの一部としてトリガーワードに紐づけられてしまいます。

よって、この画像は「zaraki mina」がどこで、誰と、どんな格好で、何をしている、どんな画風で描かれたイラストなのかをタグで指定してあげる必要があります。逆に言えば、ここで「指定しなかった」要素は全て「zaraki mina」の概念として集約され、LoRAに刻まれる(ように見える)わけです。


「タグ指定しなかった要素が学習される」というのが近い理解ですが、これは結果的に見た目上そうなるだけで、正確な説明ではありません。LoRAは「指定したタグ(トークン)があるときにだけ発動する"差分"を設定するもの」です。すべての画像に共通するタグがついていた場合、それがトリガーワードとして機能するのは、「ponytail」や「red-framed eyewear」といった削除したタグの効果が「zaraki mina」というタグだけで発動するようになるため。ponytailと指示しなくてもポニーテール効果が発動するので、結果として「1girl,zaraki mina」で赤眼鏡のポニーテール娘が出てきます。これが「削除したタグが学習された」ようにユーザーからは見えるわけですね。


今回は、zaraki minaと打ち込んだら、服以外は基本的に常に同じキャラで出てほしいLoRAにしたいところです。よって、瞳の色や髪型、髪の色などを削除しておくと、zaraki minaに集約して覚えてもらえます。ただし、ヘッドホンはあったりなかったり切り替えたいので、「white headphones」や「headphones arround neck」は残しておきましょう。同様に、水着に着替えたりもできるよう、「serafuku」なども残しておきます。


・「タグ重複」について

WD1.4taggerに抽出してもらったタグには間違ったものや、重複しているものが多数含まれますので、そのまま学習させると意図しないLoRAになってしまいます。

例えば、さきほどミナちゃんの画像から抽出したタグでは「serafuku」「sailor uniform」「school uniform」「white shirt」「shirt」などが重複しています。これらをそのまま覚えさせると、概念がこれらのタグに分散されてLoRAに焼き込まれてしまいます。生成時にいちいちこれらすべてを打ち込みたくはありませんので、どれか一つを残して削除すべきです。


タグには上位要素と下位要素があります。「low ponytail」は「ponytail」の下位要素です。キャラLoRAのタグ付けでは、1タグでより情報量の多い下位要素を残して、重複する概念は除去するのが経験上良いようです。ただ、3ワードになる場合は避けたほうが無難。例えば「blue sailor collar」は「sailor collar」+「blue collar」にしたほうが結果がよいとされています。


・「1girl」「solo」「画角タグ」は削除すべき?

こちらの画風LoRAの特集では、1girlや1boy、soloタグ、「from side」「full body」などの画角タグはほとんど取り除いて学習していましたね。今回作るのはキャラLoRAですが、これらのタグは除去すべきでしょうか、それとも残すべきでしょうか。


基本的にキャラLoRAの場合も、「full body」や「cowboy shot」「from side」など、ベースモデルが覚えている概念をそのままにしたい(上書きしたくない)場合、できるだけ削除すべきです。ベースモデルは既に「full body」や「cowboy shot」といった概念をきちんと知っているので、十枚前後の画像でその知識を乱してしまいたくないからです。ポーズについても、そのキャラ特有の変身ポーズとかでない限り、覚えさせる必要はないので削除可能です。ベースモデル由来の「waving hand」や「v」で構いませんからね。


キャラLoRAはキャラの容姿だけをいじりたいので、構図や画面構成にも「言葉の地図をずらす」影響が及んでしまうのは絶対に避けたいところです。cowboy shotと指示しているのに顔のアップばかりが出るようになってしまったり、顔が見切れる画像ばかりが出てしまったりしたら、使いづらいLoRAですよね。もっと悪いと、腕が増えたり、双子に分裂したり。用意したデータセットに予期せぬ偏りがあると、せっかくきれいにできていたベースモデルの「言葉の地図」を乱してしまいます。

▲1girl指示なのに、LoRAの副作用で「双子化」してしまうケース。(※色んな原因が考えられるが、データセットがほとんど余白のない画像で占められていると、白いところを何かで埋めなきゃと考えて分裂してしまうことが多い)


今覚えてほしいのは、キャラクターの容姿のみです。「cowboy shot」と指示したときに、どんな画角を切り取るか、「from side」と指示したときにどの角度で描いてほしいかは、ベースモデルが知っている概念のままであってほしいわけです。画角タグを除去してしまうと「zaraki mina」に集約されてポーズ制御が利かなくなるような怖さがありますが、やってみるとそんなことはありませんので、大胆に削除していきましょう。


一方で、「1girl」や「solo」を削除すべきかについては意見が分かれるところ。個人的にはどちらでも構わないが、そのキャラの生成時に必ず使う場合、残しておいてもよいと考えています。


1girlとsoloについては、全てのデータセット画像がそうなのであれば削除可能とされており、私もそうやって学習させていたのですが、適用するモデルが1girlの概念を「基本黒髪」と覚えているモデルだったりすると、白い髪のキャラLoRAなのに1girlの印象が勝ってしまって、たまに黒髪で生成されることがあります。生成時はトリガーワード+1girlと書いて、そのあとに1boyとかheteroとか入れていくことになるので、1girlやsoloをわざわざ除去しなくてもさほど悪影響はないかな、というのが残しておく理由です。


このあたりは後述する「U-netのみか?TE込みか?」の問題とも関わってくるので、一概には言えないところ。異論はあろうかと思いますが、現時点の個人的考えとしてお読みください。



9.Dataset tag Editorの使い方

さて、いったんインタロゲーターがつけてくれたタグを編集するのは、WD1.4taggerよりもDataset tag Editorのほうが向いています。


こちらが起動画面。WD1.4taggerと同様に「データセットディレクトリ」に操作したい画像があるフォルダを指定して、「読み込み」を押します。


するとこのように、既にWD1.4taggerがテキストに抽出してくれたタグと画像が並びます。画面左側で操作したい画像の選択を、右側で具体的な操作を進めていきます。

この状態では「タグフィルター」がなされていないので、画面左側に表示された画像(フォルダ内にある全部の画像)のタグを一括削除・一括追加することができます。右のタグ一覧からどれかを選んでフィルターをオンにすると、例えば「full body」のタグがついている全身画像だけを自動表示して、それらの画像だけに「shoes」を加えるといった操作もかんたんにできます。「正のフィルター」からタグを選ぶと、そのタグのある画像だけが表示され、「負のフィルター」ならそのタグを持たない画像だけが表示されます。


・タグの一括削除

では、変更不能概念(瞳や髪の色)と重複概念を削除してみましょう。このLoRAを使ってミナちゃんを呼び出したいときは、「1girl,zaraki mina,red-framed eyewear,ponytail,serafuku,grey cardigan,headphones arround neck,white headphones,pleated skirt,green sneakers, loose socks」といったタグで生成できるとよいですね。よって、この中にない重複タグや、間違っているタグ、不要なタグをすべて削除します。


さきほど触れた通り、構図・画角タグであるfrom side,from below,from above,straight-on,upper body,portrait,cowboy shot,full body等々も削除してしまってOKです。ただ、close-upは顔に影が降りる(カメラに接近した描写)ことがあり、純粋な画角タグではないので、もしあった場合は経験上削除しないほうがよいと感じています。


こちらの「キャプションの一括編集▶削除」タブから一括削除を進めます。「頻度・降順」にすると、登場回数の多いタグ順に並ぶので、不要なものにチェックを入れて「選択したタグを削除する」をクリックしましょう。「表示中のタグを選択」で全部にチェックが入ります。


・何を削除するんだっけ?

ここが一番難しいので、もう一度確認します。これからチェックを入れるべきなのは、トリガーワードに集約したいzaraki minaを構成する変更不能概念(髪や目の色、胸の大きさ、肌の色など変更しなくていい部分)と、間違っているタグ、そして重複しているタグです。「serafuku」は残しますが、「school uniform」は重複しているのでチェックを入れて削除します。「grey cardigan」があるなら「cardigan」も不要です。風呂に入っている絵でも常にponytailにしたいならponytailも不要です。


今回削除したのはこちら。zaraki minaと入れたら当然再現してほしいもの、重複しているもの、間違っているもの(virtual youtuber)、画角に関するものを削除しました。1girlとsoloは残しました。ちなみにここで「open cardigan(前の開いたカーディガン)」を削除してしまっているのですが、これは後で失敗とわかります。


残ったのはこちら。10枚全部白背景のはずですが、「white background」と見えなかったものが1枚あったようですね。また、スニーカーに関するタグも消してしまったので、書き加える必要があります。


個別の画像に書き足すには、左画面でその画像を選択した状態で「選択した画像のキャプションを編集」タブを使います。上段にいまつけられているタグが列挙されるので、「コピーして上書き」を押すと、下段にタグ群がコピーされます。そこを編集して、「選択した画像に変更を適用」でOKです。

今回はこのように、末尾に「green sneakers」を書き加えました。


タグの抜け落ちをチェックするには「タグでフィルタリングする▶負のフィルター」タブから。white backgroundを選択すると、いまいじっていたこちらの画像がwhite backgroundと検出されていなかったことが分かりました。「選択した画像のキャプションを編集」タブに移動すると、この画像だけタグを編集できるので、書き加えておきましょう。



・"すべての変更を保存"を忘れないこと!

Dataset tag Editorを触る上で一番重要なことは、この段階ではまだ仮想上のタグ付けであり、テキストは出力されていないということです。Dataset tag Editor上でいじったタグは、左上の「すべての変更を保存」することで初めてフォルダ内に出力(変更内容が反映)されますので、絶対に忘れないようにしましょう。せっかくタグ付けしたつもりでも、保存せずにwebUIを終了してしまうと、またゼロからやり直しになってしまいます。

ちなみにこのとき、「元のテキストファイルをバックアップします」にチェックが入っていると、更新するたびにどんどんファイルが増殖しますので、外しておくことをお勧めします。


試しにテキストを開いて確認してみましょう。トリガーワードが冒頭に来ているか、画角やカメラワークに関するタグは削除したか、容姿に関するタグの重複はないかあれこれを確認し、次に進みます。


10.Kohya LoRA Param GUIの導入

学習に使えるアプリはいろいろありますが、スタジオ真榊ではいつも「Kohya_LoRA_GUI」(RedRayzさん作成)を使っています。


LoRAの学習には主にKohya (@kohya_tech)さんが作成された「sd-script」というツールが使われているのですが、黒いコマンドプロンプト画面で直接指示する作業がもう厳しい私のような文系人間のために、sd-scriptの仕組みを理解していなくても直感的に操作できるGUIがいくつか存在します。


「Kohya LoRA Param GUI」は見た目がシンプルにまとまっている点、入力欄にカーソルを合わせると分かりやすい説明文がポップアップする点、画面を閉じたときのパラメータを次回起動時に自動で再現してくれる点が非常に使いやすく、重宝しています。RedRayzさんがLoRAを作るための最適設定を「基本プリセット」として配布されているので、それらを引用すれば、初心者でも高品質なLoRAを簡単に作ることができます。


・インストール手順

さっそく下記の手順で導入してみましょう。Python3.11.9とGitが既にインストールしてあれば、「3」から始めてOKです(所要時間10分程度)


1.Python 3.11.9をインストールする

「Python(パイソン)」はAI開発に使われるプログラミング言語。Python公式サイトにアクセスし、Python 3.11.9のインストーラーをダウンロードします。最新版ではなく、ちゃんと2024年4月リリースのバージョン3.11.9を選びましょう。

DLしたインストーラーを実行します。ここで注意。最初の画面で出てくる「Add Python 3.11 to PATH」に必ずチェックを入れてから、「Install Now」をクリックしましょう。無事「setup was successful」と表示されたら「Close」をクリックでOKです。


2.Gitをインストールする

「Git」はファイルのバージョン管理が簡単にできるツール。公式サイトのダウンロードページに行き、最新版へのリンクである「Click here to download the latest」をクリックしましょう。

・ダウンロードしてきたexeファイルを実行。(記事執筆時点では2.51.2が最新です)

・インストールボタンが出るまで「Next」を連打します。チェックマークは変更しなくてOK。「Install」が出たらクリックしてインストール。

・インストールに成功したら、「View Release Notes」は見なくていいのでチェックを外し、「Finish」。デスクトップなどを右クリックして「Git Bash Here」が生成されていたらOKです。



3.Kohya LoRA Param GUIをインストールする

Python3.11.9とGitがインストールできたら、Kohya LoRA Param GUIをインストールします。こちらのURL(▲)にアクセスし、「kohya_lora_gui-x.x.x.zip」をDLしましょう。(記事執筆時点の最新バージョンは1.15.0.0)


zipファイルを適当な場所に解凍します。いつものことですが、容量に余裕のあるドライブを選ぶこと。「kohya_lora_gui-1.15.0.0」というフォルダができると思いますので、中にある「Kohya lora trainer.exe」をダブルクリックしてGUIを起動しましょう。(このとき、.NET Runtimeのインストーラーをダウンロードするかのメッセージが出た場合は、「はい」を押してダウンロード・インストールします)


初回起動時はsd-scriptのインストールが完了していないため「train network.pyが見つかりません」と赤字で表示されるはずです。まずは上部にある「簡易インストーラー」ボタンをクリックしましょう。


こちらの説明文を熟読して、理解出来たらインストールボタンを押します。「pythonの代わりにpyを使用する」にはチェックを入れなくてOK。pythonバージョン欄もそのままでいいです。インストール先フォルダの選択画面が出ますので、「kohya_lora_gui-1.15.0.0」を置いた場所(つまり一つ上の階層のフォルダ)を指定しましょう。


<注意:つまずきポイント>

インストールが進むのをしばらく待つと、最後に問答をする場面が出てきます。ここがつまずきがちなので、詳しく手順を説明します。


「This machine」など大半はエンターキーをぽんぽんと押せばOKですし、「NO」と答える部分は、そのまま半角英数大文字でその2文字を打ち込んでエンターキーを押すだけです。「all」は打ち込まなくても、そのままエンターキーでOK。

最後、「fp16」を選択するところだけが鬼門です!カーソルキーの「↓」を押したくなるのですが、絶対に押してはダメ。キーボードの「1」を押さないと最初からやり直しになってしまいます。「fp16」を選択状態にすると、下図のように「fp166」と表示されることがありますが、問題ありません。

何度でもやり直せますから、さほど深く考えず、fp16(fp166)のところを「1」キーで選んで、エンターキーを押しましょう。


最後に 〇:¥〇〇¥sd-scripts> というメッセージが出たらインストールはおしまいです。「Kohya_lora_trainer.exe」も含めて開いている画面を閉じましょう。次回からは「Kohya_lora_trainer.exe」をダブルクリックすれば起動できるので、デスクトップにでもショートカットを作っておくことをおすすめします。


「kohya_lora_gui-〇.〇.〇」と「sd-scripts」両方のフォルダが、同じ階層にそろっていることを再度確認してください。「kohya_lora_gui-〇.〇.〇」フォルダは好きな名前にリネームしても構いませんが、「sd-scripts」はリネームしないようにしましょう。この二つのフォルダが同じ階層にないと学習ができませんので、場所を移す場合も必ずペアで動かすようにしてください。


・プリセットをダウンロードしよう

こちらはアプリ制作者のRedrayzさんが書かれたチュートリアルと、学習時に使えるプリセット群です。記事には非常に重要なことがたくさん書かれていますので熟読しておきましょう。

・LoRA作成チュートリアル

・学習のヒントなど

・サンプルプリセット


「サンプルプリセット」は、Kohya LoRA Param GUIでそのまま使える設定データ。各パラメータの意味を理解していなくても、説明通りにベースモデルやデータセットのパスを入れるだけで学習ができてしまいます。

リンクを開くとこのようになっていますので、上部の「ダウンロード」からそのまま保存しましょう。使い方について書かれたreadmeがそれぞれの階層にありますので、こちらも要熟読です。



11.Kohya LoRA Param GUIの使い方

さて、こちらがKohya LoRA Param GUIの画面です。

さっそくここから、ベースモデルや学習率(Lr)、何ステップ学習するか、dim/alphaはどうするか、オプティマイザとスケジューラの組み合わせはどうしようか…といった基本事項を指定し、学習を開始していきましょう。


…と言われても、初めてだと何のことだかさっぱりわかりませんね。それぞれのパラメータの意味するところを以下に解説しますが、ぶっちゃけプリセットを使えば理解していなくても学習自体は簡単にできます。初めての方はざっと流し読みして、さっさと次の「学習開始」の章をご覧いただければと思います。



・学習元/事前学習モデル

ベースモデルを選ぶところ。illustriousXLやnoobaiXLベースでもよいし、普段使いしているオリジナルモデルがあればそれでもよい。注意したいのは、用意したキャラ画像がその学習させるベースモデルと全く違う画風だった場合、そこも差分ととらえられて学習されてしまうということ。逆に言えば、ベースモデルの画風で描かれたデータセットなら、キャラの容姿概念だけを抜き出すことができる。

意図しない画風の変化を避けたい(キャラクター概念だけを学び、LoRA適用時もCheckpoint本来の画風で生成したい)場合は、Redrayzさん作成のこちらのillustriousXL学習用モデルを使うのもおすすめ。

バージョンがいくつかあるので、適用したいベースillustriousXLのバージョンに合わせよう。例えばWAI Illustrious SDXL v14はベースがillustriousXL1.0なので、上のリンク先のv1.0.0を使用する。最新の2.0.0はillustriousXL2.0系モデルに適用するLoRAを作るためのものなので、最新だからといってよく考えずに使わないこと。


・教師画像フォルダ

いま用意した画像とテキストのあるフォルダ(例:8_zarakimina)の、一階層上を指定する。画像入りのフォルダを指定するとエラーが出て教えてくれる。

・正則化画像フォルダ

LoRAが狙っていない副次効果を及ぼすのを避けるためのもの。大規模なファインチューンならともかく、キャラLoRAは正則化画像なしでも問題なく作れるので、空欄のままでOK。

・epochs\steps

用意したデータセットを何回学習するか。ここの数値が多すぎると過学習が起きてしまうので、料理の成否を分ける「焼き加減」にあたる数値だと考える。まずは画面右下の「総ステップ数」と「batch1相当」を見てみましょう。

「epochs\steps」の数値を上下させると、「batch1相当」の数値が上下することが分かります。画像の枚数×繰り返し数(画像保存フォルダの冒頭の数字)×エポック数(何セットやるか)=「batch1相当」のステップ数という計算。何ステップで学習が終わるかはデータセットの枚数や目的、オプティマイザや学習率によってケースバイケースでなんとも言えませんが、体感的にキャラLoRAの場合は以下が目安。(いずれもbatch1相当)


・5枚:300〜800step程度

・10〜20枚:1000〜2000step程度

・30〜50枚:2000〜3500step程度

・100枚以上:3000〜6000step程度


基本的に、データセットの枚数や内容のバリエーションが多彩になるほど、学習には多くのステップ数を必要とします。逆に言えば、バリエーションに乏しく枚数が少ない場合はすぐに学習し終わりますので、長くやっても時間の無駄ということです。オプティマイザがCAMEだと、もっと早い段階で収束するので、600~1000くらいでよいかも。


例えば、画像10枚のデータセットでキャラLoRAを作るにあたって、10に掛けて200になるよう20リピートとした(フォルダ名を18_zaraki_minaとした)場合を考えます。画像10枚×「20_zarakimina」×???=1000~2000にしたいわけですから、ここではepochs\stepsを8としました。つまり、batch1相当=10枚×20repeat×8epoch=1600stepとなります。これは「10枚の画像を20巡勉強するのを1エポックとします。今回はそれを8エポック、つまり計1600ステップの学習をこれから行ってくださいね」という指示となります。


※ちなみに、「総ステップ数」が「batch1相当」の半分になっているのは、後述するバッチ数が「2」に指定されているため。「1600ページの宿題をこれからするけど、2人に分身して同時に解いたら半分の時間で終わるね」という程度の意味です(その分覚えは多少マイルドになるようです)


「キャプションのシャッフル」&「トークン保持数」

これは、txtファイルで画像ごとに割り振られたタグの順番をシャッフルするか?順番をシャッフルする場合は1つめのタグ(多くはトリガータグになる)を含めてシャッフルしてよいか?を尋ねる項目です。

例えば「zarakimina,1girl,solo,smile...」と続くtxtの場合、キャプションのシャッフルをONにすると内部的にタグの順番がランダマイズされた状態で学習されます。前方によく出てくる頻出タグが強烈に覚えられたり、後ろに回りがちなタグの印象が薄れたりするのを避けることができます。ただ、せっかくつけたトリガーワードが1番目でなくなると困るので、その場合は必ず「トークン保持数」を1にしましょう。1つめのタグだけランダム順にならず、常に先頭に維持されます。(2にすれば冒頭の二つ目までが維持される)


「出力ファイル名」

LoRAのファイル名を決めます。ベースモデルやdim/alphaの値、バージョンなどを書き留めておくとベター(例:zarakimina_wai14_dim8alpha4_v1)ですが、ぶっちゃけ適当でよいです。


「出力先フォルダ」

どこでも構いませんが、普段LoRAを入れているフォルダを指定すればすぐ生成できるので便利です。指定しておかないと怒られます。


「保存頻度」

何エポックごとに途中経過を保存するか。ここを「1」にすると、10エポックなら10個のLoRAが順番にできていきます。zarakimina00001,zarakimina00002....といった具合にできて、10個目に「zarakimina.safetensors」ができます。初めての生成は1か2ずつにしてみて、各バージョンの生成結果がどう変わるか確かめてみるとよいでしょう。「0」だと、完成するまで途中経過のLoRAは生成されません。

LoRAの追加学習は「パイを焼くようなもの」だと思ってください。しっかり焼いたつもりが過学習になってしまったとき、焼き加減の段階が進むごとに全部LoRAを残していたら、コゲるちょっと手前の焼き加減のLoRAが手に入るので便利というわけです。


・学習率(LR)★

追加学習を一気にやるとモデルが他の絵を自由に描けなくなる(=過学習)ため、わずかずつ進めていく必要があるのですが、この数値はその「どれだけわずかずつか」を示す数値。過学習してしまう場合はLrを落とし、なかなか学習が進まない場合は上げます。ただ、後述する「オプティマイザ」によって最適な数値は変化します。例えば「AdamW」の場合は「1e-4」、「Prodigy」の場合は「1」を選ぶのが基本です。


<1e-4って?>

LoRA学習において、Lrなど小数点以下のパラメータが「1e-4」などと「e」を使って表示されることがあります。「1e-4」は10のマイナス4乗、つまり0.0001のことです。eの左の数字が一番下のけた、右の数字が0の数と覚えておけば大丈夫。例えば、1e-3=0.001、5e-5=0.00005、1e-6=0.000001です。


・解像度

教師データをどれくらいのサイズで学ぶか。用意した画像はこの基準解像度に従ってリサイズされます。SDXL用のLoRAなら基本的に「1024」とします。最近のモデルは1536pxサイズで学習されたものも出ていますが、家庭用PCでそのサイズでLoRAを学習させるのはちょっと荷が勝ちすぎるかもしれませんので、VRAMと相談しましょう。


・バッチサイズ

学習作業をいくつ同時並行するかを示す数値。2なら2倍の早さでLoRAが完成しますが、GPUの負荷も大きくなります。高倍率だと学習率が落ちてしまうので、時短すればよいというものではありません。今回は約1584ステップの学習をバッチサイズ2で行うので、半分の792ステップ分の時間で学習を終えられるはずです。バッチサイズ1の方がデータセットの細かな特徴をしっかり覚えられるようですが、その分時間がかかります。


・ネットワーク次元数(=dim)★

いわゆる「dim」と呼ばれるもの。この数値が多いほど学習情報をたくさん保持でき、教師データの再現度が上がりますが、余計な情報まで学習してしまう恐れが強まります。8、16、32、64を選んでいるLoRAをよく見かけます。dimを高めるほどにLoRAの学習が重くなり、時間もかかりますが、データセットの画像の共通する特徴をしっかり覚えることができます。

VRAMが16GB以上ある場合は、「dim32/alpha16」や「dim64/alpha32」にしてみると、よりしっかりとデータセットの特徴を覚えてもらえますが、再現してほしくないほどデータセットに忠実になり、かえって生成の自由度が下がってしまう恐れもあります。個人的には、衣装の細かな部分までしっかり覚えてほしいキャラLoRAの場合、できるだけdimもalphaも高くした方がよいと考えています。


・ネットワークアルファ(alpha)★

いわゆる「alpha」。LoRAが元のモデルにどの程度影響を与えるかを制御します。1に近づくほどLoRAの影響が強くなり、かわりに安定性が低くなります。1より大きい値にするほど、影響が弱まるかわりに安定性は高まります。

「ネットワーク次元数(dim)」とのバランスが非常に重要な数値で、dimが大きくなるほどアルファの数値も上げてLoRAの影響を抑えないと過学習を起こしてしまう恐れが高まります。経験値として、だいたいdimの半分くらいにするのが良いとされています。(dim8ならalpha4、dim32ならalpha16が目安)


一応のめやすとして、キャラLoRAは「dim8alpha4~dim32alpha16」、 画風LoRAは「dim16alpha8」、ポーズやシチュエーションLoRAは「dim4alpha1~dim8alpha4」あたりが良いように感じていますが、ここはオプティマイザや学習効率、ユーザー個人によって大きく意見が違うと思います。データセットそのまんまの再現度にしたいならdim32や64まで上げ、もっとマイルドに概念を覚えてほしい場合はdim4や8くらいまで下げます。


・オプティマイザ★

学習を最適化する計算機の役割で、どのオプティマイザを選ぶかでLoRAの出来や所要時間が変わり、ほかの最適設定も全て変わってくる学習の主役。手動型と自動型があり、それぞれ最適な学習率が異なる。自動型の方が一般に高品質なLoRAができますが、学習に時間が掛かるのが難点とされます。

AdamW/Lion:標準的な手動型。安定性と再現性が高く、LoRA入門向け。lrは0.0001が基本。

AdamW8bit/Lion8bit:それぞれの省VRAM版。こちらもlr=0.0001が基本。

CAME:高速収束型で、かなり少ないステップから学習成果が出てくるが、過学習にも陥りやすい印象がある。lrは0.0001~0.0002あたりが良いとされる。

Prodigy:完全自動型。lr値は無視されるが、1と記入する。早期にガッと学ぶタイプで、データセットの再現性が高めな印象。(※テキストエンコーダ込みで学習する場合、CAMEなどと違って学習率をそれぞれ指定できないので、どちらも1とする)

Adafactor:半自動型。lrは通常どおり指定(0.0001〜0.0002あたり)。省メモリだが収束は遅め。LoRAには向かない説があるが、CivitaiにあるLoRAでは結構よく使われている。

LAdamScheduleFree:Adam系の改良・自動型。なんでもやってくれるschedulerいらず。lrの変化に強く、0.0001〜0.0004あたりが良さそう。



<詳細設定から操作できること>

左下の「詳細設定」からもいくつか重要な操作ができます。特に重要なのが、「U-netとTextEncoder」の部分。通常は「両方学習」となっていますが、基本的にU-netのみでよいのではないかと最近は考えています。


★U-netとTextEncoderについて

LoRAにはU-netのみに学習させる方法と、TextEncoder(TE)にも同時に学習させる方法があり、後者ではベースモデルが覚えているプロンプトの語義を「上書き」することができます。極端なことを言えば「sad」と指示して笑顔を出すようなことも可能になりますが、ベースモデルがきれいに整備していた既存タグの地図に予期せぬ「ずらし」を加えてしまうこともあるので、失敗しやすくもなります。例えば、たった十数枚の画像を手がかりに「え、black hairやcowboy shotといったタグはこういうものだったのか!覚え直すね!」と受け取られてしまい、せっかく正しかったそれらの知識が雑に塗りつぶされるような現象が起きるので、キャラ容姿以外に影響を及ぼしてしまう原因になります。


一方、U-netのみに学習させた場合、画像群に共通する「見た目」の分だけ地図はずれますが、ベースモデルの語義そのものを大きくずらすような効果はありません。が、zaraki minaなど新しく与えられたタグ(トリガーワード)が、既存の地図とどのようにかかわるかを理解することもできなくなります。機械的に「zaraki minaって何?まあそのタグが来たらよくわからんけどデータセットから読み取れる差分だけ普段よりずらして絵を描きますよ」という状態になるので、プロンプト応答性や細部のディティールはTE込みに比べて下がることになります。


「UnetのみかTE込みか」はLoRA学習の永遠のテーマなのですが、データセットとタグ付けをよほどうまくやらないと使いづらいLoRAになるので、Unetのみでなんとかしたいというのが個人的な意見です。「プロンプト応答性の低下という代償と引き換えに、ベースモデルの知識を破壊するような学習(予期せぬずれ)のリスクを最小限に抑える」という狙いですね。(ちなみに、「UNet LR##」欄にLRを、「TextEncorder LR##」欄に10分の1の数字を打ち込めば、Unetの10分の1の学習率でTEもちょこっとだけ学習させることができますので、両方の「いいとこどり」を狙うことも可能ですが、これもなかなかバランス調整が簡単ではありません)


・augmentation

データセットの画像を反転させて水増しさせたり、画像の色やクロップをランダムにしてカラーや画角への影響を薄くしたりできる項目。予期せぬ結果になりやすいので基本はオフ。左右非対称のデザインのキャラが反転して覚えられてしまったりします。


・スケジューラ

学習効率(Lr)の倍率を徐々に下げていくアルゴリズムをプリセットから選べる項目。一般に、学習前半は高いLr倍率でがっつり学習し、後半は低いLr倍率を下げて過学習を避けつつ細部を学習すると過学習を避けられるが、その火加減の調整役がこれ。それぞれオプティマイザとの相性がある。「constant」にすると最初から最後まで横一線(指定したLrのまま)で、「linear」は直線降下型、「cosine」はカーブ減衰型、「constant_with_warmup」は指定したステップまで降下したのち、constantになる。よく分からなかったらとりあえずcosine型カーブを指定回数繰り返す「cosine with restarts」がバランスが取れていて良いとされている。


・混合精度

fp16が基本。bf16はfp16に比べて安定して学習できるが、処理速度がわずかに落ちる傾向がある。VRAMに余裕があり、安定性を重視するならbf16にしてみよう。

・Cross Attentionの最適化

xformersのほうがVRAM負担が少ないが、最新の「spda」(Scaled Dot-Product Attention)のほうが高速で安定しているとされる。spdaでVRAM不足になる場合はXformersに戻そう。

・モデルをfp8で読み込む

速度低下の変わりにVRAM負担を減らせる。VRAM12GB以上あるならオフに。



・オプティマイザに追加のパラメータを指定する

ここを操作することで、より安定して学習を進めることができるオプション。パラメータの意味がよくわかっていないのにいじると謎の失敗につながりやすい。オプティマイザとペアで設定を考える必要があるので、分からない場合はチェックを外しておく。

weight decayは過学習防止用に、学習の重みを少しずつ減らす仕組み。epsはオプティマイザの安定化のためのもの。上級者はこれを経験則で操作しているので、Civitaiなどで配布されているLoRAのmetadataを見て真似するのも上達への道。このあたりの情報についてはオプティマイザ(ss_optimizer)の欄に書いてあります。

▲LoRA欄右上の「i」ボタンから学習時の設定が記録されたmetadataが見られる。学習のコツそのものなので、保存しない設定にしている人もいる。


metadataには下記のような項目に重要な情報が書かれています。設定によっては、タグ付けした内容まで一覧できることもあります。LoRA学習がうまくいかないときは、よく似たLoRAを上手に作れている人のmetadataを参考に、自分の設定と何が違うのか考えてみるのがよいでしょう。


ss_optimizer(オプティマイザー)

ss_network_dim(ネットワーク次元数)

ss_network_alpha(ネットワークアルファ)

ss_learning_rate(学習率)

ss_num_train_images(教師画像の総学習枚数)

n_repeats(繰り返し数)

img_count(画像の枚数)

ss_num_epochs(エポック数)

ss_max_train_steps(総ステップ数)


           初めての方はここまで読み飛ばしてOK

12.学習開始

LoRAの学習設定は非常に複雑ですが、ここまで書いた内容をきちんと理解しているユーザーはおそらくほとんどおらず、みんな雰囲気でLoRAを学習していると思います。さほど深く考えすぎなくても、とりあえずプリセットを使っていればLoRAは作ることができますので、あとは生成結果と見比べながら好みで調整するとよいでしょう。


今回のミナちゃんのデータセットでは、Prodigyという自動調整型のオプティマイザ(Lrは1)を使い、dim8alpha4とややマイルドめに、U-netのみ学習することにします。何のLoRAを作るかにもよりますが、白背景のみの少枚数キャラLoRAではこれくらいがよいのではないかと思います。バッチサイズは2で、全体で2000ステップくらい学習する設定にしました。

ベースモデルはさきほど紹介したAnyIllustriousのv1.0.0です。エポック数はバッチ1相当が2000くらいになるように調整してみます。保存頻度は1にしているので、焼きすぎたら少し手前のエポック数のものを採用しましょう。


必要事項が入力できたら「学習開始」を押しましょう。黒いコマンドプロンプト画面が立ち上がり、上記の設定通りに学習が始まります。学習にはVRAMを大量に喰いますので、あらかじめVRAMに負担のかかるアプリは終了させておくようにしましょう。

「Triton」に関するエラーが表示されますが、これは正常ですので気にしなくてOKです。


しばらく待つとこのように、インジケータが左から右に徐々に満ちていく様子が表示され、学習終了までの見込み時間も表示されます。学習がうまくいっている場合、右端の「avr_loss」という数値が少しずつ減っていきます。


あとで説明しますが、avr lossは学習に伴う計算の誤差を示す数値で、じわじわ下がる分には良いのですが、突然極端に下がったり、「avr_loss=Nan」と表示された場合は、設定やデータセットにミスがあって学習が失敗したことが考えられます。学習が始まったら、まずこの数値の変動を監視しておくと、学習がうまくいきそうかどうかなんとなく分かるようになります。(開幕でavr_loss=Nanと出たら、画像が壊れていたり、データセットに不備がある可能性が高いのですぐ終了してチェックしましょう)

このように、最後の行に(venv)●●:sd-scripts>と表示されたら「停止」を押して画面を閉じて大丈夫です。


この画面ではおおよその残り時間も読み取ることができますが、予想外に長い時間が表示された場合、おそらくGPUのVRAM容量を使い切っています。タスクマネージャーを開いて確認し、このように100%に張り付いていたら、いったん学習を止めたほうが無難。VRAMを消費するプログラムをいっさい使っていないのにこうなる場合は、バッチ数を下げたり、「Cross Attentionの最適化」をXformersに変更するなどして消費容量を下げましょう。



13.できたLoRAをチェック

できたLoRA「zarakimina_v1」を強度1で適用して生成してみます。まずは、トリガーワードなしの「1girl」生成。このように、黒髪や青い目、わずかにグラデーションした髪の毛などしか反映されません。


次に、「1girl,zaraki mina」とトリガーワードを追加します。すると、タグ付けをしなかった部分がある程度出そろいました。さきほどタグの集約によって「赤い眼鏡やセーラー服などをzaraki minaが着ているところ」と説明したので、集約されていない部分はこのようになるのですね。(適用強度が強すぎてやや歪んでいます)


タグ付けした衣装関連を加えてみます。「1girl, zaraki mina,green scrunchie,grey cardigan,ponytail,red-framed eyewear,serafuku,headphones around neck,pleated skirt」

これで、学習したものが出そろいました。強度が1なので、画風への影響がやや出てしまっています。


強度を0.6にするとこんな感じ。

ただ、気になるのはヘッドホンの模様です。強度を弱めると、なんとなく青い円として描かれている程度で、小さすぎてうまく描かれませんでした。また、よく見るとカーディガンがなぜか二重になってしまっていますね。


データセットを精査してみると、こちらの1枚がおかしくなっていました。これを学習した結果「二重にカーディガンを着ている子」と認識されてしまったようですね。とりあえずこれは間違いのもとですので削除しておきます。


・過学習チェック

こうしたおかしさは過学習由来で起きていることもあるので、XYZ plotで学習結果チェックを行います。さきほど「保存頻度」を1にしていたので、1エポックごとにLoRAが保存されています。これをSeed値1,2で比較してみましょう。LoRAの適用強度は「1」だと強すぎて過学習の影響かどうか見抜きにくいので、0.6~0.8くらいにしておきます。

末尾に「,」をつけておいたので、一番最後にLoRA未適用の画像も出力されます。


こちらが生成結果。

だいぶ低エポックの段階から容姿の学習はできているようですね。これを見ると、過学習のせいではなく、間違えた画像が混じっていたことと、「open cardigan」をタグ付けの際に削除してしまったのが原因だということが推測できます。


一番下段がLoRAなしで生成したものですが、ベースモデルはcardiganと言えば前を閉じたものと学習していたようで、そうした既成概念をU-netのみの学習で塗りつぶすことが難しかったのでしょう。(最下段の髪型や眉がおかしくなっているのは、おそらくBLEACHに登場する"zaraki kenpachi"の印象に引っ張られているものと思われます。トリガーワードを決める前に仮生成してみて、こうした効果が出たものは本来は避けたほうがよいでしょう)


これは、さきほどの「TextEncoderを込みで学習すべきか問題」にも関わる部分です。今回はU-netのみの学習でTextEncoderを学習していないので、文脈を理解せずに容姿だけ学習した結果、「grey cardigan」を自分の知っているcardiganと溶け合わせられなかった可能性があります。


14.データセットとタグ付けの修正

このように、LoRA作りは一発でうまくいくことはなかなかありません。間違えていた画像を削除し、タグを付け加えて、データセットの追加を試みます。まず試みたいのは、ヘッドホンのマークを覚えさせること。このように、マークがより大きく描かれているものをデータセットに加えてみます。(画像生成でヘッドホンだけを出し、マークを貼り付けただけです)


この画像をWD1.4taggerの「単一処理」タブに放り込むと、このように1枚だけタグ付けしてくれます。手入力で多少整えて、「white headphones, no humans, still life, white background, simple background」としました。

ついでに、Dataset tag Editorで「キャプションの一括編集」。カーディガンの前が映っている画像すべてに「open cardigan」を書き加えておきます。


学習設定もいじります。ヘッドホンの模様を学習してほしいので、ネットワーク次元数とネットワークアルファをdim32/alpha16にアップ。さきほどはU-netのみの学習だったのを、今度は「詳細設定▶ページ1▶両方学習」に変更してみます。


このように、26分で学習終了しました。


生成結果がこちら。

PP:1girl, zaraki mina,solo,smile,tareme,grey cardigan,open cardigan,green scrunchie,ponytail,loose socks, sitting,red-framed eyewear,serafuku,white headphones,headphones around neck,full body,green sneakers,pleated skirt


さきほどのカーディガンのミスはきれいに消え去りました。アップスケールしていないので細部はあやしいですが、ヘッドホンのマークも先ほどより再現できたようですね。ただ、TE込みで学習させたためか、構図に悪影響が出ています。右下がZoom layerのようになってしまったり、「serafuku」というタグが本来覚えていた赤いリボンタイが出やすくなってしまったりと、キャラLoRAとしての使いづらさが目立ちました。


例えばこれは「cowboy shot」と指示しただけのzaraki minaですが、データセットの偏りに引っ張られて、やたら横からのショットが増えています。その上、アップが多く、本来のcowboy shotとは言い難い(ほぼupper body)画角に変容してしまっています。


<結論:U-netのみが無難>

「U-netのみ」「TE込み」それぞれの良しあしが分かるよう、両方の設定で学習してみましたが、枚数の少ないキャラLoRAの場合は特に、U-netのみの学習が無難かなと思います。今回のヘッドホンのように難しい細部のデザインまで覚えさせたい場合は、dim/alphaを上げて対応するのがよいでしょう。


最適解はこちら。同じProdigyを使った学習設定で、dim64/alpha32まで上げ、U-netのみで約2000step学習させたものです。画角などへの影響は最小限に、キャラクターの細部を覚えてくれています。


設定はこのような感じです。


<プリセット配布>

こちらのプリセットを含む、私が普段使用しているキャラ用2種、画風用2種、コンセプトLoRA1種のillustriousXL向け学習プリセットをzipで配布します。


解凍するとこのようなxmloraファイルが出てきますので、「プリセットの読み込み」から使用してみてください。(※できるだけ私のローカル環境由来のパスなどは消したつもりですが、不具合があった場合はお知らせ頂けますと助かります)


キャラ学習用にはdim64/alpha32の細部学習用と、マイルドなdim16/alpha8の2種類があります。私のRTX4080(VRAM16GB)環境ではこれでちょうどよく回りますが、VRAM容量が足りない場合は、バッチサイズを「1」に落とし、「詳細設定▶パフォーマンス」を選び、「Cross Attentionの最適化」をXformersに、「混合精度」をfp16に変更して、dim/alphaもできるだけ落としてみると良いかもしれません。



【コラム】4枚だけで生成は可能?

もっと少ない枚数で学習させるとどのようなことが起きるのでしょうか。キャラ学習用プリセットを使って、こちらの4枚だけの画像でキャラLoRAを作れるか試してみました。

トリガーワードを冒頭に入れ、髪や目の色、髪型、1girlやsolo、画角系タグは削除。着替えができるよう、grey bodysuitやelbow gloves、lolita headbandなどを残しました。1枚の生成画像を基に、できるだけデザインが正確になるように生成や加筆でバリエーションを作ったものです。


枚数が4枚しかないのですが、とりあえずリピート数を20とし、さきほどの64/32プリセットを使って、26エポックで回しました。26個もLoRAができてはまずいので、保存頻度は5に落としましたが、これは明らかに過学習上等のステップ数です。とりあえず学習の進み具合を見てみましょう。


・avr_lossをチェック

枚数が少なすぎて過学習が心配なので、avr lossの変化をじっくり監視します。

当初はじっくり下がっているのですが、7エポックの「0.0803」でいったん反発した後、ぐわっと急降下していることが分かります。あまりに早すぎるので、これは悪い兆候です。

あれよあれよという間に0.02を切るまでガツンと下がってしまいました。avr lossはただの目安ですが、ここまで急降下した場合は学習失敗や「学習し終え」がうかがわれます。


・avr lossとは何なのか?

avr_loss は「average loss」の略で、学習中の計算結果とデータセットとの誤差を示す数値です。要するに「どれくらい間違っているか」を表すスコアで、モデルがキャラをまだ覚えてないと誤差が大きく、覚えるほどに誤差が小さくなります。キャラLoRAのようにデータセットの共通点が多く、計算しやすい場合は下がりやすく、画風LoRAのように描かれているものがそれぞれ違う場合は下がりにくい特徴があるようです。

徐々に下がっていくのが良いとされていますが、誤差があまりに小さくなってしまったり、急激に下がった場合は、学習データを丸暗記してしまって、オーバーフィッティング(過学習)を起こしてしまっている可能性があります。


あくまで目安ですが、十数枚程度でキャラLoRAを学習する場合、loss が0.09〜0.06くらいの間で滑らかに下がりきると良い感じにできていることが多いです。loss が途中で急降下した場合は枚数不足などの原因で「丸暗記」状態になっており、何らかの悪影響が予想されます。loss がまだ下がり続けている途中で学習が終わってしまうと、ステップか学習率が足りなくてあまり覚えられなかったかも?という印象。とはいえ、これらはあくまでイメージの話で、avr lossだけではLoRAの出来不出来はそこまではっきり分かりません。


・生成テスト

実際にどうなったか確かめてみます。avr lossを見ていると、10エポック前後までは学習が普通に進み、それ以降は丸暗記してしまって過学習が進んでいるように見えます。


まずこれが、最終的にできた26epochめのLoRAで生成したもの。



一見よく学べているように見えますが、右下は手の周辺がややおかしいですね。「upper body,looking at viewer,glaring,crossed arms」(腕組みしてこちらをにらんでいる)と指示してみます。

意外となんとかなっていますが、やはり指はやや怪しいですね。


しかし、4枚だけでもdim64/alpha32で学習したせいか、かなりなんとかなっているように見えます。これなら、これを使ってバリエーションを増やせば、十分普通のキャラLoRAとして使えそうです。


wildcardを使って、画角とポーズ、表情をランダム化するとこうなりました。

多少怪しい部分はありますが、これでしばらく放っておいて、できたものからチェリーピックすれば問題なくちゃんとしたLoRAが作れそうですね。


なお、生成時に「white hair」と入れないと、ときどきこのように黒髪になってしまう現象がありました。

「1girl」ありで学習するか、生成時にキャラタグのみ(1girlを入れない)だと、こうした現象が起こりにくいように感じています。自分でチューニングしたモデルの不安定さに由来している可能性があるので、体感的なことしか言えませんが、髪の色や目の色の「集約」がうまくいかないときはTEも少し学習すると改善するかもしれません。その分、画角タグなどの既存概念に悪影響が懸念されるので、そのバランスは好みで決めるのがよいかなと思います。


終わりに

そんなわけで、約4万字の大ボリュームになってしまいましたが、キャラLoRAに関する現時点の考えをまとめた大特集でした。こちらのAnimagineXL3.1向けLoRA学習記事から1年以上経過しましたので、考え方にかなり違いがあるかもしれませんが、今のところこのやり方で安定してキャラLoRAを作れています。


特にタグ付けとUnet/TEの学習についてはあれこれ検証する中で考えが大きく変わったポイントです。今回はUnetのみの学習でうまくいきましたが、どうしてもそれでは覚えられない難しい特徴のキャラクターもいます。そういう場合はテキストエンコーダ込みで学習する必要がありますが、規定概念の上書きが起こってしまいがちなので、ある程度傾斜をつけて学習させる必要があるようです。

       ▲Unetに比べ10分の1の学習率でTEに学習させる設定


今回はキャラLoRAについてまとめましたが、画風LoRAを作る方法はこちらの記事にまとまっています。画風LoRAの場合は「CoppyLoRA」が使えるので、より選択肢が広く、また奥深い世界が広がっていると思います。


オリジナルキャラクターをゼロから設定し、LoRAで容姿を固定するやり方についてはこちらの記事を参照のこと。データセット構築やオプティマイザなどの設定について現在と考えが異なる部分がありますが、今回の記事のほうがより安定しているはずです。


LoRA学習は本当にレシピが難しく、ベースモデルやオプティマイザを変えるだけでいままでできていたことがいきなりできなくなることも多いです。できるだけ再現性の高い方法で初心者向けに書いたつもりですが、これが正解!ということは誰にも言えませんので、これからも適宜検証結果を反映してブラッシュアップしていければと思っています。


大変長い特集でしたが、読んで下さってありがとうございました。前回は画風LoRA、今回はキャラLoRAと来たので、次回はNSFWなコンセプトLoRA(シチュエーションを再現するもの)の記事も作ってみようと思います。


それでは、今回はこのへんで。スタジオ真榊でした。


Attachments (97)

1Knm37HJ2Ibi5YssNEXFcRZW.png

1Knm37HJ2Ibi5YssNEXFcRZW.png

EX2MtM3MYPodfqVC19bxCVxh.png

EX2MtM3MYPodfqVC19bxCVxh.png

YhfkwNWaBynY8oQAQVzUAoZd.png

YhfkwNWaBynY8oQAQVzUAoZd.png

93oF6BIBKm1vsbtJclBLxMbp.png

93oF6BIBKm1vsbtJclBLxMbp.png

cSW599tOvIyN5vjWN70SgpTB.png

cSW599tOvIyN5vjWN70SgpTB.png

p26WeScuvAhgkH4S0ZzJQ8FH.jpeg

p26WeScuvAhgkH4S0ZzJQ8FH.jpeg

DgPP8THdMi6IMrEptPbtF5AY.png

DgPP8THdMi6IMrEptPbtF5AY.png

wk0s6FXbr7nA469tgQpKtjx3.png

wk0s6FXbr7nA469tgQpKtjx3.png

81msvsu9zHEXtmv204FhhYye.png

81msvsu9zHEXtmv204FhhYye.png

liaMnJoHnE1onU3K9GMkHIrt.png

liaMnJoHnE1onU3K9GMkHIrt.png

NYGkzDks6rak8l9TweehB9q3.jpeg

NYGkzDks6rak8l9TweehB9q3.jpeg

uz4We9wKSTN3ESiYgKGNqZVm.png

uz4We9wKSTN3ESiYgKGNqZVm.png

mnt7pOFKkMMNnNszFdZEhTzs.png

mnt7pOFKkMMNnNszFdZEhTzs.png

5Uc5QXe3b4RA132UZAWnhgXl.png

5Uc5QXe3b4RA132UZAWnhgXl.png

XEtSaj97bUuAYhZNJGUJeev5.png

XEtSaj97bUuAYhZNJGUJeev5.png

F3TpoEpS73EHSM5SgVmwENcT.png

F3TpoEpS73EHSM5SgVmwENcT.png

cRd8bG583kzsjFet79NdcfFw.png

cRd8bG583kzsjFet79NdcfFw.png

4RtRVIvCCuNESSGIRfqwBewk.png

4RtRVIvCCuNESSGIRfqwBewk.png

2xt9bBVQbGyrgJVvqfHHXPkP.png

2xt9bBVQbGyrgJVvqfHHXPkP.png

xQyaAe2cy3UogQPw24AV4ims.png

xQyaAe2cy3UogQPw24AV4ims.png

AXdmmeBPHmYwVK712PJDVMzG.png

AXdmmeBPHmYwVK712PJDVMzG.png

ouHqIn4LLwoYpQLQuUXmpA2O.png

ouHqIn4LLwoYpQLQuUXmpA2O.png

To9zfqnunFwmtng7hp6InGTV.png

To9zfqnunFwmtng7hp6InGTV.png

mJSUJq2ndlf39gpozrohImaT.png

mJSUJq2ndlf39gpozrohImaT.png

na1xyB8Bd69ifmIdUq9Ww7a9.png

na1xyB8Bd69ifmIdUq9Ww7a9.png

yYjkOqqE3OJ4H48lSlsdi6fO.png

yYjkOqqE3OJ4H48lSlsdi6fO.png

6uGcpD3Dil9mCLATcFrUI52V.png

6uGcpD3Dil9mCLATcFrUI52V.png

caVSgj87tjO2ZHLWYpsuZLMD.png

caVSgj87tjO2ZHLWYpsuZLMD.png

lG38FruwCVK8kP9RGrps8OOK.png

lG38FruwCVK8kP9RGrps8OOK.png

nDONTA0n2oJvf62jfOwkP0Fc.png

nDONTA0n2oJvf62jfOwkP0Fc.png

ZgQl8AlaN1C2jWxsyCKBB31G.png

ZgQl8AlaN1C2jWxsyCKBB31G.png

38wIXZNcfwJ7omv1GS02JMFF.png

38wIXZNcfwJ7omv1GS02JMFF.png

FbqJXrNtnxSjJ9nw5LQAETXx.png

FbqJXrNtnxSjJ9nw5LQAETXx.png

EZrH5hzNXMYWBZ5P7FEu3hfZ.png

EZrH5hzNXMYWBZ5P7FEu3hfZ.png

I9nLJvSKqeU0UbHdPrvOEcW6.png

I9nLJvSKqeU0UbHdPrvOEcW6.png

6X3WNOsFQZpp4ag7tjSvGjDa.png

6X3WNOsFQZpp4ag7tjSvGjDa.png

je12DS2cWXRXwVvGAIIUIIza.png

je12DS2cWXRXwVvGAIIUIIza.png

v9dqQ5qU03pDPaD703EYarEF.png

v9dqQ5qU03pDPaD703EYarEF.png

vjpOlgyhidJxpReBp8eNypw5.png

vjpOlgyhidJxpReBp8eNypw5.png

Xc7N8XIDQR1RDuDu8RGu2GhQ.png

Xc7N8XIDQR1RDuDu8RGu2GhQ.png

RqXToUIAg4vRq1pnVRs7qvBh.png

RqXToUIAg4vRq1pnVRs7qvBh.png

9oEKpOiRhdkAvwGOfCKzByhb.png

9oEKpOiRhdkAvwGOfCKzByhb.png

erUYFLY9JmN1JQJNQGJbsVAN.png

erUYFLY9JmN1JQJNQGJbsVAN.png

crwC2CDPt2UAAH02ehLBczN3.png

crwC2CDPt2UAAH02ehLBczN3.png

eteekcxbnojUGQ2b0b2qsL7D.png

eteekcxbnojUGQ2b0b2qsL7D.png

w91TjqnBO3pcE0FHrZ1FEFdA.png

w91TjqnBO3pcE0FHrZ1FEFdA.png

LxBk9vN9mPTBLvCExnKKHAs2.png

LxBk9vN9mPTBLvCExnKKHAs2.png

TZrHhMPWCS15xPph1tKdCIqW.jpeg

TZrHhMPWCS15xPph1tKdCIqW.jpeg

ia6jfhvyBgDpxxT4epsjzA7m.png

ia6jfhvyBgDpxxT4epsjzA7m.png

63hCCOAPzkRh0Mbr6oXLcnlX.png

63hCCOAPzkRh0Mbr6oXLcnlX.png

97zgFdzCnGYhgrej42ueMk8Q.png

97zgFdzCnGYhgrej42ueMk8Q.png

PRxMrMyD32DCkrmKwnouS55u.png

PRxMrMyD32DCkrmKwnouS55u.png

UwPeU6Qb5AOU20HAXobkm6T6.png

UwPeU6Qb5AOU20HAXobkm6T6.png

OJsI9mbnlJiRHnec77JH9q86.png

OJsI9mbnlJiRHnec77JH9q86.png

2SZ20DEeK2vG8UGSjXPS254h.png

2SZ20DEeK2vG8UGSjXPS254h.png

UweCvQKAbyyOHPgyjEPvk7xH.png

UweCvQKAbyyOHPgyjEPvk7xH.png

FAnmP1RamCgzhucx9K3JP8MA.png

FAnmP1RamCgzhucx9K3JP8MA.png

lgLH9RjMrOwtoiuuNtSGCbxk.png

lgLH9RjMrOwtoiuuNtSGCbxk.png

rcVpoc7QADTMpe5zS2cXYRbH.png

rcVpoc7QADTMpe5zS2cXYRbH.png

kvLe6RDntrNK7myvqeRbEp6f.png

kvLe6RDntrNK7myvqeRbEp6f.png

NoaRoK0KNc6hP03VVJxK29Ss.png

NoaRoK0KNc6hP03VVJxK29Ss.png

Q2i9V14E5aa2WCY3n7QfHpCv.png

Q2i9V14E5aa2WCY3n7QfHpCv.png

AmzHMQweacukYZOzpvPhkx6s.png

AmzHMQweacukYZOzpvPhkx6s.png

bUjnI3yEyhy2gO9PSgNGhCN1.png

bUjnI3yEyhy2gO9PSgNGhCN1.png

cIhcRgYGrm5Ppj2c5U7GtuyA.png

cIhcRgYGrm5Ppj2c5U7GtuyA.png

iFOhLTVRi7EXinEGJhYxbrq0.png

iFOhLTVRi7EXinEGJhYxbrq0.png

tsKPCmtBoVvN108qh6D94sAc.png

tsKPCmtBoVvN108qh6D94sAc.png

F4KGkKe5hwCeO6lfhNYBscwV.png

F4KGkKe5hwCeO6lfhNYBscwV.png

fTcNb2d6EqJLrOO1B45Wspd6.png

fTcNb2d6EqJLrOO1B45Wspd6.png

7qolj6Q5ZgXuLWwoGc09g0ns.png

7qolj6Q5ZgXuLWwoGc09g0ns.png

O3rQTMmK7upfWmo1xP7B1PmF.png

O3rQTMmK7upfWmo1xP7B1PmF.png

Zz28wDkmBKOdGOwmYXGUDn8H.png

Zz28wDkmBKOdGOwmYXGUDn8H.png

1tjMQ3ptBP18CEZ4WQHDdyYR.png

1tjMQ3ptBP18CEZ4WQHDdyYR.png

qNYIXcJWFBChXsTqZ7qxNyYM.png

qNYIXcJWFBChXsTqZ7qxNyYM.png

WpR35AijQxjbt3tIZKtVUhmg.png

WpR35AijQxjbt3tIZKtVUhmg.png

GyqcxZUGxfCHeSFpAFn2qEpV.jpeg

GyqcxZUGxfCHeSFpAFn2qEpV.jpeg

MeGU9qnR4awU1X8orA4EGjQO.png

MeGU9qnR4awU1X8orA4EGjQO.png

BFnwBcMEKe3x2h4eT4H0bqpp.png

BFnwBcMEKe3x2h4eT4H0bqpp.png

VuHAPRM62rIQAJVKEMA38Mtb.png

VuHAPRM62rIQAJVKEMA38Mtb.png

r5VzaGEcghox6UyAWSimUtrd.png

r5VzaGEcghox6UyAWSimUtrd.png

zL7DLn8VCf6jLWh1vdheFHB4.png

zL7DLn8VCf6jLWh1vdheFHB4.png

3L4aUDsaNTfTaxqiU6pERuWx.png

3L4aUDsaNTfTaxqiU6pERuWx.png

ACauVXDEL0Ar0cnT5Tn0ynRf.png

ACauVXDEL0Ar0cnT5Tn0ynRf.png

Z5NrJAajYgqAMXasIw7SGeMc.png

Z5NrJAajYgqAMXasIw7SGeMc.png

スタジオ真榊学習プリセット.zip

スタジオ真榊学習プリセット.zip

Nvwe8KSyRsqL7fN5mHDAhQd9.png

Nvwe8KSyRsqL7fN5mHDAhQd9.png

I45Xl77OJds3Irur5qztgOg6.png

I45Xl77OJds3Irur5qztgOg6.png

j5Wa4cq5Ay3Ni91XAcZW4Nky.png

j5Wa4cq5Ay3Ni91XAcZW4Nky.png

PxDkDTsGzfYwqWh0qnfrezgk.png

PxDkDTsGzfYwqWh0qnfrezgk.png

NHiW0c7AXPoLj9CBQqOS5u4e.png

NHiW0c7AXPoLj9CBQqOS5u4e.png

TPAhCplGj6zj0HEADhYC1uRk.png

TPAhCplGj6zj0HEADhYC1uRk.png

6wdO9dWBsSNuOVfnp8uuCNxC.png

6wdO9dWBsSNuOVfnp8uuCNxC.png

l25pBG4WJBntSEkM8ZPKX8aj.png

l25pBG4WJBntSEkM8ZPKX8aj.png

81D1smVZ8K8L5lfg1GdmBjih.png

81D1smVZ8K8L5lfg1GdmBjih.png

xusJJpSUDKZeyS6V6dp5efMV.png

xusJJpSUDKZeyS6V6dp5efMV.png

48Hi6YvdqpvIymO7ylkgoXmA.png

48Hi6YvdqpvIymO7ylkgoXmA.png

s2LmljHvPa8IuCxHNqzzl7r8.png

s2LmljHvPa8IuCxHNqzzl7r8.png