モデル概要
モデル特徴
モデル能力
使用事例
🚀 pseudo-flex-base (1024x1024ベース解像度) のモデルカード
stable-diffusion-2-1を異なるアスペクト比でファインチューニングし、写真モデルに変換したものです。
🚀 クイックスタート
このモデルを使用するには、以下のコードを実行します。
# Use Pytorch 2!
import torch
from diffusers import StableDiffusionPipeline, DiffusionPipeline, AutoencoderKL, UNet2DConditionModel, DDPMScheduler
from transformers import CLIPTextModel
# Any model currently on Huggingface Hub.
model_id = 'ptx0/pseudo-flex-base'
pipeline = DiffusionPipeline.from_pretrained(model_id)
# Optimize!
pipeline.unet = torch.compile(pipeline.unet)
scheduler = DDPMScheduler.from_pretrained(
model_id,
subfolder="scheduler"
)
# Remove this if you get an error.
torch.set_float32_matmul_precision('high')
pipeline.to('cuda')
prompts = {
"woman": "a woman, hanging out on the beach",
"man": "a man playing guitar in a park",
"lion": "Explore the ++majestic beauty++ of untamed ++lion prides++ as they roam the African plains --captivating expressions-- in the wildest national geographic adventure",
"child": "a child flying a kite on a sunny day",
"bear": "best quality ((bear)) in the swiss alps cinematic 8k highly detailed sharp focus intricate fur",
"alien": "an alien exploring the Mars surface",
"robot": "a robot serving coffee in a cafe",
"knight": "a knight protecting a castle",
"menn": "a group of smiling and happy men",
"bicycle": "a bicycle, on a mountainside, on a sunny day",
"cosmic": "cosmic entity, sitting in an impossible position, quantum reality, colours",
"wizard": "a mage wizard, bearded and gray hair, blue star hat with wand and mystical haze",
"wizarddd": "digital art, fantasy, portrait of an old wizard, detailed",
"macro": "a dramatic city-scape at sunset or sunrise",
"micro": "RNA and other molecular machinery of life",
"gecko": "a leopard gecko stalking a cricket"
}
for shortname, prompt in prompts.items():
# old prompt: ''
image = pipeline(prompt=prompt,
negative_prompt='malformed, disgusting, overexposed, washed-out',
num_inference_steps=32, generator=torch.Generator(device='cuda').manual_seed(1641421826),
width=1368, height=720, guidance_scale=7.5, guidance_rescale=0.3, num_inference_steps=25).images[0]
image.save(f'test/{shortname}_nobetas.png', format="PNG")
✨ 主な機能
- stable-diffusion-2-1をファインチューニングし、異なるアスペクト比に対応した写真モデルを生成します。
- 多様なアスペクト比の画像生成が可能です。
📦 インストール
このモデルを使用するには、必要なライブラリをインストールする必要があります。以下のコマンドを使用してインストールしてください。
pip install torch diffusers transformers
💻 使用例
基本的な使用法
# Use Pytorch 2!
import torch
from diffusers import StableDiffusionPipeline, DiffusionPipeline, AutoencoderKL, UNet2DConditionModel, DDPMScheduler
from transformers import CLIPTextModel
# Any model currently on Huggingface Hub.
model_id = 'ptx0/pseudo-flex-base'
pipeline = DiffusionPipeline.from_pretrained(model_id)
# Optimize!
pipeline.unet = torch.compile(pipeline.unet)
scheduler = DDPMScheduler.from_pretrained(
model_id,
subfolder="scheduler"
)
# Remove this if you get an error.
torch.set_float32_matmul_precision('high')
pipeline.to('cuda')
prompts = {
"woman": "a woman, hanging out on the beach",
"man": "a man playing guitar in a park",
"lion": "Explore the ++majestic beauty++ of untamed ++lion prides++ as they roam the African plains --captivating expressions-- in the wildest national geographic adventure",
"child": "a child flying a kite on a sunny day",
"bear": "best quality ((bear)) in the swiss alps cinematic 8k highly detailed sharp focus intricate fur",
"alien": "an alien exploring the Mars surface",
"robot": "a robot serving coffee in a cafe",
"knight": "a knight protecting a castle",
"menn": "a group of smiling and happy men",
"bicycle": "a bicycle, on a mountainside, on a sunny day",
"cosmic": "cosmic entity, sitting in an impossible position, quantum reality, colours",
"wizard": "a mage wizard, bearded and gray hair, blue star hat with wand and mystical haze",
"wizarddd": "digital art, fantasy, portrait of an old wizard, detailed",
"macro": "a dramatic city-scape at sunset or sunrise",
"micro": "RNA and other molecular machinery of life",
"gecko": "a leopard gecko stalking a cricket"
}
for shortname, prompt in prompts.items():
# old prompt: ''
image = pipeline(prompt=prompt,
negative_prompt='malformed, disgusting, overexposed, washed-out',
num_inference_steps=32, generator=torch.Generator(device='cuda').manual_seed(1641421826),
width=1368, height=720, guidance_scale=7.5, guidance_rescale=0.3, num_inference_steps=25).images[0]
image.save(f'test/{shortname}_nobetas.png', format="PNG")
📚 ドキュメント
モデル詳細
モデル説明
stable-diffusion-2-1 (stabilityai/stable-diffusion-2-1 と ptx0/pseudo-real-beta) を動的なアスペクト比に対応するようにファインチューニングしたモデルです。
ファインチューニングした解像度:
幅 | 高さ | アスペクト比 | 画像数 | |
---|---|---|---|---|
0 | 1024 | 1024 | 1:1 | 90561 |
1 | 1536 | 1024 | 3:2 | 8716 |
2 | 1365 | 1024 | 4:3 | 6933 |
3 | 1468 | 1024 | ~3:2 | 113 |
4 | 1778 | 1024 | ~5:3 | 6315 |
5 | 1200 | 1024 | ~5:4 | 6376 |
6 | 1333 | 1024 | ~4:3 | 2814 |
7 | 1281 | 1024 | ~5:4 | 52 |
8 | 1504 | 1024 | ~3:2 | 139 |
9 | 1479 | 1024 | ~3:2 | 25 |
10 | 1384 | 1024 | ~4:3 | 1676 |
11 | 1370 | 1024 | ~4:3 | 63 |
12 | 1499 | 1024 | ~3:2 | 436 |
13 | 1376 | 1024 | ~4:3 | 68 |
他のアスペクト比は小さなバケットに分けられています。もっと簡潔にまたは慎重に行うこともできましたが、データの粗末な取り扱いは実験パラメータの一部でした。
属性 | 详情 |
---|---|
開発者 | pseudoterminal |
モデルタイプ | 拡散ベースのテキストから画像生成モデル |
言語 | 英語 |
ライセンス | creativeml-openrail-m |
親モデル | https://huggingface.co/ptx0/pseudo-real-beta |
詳細情報リソース | 詳細情報が必要です |
用途
https://huggingface.co/stabilityai/stable-diffusion-2-1 を参照してください。
学習詳細
学習データ
- LAION HDデータセットのサブセット
- https://huggingface.co/datasets/laion/laion-high-resolution その中の一部のみを使用しています。詳細は前処理を参照してください。
前処理
すべての前処理は、GitHubの bghira/SimpleTuner
のスクリプトを使用して行われます。
速度、サイズ、時間
- データセットサイズ: フィルタリング後、100kの画像とキャプションのペア。
- ハードウェア: 1台のA100 80G GPU
- オプティマイザ: 8bit Adam
- バッチサイズ: 150
- 実際のバッチサイズ: 15
- 勾配累積ステップ: 10
- 有効なバッチサイズ: 150
- 学習率: 一定の4e-8で、時間とともにバッチサイズを減らすことで調整されます。
- 学習ステップ: 作業中 (進行中)
- 学習時間: およそ4日 (これまで)
サンプル画像
シード: 2695929547 ステップ数: 25 サンプラー: DDIM、デフォルトのモデル設定 バージョン: Pytorch 2.0.1、Diffusers 0.17.1 ガイダンス: 9.2 ガイダンスリスケール: 0.0
解像度 | モデル | ステーブルディフュージョン | pseudo-flex | realism-engine |
---|---|---|---|---|
753x1004 (4:3) | v2-1 | ![]() |
![]() |
![]() |
1280x720 (16:9) | v2-1 | ![]() |
![]() |
![]() |
1024x1024 (1:1) | v2-1 | ![]() |
![]() |
![]() |
1024x1024 (1:1) | v2-1 | ![]() |
![]() |
![]() |
背景
ptx0/pseudo-real-beta
の事前学習チェックポイントは、バッチサイズ15で10回の勾配累積を行い、多様なデータセットで、U-Netを4,200ステップ、テキストエンコーダを15,600ステップ学習させました。
- cushman (1939年から1969年までの8000枚のコダクロームスライド)
- midjourney v5.1-filtered (約22,000枚の拡大されたv5.1画像)
- ナショナルジオグラフィック (約3,000 - 4,000枚の1024x768以上の動物、野生生物、風景、歴史の画像)
- 人がベイピング/喫煙するストック画像の小さなデータセット
このモデルは、写実的でアドベンチャーな画像を生成する能力があり、プロンプトとの整合性も強いです。しかし、多様なアスペクト比に対応する能力が不足しています。
pseudo-real-beta
を学習させるために使用したコードには、アスペクトバケットのサポートがありませんでした。私は @ttj の pseudo-flex-base
を発見し、それが私の持っていた理論を支持していました。
学習コード
学習ループのデータローダーに、1024x1024未満の画像を破棄し、画像の短い辺を1024にする条件を追加することで、完全なアスペクトバケットのサポートを追加しました。画像のアスペクト比を使用して、もう一方の次元の新しい長さを決定します。例えば、横長の場合は倍数として、縦長の場合は除数として使用します。
すべてのバッチは同じ解像度の画像を持っています。同じアスペクト比の異なる解像度はすべて、1024x... または ...x1024に調整されます。1920x1080の画像は、およそ1820x1024になります。
開始チェックポイント
このモデル pseudo-flex-base
は、stabilityai/stable-diffusion-2-1
の768モデルのベースを、凍結されたテキストエンコーダでファインチューニングして作成されました。LAION HDの148,000枚の画像を使用して、TEXTフィールドをキャプションとして1000ステップ学習させました。
バッチサイズは再び実質的に150でした。バッチサイズ15で10回の勾配累積を行いました。非常に高い解像度では非常に遅く、アスペクト比が1.5 - 1.7の場合は、A100 80Gで1反復あたり約700秒かかります。
この学習には2日かかりました。
テキストエンコーダの交換
1000ステップで、ptx0/pseudo-real-beta
のテキストエンコーダをこのモデルのU-Netと実験的に使用し、画像のノイズ(例えば、ピクセル化)を解消しようとしました。それは成功しました!
このテキストエンコーダを使用して、チェックポイント1000から学習を再開しました。
横長/縦長アスペクト比の出現
検証用のプロンプトは、1300ステップから2950ステップで「まとまり」を持ち始めました。いくつかのチェックポイントでは性能が低下することがありますが、通常は約100ステップで解消されます。低下があっても、常に改善が見られました。
劣化とデータセットの交換
148,000枚の画像をバッチサイズ150で3000ステップ以上学習させると、画像が劣化し始めました。これはおそらく、データセット内のすべての画像を3回繰り返し学習したことが原因です。データセット内のすべての画像が使用されたと仮定すると、非常に低い学習率で画像1枚あたり9回の学習になります。
これにより、2つの問題が発生しました。
- 画像にノイズが見え始めました。
- 学習に非常に時間がかかり、各チェックポイントでの改善が少なかった。
- プロンプトの語彙に過学習し、汎化能力が不足していた。
したがって、1300ステップで、元のLAION HDデータセットでの学習を中止し、代わりに新しく取得した高解像度のMidjourney v5.1データのサブセットで学習することに決定しました。
これは、ベース解像度1024x1024の17,800枚の画像で構成されており、縦長のサンプルが約700枚、横長のサンプルが約700枚あります。
コントラストの問題
チェックポイント4250をテストすると、暗い画像が薄くなり、明るい画像が「つまらない」という共通の問題が見られました。
様々なCFGリスケールとガイダンスレベルをテストした結果、guidance_scale=9.2
と guidance_rescale=0.0
で最も良い暗い画像が得られましたが、依然として「薄く」見えました。
データセットの2回目の変更
一意の画像で構成され、正方形の画像を含まない新しいLAIONサブセットを作成しました。以下の限られたアスペクト比のみを含みます。
- 16:9
- 9:16
- 2:3
- 3:2
これは、モデルの理解を速め、キャプションに対する過学習を防ぐことを目的としています。
このLAIONサブセットには17,800枚の画像が含まれており、アスペクト比に均等に分布しています。
画像は、T5 FlanとBLIP2を使用してキャプション付けされ、非常に正確な結果が得られました。
コントラストの修正: オフセットノイズ / SNRガンマの導入?
チェックポイント 4250 に対して、オフセットノイズとSNRガンマを実験的に適用しました。
snr_gamma=5.0
noise_offset=0.2
noise_pertubation=0.1
学習25ステップ以内に、コントラストが戻り、プロンプト a solid black square
が再び適切な結果を生成しました。
オフセットノイズを50ステップ適用すると、本当に「うまくいった」ように見え、a solid black square
の変形がこれまでで最も少なくなりました。
75ステップのチェックポイントは壊れていました。SNRガンマの計算が数値的に不安定になり、無効にされました。オフセットノイズのパラメータは変更されませんでした。
成功!品質とコントラストの改善
テキストエンコーダの交換と同様に、次のいくつかのチェックポイントで画像の品質が著しく改善しました。
その後は放置し、4475ステップで十分な改善が見られたため、このリポジトリに新しいバージョンが作成されました。
状態: テストリリース
このモデルは、ユーザーによる十分な評価ができるように、テスト形式でパッケージ化されています。
使用方法については、モデルの使用開始方法 を参照してください。
解決しようとする問題
- 生成された画像が、より大きな画像から切り取られたように見える問題。
- 正方形以外の画像を生成すると、奇妙な結果になる問題(モデルが正方形の画像で学習されているため)。
制限事項
- 小さなデータセットで学習されているため、改善の幅が限られています。
- SD 2.1のモデルアーキテクチャはSDXLより古く、同等の良い結果を生成することはできません。
1:1のアスペクト比では、1024x1024でファインチューニングされています。ただし、このモデルが基づいている ptx0/pseudo-real-beta
は、最後に768x768でファインチューニングされています。
潜在的な改善点
- キャプション付きのデータセットで学習する。このモデルは便宜上LAIONのTEXTフィールドを使用していますが、COCOで生成されたキャプションの方が良いでしょう。
- 大きな画像でテキストエンコーダを学習させる。
- 定期的にキャプションをドロップアウトさせ、分類器フリーのガイダンス能力を向上させる。
🔧 技術詳細
このモデルは、拡散ベースのテキストから画像生成モデルで、stable-diffusion-2-1をファインチューニングして作成されています。アスペクトバケットのサポートを追加し、多様なアスペクト比に対応する能力を向上させました。また、オフセットノイズとSNRガンマを適用することで、画像のコントラストを改善しました。
📄 ライセンス
このモデルは、creativeml-openrail-mライセンスの下で提供されています。

