差分学習法でお手軽に衣装LoRAを作ろう
by 小泉勝志郎
自称LoRAの魔術師の小泉勝志郎です!今回は結構すごいですよ!名付けて差分学習法とでも言うべきLoRAの作り方です。めちゃくちゃ応用範囲が広いのです。今回は衣装LoRAでその威力を見てみます。
前回のおさらい
前回の記事でAI画像のLoRA作成時のキャプションの付け方を検証しました。
簡単におさらいすると以下の点がポイントです。
LoRA使用時に学習時のキャプションをプロンプトとして用いると学習時の画像がかなり再現されること。

また、主に学習素材間の共通点はキャプション内の共通しているタグに、画像の違いがタグの異なるところに学習されるということを取り上げました。

今回の記事はこの特徴を最大限に利用して衣装LoRAを作成しようというものです!
赤毛のアン風味の衣装を作ろう
この3枚の画像から衣装LoRAを作ります。今回もすべての学習素材はAIで生成したものです。この画像はRealisticVisionV5を用いてAI画像生成したもので、赤毛のアンをイメージしてみました。

今回紹介するLoRA作成手法を使うと、全然系統の違う女の子が素材と異なるポーズをした画像がちゃんと作れます。こちらはモデルをBRAV5に切り替えて日本人顔にしてみました。プロンプトはLoRAのトリガーワードである「akage」を含めて「akage, girl, lying, road」です。

元画像と全然違う顔とポーズなのにちゃんと衣装が反映されていますね~。衣装LoRAを作ったことある人にはわかると思いますが、なかなか顔が変わっても衣装を維持するって難しいんですよ。少ない枚数だと特に。
ただ衣装LoRAを作ったことがないとなぜ衣装LoRAを作るのが難しいのかわかりづらいかもしれませんね。そこで、まずはそこを説明していきます。
衣装LoRAをちゃんと作るのは難しい
LoRAにはキャラクターLoRAや画風LoRA等ありますが、その中でも衣装LoRAは難度が高めです。LoRAはその学習画像にあるものを人物も背景も小物もすべて学習します。衣装だけを学習させたくても、当然のごとく顔や髪形まで学習してしまうのです。
そのため、衣装を着せると顔の印象まで変わってしまうということが起きないように、顔のパターンをたくさん用意したり、正則化画像というものを用いて衣装以外の特徴が学習されづらくしたりします。まあ、Civitai等に公開されているLoRAには衣装を着せると顔が変わってしまうものも結構あるんですけどね……。
まあ、まずは通常の学習法で試してみましょう!ここでは正則化画像を使っていません。
実際に先ほどの3枚の画像で通常の手法でLoRAを作成し、同じくBRAV5で同じプロンプト「akage, girl, lying, road」で生成してみます。

元画像の影響が強いですね!日本人顔になっていないし、道路は出たけど元画像の影響で草原の中にあるし、何より地面に寝そべっていません。
このように顔、背景、ポーズに学習元画像の影響が強く出てしまうのです。
今回の差分学習法はコピー機LoRA学習法と呼ばれるものを応用したものです。なので、まずコピー機LoRA学習法を簡単に説明します。
ちょっと寄り道コピー機LoRA学習法
コピー機LoRA学習法は過学習を利用したもの。これはエフェクト系のLoRAによく用いられる手法で、ちょっと変わった手順で作られます。元画像から変化した部分のみを学習することができるというものです。衣装LoRAからは一見寄り道になってしまいますが、コピー機学習法のやり方を見てみましょう。
コピー機LoRA学習法の手順は以下の通りです。
1. ベースモデル (以下A)に対し、1枚の画像(以下x)を過学習させてその画像しか出てこないLoRA(以下X)を作る
2. AとXをマージして、新しいモデルBを作る
3. 画像xに目的の加工(ここでは白目)をした画像(以下y)を作る
4. マージしたモデルBをベースモデルとして画像yを過学習させてその画像しか出てもないLoRA(以下Y)を作る
5. ここで作成したLoRAであるYは元の画像の制約を受けずに学習したエフェクトを様々な画像に適用できるLoRAになる
AとかXとか出てきてもよくわからないと思うのでまずはやってみます!
コピー機LoRA学習法はエフェクト系に強い学習法。夏なのでホラー風味で行きましょう!人物の目を白目のみにするLoRAを作ってみます。
まず1.の工程。はRealisticVisionV5で作ったこの女の子の画像だけでLoRAを作ります。キャプションは「girl」にしてみました。この画像だけで学習させます。

