【Pony用スライダー系LoRA】Color Rough Sliderを公開しました!
ずーーーっと作ってみたかった差分LoRAにようやく手を付けたので、公開しました!やったー!
と言う訳で、DLはCivitaiからお願いします。(要ログイン)
モデルにもよりますが、こんな感じの効果が得られます。
これ系は月須和さんのsdxl-flatやw4r10ck氏のDetail Tweaker XLなどがありますが、自分の場合はカラーラフと完成品との間で差分を取っており、プラス適応で手描きっぽい印象にさせるのが本来の狙いなので、差別化は出来てるかと。
あとそれらのLoRAは大本のXLやAnimagineをbaseにしているのでPony系で作成してる点も差別化出来てるはず……多分。
恐らくマイナス適用の方がメインの使用方法になりそうな気がしますが、 手書きっぽい絵になる効果も悪くないのでぜひ色々な方法でお使い下さい。
ここからは、VARM4GBの民が一生懸命奮闘した流れを載せています。よかったらお付き合いください。
差分LoRA作った時の流れ
主にとーふさんの記事を参照させて頂きました。こういう情報って出始めの頃はよくまとめられるんですが、時間が経つほどに誰も取り上げなくなるので直近で情報を出して頂けることに感謝です。
今回作ろうと決めたのはカラーラフと完成品との間で差分を取ったLoRAです。より手描きっぽさを残したスタイルを出すLoRAを当初は考えていたのですが、+適応で手書き風の単純なスタイルに出来るのと同時に、-適応でその逆の描き込み量の多いイラストを作成出来るのではないか?というのが思い浮かんだためチャレンジした感じです。
カラーラフというのは、イラストの下絵を作った後に完成系イメージをざっくりと模索したり・固めたりするためにいったん仮置きで色を塗る作業……のような理解をしています。
これをしておくことで、実際に塗り始めた時に『なんか思ってた感じと違うな……』を防ぐことが出来るって感じです。
STEP1.学習させる画像の用意(2枚)
学習に使用した画像とはちょっと違うのですが、こんな画像でそれぞれLoRAを回しました。一例として左のような画像を生成してからControlNetでAnyTest v3をかけ、右のイラストに仕上げる方法でも作れると思います。
※ウェイトを高めにして忠実度を上げつつ、プロンプトで調整をしたりモデルを変更したりして画像を作成しています。
※重ねますが、今回使用した絵はこちらではありません。
差分学習はそれぞれの画像を過学習させてから、そのLoRA同士で差分マージをかけて要素を取り出していくような感じ。なので、取り出したい要素を考えてからそれと対比する画像を用意します。
学習はそれぞれ1枚づつ行い、反転などもせずに回しています。
STEP2.学習を回す
本来ならローカルで回すべきところですが、自分は自他ともに認める最弱VRAM環境の持ち主です。具体的には4GBで過酷な画像生成をしています。
ですんでぇ、こんなPCで学習なんて回せません!
以前はGoogle Colaboratoryを使用していましたが、最近はCivitai上で学習をしています。
最近のAI画像生成系プラットフォームは、オンライン上でも学習出来る所が多いです。他所だとtensor.artさんとか、pixai.artさんが有名でしょうか。
ただCivitaiよりも設定に自由度がなかったり、学習に突っ込める画像の枚数が少なかったりするので自分はCivitai一本でとりあえずやってます。
以前はCivitaiも1000Bazzくらいで学習回せたんですけどねぇ。課金体制が出来てから消費ポイントが上がったり、毎日の日課で貰えるポイント数がかなり減らされたりして結構苦しいです。地道にポイント貯めてやってます。
Civitai上での学習は、上部のドロップダウンメニューからTrain a LoRAを選択して進みます。作りたいものを選択すると、多分それに適した学習設定がセッティングされる感じだと思いますが、大体自分で設定するのでどれ選んでもいいと思います。
キャプションは「なし」なので、画像を一枚突っ込んで I own the rights to all these imagesにだけチェックをつけてNextを押す
こういう画面が出てきますが、無視してコンテニュってください。
Base Model for TrainingはPonyを選択。Sample Image Promptsは空っぽにしておきましょう。過学習LoRAなので、どの場面でも学習させた画像が出てくるようになればOKという判断なので何も入れません。
Training Parametersは学習設定を入れる所ですが、ココが過学習LoRを作成する場合のキモになります。主にとーふさんの記事を参考にしつつ、こんな感じに設定しました。
{
"unetLR": 0.0001,
"clipSkip": 2,
"loraType": "lora",
"keepTokens": 0,
"networkDim": 16,
"numRepeats": 200,
"resolution": 1024,
"lrScheduler": "constant",
"minSnrGamma": 0,
"noiseOffset": 0.03,
"targetSteps": 4000,
"enableBucket": true,
"networkAlpha": 1,
"optimizerType": "Adafactor",
"textEncoderLR": 0.0001,
"maxTrainEpochs": 20,
"shuffleCaption": false,
"trainBatchSize": 1,
"flipAugmentation": false,
"lrSchedulerNumCycles": 3
}
でも学習後の設定を確認するとこのようになっていたので、numRepeats400じゃなく200が最大値なのかな? 設定の説明部分には記載なかったですけども。
学習をそれぞれ回して、エポックごとに生成されたサンプル画像を見ながらいくつかのモデルをダウンロード。お互いのepoch数は同じになるようにしながら差分マージして確認しましたが、結局はラストのEpoch #20で作成したLoRAが一番出来が良かったです。
STEP3.SVDマージ
2つのLoRAが出来上がったりました。Civitai上だと正方形でしかサンプル出してくれないので、ローカルでもそれぞれの学習結果の確認のために生成して確かめましょう。
プロンプトなしの状態で、それぞれ学習させたイラストとほぼ同じものが出れば学習成功です。
それが確認できたらさっそくSVDマージを行いましょう!
Kohya GUIインストールしましょうね。ローカル環境ある場合、多分Git入ってると思うので任意のフォルダで右クリックしてからGit Bash HereでCmdっぽい画面出します。
出てきた真っ黒画面に以下のコマンドを入れましょう。
git clone --recursive https://github.com/bmaltais/kohya_ss.git
Kohya SSというリポジトリがフォルダに一式ダウンロードされます。
そのフォルダを開いて、Windowsならsetup.batをとりあえずダブルクリックしておく。色々勝手にインストールされます。時間かかるので待機。
終わったら、とーふさんの記事にあるバッチファイルを使用して自前の環境に修正し、マージを実行します。その際にぺーぺーの初心者が躓きそうな点を補足しておきますね。
※バッチファイルはkohya_ssのフォルダ開いた所にとりえあず入れるものとして話を進めます。
1.パス指定はフルパスでOK
フルパスはフォルダのアドレスバーからコピペしてきて貼り付ければOK
例えば私のkohya_ssフォルダのフルパスはこうです。
C:\Users\(ユーザーID)\Desktop\AI_tool\kohya_ss
2.ラストに\を入れる
上のままだと動かないので、最後に半角円マークの\を追加でいれます。
C:\Users\(ユーザーID)\Desktop\AI_tool\kohya_ss\
3.set models_Aの要素がマイナス方向に出る。
自分の場合はモデルAが完成品、Bがラフに設定しているので-指定で詳細なイラストになって、+指定で手書きっぽいイラストが出るようななLoRAになりました。+-でどっちの要素を出したいかで、モデルを入れ替えます。
4.エラーが出たかどうか見る為に、ラストにpauseを入れておく。
とーふさんのバッチファイルは素晴らしいんですが、もしエラーが出てきた場合にそのままcmd画面が閉じてしまってエラーログが見れません。原因究明のためにもエラーログが見たいので、とりあえずラストにpauseを入れておけば処理が止まった時にキー入力しないと画面が閉じないようになるので、オススメしておきます。
CPUモードでSVDマージする方法
ちなみに、とーふさんのバッチファイルだと自分は実行できませんでした。だってVARM4GBしかないもん!!!!!!!
LLMくんに相談した所、CPUでもいけるよと言われたのでとーふさんのを元にしつつ改造したものが以下になります。
ご自身の環境に書き換えて使用してください。
(echoに日本語使っちゃったので、sift-JISで保存してます)
@echo off
rem 以下の部分を自身の環境に応じて、適宜変更してください。
rem ------ Parameter ------
set output_file=完成品の名前.safetensors
set models_A=マイナス方向に出るやつ.safetensors
set models_B=プラス方向に出るやつ.safetensors
set pos_ratio=1
set neg_ratio=-1
set ranks=16
set precision=fp16
set current_folder=C:\Users\ユーザーID\Desktop\AI\_tool\kohya_ss\outputs\(学習済LoRAの保存先)
set venv=C:\Users\ユーザーID\Desktop\AI\_tool\kohya_ss\venv\Scripts\(venv/Scripts/までのパス)
set scripts=C:\Users\ユーザーID\Desktop\AI\_tool\kohya_ss\sd-scripts\networks\(sd-scripts/networks/までのパス)
rem ----------------------
set output=%current_folder%%output_file%
set input_model_A=%current_folder%%models_A%
set input_model_B=%current_folder%%models_B%
call %venv%Activate.bat
python %scripts%svd_merge_lora.py --save_to %output% --models %input_model_B% %input_model_A% --ratios %pos_ratio% %neg_ratio% --new_rank %ranks% --device cpu --save_precision %precision%
:copy_prompt
echo.
echo 処理が停止しました。エラーログをコピーしたい場合はCtrl+Aを押して全選択し、Ctrl+Cでコピーしてください。完了したら何かキーを押してください。
echo Yキーを押すと画面が閉じます。
choice /c YN /n
if errorlevel 2 goto copy_prompt
exit
なお自分のフォルダ構成がこちらになります。kohya_ss開いてすぐの所にoutputsフォルダを作りました。ここにマージしたい2つの差分モデルをぶち込んでます。マージ後のモデルデータもここに保存されます。
ご覧の通り、時間が結構かかりますがこれでも出来るだけマシ。VRAM貧者は黙ってCPUモードで実行するのじゃい。
ちなみに自分の改造したモードの特徴として、処理が停止すると以下のメッセージが出ます。
処理が停止しました。エラーログをコピーしたい場合はCtrl+Aを押して全選択し、
Ctrl+Cでコピーしてください。完了したら何かキーを押してください。
Yキーを押すと画面が閉じます。
もしエラーが出て止まってしまった場合、指示通りにログをコピペしてLLMに投げると理由を教えてくれるので、そういう時に使います。
問題ない場合はYを押せば画面が閉じる仕様です。
出来た差分LoRAを使ってテストする
既存の詳細度アップ系との差はこんな感じ。
髪の長さが変わったのは画面が白っぽくなる効果の延長のような感じですね。構図も大きく変わる場合がありますので、お好みでご使用ください。
改善案
今回2枚だけで作ったせいか、構図・色の変化がちょっと想定より大きいです。あと強度を上げ過ぎると破綻しちゃうのも他のスライダー系より劣っている部分だと思います。
おそらく学習データを増やしてLoRAを再作成すればいいんじゃないかな……。
お願い
このモデル作成にBazzをめっちゃ消費したので、可能ならCivitai上でBazzのTipを頂けると嬉しいです🙏✨
現金恵んでくださってもCivitaiでポイント購入が出来て嬉しいので、よろしければ拙作のAIにムフフな小説を書かせる方法の解説書あたりを買って下さるとお互いにwin-winかと思うのでご検討ください……。
そんなのいらんわという場合は、boothにページ作ったので投げ銭verを購入して頂けると助かります。よろしくお願いいたします。🙏✨