LoRAを使い、作り、投稿する。まとめ
更新中のため記述に誤りがあるかもしれません
2023/05/29 14:44 更新
AI素人です
知識はそんなに深くないので難しい事はあまり書かないです
download数が増えるとたぬきが喜びます good(💛)が増えるとたぬきのHPが回復します
rating(☆)が増えるとたぬきのモチベーションが上がります
日記のようなもの
無事に住処に帰ってこれました。
いろいろ書きたいのですが、自分が使っていない拡張などどこから手を付けたらいいのやら?
そもそもLoRAって何?の説明
ざっくりとした説明
stablediffuisonというソフトで使われている学習済モデル(pretraind model 5GBくらい)そのままでは新しい絵が出せないので追加で学習させたい。
でもデータ全体が変更される学習方法だとすごく大変なのでLoRAっていう限定的な学習方法で現実的なコスト(データ量・計算時間)で出来るようになったよ!
新しい絵を学習させて、それが使えるようになるという理解。
https://qiita.com/ps010/items/ea4e8ddeff4de62d1ab1
Stable Diffusionの特徴は、次の3つです。
Stable Diffusionは、最近流行の Diffusion Model(拡散モデル)をベースとしたtext-to-imageの画像生成モデルです
VAEでピクセル画像を潜在表現に変換することで、モデルの軽量化に成功しました
U-Netを用いた画像生成の条件づけにText EncoderのCLIPを使用します
https://dosuex.com/entry/2023/03/30/115101
LLMの課題
近年、LLM(大規模言語モデル)が多くの自然言語処理タスクで顕著な成果を上げています。一般的に、これらのモデルは非常に多くのパラメータを持っており、特定のドメインやタスクへの適応を行う際には、大量のデータと計算リソースが必要となることが課題となっています。また、モデルのサイズが大きくなることで、デバイスのメモリや計算能力が制約される環境での使用が困難になる場合もあります。
LoRAの目的
LoRA(Low-Rank Adaptation)は、この課題に取り組むためにMicrosoftによって開発されました。LoRAの目標は、LLMのパラメータを低ランク行列で近似することにより、適応の際に必要な計算量とメモリ使用量を大幅に削減し、タスクやドメイン固有のデータで迅速かつ効率的にモデルを微調整することができるようにすることです。これにより、LLMをより実用的で効果的なツールに進化させることが期待されています。
元々LLMの学習コストを下げる為に考えられた方法をstablediffusionに応用したという感じ?
------------------------------------------------------------------------------------------------------
閑話休題
学習する為のPCの推奨
OS Win11
CPU 最近のならなんでもよい
RAM 32GBくらいあれば動くはず
SSD 読み書きが早くなります
GPU GeforceRTX VRAM8GBが最低ライン、6GBは設定を突き詰めれば?、12GB以上あると安心?
Webブラウザ firefoxとchromeとEdgeの最新バージョン
前提となる環境/ソフトウェアの導入 Win11/Geforce
Geforce Experience導入(共通)
https://www.nvidia.com/ja-jp/geforce/geforce-experience/

webui automatic1111導入(windowsローカル編)
git

ダウンロードして実行してインストール
設定は弄らずにそのままでいけた筈
インストール後
パワーシェルで

git

インストールされているのを確認
python
python3.10.6をインストール
https://www.python.org/downloads/windows/

最近のWin11機であれば64bitだと思います。32bitで動かしているのは知らないです。
anaconda3やminicondaはインストールしない想定で書いています。
Windowsストアからもアプリ版のpythonが入れられるようですが確認していません。
解説サイトでも扱いが無いのであまりおすすめ出来ないです。
インストール後、Windowsの検索からpowershellを検索し実行

パワーシェルで
python -V
を実行、バージョンが表示されていればインストールされています。
インストールしてもpythonが見つからない場合はパスの設定がおかしいです。

この場合はPython 3.10.10が入っていますが特に問題無く動いています。