この1枚のみの画像に対して1000ステップで学習させています。LoRAはkurome_v1にしました。
実際に作成したLoRAで出した女の子の画像です。多少肌の質感に違いはありますが、どんなseed値でもこの女の子の画像が出るようになるんですね。これがコピー機という言葉の由来です。

次に2.の工程であるモデルのマージ。このLoRAをSD Web UIの拡張機能「Super Merger」を用いてマージします。
SD Web UIのExtentionsタブでさらに「Install from URL」を選択してURL for extension’s git repositoryに「https://github.com/hako-mikan/sd-webui-supermerger.git」と記述してインストールしてください。SD Web UIを再起動すると反映されます。

では、実際にマージしてみます。
SD Web UIのタブに「Super Merger」が追加されているのでそこを選択。さらに「Super Merger」内の「LoRA」タブを選びます

LoRA学習のベースにしたモデルを「Model A」で選択。ここではRealisticVisionV5を選択しています。
そして、「LoRAname」の欄に先ほど作ったLoRAであるkurome_v1をLoRA強度とともに記述します。手で書きこんでも良いのですが、上の画像の右下にある「get from prompt」ボタンを押すと「txt2img」タブで画像生成に用いたプロンプトからLoRA名称とLoRA強度を取得してくれます。
また、filename欄にはこの2つをマージして作成される新しいモデルの名前を記述します。ここでは「kuromereal_v1」としました。
このkuromereal_v1で「girl」のプロンプトを用いて画像を生成すると、先ほどのLoRA使用時と同様に常に同じ女の子の画像が生成されます。
続いて3.の工程。元画像を加工した画像を作ります。元画像をを白目に加工しました。ちょっと怖いですが。inpaint sketchを使って加工しています。

そして、4.の工程。マージしたモデルである「kuromereal_v1」をベースモデルとして、この白目画像1枚のみを学習させます。ステップ数は先ほどと同じく1000。キャプションは「white eyes, girl, portrait, closeup」です。LoRAの名前は「white_eyes_v1」としました。
「kuromereal_v1」で「white_eyes_v1」を適用して生成しても上の白目の女の子が出で来るだけです。ここで最初の女の子を作ったときのベースモデルである「RealisticVisionV5」に「white_eyes_v1」を適用して生成してみます。
全然違う顔にするためにプロンプトは「white eyes, African girl, portrait, outdoor, masterpiece,best quality<lora:white_eyes_v1:1.5>」とアフリカ系の女の子になるようにしました。元画像の白目加工が甘かったのでLoRA強度は1.5と強めにしています。さて、どうでしょうか?

おお、ちゃんと白目になってくれています。コピー機LoRA学習法は元画像から変化した部分のみが学習されていることが良くわかるのではないでしょうか?
差分学習法で衣装LoRAを作る
これから紹介する差分学習法はコピー機学習法をアレンジした私独自の手法です。AI画像生成ユーザーが山のようにいる中でどんどん新手法が開発されているので、なかなか独自と言い切りにくかったりしますが画像をまずはハゲに加工しましょうと言っているLoRAの説明を見たことがないので……。
さて、コピー機LoRA学習法はある一つの画像しか出せなくなったところに加工画像を学習させる手法でした。コピー機の名の通り学習した画像をほぼそのまま出せるのが重要なわけですが、実は前回の記事で似たような現象に触れていました。
LoRAのキャプションをそのままプロンプトとして使うとかなり画像が再現されるというものです。これはコピー機LoRA学習法ほどの高ステップ数にしなくてキャプションをある程度詳しく記述すれば再現されます。

