Waifu Diffusion で効率的に画像を生成する
目次
NoobAI-XL 1.0 のアーティストブレンド例
NovelAI Diffusion V3 の改善点
Danbooru タグ検索
ControlNet のネットワーク構造
ControlNet は追加のネットワークを挿入するタイプのファインチューン技法だ。ControlNet のネットワークは U-Net の IN と MID のコピーで、学習開始前の状態ではウェイトも丸々コピーする。
通常は U-Net にノイズ画像を入力してデノイズするように学習させる。しかし ControlNet の入力には目的タスクに応じて線画画像や棒人間などを入力して、コピーした U-Net の IN と MID を学習させる。
Stable Diffusion の古い情報
補正
線の太さの補正
LoRA の boldline で太さを変更できる。
年齢の補正
手
- Automatic1111 の Extension の After Detailer
- EnvyBetterHands LoCon
胸
腰
脚
skinny を入れると胴長脚長になりやすい。LECO の short legs はそれを補正する。
サンプラー
サンプラーの重要な特徴として計算の速さと構図の安定度がある。
計算の速さ(it/s)
1ステップの計算が速いサンプラーと遅いサンプラーがある。1ステップの計算が遅いからと言って絵の仕上がりが遅いとは限らない。DPM++ SDE (Karras)、DPM2 や Heun は計算が遅いがその分少ないステップ数でいい感じに絵を仕上げてくれる。
速いサンプラー
Euler a, Euler, LMS, DPM++ 2M, DMP fast, LMS Karras, DPM++ 2M Karras, DDIM, PLMS, UniPC
遅いサンプラー
Heun, DPM2, DPM2 a, DPM++ 2S a, DPM++ SDE, DPM adaptive, DPM2 Karras, DPM2 a Karras, DPM++ 2S a Karras, DPM++ SDE Karras
構図の安定度
サンプラーはステップ数を上げると描きこみが多くなるタイプと、ステップ数を上げると絵が変わるタイプがある。後ろに小文字の a (Ancestral) がつくサンプラーはステップ数を上げると絵が変わる。
ステップ数を上げると描きこみが多くなるタイプ
Euler, LMS, Heun, DPM2, DPM++ 2M, DPM adaptive, LMS Karras, DPM2 Karras, DPM++ 2M Karras, DDIM, PLMS, UniPC
ステップ数を上げると絵が変わるタイプ
Euler a, DPM2 a, DPM++ 2S a, DPM fast, DPM2 a Karras, DPM++ 2S a Karras
Karras
DPM は仕上がりがノイズっぽいのでその対策をしたバージョンが Karras。絵画調や写真風の場合、ノイズがあったほうがリアルに見える。
DPM2 ancestral produces odd nosiy/sharpened output during final step #1435
Update K-Diffusion and include noise scheduler script #1560
hallatore氏改良版DPM++ 2M Karras(彩度を少し犠牲にする代わりに滑らかな画像を出力できる)
UniPC
UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models
UniPC は収束が速いと宣伝されているが、実際に生成してみると言われているほど速くはない。
DPM++ 3M SDE 系列
New samplers #12565 や Add the newest DPM-Solver #40 によると、収束に時間がかかり、CFG スケールは低めに設定する必要がある。
外部リンク
Beginner/Intermediate Guide to Getting Cool Images from Stable Diffusion
StableDiffusionのサンプリング法
DPM2、DPM2 a、Heun は1ステップあたり Euler の2倍の回数、拡散モデルを通過するので実行時間が増える。その分少ないステップで収束する。
モデルリンク
網羅的なモデル外部リンク
/hdg/ Stable Diffusion Models Cookbook
SD 1.5
イラスト風
AnyLoRA - Checkpoint(画風LoRA との互換性を重視したモデル)
リアル寄り
パステル
アニメ
リアル
stable-diffusion-xl-base-0.9
Stable-Diffusion 2.1
Stable-Diffusion 2.0
stable-diffusion-v1-5
waifu-diffusion-xl
Waifu Diffusion v1.5
WD 1.5 は5つのモデルがリリースされている。WD 1.5 Base はファインチューン用で、それ以外(Radiance, Ink, Mofu, Illusion)はデフォルト画風が違う。画風の違いは WD 1.5 Beta 3 - Release Notes で確認できる。
Waifu Diffusion v1.4(プレビュー版)
使うには v2-inference.yaml ファイルを wd14-booru-step-14000-unofficial.yaml にリネームして、safetensors ファイルと同じフォルダに入れる必要がある。
Waifu Diffusion v1.3
wd-v1-3-float16.ckpt か wd-v1-3-float32.ckpt をダウンロードする。float16 と float32 で出力される結果は変わらない。ただし full と float とでは少し結果が変わる。opt にはトレーニング用データが入っている。
what is the difference between 16 32 and full?
Waifu Diffusion v1.2
推論に不要な情報を削除したバージョン(pruned-waifu-diffusion)
trinart2_step115000.ckpt と Waifu Diffusionを5:5の比率でマージしたモデル
openvino バージョン(waifu-diffusion.openvino)
Easter
NSFW。Waifu 1.3 に比べて頭が切られにくく安定している。ネガティブプロンプトに Letterbox を入れることが推奨されている。
trinart V2 モデル
Stable Diffusion TrinArt Derrida model (Characters v2)
Stable Diffusion TrinArt Characters model v1
trinart_characters_19.2m_stable_diffusion_v1
AUTOMATIC1111 を使う場合は、autoencoder_kl-f8-trinart_characters.ckpt を trinart_characters_it4_v1.vae.pt にリネームして同じフォルダに入れる。成功するとLoading VAE weights from:~trinart_charatcters_it4_v1.vae.pt が表示される。
Hentai Diffusion
Hentai Diffuison ウイルスが検出されるが作者は混入を否定している。実行は自己責任で。
Waifu Diffusion v1.2 に Rule34 と Gelbooru とから収集した画像 15 万枚を追加学習させたモデル。Waifu で出すのが難しいポーズや手の改善を目的として作成された。Rule34 と Gelbooru とは Danbooru 同様、無断転載画像が多く含まれる。
NSFW
実写向き
Zeipher Female Nude (better anatomy)
ケモエロ
Stable Diffusion Furry Finetune Models:Furry (ケモナー) と yiffy (エロ特化)
yiffy はペニスを描くのが上手い。
R34
そのほか
LD と Waifu Diffusion を3:7の比率でマージしたモデル
キャラ特化モデル
Re:ゼロから始める異世界生活のヴィルヘルム・ヴァン・アストレア
nanachi dreambooth model (42 images on top of yiffy-e15) keyword: nanachiDB cute_furry_girl [nanachiDB-42imgs-5000steps.ckpt](https://mega.nz/file/xE9gFQYK#f61_2_OvDSOd4VRW3W9EoLpImwCBf1hauUFhW-iNtRw)
ryza dreambooth model (54 images on top of WD 1.3 beta)
keyword: rizaDB anime_girl (yes I misspelled the name)
SD_PixelArt_SpriteSheet_Generator
がうるぐら(VTuber)モデル
リンク集
diffusersで使える Stable Diffusionモデル一覧
画像生成AI「Stable Diffusion」でいろいろ特化した使えるモデルデータいろいろまとめ
モデルマージ
Merge-Stable-Diffusion-models-without-distortion
Model Merging Method, anyone seen or tried? #2027
ASimilarityCalculatior
ckpt の類似度を計算する。
Danbooru タグ列挙法
Danbooru タグ列挙法(Waifu Diffusion v1.2 限定)
文章を入力するのではなく、Danbooru タグを列挙することで出力を安定させる方法。以下の語順でプロンプトを並べると出力が安定する。
[作品タグ] [キャラクタータグ] [コンテンツタグ] [アーティストタグ]
参考作品がない場合は、プロンプトの頭に original を指定する。
参考キャラクターがない場合はキャラクタータグは省略可能。
コンテンツタグは作品・キャラクター・アーティスト以外のすべてのタグ。ただし "highres" のような学習に時に使ってないメタタグは入れない。
この時、各カテゴリごとにアルファベット順に並べ替える。
Danbooru タグの半角スペースはアンダーバーで置き換える。
タグは半角スペースを使って並べる。コンマやピリオドを使ってはならない。以下はプロンプト例。
kono_subarashii_sekai_ni_shukufuku_wo! megumin 1girl ^_^ backlighting blush brown_hair cape closed_eyes collar facing_viewer fingerless_gloves flat_chest gloves hat lens_flare short_hair short_hair_with_long_locks smile solo staff sunset witch_hat dacchi
Danbooru タグ以外の語は入力しない方が安定する。しかしタグではない句を使う場合は半角スペースをアンダーバーにする。たとえば cleavage_of_huge_breasts 有効なプロンプト数が減るデメリットの方が多いと感じたので訂正。
アンダーバーは1トークン消費するため、有効なプロンプト数が短くなるのがこの方法の欠点だ。
Danbooru タグ列挙法(Waifu Diffusion v1.3 限定)
- Danbooru タグの空白はそのまま入力する(空白をアンダーバーにする必要はない)
- Danbooru タグの () は削除する(たとえば pokemon (anime) は pokemon anime)
- Danbooru タグはコンマで区切る
- タグを並べ替える必要はない
以下のような文章のプロンプトではなく
a girl wearing a hoodie in the rain
以下のように Danbooru タグをコンマ区切りで入力する。
original, 1girl, solo, portrait, hoodie, wearing hoodie
Stable Diffusion に関するニュース
DeepFloyd IF
Stable Diffusion は潜在空間で描いた絵を VAE でピクセル空間に戻していた。このとき VAE にプロンプトの情報を入力していないので、細部の再現性に問題があった。
DeepFloyd IF はピクセル空間で 64x64 の絵を描き、アップスケーラーを2回実行して 1024x1024 の画像を作成する。アップスケーラーにはプロンプトの情報が入力されるので、通常のアップスケーラーより高性能である。
DeepFloyd IF の描画フロー
DeepFloyd IF は3ステージで絵を描く。
ステージ1ではプロンプトから生成した Text Embedding を利用して、64x64 の画像をピクセル空間で描く。
ステージ2では 64x64 の画像と Text Embedding とを利用して、256x256 の画像へアップスケーリングする。
ステージ3では 256x256 の画像と Text Embedding とを利用して、1024x1024 の画像へアップスケーリングする。
ステージ2とステージ3とのアップスケーラーは個別に専用のモデルが使用される。
外部リンク
IF by DeepFloyd Lab at StabilityAI
Stability AIが大規模言語モデルを取り入れた高性能なテキストから画像への変換モデル「DeepFloyd IF」を発表
eDiffi: Text-to-Image Diffusion Models with Ensemble of Expert Denoisers
eDiffi はテストエンコーダーに CLIP と T5XXL を使い、64x64 の画像をつくる。そして 4x アップスケーラーを2回適用し 1k x 1k の画像にする。
従来の拡散モデルはデノイザ1つでデノイズしていたが、eDiffi はデノイズのステップごとにデノイザを分けて個別に学習させることで合成能力を向上させている。
論文など
Transformer/Attention
論文解説 Attention Is All You Need (Transformer)
作って理解する Transformer / Attention
Scaled Dot-Product Attentionの本当の凄さを考える
Cross-Attention in Transformer Architecture
VAE
VAEは画像を生成する生成モデル。
AutoEncoderはあくまで潜在空間の取得が目的で、(エンコーダーで得られる)高次の特徴をアップサンプリング+Skip-connectionで解像度を上げていくU-Netとは目的が違うような… / “オートエンコーダーとして…” https://t.co/3Fvrx8E9G6
— yu4u (@yu4u) November 12, 2018
【Tensorflowによる実装付き】Variational Auto-Encoder(VAE)を理解する
【PyTorch】VAE(Variational Auto-Encoder)を実装する
深層学習/VAE (Variational Autoencoder) を実装する
【論文解説+Tensorflowで実装】VQ-VAEを理解する
CLIP
話題のOpenAIの新たな画像分類モデルCLIPを論文から徹底解説!
U-Net
DiffusionモデルをPyTorchで実装する② ~ U-Net編
拡散モデル
The Illustrated Stable Diffusion
Stable Diffusion を基礎から理解したい人向け論文攻略ガイド【無料記事】
画像生成 AI の最前線!拡散モデル・画像生成モデルの最新研究を解説
Diffusion Models | Paper Explanation | Math Explained
Stable Diffusion with Diffusers
Generative Modeling by Estimating Gradients of the Data Distribution
Training custom Ai generative models
NovelAI
NovelAI Improvements on Stable Diffusion
NovelAI Aspect Ratio Bucketing
NovelAI Aspect Ratio Bucketing の翻訳
FreeU
FreeU はファインチューニングも追加学習もせずに画像の品質を向上させる。
解説
U-Net のバックボーン(後半)はデノイズを行っている(前半は情報抽出)。U-Net はスキップ接続によって U-Net のデコーダーが高周波数の情報(絵のディティール・エッジ・テクスチャなど)を復元できるようになっている。しかしスキップ接続で渡された情報の低周波数の部分(全体の構図など)が、バックボーンのデノイズ能力を低下させている。
FreeU は2つの情報の制御を行う。ひとつはスキップ接続でバックボーンに提供する情報で、もうひとつはバックボーンネットワークの影響力の強さだ。バックボーンに提供する情報の影響力は s で、バックボーンネットワークの影響力の強さを b で制御する。公式の GitHub では b を少し強くして、s を小さくするように指示している。
バックボーンに提供する情報は高速フーリエ変換した後に、s で調整し、逆高速フーリエ変換している。全体を s で調整すると出力がスムースになりすぎるので、s で調整するのは低周波数の部分だけに限定している。
出口に近いバックボーンの b を強くすると出力がスムースになりすぎるので、出口に近いバックボーンの影響力は強化しない。
論文
FreeU: Free Lunch in Diffusion U-Net(arXiv) GitHub Project Page
論文
Zero-shot Learning網羅的サーベイ:CLIPが切り開いたVision & Languageの新しい世界
DiffusionによるText2Imageの系譜と生成画像が動き出すまで
世界に衝撃を与えた画像生成AI「Stable Diffusion」を徹底解説!
【AI論文解説】DALL-E 2へ至るまでの道のり:文章に沿った画像を高品質かつ多様に生成 -詳細編-
Neural Discrete Representation Learning (Vector Quantized – VAE)
U-Net: Convolutional Networks for Biomedical Image Segmentation
High-Resolution Image Synthesis with Latent Diffusion Models
Diffusion Models Beat GANs on Image Synthesis
Denoising Diffusion Implicit Models (DDIM スケジューラー)
Denoising Diffusion Probabilistic Models (DDPM スケジューラー)
Pseudo Numerical Methods for Diffusion Models on Manifolds (PNDM スケジューラー)
An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion
High-Resolution Image Synthesis with Latent Diffusion Models (LDSR)
HyperNetwork
Contextual HyperNetworks for Novel Feature Adaptation
Hypernetwork functional image representation
そのほかのリンク
Tools and Resources for AI Art
Video Diffusion Models Cascaded Diffusion Models × 3D U-Net
paint-with-words-sd (テキストでオブジェクト位置を指定できる)
Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold
DAAM
プロンプトの各単語が画像のどの部分に効いているかを可視化する。
Poisson Flow Generative Models
拡散モデルより 10 倍~ 20 倍高速に動作するらしい。
Phenaki - Pytorch
テキストから動画を作成する。
Make-A-Video
テキストや画像から動画を作成するサービス。
DreamFusion: Text-to-3D using 2D Diffusion
テキストから 3D を生成する AI の調整に画像を生成する AI を使うことで、学習用 3D データなしでテキストから 3D データが出力できるようになるという論文。
Point·E
テキストから 3D の point clouds を生成する。
Mubert-Text-to-Music
テキストから音楽を作成する。
Text2LIVE
プロンプトで指示して、画像や動画を編集する。
EbSynth
動画を絵画調にする。
Anime2Sketch
イラストを線画にする。
Sketch-Guided Text-to-Image Diffusion Models
絵心がない線画を“いい感じの作品”に変える画像生成AI「Sketch-to-Image」 Googleなどが開発
[ RIFFUSION ]
Stable Diffusion を使って音楽を生成する。
動画
AI 動画で高解像度の動画を変換する Tips
低解像度(512x512 前後)かつ低 Denoising Strength で変換したものを SD Upscale する。
ファインチューン
概要
Textual Inversion や Hypernetwork、LoRA の学習は、学習画像のサイズが 512x512 なら VARM 8GB の RTX 3050 でもできる。ただし VRAM を解放するために実行前に webui の再起動が必要になる。モニターを複数枚使っている場合、VRAM が不足することがある。そのため快適に学習させたければ、VRAM 12GB 以上の GPU を使うか、Google Colab を使う。
Dreambooth を使って学習させるには最低でも 12 GB の VRAM が必要になる。
Textual Inversion はテキストエンコーダーを調整する。Hypernetwork はテキストエンコーダーと U-Net との間に追加のネットワークを挿入して、その追加ネットワークを調整する。LoRA は U-Net の Attention ブロックのみを調整する。LoCon は Attention ブロックと畳み込みレイヤーを調整する。Dreambooth は U-Net 全体を調整する。
ControlNet は学習に VRAM 24 GB が必要で、公式でも訓練方法を詳細に解説していないので知識が必要だが、任意の情報(輪郭情報や棒人間でポーズ指定など)を入力できるようになる。
LoRA と Dreambooth は何が違うか
LoRA は U-Net の Attention ブロックのみを調整する。Dreambooth は U-Net 全体を調整する。
LoRA と Hypernetwork は何が違うか
LoRA はネットワークを追加し、Transformer の Attention ブロックすべてを修正する。
Hypernetwork はネットワークを追加し、Attention ブロックに入力する k, v を修正する。
まとめ
LoRA
品質がよく・ファイルサイズは大きすぎず・難易度も高くないので人気。Web 上に情報も多い。デフォルトの状態で呼び出せない人や物を学習させられる。Dreambooth に比べてファイルサイズが小さく、学習に必要な VRAM も小さい。
Hypernetwork
画風の調整に向いてる。学習時間が短く準備の手間も少ない。
Textual Inversion
デフォルトの状態で呼び出せる人や物を語に覚えさせたり、トークンを節約したりするのに使う。描く能力はあるが呼び出し方がわからない人や物を呼び出せることがある。
Dreambooth
デフォルトの状態で呼び出せない人や物を学習させられる。U-Net 全体を調整するので最も高品質。ただしファイルサイズも大きく、学習に必要な VRAM も多い。
VRAM8GB でできるファインチューニング
- Textual Inversion
- Hypernetwork
- LoRA
- DreamArtist
VRAM 12 GB でできるファインチューニング
- Dreambooth
VRAM 16 GB でできるファインシューニング
- 追加学習
間違いやすいポイント
Textual Inversion と Hypernetwork のキャプションの違い
Textual Inversion と hypernetwork とでは画像のタグのつけ方や使用法が違う。
「覚えさせたいタグ」とは学習対象の特徴を表現するタグだ。例えば赤目銀髪ロングのキャラクターなら、silver hair, long hair, red eyes が「覚えさせたいタグ」だ。
「覚えさせたくないタグ」は画像のメタ情報だ。white background や highly detailed, full body など。
Textual Inversion | Hypernetwork | LoRA | |
---|---|---|---|
覚えさせたいタグ | Initialization Text に入れる | キャプションファイルに書く | キャプションファイルに書かない |
覚えさせたくないタグ | キャプションファイルに書く | キャプションファイルに書く | キャプションファイルに書く |
使用法 | embedding 名をプロンプトに入れる | キャラ/オブジェクトに関係のあるタグをプロンプトに入れる | トリガーワードをプロンプトに入れる |
学習画像のキャプションファイル
学習画像と同名のテキストファイルがあると、そのファイル内のタグを読み込むようになっている。Windows はパスの長さが 255 文字程度に制限されているので、ファイル名にタグが入りきらない場合にこの機能を使う。
VRAM が8GBだが学習ができない
Dreambooth は VRAM 8GB では実行できない。Textual Inversion と Hypernetwork で VRAM が不足する原因は原因はいくつかある。
- 学習画像のサイズが 512x512 でない
- 学習画像の枚数が多い(たとえば 100 枚以上)
- 単精度オプション等がついている --precision full --no-half --medvram
- webui を再起動してない
- layer structure の層が深い(たとえば 1, 2, 4, 4, 4, 2, 1)
- Move VAE and CLIP to RAM when training hypernetwork にチェックを入れてない
- xformers を有効にしてない
CPU に内蔵されている GPU が使えるなら、マザーボードから出ている映像出力端子とモニターとを繋ぐと VRAM を節約できる。
画像のキャプションファイルに書くタグ例(Textual Inversion で学習させないタグ)
- white background, black background
- solo, 1girl, looking at viewer, full body, close-up, breasts, solo focus, face
- 表情・感情
open mouth, closed mouth, smile, angry - ポーズ(ポーズを学習させない場合)
squatting, standing, sitting
服を着せ変えたい場合は服も画像のキャプションファイルに書く。服を固定したい場合は、服の特徴を Initialization Text に入れる。
Hypernetwork ならHypernetwork-MonkeyPatch-Extensionがマルチアスペクトの学習に対応している。
Hypernetwork を外す
Hypernetwork は学習に影響を与えるので外す。
Hypernetwork strength を1に戻す
Hypernetwork strength が1未満だと学習が遅くなる。
Hypernetwork
Hypernetwork でキャラの学習と使用
画像のキャプションファイルには覚えてほしい特徴も、覚えてほしくない特徴もすべて書く。
Hypernetwork 使用時にキャラの特徴のタグをプロンプトに入れる。
活性化関数選び
活性化関数は以下の3つがよく使われる
Linear
活性化関数実装前に使われていた(つまり活性化関数なし)。Linear は学習できる量が少ないのが欠点だ。Linear 以外の活性化関数なら同じ layer structure でも多くの内容を学習できる。
relu
有名でよく使われている活性化関数。ReLU は Layer weights initialization で Normal を選択してはならない。ReLU を Normal で初期化するとニューロンの半分が初期化時に死んでしまう。
学習後のウェイトが0以下になるとニューロンが死んでしまう Dying ReLU 問題がある。ReLU を使う場合の Dying ReLU 対策には以下の2つのどちらかを使う。
Layer Nomralization を入れる
Layer Nomralization を入れると 5e-4 や 1e-3 のような大きな学習率を指定しないと学習が進まない。ほかの人ハイパーパラメータを参考にする場合には Layer Normalization の有無は重要になる。
学習率を小さくする
小さい学習率(5e-6 程度)は学習に時間がかかる。
mish
2022 年現在で最も高性能な活性化関数の一つ。AUTOMATIC1111 の実装では ReLU と処理速度がほとんどかわらない。Dying ReLU 問題もないのでオプションの選択も自由。
Layer Normalization を有効にする場合は学習率を大きくする
Layer Nomralization を入れると 5e-4 や 1e-3 のような大きな学習率を指定しないと学習が進まない。
Wide VS Deep
デフォルト(1, 2, 1)は 20 枚程度の画像で学習させるのに向いている。
広いネットワーク(たとえば 1, 3, 1 や 1, 4, 1)は新しい概念(人・物・動物)を学習させるのに向いている。
深いネットワーク(たとえば 1, 1.5, 1.5, 1 や 1, 2, 2, 1)は画風を学習させるのに向いている。
深くて広いネットワーク(たとえば 1, 2, 4, 2, 1)は学習に時間がかかり、過学習を起こしやすいのでよくない。
ファイルサイズは数字の合計で決まる。1, 3, 1 と 1, 1.5, 1.5 ,1 は同じファイルサイズになる。層が深いネットワークほど学習に時間がかかる。層が深いと勾配消失の影響があるので学習率を大きくする必要がある。
画風学習用の設定例
- 1, 1.5, 1.5, 1.5, 1 - Softsign - Xavier init - Dropout - 5e-6:20000, 5e-7
- 1, 1.5, 1.5, 1.5, 1 - Mish - Xavier init - 5e-5:1500, 5e-6:9000, 5e-8
- 1, 1.5, 1.5, 1.5, 1 - Tanh - Normal init - 5e-6
Textual Inversion
Textual Inversion でやりがちなミス
以下のミスをするとプレビューが変化しない。
- プレビューのプロンプトに embedding 名を入れ忘れる
- Prompt template file に [name] を入れ忘れる
覚えてほしい特徴と覚えてほしくない特徴
覚えてほしい特徴は、embedding 作成時の Initialization Text に入れる。
覚えてほしくない特徴(white background や close-up など)は画像のキャプションファイルに書く。
パーツ学習の問題点
キャラの髪飾りを Textual Inversion で学習させたいとする。このとき、髪飾りだけの画像で学習すると応用が効かない。つまり髪飾り単体は描けるが、キャラと同時に出現させられない。
なので服や装飾品を学習させたいときは、キャラとセットで学習させる必要がある。そうすると 512x512 では解像度が足りなくなる。
Textual Inversion でネガティブな要素を学習させる
ネガティブプロンプトで指定できないネガティブな要素を学習させて、ネガティブプロンプトに指定する方法がある。
bad-artist 'negative' embedding
Dreambooth
チューニングする予定のモデルで正則化画像を作る
正則化画像をよそから持ってくると、正則化画像もモデルが学んでしまう。つまりクラスプロンプトで使ったタグを使って画像を生成すると、出力される画像が正則化画像に似てしまう。
VAE
How to create a variational autoencoder with keras
VAE の埋め込み
StableDiffusionのcheckpointに任意のVAEをマージする
Aesthetic Gradients
Extensions からインストールできる。
使い方
embedding を models/aesthetic_embeddings 入れると、txt2img タブの Open for Clip Aesthetic で設定できる。
サンプル embedding が vicgalle/stable-diffusion-aesthetic-gradients/aesthetic_embeddings からダウンロードできる。サンプルの作例は vicgalle/stable-diffusion-aesthetic-gradients で見れる。
Aesthetic steps
最適化ステップの実行回数。2や3ぐらいから始めて少しずつ大きくしていく。大きくするほど embedding の影響が強くなる。
Aesthetic learning rate
最適化の学習率。デフォルトの 0.0001 から動かす必要はない。
外部リンク
Using Aesthetic Images Embeddings to improve Dreambooth or TI results #3350
【NovelAI】开源的WebUI即将引入重磅更新,大幅提升图像品质
Personalizing Text-to-Image Generation via Aesthetic Gradients
embedding の生成
学習画像をそれぞれ embedding に変換し、それらの embedding の平均を計算して、正規化する。これを e とする。
embedding の使用
Aesthetic text for imgs がある場合 e とブレンドする。まず Aesthetic text for imgs を embedding に変換(これを text_emb と呼ぶ)する。Is negative text の場合は e - text_emb の後に正規化する。そして e と Slerp angle でブレンドしたものを e として使う。
プロンプトを変換した embedding と e との内積を Loss としてテキストエンコーダーをチューニングする。Aesthetic steps はこのチューニング回数。Aesthetic learning rate は学習率。
最終的に、チューニング前に生成した embedding とチューニング後に生成した embedding とを Aesthetic weight でブレンドして、最終的な embedding とする。
[実装付き]Stable Diffusionの追加学習に適する画像を、VAEを利用して選別する
Custom Diffusion
DreamBooth と Textual Inversion との比較
Textual Inversion
Textual Inversion の論文によると、学習画像は5枚までがよいとのことだが、74 枚使った方が結果がよかった。
学習は 25,000 ステップまでにしておかないと、キャラが崩壊してくる。
Dreambooth
プロンプトの指示でキャラクターが編集しやすくなり、構図もよい。しかし画風への対応力がいまいち。
画像3枚の学習の方が 72 枚使った時よりよかった。
1,000 ステップ(A6000 で 30 分かからない)の学習で十分。
外部リンク
22/09/26 Stable Diffusion追加学習の記録
Textual Inversion versus Dreambooth
Textual Inversion
Textual Inversion も Hypernetwork も Aesthetic Gradients もデフォルトの状態で出せないような絵は出力できない。
DreamBooth と Textual Inversion との比較ではステップ数は 25,000 程度と書かれているが、100,000 ステップまで学習させても問題ないことも多い。
An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion
プロンプトはまずトークンの集合に変換される。次にそれぞれのトークンが固有の埋め込みベクトル(embedding vector)に変換される。この埋め込みベクトルが下流のネットワークへ入力される。
Textual Inversion はテキストエンコーダーに、新しいトークンと新しい埋め込みベクトルとを挿入し、挿入された埋め込みベクトルを調整する。
Stable Diffusion with Aesthetic Gradients
Custom Styles in Stable Diffusion, Without Retraining or High Computing Resources
.pt ファイルの結合
rinongal/textual_inversion の merge_embeddings.py を使う。
ベクトル埋め込みの最適化によるアイデンティティを保ったキャラクター生成
通常の Textual Inversion では Initialization text で embedding を初期化する。この記事では複数の画像を embedding に変換してその平均を初期 embedding とする。
解説リンク
Google Colab ではじめる Textual Inversion
How to Fine-tune Stable Diffusion using Textual Inversion では手動(Python)で TI を行う方法を解説している。
[Tutorial] "Fine Tuning" Stable Diffusion using only 5 Images Using Textual Inversion.
--RETARD'S GUIDE TO TEXTUAL INVERSION--
キャラやオブジェクトと語彙とを同時に追加する(Dreambooth)
Dreambooth は Textual Inversion や Hypernetwork と違い、学習に使ったキャラ・オブジェクトを直接呼び出せる。
GPU で実行する
AUTOMATIC1111 で Dreambooth を動かす PR。
Ttl/diffusers
DeepSpeed を使うことで VRAM8GB で動作する。ただし RAM を 25 GB使う。
ShivamShrirao/diffusers
VRAM 10 GB でローカル実行できる。ただし Adam 8 bit。精度を上げるには VRAM 16 GB 以上が必要。
dreambooth-gui
VRAM 10 GB でローカル実行できる。GUI 付き。
画像生成AI「Stable Diffusion」にたった数枚のイラストから絵柄や画風を追加学習できる「Dream Booth」が簡単に使える「Dreambooth Gui」レビュー
NMKD
VRAM 24 GB でローカル実行できる。GUI 付き。
fast-dreambooth-colab
12GB の VRAM で実行できる 。
Dreambooth-Stable-Diffusion-cpu
CPU で実行できる Dreambooth。推奨メモリ量は 32 GB 以上。Ryzen 3900X 3.6 GHz, メモリ 48 GB のマシンで 500 step の学習に7時間程度かかったらしい。
diffusers to ckpt
convert_original_stable_diffusion_to_diffusers.py
jachiam/convert_diffusers_to_sd.py
Made a Hugginface Dreambooth models to .ckpt conversion script that needs testing
外部リンク
DiffusersベースでStableDiffusionのモデル(U-Net+Text Encoder)をfine-tuningする
DiffusersベースのDreamBoothの精度をさらに上げる(Windows対応)
Diffusers版DreamboothをVRAM 8GBのWindowsで無理矢理動かす
Diffusers版DreamboothをVRAM 12GBのWindows PCで動かす
DreamBooth Stable Diffusion を試す
VRAM 8 GB で Dreambooth を実行する。不要なデータを RAM に退避させるのでメモリは 25 GB 以上必要になる。
Diffusers版Dreamboothを変更して精度を上げる(Text Encoderを学習対象とする)
AIで特定キャラを描く(DreamBoothで追加学習)(Google Colab)
Stable Diffusion Dreambooth Concepts Library
Installing Stable Diffusion & Dreambooth for Windows(RTX A5000 24GB VRAM)
Imagic
Imagic は画像1枚とプロンプトとを使って拡散モデル自体をファインチューンして、画像の差分を生成する。Imagic 自体は Embedding と拡散モデル自体とを出力する。学習に使った画像とプロンプトを、Imagic が出力した Embedding と拡散モデルとに入力すると、プロンプト通りの画像が生成される。
外部リンク
Key-Locked Rank One Editing for Text-to-Image Personalization(Perfusion)
プロンプトを編集するタイプのファインチューニングなので、LoRA や Dreambooth よりも Textual Inversion や Hypernetwork に近い。なのでモデルに存在しない概念は学習できないと考えられる。
Hypernetwork は、ウェイト K とウェイト V とに注入する前に追加のネットワークを作成し、追加ネットワークをトレーニングする。Perfusion はテキストエンコーダとウェイトV とをトレーニングする。
テキストエンコーダのみを編集する Textual Inversion よりも高性能だが、Hypernetwork と比べて性能が高いかどうかは不明。Perfusion はファイルサイズが 100KB 程度なので、性能がよければ Hypernetwork の代替になりうる。
追加学習
Stable Diffusionを「いらすとや」で追加学習する
Waifu diffusionの追加学習をColabのT4で行う。(使用VRAM13.6GB)※dreamboothじゃないよ
Waifu diffusion式の追加学習のやり方。(VRAM14GB~)(12.2GB~?)
U-Net のチューニング
DiffusersベースでStable Diffusionをfine tuningする
Every Dream trainer for Stable Diffusion
VRAM 24 GB 必要。モデルの fine tune を行うツールセット。
外部リンク
第3回 ディープラーニング最速入門 ― 仕組み理解×初実装(後編)
Inside of Deep Learning (ディープラーニングの性能改善手法 一覧)
Stable Diffusion から特定の概念を忘れさせる学習を行ってみる
Tips
頭や脚がフレームアウトする
Waifu Diffusion 1.2 や 1.3 で頭が切られる確率を下げる方法は見つかっていない。「学習データを 512px * 512px にするときに頭が切られているのが原因」と言われている。修正は AUTOMATIC1111 のアウトペインティングで頭上を拡張して img2img が早い。以下は効果がなかったもの。
- アスペクト比を縦長にする
- clouds, tree などの頭上にあるオブジェクトを描写する
- アイレベルを上げる
- ネガティブプロンプトに out of frame や cropped を入れる
顔の大部分が切られる場合は head out of frame をネガティブに入れる。
画力が上がる作品タグ
画風の指定にも使える。-like face を使うと顔だけ画風を変えられる。love live!-like face や disgaea-like face など。
- genshin impact
- arknights
- granblue fantasy
- azur lane
- love live!
- cygames
- kyoto animation
- gochuumon wa usagi desu ka?(ロリを描きたいときに使う)
- bang dream!
- disgaea
- amagami (ツリ目になりやすい)
- yugioh (髪がトゲトゲになる)
- senran kagura
TrinArt のデフォルトネガティブプロンプト
bad anatomy, bad hands, bad quality, blurry, cropped, disconnected limbs, extra digit, extra limbs, fewer digits, jpeg artifacts, low quality, explicit, text
Novel AI と TrinArt の共通ネガティブプロンプト
bad anatomy, bad hands, blurry, cropped, extra digit, fewer digits, jpeg artifacts, low quality, text
LLM を使ったストーリー作成
LLM を使ったストーリー作成が一発でうまくいく事はない。なので、ストーリー作成の各工程ごとにアイデア出しの補助をさせることでストーリーを作成する。
AI のべりすとは日本語が使えるが性能は高くない。無料で公開されているローカル実行できる LLM を英語で使ったり、Chat GPT を使う方が効率がいい。AI のべりすとの強みはアダルト文章を日本語で出力できることだ。
目次
Hypernetwork の使い方
目次
- tips
LoRA の学習方法
- 画像加工
- キャプション・設定ファイル
- キャプション方式
- タグ編集アプリ
- キャプションファイルの先頭にタグを追記するコマンド
- 設定ファイルの class_tokens
- トリガーワード
- 画風学習のキャプションファイル
- キャラ学習のキャプションファイル
- keep_tokens
- VRAM 削減
- データの水増し
- 過学習防止
- 学習
- fp16 と bf16
- サンプルの出力
- 学習方式の選択
- リピート数とエポック数
- network_dim
- dim_from_weights network_weights
- network_alpha base_weights base_weights_multiplier
- 学習率
- スケジューラ
- オプティマイザ
- 階層別学習率
- 高速化
- 省メモリ設定
- SDXL
- 検証
- 学習の再開
- メタデータの閲覧
AUTOMATIC1111 の便利な機能
目次
- デティール追加
- img2img
- img2img のステップ数を直接指定
- Only masked(マスクした部分を拡大してから再生成して合成:旧 Inpaint at full rsolution)
- Batch img2img(フォルダ内の画像すべてに img2img を実行)
- Face Restration(顔を修復する機能)
- Loopback(img2img の結果に img2img を実行する)
- --gradio-img2img-tool(簡易ペイントツール追加)
- 色の補正
- Detection Detailer(顔のマスクを自動生成してくれる Extension)
- Depth-guided model(深度情報を使った img2img)
- Novel AI のような noise strength
- 操作
- Generate ボタンを右クリック > Generate forever で止めるまで生成。止めるときは右クリック > cancel
- Ctrl + Enter で Generate
- Ctrl + Z プロンプトを元に戻す
- スライダーをクリックした後十字キーで1ずつ増減できる
- Alt + ← or → カンマ区切りの文字を選択して左右移動(1.5.0 以降)
- 検証
- 高速化
- forgeを使う
- 532.03 以降の GeForce ドライバを使う
- xformers
- FlashAttention-2
- --opt-sdp-attention(VRAM 消費量が増えるが xFormers より速くなるかもしれない)
- Token merging
- HyperTile
- ライブプレビューを切る
- pytorch 2.0(RTX4000番台で高速化する)
- TensorRT Extension for Stable Diffusion Web UI
- TensorRT support for webui
- Lsmith
- Latent Consistency Model
- Adversarial Diffusion Distillation
- SDXL Turbo
- Extension など
- Config Presets(設定保存)
- sd_web_ui_preset_utils(設定保存)
- Booru tag autocompletion for A1111(タグ補完)
- extensionEditor(AUTOMATIC1111向けのプロンプトエディター)
- Dataset Tag Editor(タグで画像を編集したり、タグを編集するエディタ)
- Helper GUI for manual tagging/cropping(画像のタグ管理エディタ)
- embedding editor(768 個ある潜在表現ベクトルを手動で調整)
- multi-subject-render(背景とオブジェクトとを雑コラしてくれる)
- Regional Prompter (プロンプトの効く領域を指定)
- Latent Couple extension(プロンプトの効く領域を指定)
- Depth map library and poser(手の深度マップライブラリ)
- Cutoff - Cutting Off Prompt Effect(色移り防止)
- ABG_extension (背景透過)
- 【Stable Diffusion】WebUIに必ず導入したいおすすめの拡張機能40選+α【Extensions】
- animeDiff
- Controlnet
- ポーズ・構図の指定と着色ができる。Image2Image はグレースケール画像の着色ができなかったが Controlnet ではそれができる。
- ControlNet の新モデル Anystyle
- Reference-Only(参考画像を基にイラスト作成)
- ControlNetでポーズや構図を指定してAIイラストを生成する方法
- AUTOMATIC1111+ControlNetのつかいかた2(目当ては自動塗り)
- AIで適当な線画を清書し、さらに色を塗って高品質なイラストに仕上げる方法【ControlNet活用術】
- 画像生成AIを線画整えツールや自動彩色ツールにする
- Character bones that look like Openpose for blender _ Ver_6 Depth+Canny+Landmark(Blender 上でポージングできるツール)
- 「ControlNet 1.1」の新機能まとめ!新しいモデルや改善点を紹介【Stable Diffusion】
- ControlNet(v1.1)の詳しい解説!輪郭やポーズから思い通りの絵を書かせる
- 入力線画を全く変えずに画像生成AIに色塗りさせる方法
- MLSD
- プリプロセッサの dw_openpose(写真から棒人間を作成して入力)
- Multi-Controlnet
- Extension
- Model