バージョンがだいたいあっていればだいたい動くし動かない事もある
webuiでもsd-scriptでも3.10.6バージョンが安定しているようです。
PyTorch のインストール(Windows 上)※1引用
コマンドプロンプトとパワーシェルは別環境なので、パワーシェルに読み替えて下さい。
コマンドプロンプトを管理者として実行:
PyTorch のページを確認
PyTorch のページ: https://pytorch.org/index.html
次のようなコマンドを実行(実行するコマンドは,PyTorch のページの表示されるコマンドを使う).
次のコマンドは, PyTorch 2.0 (NVIDIA CUDA 11.8 用) をインストールする.
事前に NVIDIA CUDA のバージョンを確認しておくこと(ここでは,NVIDIA CUDA ツールキット 11.8 が前もってインストール済みであるとする).
https://developer.nvidia.com/cuda-11-8-0-download-archive
Windows x86_64 11 exe(local)を選択、赤矢印にダウンロードリンクが出るので落とす
そして実行する
一行ずつ実行していってね!
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"pip installするとだーっと進捗が表示されて終わったらpython -cでtorchがインストールされているのか確認します
torchのバージョン1.13とか1.12とか2.0が表示されたら入っていると思います
Automatic Installation on Windows
エクスプローラーで導入したい場所のフォルダを右クリックして
ターミナルで開く を実行

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
webui-user.bat
をエクスプローラーから実行
1.をパワーシェルにコピペして実行
処理が終わるとフォルダにwebui-user.batが作られているので実行する
webブラウザから http://127.0.0.1:7860 を開く(http://localhost:7860 でもokな筈)
(設定で自動でブラウザで開くようにも出来ます。)
導入以降はwebui-user.batを実行するようになります。
web-user.batの中身
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=
call webui.bat
VRAM4GB以下向けオプション
VRAM消費量を低減する代わりに速度が犠牲になるとのこと。
set COMMANDLINE_ARGS=--medvram
↑で out of memory が出た場合
set COMMANDLINE_ARGS=--medvram --opt-split-attention
↑でもまだ out of memory が出た場合
set COMMANDLINE_ARGS=--lowvram --always-batch-cond-uncond --opt-split-attention
その他のオプション
--xformers (高速化/VRAM消費減)
torch2.0なら無くても良い 環境による
--opt-channelslast (高速化)
1111のWikiによると、Tensor Coreを搭載したNVIDIA製GPU(GTX16以上)で高速化が期待できるとのこと。
--no-half-vae (画像真っ黒対策)
真っ黒になった時に
--ckpt-dir(モデルの保存先を指定する。)
保存先を変えたい時に
--autolaunch (自動的にブラウザを立ち上げる)
いちいちWebブラウザにアドレスを入れるのが面倒な時に
--opt-sdp-no-mem-attention または --opt-sdp-attention
(Torch2限定
xformersと同じく20%前後高速化し、出力にわずかな揺らぎが生じる。VRAM消費が多くなる可能性がある。
AMD Radeon,Intel Arcでも使える。)
--device-id 0 (複数枚GPUが刺さっている場合に指定する、0から始まる。デフォルトでは0を使う。)
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:24
PytorchでCUDAがメモリを使う時の設定
閾値6割メモリが使われたら 24MB単位でGarbageCollectionするよ(メモリ上の使われていないデータを掃除、消費メモリが減る。のでCUDAがOutOfMemoryを表示して落ちなくなる・・・という願い。)
拡張機能によっては相性が悪かったりするのでreadmeをよく読んで使って下さい!
初期設定で起動すると自動でckptをダウンロードするのでしばらく時間が掛かります
sd-script導入
パワーシェルでコマンドが実行出来るように権限を設定
管理者権限でパワーシェルを開く
Set-ExecutionPolicy Unrestricted
と入力しAを打つパワーシェルを閉じる
powershellをスタートメニューから検索して右クリックして管理者として実行をクリックしてください
パワーシェルを開いて以下を一行ずつ実行
git clone https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts
python -m venv venv
.\venv\Scripts\activate
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --upgrade -r requirements.txt
pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl
cp .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\
cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py
cp .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py
accelerate config
LoRA_Easy_Training_Scripts 導入
v5以前の場合
https://github.com/derrian-distro/LoRA_Easy_Training_Scripts/releases
.batをダウンロードして配置したいフォルダで実行する
v6の場合
Release installers v6 · derrian-distro/LoRA_Easy_Training_Scripts (github.com)
installer.pyを導入したいフォルダに配置して

ターミナルを開いてパワーシェルで
python installer.py を打ち込み実行
途中色々ダウンロードされるので待ちます
Do you want to install the optional cudnn1.8 for faster training on high end 30X0 and 40X0 cards? [Y,N]?
と聞かれるので30x0/40x0シリーズのグラボを使っている場合はYを入力、それ以外のグラボはNを入力してください
sd-scriptが入りますが設定が終わっていないので
パワーシェルで一行ずつ実行してください
cd sd-scripts
venv\Scripts\activate
accelerate config
共通
accelerate configで次のように答えて下さい
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16 (数字キーの1を押してリターンで選びます、矢印キーで操作しようとするとエラーで落ちます)
webui簡単インストーラー版
https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.0.0-pre
The webui.zip is a binary distribution for people who can't install python and git.
Everything is included - just double click run.bat to launch.
No requirements apart from Windows 10. NVIDIA only.
After running once, should be possible to copy the installation to another computer and launch there offline.
webui.zip は、python と git をインストールできない人向けの環境です。
すべてが含まれています - run.bat をダブルクリックして起動するだけです。
Windows 10 以外の要件はありません。
NVIDIA のみ。
一度実行した後、インストールを別のコンピューターにコピーして、オフラインで起動できるはずです。
使っていないので解説出来ませんが、お手軽そうですね。
Win10の環境が無いので検証できませんので他の方の記事を参考にして下さい。
LoRA ファイルについて
階層見本
stable-diffusion-webui
┗models
┗lora この中に使用したい学習データを保管します。
LoRAで使用可能なデータは「.safetensors」「.ckpt」の拡張子です。
識別子を使用する場合、プロンプトに識別子を記述することを忘れないようにしましょう。
例:キャラクターを「shs」、クラスを「1girl」として学習させたLoRAファイル「lora_chara1.safetensors」の場合、「 <lora:lora_chara1:1> shs」というように記述します。
識別子の有無や使用する文字は学習データごとに異なるので、必要に応じて適用してください。
CIVITAIではpnginfoのLoRAファイル名とダウンロードされるLoRAファイル名が異なるので
自分で書き換える作業が必要になるかと思います。
ファイル名書き換えるか、プロンプトの方を書き換えるかです。
kohysa sd-scriptでの学習方式まとめ
1.DreamBooth、class+identifier方式(正則化画像使用可)
フォルダ名にclass+identifier
繰り返し数を10にしたい場合は
10_class_identifier とする
classは概念?dogとか1girlとか
identifierは使うときに呼び出すトリガーワードみたいなもの
正則化画像を用意する
無くても学習できる
--train_data_dir= 学習用画像のフォルダ
--reg_data_dir= 正則化画像のフォルダ
2.DreamBooth、キャプション方式(正則化画像使用可)
学習用画像のフォルダに、
画像と同じファイル名で、拡張子 .caption
(設定で変えられます)のファイルを置く
それぞれのファイルは1行のみ。エンコーディングは UTF-8
。
notepadでUTF-8を指定して保存すれば良い。
--train_data_dir= 学習用画像のフォルダ
--reg_data_dir= 正則化画像のフォルダ
50枚画像があると50個書かなければならないのでwebuiでタグを付けるのがいいと思う
(やった事が無いのでわかりません、すいません。)
3.fine tuning方式(正則化画像使用不可)
教師画像と.jsonファイルを使う(wd1.4taggerで.txtファイルを作って.jsonファイルにコンバートする)
この下に書いてあるやり方。
--train_data_dir= 学習用画像のフォルダ
--in_json= .jsonファイルを指定する
3.の作り方で説明をしていると思ってください
あとパスはc:/にしてありますが、各々の環境に読み替えてね!
学習用データセットの準備
画像を用意する
1.自分で描く
2.インターネットから拾って来る
a.gallery-dlというソフトを使うと色々な投稿サイトから画像を拾って来る事が出来るようです
https://gigazine.net/news/20201205-gallery-dl/
pip install gallery-dl
gallery-dl URL
URLを指定するとカレントディレクトリ下にgallery-dlフォルダを作ってその下に
1.twtitter
2.danbooru
3.pixiv
等のフォルダの下に検索ワード名のフォルダを作り、画像が保存されるようです。
大量の画像がHITする場合は全てDLされるまで終了出来ないようですので注意して下さい
b.youtube-dlというソフトを使うとyoutubeから動画を拾って来るようです
https://gigazine.net/news/20220101-yt-dlp/
ffmpegというソフトを使うと動画から連番静止画ファイルを作れるようです
ffmpeg -i input.mp4 -vcodec png -r 10 image_%04d.png
オプション 値 機能
-i input.mp4 入力ファイルを指定する
-vcodec png コーデックを指定する
-r 10 静止画にするフレームレート(1秒間に何枚か)を指定する
image_%04d.png 出力ファイル名を指定する。
%04dでゼロフィル4桁の連番画像が出力される
(画像が少なければ反転・切り取りなどを駆使)極論すれば一枚あればどうにか出来るらしい?
ファイルをフォルダに配置する。(正則化画像は説明がめんどくさいのでいつか書く)
targetが学習させたいものの名称だと思って下さいね
ファインチューン向けメタデータの作成方法
(jsonファイルを読み込んで学習させる場合)
kyousi(フォルダ)
target(フォルダ)
target000.jpg(画像ファイル)
target001.jpg(画像ファイル)
webui automatic1111の拡張機能のwd1.4taggerでタグ付けバッチ処理をする
(他の使った事無いのでベストかどうかは分からない)
バッチ処理の入力フォルダの画像を読み込んで、出力フォルダに画像枚数だけ.txtファイルを書きだす。
ディレクトリ一括処理 タブを選んで
入力ディレクトリにtargetを指定
出力ディレクトリにtargetを指定
重複するタグを削除(としあき製のタグクリーナーを使う場合は✅要らない)
JSONで保存(としあき製のタグクリーナーを使う場合は✅要らない)
インタロゲーターを指定できますがデフォルトのを使用しているので違いは良く分かりません