コピー機LoRA学習ほどの精度ではありませんが、かなり再現されていますよね。私がやる差分学習法はこの現象を利用したものです。
コピー機LoRA学習法は元画像1枚と加工画像1枚の一対一でのものでした。そのため、衣装には向いていませんないんですよ。衣装は横からの姿や後ろからの姿等1枚の画像だけでは足りない情報が必要だからです。
ただ、前回紹介したLoRAのキャプションをそのままプロンプトとして使うとかなり画像が再現されるのを利用する場合は、枚数に関係なく実現できそうですよね。コピー機LoRA学習法的な手法が衣装LoRAに応用できるのでは?
ということで、私がLoRA学習の際に行っているのがその手法なのです。コピー機LoRAのように「その画像しか出ない」というわけではないので差分学習法という名前にしています。では、実際にやってみましょう!
これが差分学習法だ!
差分学習法はコピー機LoRA学習法に似てはいるんですが、手順がちょっと違います。
1. 元の学習素材(以下y)に対して、学習してもらいたい箇所がなくなるように加工して、加工素材(以下x)を作る
2. 加工画像xにキャプションを付ける。この際、元画像素材にある学習してもらいたい箇所はキャプションに入れない。また、加工の際の特徴もキャプションに入れない
3. ベースモデル(以下A)に対し、加工画像xを学習させたLoRA(以下X)を作る
4. AとXをマージして、新しいモデルBを作る
5. マージしたモデルBをベースモデルとして元の学習画像yを学習させたLoRA(以下Y)を作る
6. ここで作成したLoRAであるYは元の画像の制約を受けずに、画像の中の学習させたいところだけが学習されたLoRAになる。衣装LoRAなら元画像の顔・背景・構図の制約が大幅になくなる
それでは実際に手順を見てみましょう!
まず、元となる学習素材は冒頭に出したこの画像3枚です。

まずは1.の工程。今回赤毛のアン風味の衣装としてLoRAに学習させたい要素は赤毛・三つ編み・麦わら帽子・灰色のドレスです。それ以外の背景や顔立ち、ポーズは学習されなくて良い要素。学習させたい要素が消えるように加工します。
自分以外でまず画像をハゲにしましょうと言っている人を見たことがないと先ほど書きましたが、この学習させたい要素を消す作業のことなのです。女性をハゲにするのは申し訳ないので今回はショートヘアにしておきます。ちなみに単に塗りつぶすだと加工画像の学習具合は良くないので、衣装を外すもしくは別の衣装にするというのが効果的です。
というわけで、このように加工してみました。

青のタンクトップで赤いショーツ、そして黒髪ショートヘアの女性にしてみました。えらくスポーティーな感じで元の赤毛のアン風味の画像と全然違う人に見えますが、顔や手の露出しているところそして背景は同じです!女性をハゲにするのは申し訳ないので、黒髪ショートにしました。
横向きの姿では赤毛のままサイドの髪を残しています。髪のこの部分は学習されなくても良いので。学習されなくても良いではなく、学習させたくないという場合は赤毛画像の方からサイド部分の髪をより除く方が良いです。
続いて2.の工程。この3枚の画像でLoRAを作るためにキャプションを付けます。前回の記事でWD-Taggerを参考にしていますが、基本的には手動タグ付けです。ここで重要なのは元画像を変更した箇所のタグは入れないことです。黒いショートヘアー、青いタンクトップ、赤いショーツはタグには入れません。赤毛状態とかぶるタグだけを付けます。
正面の画像
girl, face, thigh, freckles, blue eyes, smile, closed mouth, looking at viewer, own hands together, standing, outdoor, blue sky, clouds, tree, grass, stud earrings, sunlight, medium breasts
横の画像
girl, face, thigh, from side, profile, freckles, blue eyes, looking afar, closed mouth, arms at sides, standing, outdoor, tree, grass, sunlight, medium breasts, depth of field, walking
後ろの画像
girl, head, thighs, kneepits, outdoors, from behind, facing away, standing, grass, field, tree, day, back, arms at sides, blurry background
LoRAのキャプションをそのままプロンプトとして使うとかなり画像が再現されるには背景の情報やポーズ、身体的特徴も含めて詳し目に書く方が良いです。コピー機LoRA学習法の時と同じように「girl」だけだと複数枚あるときは再現が良くないです。
3.の工程でこの画像とキャプションでLoRAを作ります。繰り返し回数10、エポック数10で学習させています。train_batch_sizeは1です。ベースモデルは画像を作ったのと同じRealisticVisionV5。今回は「akage_org_v1」という名前にしました。
また、画像は先ほどの3枚ですが縦長画像なので、1枚を全体・上半分正方形・下半分正方形の3枚に分けて、全部で9枚での学習にしています。縦長画像学習のコツについては私のnote記事であるLoRAで縦長・横長画像学習のコツを参考にしてください。
では、まずは赤毛から加工した画像で作成したLoRAで画像を生成してみましょう。

