LoRAで縦長・横長画像学習のコツ
1枚を正方形で分割せよ!
AI画像は標準では正方形の縦横比で出力されます。でも、実際には正方形じゃない画像のほうが多いですよね。そこで、今回はLoRA作成時にきれいでうに縦長・横長の画像を学習させる方法について!
kohya_ss guiを用いる前提で記事を書いてますが、他の手法でも通用するし、MemeplexのカスタムモデルのようなDreamBoothタイプのものでも同じです!
正方形の画像以外を学習素材に入れるとkohya_ss guiでは画像がリサイズされます。
384*576の元は512*768、384*640の元は512*904、512*512はそのまま。あとは縦横比が逆のものですね。リサイズされて小さくなっているわけです。
学習画像のサイズを512*512より大きくするという対策もあるんですが、これはVRAMの消費が大きく、私の環境では640*640でもOutOfMemoryになっちゃいます。
結論から書くと以下のように1枚の縦長画像を、上の正方形と下の正方形に分割して、元画像とともに3枚の画像として学習させるがきれいに学習されるようです。私はこれにさらに顔のアップも加えて4枚でやってます。画像は私のキャラである「渚の妖精ぎばさちゃん」です。
2等分ではないのでかぶる箇所があることに注意!また、分割する際はキャプションを付ける方が良いです。
学習素材画像による違い
それでは、分割が本当に良いのか、ちがいを見ていきましょう。学習する画像は私のキャラである「渚の妖精ぎばさちゃん」です!
今回画像が少ないというか1枚なので繰り返し回数100回10エポックの1000step(分割版は3000step)で学習させています。
縦長画像を512*512画像にする
元々縦長のぎばさちゃん画像を512*512に収めた画像にして学習させます。
これで512*768の縦長で出力すると、512*512で学習しているためか縦方向に引き延ばしたような感じになります。指やヒトデ型カバンの箇所は作画崩壊しています。
縦長の縮尺を保った512*768画像にする
では、縦長の縮尺を保った512*768の画像で学習させたものはどうでしょうか?
縦に引き延ばした感じはないものの、全体的に再現が悪いですね。指に至ってはイソギンチャクがごとし!
冒頭に述べた通り、kohya_ss guiでは512*512より大きい画像は小さくリサイズされます。512*768は384*576にリサイズされるので、精度も粗くなってしまうのです。
縮尺を保った512*768、正方形で上下に分割画像を追加
結論としてもっともよいと書いた方式です。元画像、上半分正方形、下半分正方形に分割しています。
元画像:キャプションは「gibasachan」
上半分正方形:キャプションは「gibasachan, cowboy shot」
下半分正方形:キャプションは「gibasachan, head out of frame」
左がオリジナルで右がLoRA出力ですが、色がちょっと暗くなっている以外はほぼ完ぺきではないでしょうか?指先のような細かいところも再現されています。
ちなみに512*512でも高い再現度です。
私はこれに追加して顔等のパーツのクローズアップも入れています。」パーツ分割についての細かい話は別途記事にしようかと。
以前書いた2枚の画像からデルタもんを精度高く再現するという記事もこの縦長画像・横長画像の件とパーツ分割の合わせ技です。
私はケンタウロス画像LoRAも作っているのですが、ケンタウロス画像ではこのテクニックは必須です!人間より体が縦にも横にも長いですからね。
さいごに
実は最近LoRAのノウハウ記事に正方形に収めた画像しかないものがいくつか目についたので書いた記事だったりします。正方形画像しか学習してないと縦長・横長にした際に、2人に増えたり、ピグマン子爵になったりしがちなので、ぜひ縦長素材の学習で活用してみてください!