インタロゲートのボタンを押すとバッチ処理が始まり、CMD窓(webui-user.batを実行すると開く窓)に進捗が表示され全て終了すると all done :) が表示されます。


Dataset Tag Editorでは
Wd1.4 taggerで作った.txtファイルや.jsonファイルを指定してタグを編集出来るようです。
ファインチューン用jsonファイル作成バッチ
wikiで書かれている作成バッチのテキストをnotepadにコピペしてmake_json.batとか適当に名前を付けて保存
taggerで作られた.txtファイルを.jsonファイルにする。
rem ----ここから自分の環境に合わせて書き換える----------------------------------
rem sd-scriptsの場所
set sd_path="C:\LoRA_Easy_Training_Scripts\sd_scripts"
rem 学習画像フォルダ
set image_path="C:\train\kyousi\"
rem ----書き換えここまで--------------------------------------------------------
.batをnotepadで開いてフォルダの場所だけ書き換えます。
そして.batを実行

メタデータにキャプションがありませんと表示されますが気にしません(メタデータとかキャプションについてはよくわかりません)

merge_clearn.jsonの内容を編集します
.jsonファイルの内容を見てトリガーワード(にしたいタグ)があったらそのまま、無ければ一番最初の位置に追加する(--keep_tokens=1と--shuffle_captionを指定する為)。
"C:\\Users\\watah\\Downloads\\kyousi\\siranami ramune\\100741149_p0.jpg": {
"tags": "siranami ramune,1girl, virtual youtuber, solo, v, fang, multicolored hair, blue jacket, blue hair, choker, hair behind ear, smile, crop top, bangs, streaked hair, hair ornament, jewelry, looking at viewer, earrings"
},
サンプルです。
.jsonファイルは上のような3行1セットな書き方をされています。画像ファイルの数だけセットがあると思って下さい。
”画像ファイルのパス”:{
”tags”:”token1,token2,,,,,,(略)”
},
token1でトリガーワードにしたいタグ(ややこしいですね)を入れます。
私はテキストエディアの置換で全部書き換えています。
置換元 -> 置換先
"tags": " -> "tags": "トリガーワード,
--shuffle_caption
これは各タグをシャッフルしてタグの重みを分散させる効果があるのだとか。
--keep_tokens=1
1番目のタグまでを保持(この場合は1番目にあるtoken1)にします。
トリガーワードを1つで強く効かせたいのでこのような設定をしています。
理論的な解説は他の方におまかせします。
sd-scriptで学習を実行。
venvの仮想環境に入ってコマンド直打ち、もしくはtoml設定ファイルを使用する。
sd-scriptのフォルダを右クリックしてターミナルを開く
venv/Scripts/activateと入力してvenv(仮想環境)に入る
コマンドをコピペして実行
(改行を入れない、使いまわししてる設定は見やすくするために改行を入れています。また設定値は適宜変更して下さい。)
コピペして実行すると流れてくるのはこんな感じ