正面からの画像がショーツまで青になってはいますが、これから衣装で上書きされる部分の再現性はどうでも良くて、衣装で上書きされない顔立ち・ポーズ・背景に関してはかなりの再現度です。
4.の工程で今作ったLoRAである「akage_org_v1」とベースモデルであるRealisticVisionV5をマージします。名前は「akagereal_v1」としました。
5.の工程で今マージしたモデル「akagereal_v1」をベースとして赤毛のアン風味のこの3枚の画像からLoRAを作ります。先ほど同様1枚を全体・上半分正方形・下半分正方形の3枚に分けて、全部で9枚での学習にしています。

この画像につけるキャプションですが、先ほどの加工画像を学習させるときのキャプションの頭に「akage」を足したものとなっています、
正面の画像
akage, girl, face, thigh, freckles, blue eyes, smile, closed mouth, looking at viewer, own hands together, standing, outdoor, blue sky, clouds, tree, grass, stud earrings, sunlight, medium breasts
横の画像
akage, girl, face, thigh, from side, profile, freckles, blue eyes, looking afar, closed mouth, arms at sides, standing, outdoor, tree, grass, sunlight, medium breasts, depth of field, walking
後ろの画像
akage, girl, head, thighs, kneepits, outdoors, from behind, facing away, standing, grass, field, tree, day, back, arms at sides, blurry background
前回の記事で取り上げた共通部分はタグの共通箇所に、異なる部分はタグの異なる箇所に学習されるというのを用いるわけです。

各種パラメータは先ほどと同じにして、「akagereal_v1」をベースとして新しく「akage_v1」というLoRAを作ります。
新しく作成した「akage_v1」を元々のベースモデルであるに適用して「akage, girl」のプロンプトで生成してみましょう。すると!

麦わら帽子に赤毛のおさげ、灰色のドレスという特徴は再現されていますが、顔の特徴は完全になくなり人種まで変わっています!ポーズも背景も元画像に引きずられていません!
一応元のようにヨーロッパ系の顔立ちにするには「akage, European girl」とすればこのように生成されます。

麦わら帽子の形が安定していませんが、これは元の学習画像で3枚とも麦わら帽子の形が異なっているからですね。おさげの雰囲気も元画像の段階で統一されていないので表現に少し幅があります。
ただ、余分な特徴を捨て去っていることによってアジア人特化のモデルであるBRAV5でも、BRAV5の特徴を損なわずに生成できます。

ちなみにアニメ系モデルのlamettaで生成してもなかなか良いです。おさげの色が一部飛んでいますが。

服装や麦わら帽子やおさげの特徴を完全に一致させたり、ポーズの種類をより増やすのように素材を増やすと精度も高くなっていきます。で、素材を足して精度を上げることができるのがコピー機LoRA学習法と今回提案した差分学習法の違いとなります。
そして、画像の加工のところですが、体のラインが変わると体のラインが変わるという学習になってしまうので厚着には加工しない方が良いです。今回はスポーティーな衣装にしましたが、全身タイツのような衣装にするのが汎用的に使いやすいと思います。
今回の衣装だとわかりづらいのですが、衣装で特徴的に露出するところがあれば、そこは露出しないように加工すると良いです。なので逆バニー衣装を学習させるならバニーガール衣装に加工するのは理にかなっているはず!過激になるので検証はしませんけど!
ちなみに手が露出しているからと言ってわざわざ手袋に加工する必要ないですlプロンプトで指示しなくても勝手に手袋を付けられてしまうようなとき(ウェディングドレス等)のときのみ手袋に加工すればよいです。
まとめ
- 差分学習法は画像の中の学習させたいところと学習させたくないところを明確に分けられる学習法
- 差分学習法は、学習させたいところがなくなるように加工した画像でLoRAをつくり、そのLoRAをマージしたモデルで元の画像を学習させるという手順で作る
今回は衣装LoRAで検証しましたが、差分学習法はキャラクターLoRAや画風LoRAにも応用ができるのです。次回以降衣装以外での応用について触れていきます。
関連
自称LoRAの魔術師の小泉勝志郎です!今回は結構すごいですよ…
