SD→SDXLで絵柄を変えたくない
さて、環境が整ったら、自分が使っているモデルのSDからSDXLへの移行です。もちろん、従来のSDのモデルはSDXLでは使えません。
正直言うと、1からモデルプロンプトを作っていかなければいけません。
しかし、やっとの思いで、従来のSDのモデルで、自分好みのイラストやキャラクターを作ったのに、SDXLで一から作らなければいけないなんてしたくないですよね。
オリキャラを作っていた場合は一苦労
特に、ただ単に自分好みのイラストを生成していただけであればまだしも、何かキャラクターを作っていた場合などは、結構SDからSDXLに移行する事は一苦労です。絵柄が変わってしまえばキャラクターが変わってしまいますからね。
キャラクターが変わると性格も変わってしまうので、せっかく自分がイメージしていたものとギャップが出てきます。
なので、そういった事は極力避けたい部分ではありますね。
従来のSDのモデルが、そのままSDXLで使えれば良いのですが、それはできません。
たまたま自分が使っているSDのモデルの作者が、SDXL版も作っていた場合は、それを使うのもありだと思います。
しかし、SDXL版がない場合を多く、もしあったとしても、絵柄などが変わっていることが多いです。
それではどうすればいいのでしょうか。
実際やってみて思ったこと
実際、自分でSDからSDXLに移行してみて、苦労したことや良かったことを書いておきます。1 girl で試す
当初は、SDのプロンプトそのままSDXLでも流用したかったので、AUTOMATIC1111のpng読み込みからSDで生成したイラストのプロンプト取得して、そのままSDXL用に取り込んでいました。AUTOMATIC1111では、それはとりあえず可能です。
しかし、同じプロンプトでもモデルが変われば全く異なる事は当然です。
もちろんそれはSDからSDXLのモデルに変更した時も同じです。
でもできるだけ流用したかったので、そのようにしていましたが、やはりその方法だと、どのプローブとか邪魔をしているのか、どのプロンプトが効果がないのかなど、細かい部分がわからず、うまくいかない原因がなかなかわかりません。
そこで、いろいろ考えた結果、1 girl のみのプロンプトで比較してみることにしました。
そうすると、そのモデルの持っている特徴がわかるので、比較しやすくなります。
その際、ネガティブプロンプトに関しては、そのままSDのものを使っても問題はなかったです。
ただEmbeddingなどがSDXLに対応していなかった場合は、SDXL用のものに変更する必要があります。
さて、1 girl でモデルを比較し、どれが自分が使っていた従来のSDのモデルに近いかを調べます。
ちなみに、使っていた従来のSDのモデルも 1 girl で生成してみます。
それにできるだけ近いモデルを選べば良いと言うわけです。
もちろん、モデル自体が異なるので、1 girl でが絵柄が近くても、そこからいろいろプロンプトを足していく上で、効きやすい効きにくいなど、従来のSDのモデルとのギャップはもちろん出てきます。
ただ、一番根底の部分は合わせておいた方が良いでしょう。
プロンプトを付け足していく
1 girl で合わせたら、次はプロンプトをつけ足していきます。その際、いっぺんに一気に付け足すのではなく、少しずつ付け足していきます。
そして、どのプロンプトが効果があるのか、またはありすぎるのか、または間違った方向に動いてしまうのかなどを一つ一つ確認していきます。
モデルによってプロンプトが効きは異なってくるので、理屈的に考えると、ここは一つ一つ確認するしかありません。
そして、新しいSDXLのモデルで使う上でのプロンプトを、取捨選択していくのです。
ちなみに、重みも変えたりします。
画質に関する設定は不要
割とそうしているうちに思ったのが、SDでは画像の質に関するプロンプト指定していましたが、SDXLにはそれはあまり必要ないと言うことです。あまり無駄なプロンプトは増やしたくないですよね。
そういった意味では、XLの場合はよりシンプルなプロンプトでも結構質の良いイラストができると言うことがわかるはずです。
重みが異なる
次に知っておくべきことが、モデルが変わると各プロンプトの重みも変わってくると言うことです。割と感じたことが、XLのほうは、重みが低くても反映しやすいと言うイメージがあります。
なので、SDが1.5とか指定をしていても、XLのほうは割と0.5とかでよかったりもするので、その辺を調整していく必要があるでしょう。
もちろん重みと言うのは、モデルによっても変わってくるので、一概には言えませんが、その調整だけはどうしても必要となってきます。
指定するところは細かく指定
XLでは、シンプルで少ないプロンプトである程度のものが先制することができますが、逆に細かい部分は、指定しないと生成されなかったりします。なので、そういった部分はプロンプトが逆に必要だったりするので、頭に入れておいたほうがいいかもしれないですね。
その点は従来のSDであれば、ランダムで細かい部分が出たりでなかったり生成のために変わっていたイメージがありますが、XLにするとランダム性が欠けている気がします。
そして、そういった部分はきちんと指定しないと生成されないと言うイメージがあります。
BREAKは必要
XLに変更すると、BREAKは必要かなとは思ってたりはしましたが、実際試してみたところ、BREAKは必要です。BREAKがなければ、一気に絵柄が変わったりするので、適度な場所で入力しておきましょう。
学習
それでもうまく行かなかった場合、自分で生成した大量のSD1.5イラストをSDXLモデル用に学習させる方法があります。SD1.5で生成されたイラストのスタイルや特徴をSDXLに反映させ、SDXLの生成結果がSD1.5に似たものになるようにファインチューニングします。
手順
データセットの準備
SD1.5で生成したイラストを高解像度でアップスケールした画像をデータセットとして準備します。各画像に対応するプロンプトをテキストファイルなどに記録しておくと、プロンプトと画像のペアでトレーニングしやすくなります。
LoRAによるファインチューニング
SDXLは非常に大規模なモデルであるため、直接トレーニングすると計算負荷が高くなります。LoRAを使用して、モデルの特定の層にのみ学習を行うことで、効率的に調整することが可能です。
Hugging FaceやKohya Trainerなどのツールを使うと、LoRAを活用したファインチューニングが比較的容易に行えます。
DreamBoothやsd-scriptsを使ったファインチューニング
- より細かくモデルの挙動をコントロールしたい場合は、DreamBoothやsd-scriptsを利用して、独自のデータセットでSDXLをファインチューニングします。これにより、SD1.5で生成されたイラストのスタイルをSDXLで再現することが可能です。
ただし、学習のために多くの計算リソースが必要です。
画像とプロンプトの設定
トレーニング中に使うプロンプトは、元のSD1.5で使ったものと同じか、もしくはSDXLの解釈に適した形に調整すると良いです。プロンプト調整によって、SDXLでの出力がSD1.5のスタイルに近づきやすくなります。
学習パラメータの調整
エポック数、学習率、バッチサイズなどのパラメータを調整しながら、SD1.5の特徴が十分に反映されるようにします。試行錯誤しながら最適なパラメータを見つけることで、SD1.5で生成したイラストに近い品質を得やすくなります。
テストと微調整
学習後、いくつかのプロンプトで出力をテストし、期待通りのスタイルや品質に仕上がっているか確認します。必要に応じて追加のトレーニングやパラメータ調整を行います。
注意点
リソースの確保
SDXLの学習には大量のVRAMや計算リソースが必要です。可能であれば、クラウドサービスや高性能GPUを利用すると良いでしょう。
ファインチューニングの範囲
SD1.5のスタイルを強く反映させすぎると、SDXLが元々持つ多様な表現力が制限される可能性もあります。バランスを見ながら調整を行うのがおすすめです。
この手順でファインチューニングを進めれば、SD1.5で生成したイラストをSDXLで再現するようなモデルに仕上げられる可能性が高いです。
[カテゴリ]
2024年09月20日
関連記事
こちらの図がわかりやすいみたいですね。https://www.reddit.com/r/StableDi...
2024年10月01日