画像枚数 x 繰り返し回数 x 総epoch / バッチサイズ = 総ステップ数
経過時間 残り時間 処理速度 it/s loss
lossはよくわかりません監視しても意味が無いというのを見かけましたが諸説あると思います。

学習ログの保存
logging_dirオプションにログ保存先フォルダを指定してください。TensorBoard形式のログが保存されます。
たとえば--logging_dir=logsと指定すると、作業フォルダにlogsフォルダが作成され、その中の日時フォルダにログが保存されます。
また--log_prefixオプションを指定すると、日時の前に指定した文字列が追加されます。「--logging_dir=logs --log_prefix=fine_tune_style1」などとして識別用にお使いください。
TensorBoardでログを確認するには、別のコマンドプロンプトを開き、作業フォルダで以下のように入力します(tensorboardはDiffusersのインストール時にあわせてインストールされると思いますが、もし入っていないならpip install tensorboardで入れてください)。
tensorboard --logdir=logs
(tensorboardは環境整備時にあわせてインストールされると思いますが、もし入っていないなら pip install tensorboard
で入れてください。)
その後ブラウザを開き、http://localhost:6006/ へアクセスすると表示されます。
(LoRAの場合)ステップ数4000-6000くらいになるようにepochとrepeatを適当に弄る。
特に根拠はありません。最適な数値は自分で模索しましょう。
私の環境では所要時間一時間弱。だいたい 1.80it/sくらいの速度。
出来上がったLoRAをwebuiのLoRAフォルダに入れてwebuiを立ち上げる。
lokrは4000ステップくらいで回してますけどベストかどうかはよくわからないです・・・・誰か教えて
出来たLoRAの設置場所


インストール先で変わってくると思いますが多分ここら辺
C:\stable-diffusion-webui\models\Lora
にLoRA(拡張子.safetensorファイル)を設置してください
webuiの使い方

webui-user.batを選んでダブルクリック

何事も無ければRunnning on local URL: http://127.0.0.1:7860 と最後に表示されます
webuiは拡張機能により日本語化されています
設定値をマニュアルで弄る方法もあります
☠加筆修正中☠
日本語化拡張適用済

・サンプリング方法
サンプリングアルゴリズム
個人的にはDPM++ 2Mが早くて良い感じに描いてくれる気がする、諸説ある。
・サンプリングステップ数
20-50の間くらいで、大きい数字入れてもクオリティが比例して上がるわけではないし時間が掛かる。諸説ある。
・高解像度補助(hires.fix)
高解像度にする時に画像が崩れるのを防ぐ
・アップスケーラー
拡大するアルゴリズム
アニメ系はR-ESRGAN 4x+ Anime6Bがいいらしい。諸説ある。
・アップスケール比率
拡大倍率
・高解像度でのステップ数
高解像度でどのくらいステップ数を使って再描画するか
迷ったらサンプリングステップ数と同じにしたらどうかな
・ノイズ除去強度
・バッチ回数
合計何枚の絵を一度に作るのか
・バッチサイズ
一度に作る画像の数 VRAM少ないなら1でいい、多いなら4とか?
・幅
作りたい画像の横のサイズ
・高さ
作りたい画像の縦のサイズ
・CFGスケール
高いほどpromptの内容に忠実に従うような動きをする
・シード
同じseed値を使うと同じ画像が作成される
気が付かずに何枚も似たような絵が出てきてようやく気が付く
-1でランダム
png内部の情報をsend2でtxt2imgで開いた時は固定値になるので気を付けようね!(絵を再現する為)

・ポジティブプロンプト
こうやって欲しいという指示を,で区切って指定する
・ネガティブプロンプト
こういうのは嫌という指示を,で区切って指定する
・生成
絵を生成するよ
作ったLoRAをテストする方法 英語ガイドをそのまま翻訳
Lora の最適な使用方法を見つけるための簡単なワークフローは次のとおりです。
最終的な Lora を 0.7 または 1 のウェイトでプロンプトに入れ、ガイドのタグ付け部分で見た最も一般的なタグのいくつかを含めます。
うまくいけば、トレーニングしようとしたものと同様の明確な効果が見られるはずです。満足するか、それ以上良くならないように見えるまで、プロンプトを調整します。
X/Y/Z プロットを使用して、異なるエポックを比較します。
これは webui の組み込み機能です。生成パラメーターの一番下に移動し、スクリプトを選択します。
プロンプトに最初のエポックの Lora を入力し (「<lora:projectname-01:0.7>」など)、スクリプトの X 値に「-01、-02、-03」などのように書き込みます。
X 値は「Prompt S/R」モードです。
これらはプロンプトで置換を実行し、異なる数のロラを通過させて、それらの品質を比較できるようにします。
時間を節約したい場合は、最初に 2 エポックごとまたは 5 エポックごとに比較できます。より公平に比較するには、理想的には画像のバッチを実行する必要があります。
お気に入りのエポックを見つけたら、最適なウェイトを見つけてみてください。
X/Y/Z プロットをもう一度実行します。
今度は X 値を "0.5>, 0.6>, 0.7>, 0.8>, 0.9>, 1>" のようにします。
プロンプトのごく一部を置き換えて、さまざまなローラの重みを調べます。
繰り返しますが、バッチで比較することをお勧めします。
画像を歪ませることなく、最高のディテールが得られるウェイトを探しています。
必要に応じて、ステップ 2 と 3 を X/Y として一緒に実行できます。時間はかかりますが、より徹底的になります。
気に入った結果が見つかった場合は、おめでとうございます。さまざまな状況、角度、服装などをテストし続けて、あなたの Lora が創造性を発揮し、トレーニング データにないことを実行できるかどうかを確認してください。


こうすると
プロンプトで-1の部分を置き換えて絵を生成していく
hogehoge,<lora:hogehoge-1:1.0>
hogehoge,<lora:hogehoge-2:1.0>
hogehoge,<lora:hogehoge-3:1.0>
hogehoge,<lora:hogehoge-4:1.0>
hogehoge,<lora:hogehoge-5:1.0>
hogehoge,<lora:hogehoge-6:1.0>
epochごとに同じプロンプトで表示させてどれがいいのかを調べられる
また重み1.0を0.9,0.8,0.7,0.6,0.5のように書き換えていってどの重み付けがいいのかも調べられる
プロンプトを調整する。
この辺りはCIVITAIで投稿されている画像から知恵を拝借するといいかも
複数枚絵を生成して出来栄えが良い物を選別する。
バッチ数を8枚くらいにしてしばし待つ
どうしても結果が芳しくない場合はLoRAのepochの小さいものを使うか、
さらにLoRAに学習を続ける。
sd-scriptで学習する時に --save_every_n_epochs=1 とすると1epochごとにセーブされるます
通常last.safetensorから試しますが過学習かな?となった時に小さい数値のepochで試していくというやり方をしています

コピペ直打ちする時に--network_weights="hogehoge.safetensor"で指定するとLoRAファイルにさらに学習させられます。
学習が足りないかな?というときに
waifu diffusion1.5beta2-aesthetic導入メモ
https://huggingface.co/waifu-diffusion/wd-1-5-beta/blob/main/checkpoints/wd15-beta1-fp16.safetensors
https://huggingface.co/waifu-diffusion/wd-1-5-beta/blob/main/checkpoints/wd15-beta1-fp16.yaml
https://huggingface.co/waifu-diffusion/wd-1-5-beta/blob/main/checkpoints/wd15-beta1-fp32.safetensors
https://huggingface.co/waifu-diffusion/wd-1-5-beta/blob/main/checkpoints/wd15-beta1-fp32.yaml
https://huggingface.co/waifu-diffusion/wd-1-5-beta/blob/main/embeddings/wdbadprompt.pt
https://huggingface.co/waifu-diffusion/wd-1-5-beta/blob/main/embeddings/wdgoodprompt.bin
stable-diffusion-webui
|-- embeddings
| |-- wdbadprompt.pt
| `-- wdgoodprompt.bin
|-- models
| `-- Stable-diffusion
| |-- wd-1-5-beta2-aesthetic-fp16.safetensors
| `-- wd-1-5-beta2-aesthetic-fp16.yaml
`-- 〜省略〜
ファイルの設置はこれで良い筈
そして満足いく結果が得られたらいよいよCIVITAIに投稿です!
CIVITAIに投稿する
たしか登録しないと投稿出来なかった筈
discoad
reddit
google
github
アカウント連携で登録できたと思います
四つの内どれかのアカウントあればそのアカウントで認証出来ます
無くても新規登録は出来た筈
登録終わってloginしていると想定して話を進めます

さっそくモデルを投稿していきたいと思います(80回目)

なまえ
公開する時に表示されるなまえ
ファイルタイプ
LoRAとかLyCORIS(Locon/LoHA)とか選べます
付与するタグ
+を押して付けたい単語を入力します
無ければ新規に作って登録します
モデル説明
モデルがどういうものかを説明すればいいと思います
商業利用
下の方に説明があります スクロールして読んでください
現実に実在する人物か?
実在する人物は肖像権の関係があります
Is intended to produce mature themes only
多分だけど成人した人物のみを扱いますとかそんな感じだと思う。
FBIに通報されるようなデータを作らないでね
CIVITAIでの投稿時に注意すべき個人的ポイント

左のを意訳
このモデルを使う時にユーザー許可する内容
私の名前(この場合watahanを)を表記しなくていいです
このモデルのマージを共有してください
マージには異なる許可を使用する
右のを意訳
商業利用
全部禁止
生成した絵を販売する
AI絵生成サービスで使用する
このモデルまたはマージしたものを販売する
二次創作は二次創作ガイドラインがある場合、規約に従ってください。
モデルのタイトルにUnOfficialと必ず入れているのは公式だと誤認させない為です。

バージョン
好きなように付けて下さい
アーリーアクセス
早期アクセスよくわからないけど公開するまでの日数が設定出来るぽい
ベースモデル
SDのどのバージョン系列かを選ぶ
分からない場合はotherにする
トリガーワード
LoRAを使う時に使うトリガーワードを書いてください
無いとDLした人が使う時に困ります
学習時のepoch
学習させたときのepoch数を入力
学習時の総ステップ数
学習させたときの総ステップ数を入力

ckpt pt safetensor bin zipなどの拡張子のファイルがアップロードできます
クリックして開くかドロップする

アップロードするファイル名
ローカルのファイル名が表示されます 違うファイルを選んだときはゴミ箱アイコンで削除出来ます
ファイルタイプ
選んでください
アップロードを始める
実際にファイルをアップロードします

投稿する画像ファイルをここから開くかドロップしてね
投稿するタグは必ず一つは設定しないと公開できないので+Tagで追加してください
既存に無ければ新規にタグを作ります
最後にpublish押して公開されます
これでCIVITAIのみんなにあなたの作ったLoRAファイルが公開されましたね
pnginfoは編集しないでそのまま載せてるのでLoRAファイル名を弄るだけで再現出来る筈(CIVITAIがファイル名を変更している為)。
ToME入れてるので背景のディテールが違う?xformersとかでも微妙に違って来るらしいがよくわかりません
VAEファイルを入れるとまた変わってくると思います よく使われるのにEasyNegativeとかあります
https://github.com/kohya-ss/sd-scripts/blob/main/train_README-ja.md
LoRA以外にも追加学習について書かれています。一読しましょう。
LoRAとかの拡張とかのメモ
https://scrapbox.io/work4ai/LoCon

LoRAは緑の部分しか学習していないが、LoConは黄色の部分を学習できるので、合わせてほぼすべてのレイヤーをカバーできる
上の図はConv2d-3x3拡張とはまた別なのだろうか?
https://scrapbox.io/work4ai/LyCORIS

左の図が2R個のランク1行列(縦ベクトルと横ベクトルの積)の総和になるのに対し、右の図はRの2乗個のランク1行列の総和になるので同じパラメータ数でランクを大きくできるらしい。
[(IA)^3]
This algo produce very tiny file(about 200~300KB)
実装 : [. https://github.com/tripplyons/sd-ia3]
>[LoRA]との大きな違いは、(IA)^3はパラメータの使用量がかなり少ないことです。一般的には、高速化・小型化される可能性が高いが、表現力は劣る。
lokr
LyCORIS/Kronecker.md at b0d125cf573c99908c32c71a262ea8711f95b7f1 · KohakuBlueleaf/LyCORIS (github.com)
クロッカー積を使うのでLoHAみたいに効率が良いらしい
Dylora
https://github.com/kohya-ss/sd-scripts/blob/main/train_network_README-ja.md#dylora
同時にrankを学習していいのを選べるらしい・・・(ざっくりした理解)
学習後のLoRAは互換性があるとの事
詳しくはreadmeを読んだ方がいいです
--network_module=networks.lora を --network_module=networks.dylora
network_dimとconv_dimの数値を合わせる
--network_dim=32
--network_args "conv_dim=32" "conv_alpha=16" "unit=8"
--network_args "conv_dim=32" "conv_alpha=16" "unit=4"
dimの数値を区切る数値をunitで指定する
学習後にrankごとに抽出する
python networks\extract_lora_from_dylora.py --model "C:\train\outputs\hogehoge.safetensors" --save_to "C:\train\outputs\dylora-model-split.safetensors" --unit 4
loading Model...
Splitting Model...
Max rank: 32
Splitting rank 4
Splitting rank 8
Splitting rank 12
Splitting rank 16
Splitting rank 20
Splitting rank 24
Splitting rank 28
saving model to: C:\train\outputs\dylora-model-split-0004.safetensors
saving model to: C:\train\outputs\dylora-model-split-0008.safetensors
saving model to: C:\train\outputs\dylora-model-split-0012.safetensors
saving model to: C:\train\outputs\dylora-model-split-0016.safetensors
saving model to: C:\train\outputs\dylora-model-split-0020.safetensors
saving model to: C:\train\outputs\dylora-model-split-0024.safetensors
saving model to: C:\train\outputs\dylora-model-split-0028.safetensors
なんか沢山出てくるのでLoRAフォルダに入れて、xyz plotでまとめて同じプロンプトでどういう絵が生成されるのかを比較する
kohya LoRAとLyCORIS LoRAの簡単まとめ
kohya LoRAの名称について
LoRA-LierLa : (LoRA for Li n e a r La yers、リエラと読みます)
Linear 層およびカーネルサイズ 1x1 の Conv2d 層に適用されるLoRA
LoRA-C3Lier : (LoRA for C olutional layers with 3 x3 Kernel and Li n e a r layers、セリアと読みます)
1.に加え、カーネルサイズ 3x3 の Conv2d 層に適用されるLoRA
LoRA-LierLa はWeb UI向け拡張、またはAUTOMATIC1111氏のWeb UIのLoRA機能(最初から内蔵されてるやつ)で使用することができます。
LoRA-C3Liarを使いWeb UIで生成するには拡張を使用してください。
LyCORIS LoRAの名称について
Conventional LoRA(locon)kohyaさんのloconを拡張
LoCon から Conv レイヤーの実装をした
設定
dim <= 64
alpha = 1 以下, 0.3とか
LoRA with Hadamard Product representation (LoHa)
Ref: FedPara Low-Rank Hadamard Product For Communication-Efficient Federated Learning
パラメーター効率の良い微調整に適しているはずです。
LoRAのrankにに換算すると二乗で効いてくる
Conventional LoRA is rank<=dim
recommended settings
dim <= 32
alpha = 1 以下
警告: LoHa で dim>64 を使用することは想定されていません。これは、SD のほとんどすべてのレイヤーで sqrt(original_dim) を超えています。
不安定な損失を引き起こすか、単に NaN になる可能性があります。
高いdimのLoHaを使用したい場合は、低いlrを使用してください
再度の警告: パラメータ効率の良いアルゴリズムをパラメータ効率の悪い方法で使用するのは得策ではありません
(IA)^3
参照: 少数ショットのパラメーター効率的な微調整は、コンテキスト内学習よりも優れている。
algo=ia3 を設定できます。
このアルゴリズムには、より高い lr (約 5e-3~1e-2) が必要です。
このアルゴリズムはスタイルの学習には適していますが、移行するのは困難です (トレーニングしたモデルでのみ妥当な結果を得ることができます)。
このアルゴリズムは非常に小さなファイル (約 200 ~ 300 KB) を生成します。
LoKR
基本的には LoHA と同じ考え方ですが、クロネッカー積を使用します
このアルゴはlrを調整する必要がある場合があります
このアルゴは性格もスタイルも学習できますが、サイズが小さい(オートファクター、フルランク、2.5MB)ため、転送も大変です。
このアルゴリズムは比較的小さいファイルを生成します (自動係数: 900~2500KB)
より小さい係数を使用すると、より大きなファイルが生成されます。2.5MB のフル ランクが十分ではないと思われる場合は、調整できます。
LoCon拡張とLyCORIS拡張 メモ
a1111-sd-webui-locon:[lora]フォルダにある Lycoris (Locon)ファイルを判別、処理する。
<lora:MODEL:WEIGHT>
a1111-sd-webui-lycoris:[Lycoris]フォルダにある Lycoris (Locon)ファイルを処理する。プロンプトから重みづけ指定が可能。
<lyco:MODEL:TE_WEIGHT:UNET_WEIGHT>
Model名とTextEncoderのweightとu-netのweightを設定してやらないといけないのですね
予定
LoRAのリサイズ、階層別マージも時間があればやりたい。
メモ 使いまわし設定の一部を変更してLyCORISを使う
(この設定値は二次元キャラのLoRAを作るのが前提なので実写系はもっと数値が高いと思います。)

LoCon使う時
--network_module lycoris.kohya
--network_dim=16
--network_alpha=8
--network_args "conv_dim=8" "conv_alpha=1" "dropout=0.05" "algo=lora"
LoHA使う時
--network_module lycoris.kohya
--network_dim=8
--network_alpha=4
--network_args "conv_dim=4" "conv_alpha=1" "dropout=0.05" "algo=loha"
ia3使う時(検証してない)
--network_module = lycoris.kohya
--network_dim = 32
--network_alpha=16
--network_args = "conv_rank=32", "conv_alpha=4", "algo=ia3"
--learning_rate = 1e-3
lokr使う時
--network_module lycoris.kohya
--network_dim=8
--network_alpha=4
--network_args = "conv_rank=4", "conv_alpha=1", "algo=lokr",”decompose_both=True”,”factor=-1”
--unet_lr=3.0e-4
--text_encoder_lr=1.5e-4
消費メモリの削減
--gradient_checkpointingオプションを付けると学習速度が遅くなる代わりに消費メモリが減る。
消費メモリが減った分バッチサイズを増やせば全体の学習時間は速くなる。
公式のドキュメントにはオンオフは学習の精度には影響しないとあるため、
VRAMが少ない環境では学習速度の改善には--gradient_checkpointingオプションを追加してバッチサイズを増やすのが有効。
参考
VRAM8G、LoHa、512 x 512の場合、バッチサイズ15まで動作できることを確認。
VRAM8G、LoHa、768 x 768の場合、バッチサイズ5まで動作できることを確認。
SD2.0以降を学習時のベースモデルに使う場合
--v2
--v_parameterization
--resolution=768,768
768サイズで学習させているベースモデルなので
追加学習時に解像度を768設定してみます
新しい投稿からlokrに切り替えてみました。
1.13it/s --optimizer_type lion
1.33it/s --use_8bit_adamW
どうも学習が上手く行かないのでLoRAに戻してみます、lokrはちょっとピーキーな感じがする・・・。
optimizerにlion使うには
sd-scriptフォルダを右クリックでターミナルで開くを選び
venv/Scripts/activate
pip install lion-pytorch
で導入しておきます
https://github.com/lucidrains/lion-pytorch
--optimizer_type lion
tomlファイル使うと楽になるらしいです
--config_file
で.toml
ファイルを指定してください。ファイルはkey=value
形式の行で指定し、key はコマンドラインオプションと同じです。詳細は #241 をご覧ください。ファイル内のサブセクションはすべて無視されます。
省略した引数はコマンドライン引数のデフォルト値になります。
コマンドライン引数で
.toml
の設定を上書きできます。--output_config
オプションを指定すると、現在のコマンドライン引数を--config_file
オプションで指定した.toml
ファイルに出力します。ひな形としてご利用ください。
参考にした情報
ふたば may AIに絵を描いてもらって適当に貼って適当に雑談するスレ 不定期
としあきwiki 上のスレのまとめ
なんJ なんか便利なAI部 5ch
/vtai/ - VTuber AI-generated Art 4ch
くろくまそふと
経済的生活日誌
Gigazine
原神LoRA作成メモ・検証
AIものづくり研究会@ディスコード
[Guide] Make your own Loras, easy and free@CIVITAI
githubのreadme sd-scriptとLyCorisとautomatic1111辺り 細かい設定や変更点・バグなどがあるので検索だけでは分からない事があります
使いまわししてる設定(LoRA)
--max_train_epochs --dataset_repeats --train_data_dirだけ変えています。
accelerate launch --num_cpu_threads_per_process 16 train_network.py
--pretrained_model_name_or_path=C:\stable-diffusion-webui\models\Stable-diffusion\hogehoge.safetensors
--train_data_dir=C:\train\kyousi\
--output_dir=C:\train\outputs
--reg_data_dir=C:\train\seisoku
--resolution=512,512
--save_every_n_epochs=1
--save_model_as=safetensors
--clip_skip=2
--seed=42
--network_module=networks.lora
--caption_extension=.txt
--mixed_precision=fp16
--xformers
--color_aug
--min_bucket_reso=320
--max_bucket_reso=512
--train_batch_size=1
--max_train_epochs=15
--network_dim=32
--network_alpha=16
--learning_rate=1e-4
--use_8bit_adam
--lr_scheduler=cosine_with_restarts
--lr_scheduler_num_cycles=4
--shuffle_caption
--keep_tokens=1
--caption_dropout_rate=0.05
--lr_warmup_steps=1000
--enable_bucket
--bucket_no_upscale
--in_json="C:\train\marge_clean.json"
--dataset_repeats=5
--min_snr_gamma=5
使いまわししている設定(Dylora)
accelerate launch --num_cpu_threads_per_process 16 train_network.py
--pretrained_model_name_or_path=C:\stable-diffusion-webui\models\Stable-diffusion\hogehoge.safetensors
--train_data_dir=C:\train\kyousi\
--output_dir=C:\train\outputs
--reg_data_dir=C:\train\seisoku
--resolution=512,512
--save_every_n_epochs=1
--save_model_as=safetensors
--clip_skip=2
--seed=42
--network_module=networks.dylora
--caption_extension=.txt
--mixed_precision=fp16
--xformers
--color_aug
--min_bucket_reso=320
--max_bucket_reso=512
--gradient_checkpointing
--train_batch_size=15
--max_train_epochs=15
--network_dim=32
--network_alpha=16
--network_args "conv_dim=32" "conv_alpha=16" "unit=8"
--learning_rate=1e-4
--use_8bit_adam
--lr_scheduler=cosine_with_restarts
--lr_scheduler_num_cycles=4
--shuffle_caption
--keep_tokens=1
--caption_dropout_rate=0.05
--lr_warmup_steps=1000
--enable_bucket
--bucket_no_upscale
--in_json="C:\train\marge_clean.json"
--dataset_repeats=2
--min_snr_gamma=5
使いまわししている設定(LoHA)
accelerate launch --num_cpu_threads_per_process 16 train_network.py
--pretrained_model_name_or_path=C:\stable-diffusion-webui\models\Stable-diffusion\hogehoge.safetensors
--train_data_dir=C:\kyousi\
--output_dir=C:\train\outputs
--reg_data_dir=C:\train\seisoku
--resolution=512,512
--save_every_n_epochs=5
--save_model_as=safetensors
--clip_skip=2
--seed=42
--network_module lycoris.kohya
--network_args "conv_dim=4" "conv_alpha=1" "dropout=0.05" "algo=loha"
--caption_extension=.txt
--mixed_precision=fp16
--xformers
--color_aug
--min_bucket_reso=320
--max_bucket_reso=512
--gradient_checkpointing
--train_batch_size=15
--max_train_epochs=15
--network_dim=8
--network_alpha=4
--learning_rate=1e-4
--use_8bit_adam
--lr_scheduler=cosine_with_restarts
--lr_scheduler_num_cycles=4
--shuffle_caption
--keep_tokens=1
--caption_dropout_rate=0.05
--lr_warmup_steps=100
--enable_bucket
--bucket_no_upscale
--in_json="C:\train\marge_clean.json"
--dataset_repeats=2
--min_snr_gamma=5
--logging_dir=logs
学習時のベースモデルはAOM2を使っています
いわゆる1.4系?ですけど使用モデルをotherにしています
絵を生成する時は
1.AOM2
2.AOM3
3.Counterfeit-V2.5
4.Defmix-v2.0
5.hassakuHentai
6.SukiAniMix
7.QuinceMix
8.yabalMix
9.breakdo
10.Counterfeit-V3
辺りの相性は良さそうです
個人の好みの話になってくると思いますので好きなモデルでお試しください
XYZ plotでモデルを一通り試すといいかもしれません
※1引用元
https://www.kkaneko.jp/ai/win/stablediffusion.html より引用致しました
使用マシン
OS Win11
CPU Ryzen9 5950x
RAM DDR4 128GB
GPU 3060 VRAM 12GB/4070 VRAM 12GB
ストレージ HDD何台かとNVMeを二台
Colabでの学習(調べ終わってないのでその内ちゃんと書きます)
webui automatic1111の日本語化拡張レポジトリの方が書いた大変分かり易いcolabの解説記事があったので
紹介します。
Linaqruf/kohya-trainer | GenerativeAI Wiki (katsuyuki-karasawa.github.io)
----------------------------------------
そして
「オレはようやくのぼりはじめたばかりだからな、このはてしなく遠いAI絵坂をよ…」

----------------------------------------
著作権とかの話
【AI】生成AIを利用する場合に気を付けなければならない著作権の知識|福岡真之介|note
①LLM作成段階
②ファインチューニング段階
③プロンプト入力段階
④アウトプット段階
①合法
②合法
③プロンプトの内容によっては「著作権者の利益を不当に害する場合」にあたる場合もある。
④著作権侵害は、アウトプットが、他人の著作物に依拠し、他人の著作物と類似性がある場合に成立します。
このように生成AIを利用するにあたっては、著作権や商標権に注意する必要があります。日本では、機械学習のための著作物の利用が比較的自由であるといえますが、全く自由というわけではなく、「著作権者を不当に害する場合」などは著作権侵害になることは注意が必要です。
もっとも、「著作権者を不当に害する場合」が曖昧なので、今後はガイドラインなどが作成され、明確化されることが望ましいといえます。
本来は裁判例の蓄積を待つべきですが、裁判例が蓄積するには10年単位の時間がかかるので、AIの技術進歩の速さを考えるとあまりにも長すぎるといえるでしょう。
----------------------------------------
大阪大学の 生成AI(GenerativeAI)の倫理的・法的・社会的課題(ELSI)の論点の概観
https://elsi.osaka-u.ac.jp/system/wp-content/uploads/2023/04/ELSI_NOTE_26_2023_230410.pdf
大変分かりやすくまとまっていると思います
Description
加筆修正しました。
出来るだけ現状に即した内容にしたつもりですが、
研究・開発途上なので常に最新というのは難しいと思います。
webui automatic1111の開発者様、LyCorisの開発者様、sd-scriptの開発者様にはいつもお世話になっております。他にも参考情報としたサイト様など数え上げたらきりがありません。感謝感謝。
毎日記録が更新し続けるAI界隈では常に知識にアップデートが必要です。
ガイドは基本的にオンライン上で読んで頂いて不明な所とかは参考情報で紹介しているサイトに飛んで情報を漁るのが効率が良いと思います。
不明な点があればコメントで質問して頂ければ分かる範囲で答えます。
自分用にまとめたのを公開しているので色々と足りない所があるかと思いますが、LoRA作りの一助となれば幸いです。(^^)