モデル概要
モデル特徴
モデル能力
使用事例
🚀 Stable Diffusion v1 - 4 モデルカード
Stable Diffusionは、任意のテキスト入力を元に写真のようにリアルな画像を生成できる潜在的なテキストから画像への拡散モデルです。 Stable Diffusionの機能の詳細については、🤗のStable Diffusion with 🧨Diffusersブログを参照してください。
Stable - Diffusion - v1 - 4 チェックポイントは、Stable - Diffusion - v1 - 2 チェックポイントの重みで初期化され、その後、解像度512x512で225kステップ、「laion - aesthetics v2 5+」で微調整され、分類器なしガイダンスサンプリングを改善するためにテキスト条件付けを10%削除しました。
ここの重みは、🧨 Diffusersライブラリで使用することを想定しています。CompVis Stable Diffusionコードベースに読み込む重みを探している場合は、こちらを参照してください。
🚀 クイックスタート
Stable Diffusionを実行するには、🤗のDiffusersライブラリの使用をおすすめします。
基本的な使用法
PyTorch
pip install --upgrade diffusers transformers scipy
デフォルトのPNDMスケジューラーでパイプラインを実行するには、以下のコードを使用します。
import torch
from diffusers import StableDiffusionPipeline
model_id = "CompVis/stable-diffusion-v1-4"
device = "cuda"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to(device)
prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]
image.save("astronaut_rides_horse.png")
注意: GPUメモリが制限され、利用可能なGPU RAMが4GB未満の場合は、上記のようにデフォルトのfloat32精度ではなく、float16精度でStableDiffusionPipelineをロードするようにしてください。これは、diffusersに重みがfloat16精度であることを期待するように指示することで行えます。
import torch
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to(device)
pipe.enable_attention_slicing()
prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]
image.save("astronaut_rides_horse.png")
ノイズスケジューラーを交換するには、from_pretrained
に渡します。
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
model_id = "CompVis/stable-diffusion-v1-4"
# ここではEulerスケジューラーを使用します
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, torch_dtype=torch.float16)
pipe = pipe.to("cuda")
prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]
image.save("astronaut_rides_horse.png")
JAX/Flax
TPUやGPUでStableDiffusionを使用して高速推論を行うには、JAX/Flaxを利用できます。 デフォルトのPNDMSchedulerでパイプラインを実行するには、以下のコードを使用します。
import jax
import numpy as np
from flax.jax_utils import replicate
from flax.training.common_utils import shard
from diffusers import FlaxStableDiffusionPipeline
pipeline, params = FlaxStableDiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4", revision="flax", dtype=jax.numpy.bfloat16
)
prompt = "a photo of an astronaut riding a horse on mars"
prng_seed = jax.random.PRNGKey(0)
num_inference_steps = 50
num_samples = jax.device_count()
prompt = num_samples * [prompt]
prompt_ids = pipeline.prepare_inputs(prompt)
# 入力と乱数生成器をシャーディングします
params = replicate(params)
prng_seed = jax.random.split(prng_seed, num_samples)
prompt_ids = shard(prompt_ids)
images = pipeline(prompt_ids, params, prng_seed, num_inference_steps, jit=True).images
images = pipeline.numpy_to_pil(np.asarray(images.reshape((num_samples,) + images.shape[-3:])))
注意:
TPUメモリが制限されている場合は、上記のようにデフォルトのfloat32
精度ではなく、bfloat16
精度でFlaxStableDiffusionPipeline
をロードするようにしてください。これは、diffusersに「bf16」ブランチから重みをロードするように指示することで行えます。
import jax
import numpy as np
from flax.jax_utils import replicate
from flax.training.common_utils import shard
from diffusers import FlaxStableDiffusionPipeline
pipeline, params = FlaxStableDiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4", revision="bf16", dtype=jax.numpy.bfloat16
)
prompt = "a photo of an astronaut riding a horse on mars"
prng_seed = jax.random.PRNGKey(0)
num_inference_steps = 50
num_samples = jax.device_count()
prompt = num_samples * [prompt]
prompt_ids = pipeline.prepare_inputs(prompt)
# 入力と乱数生成器をシャーディングします
params = replicate(params)
prng_seed = jax.random.split(prng_seed, num_samples)
prompt_ids = shard(prompt_ids)
images = pipeline(prompt_ids, params, prng_seed, num_inference_steps, jit=True).images
images = pipeline.numpy_to_pil(np.asarray(images.reshape((num_samples,) + images.shape[-3:])))
✨ 主な機能
Stable Diffusionは、任意のテキスト入力を元に写真のようにリアルな画像を生成できる潜在的なテキストから画像への拡散モデルです。
📚 ドキュメント
モデルの詳細
属性 | 详情 |
---|---|
開発者 | Robin Rombach, Patrick Esser |
モデルタイプ | 拡散ベースのテキストから画像への生成モデル |
言語 | 英語 |
ライセンス | The CreativeML OpenRAIL M license は Open RAIL M license で、BigScience と the RAIL Initiative が共同で責任あるAIライセンスの分野で行っている作業を基にしています。また、このライセンスの基礎となった the article about the BLOOM Open RAIL license も参照してください。 |
モデルの説明 | これは、テキストプロンプトに基づいて画像を生成および変更するために使用できるモデルです。Latent Diffusion Model であり、Imagen paper で提案されているように、固定された事前学習済みのテキストエンコーダー (CLIP ViT - L/14) を使用しています。 |
詳細情報のリソース | GitHub Repository, Paper |
引用形式 | @InProceedings{Rombach_2022_CVPR, |
利用方法
直接利用
このモデルは研究目的のみを想定しています。可能な研究分野やタスクには以下が含まれます。
- 有害なコンテンツを生成する可能性のあるモデルの安全な展開。
- 生成モデルの制限とバイアスの調査と理解。
- アートワークの生成とデザインやその他のアートプロセスでの使用。
- 教育用または創造的なツールでのアプリケーション。
- 生成モデルに関する研究。
除外される利用方法については以下で説明します。
誤用、悪意のある利用、および想定外の利用
このモデルは、人々に敵意や疎外感を与える画像を意図的に作成または拡散するために使用してはなりません。これには、人々が不快、苦痛、または不快感を感じると予想される画像の生成、または歴史的または現在のステレオタイプを広めるコンテンツが含まれます。
想定外の利用
このモデルは、人やイベントの事実的または真実の表現を生成するように訓練されていないため、そのようなコンテンツを生成するためにモデルを使用することは、このモデルの能力範囲外です。
誤用と悪意のある利用
このモデルを、個人に残酷なコンテンツを生成するために使用することは、このモデルの誤用です。これには以下が含まれますが、これらに限定されません。
- 人々やその環境、文化、宗教などの侮辱的、非人間的、またはその他の有害な表現の生成。
- 差別的なコンテンツまたは有害なステレオタイプを意図的に宣伝または広めること。
- 本人の同意なしでの個人のなりすまし。
- 見る人の同意なしの性的なコンテンツ。
- 誤情報とディスインフォメーション。
- 重大な暴力や血腥い描写。
- 著作権またはライセンスされた素材をその使用条件に違反して共有すること。
- 著作権またはライセンスされた素材をその使用条件に違反して改変したコンテンツを共有すること。
制限とバイアス
制限
- このモデルは完全な写真のようなリアリズムを達成しません。
- このモデルは読み取り可能なテキストをレンダリングできません。
- このモデルは、「青い球の上に赤い立方体」に対応する画像をレンダリングするなど、構成性を伴うより難しいタスクではうまく機能しません。
- 顔や人全体が適切に生成されない場合があります。
- このモデルは主に英語のキャプションで訓練されており、他の言語ではうまく機能しません。
- このモデルのオートエンコーディング部分は損失があります。
- このモデルは大規模データセット LAION - 5B で訓練されており、このデータセットには成人向けの素材が含まれており、追加の安全メカニズムと考慮なしでは製品での使用に適していません。
- データセットの重複排除に追加の対策は取られていません。その結果、訓練データに重複する画像についてはある程度の記憶が見られます。訓練データは [https://rom1504.github.io/clip - retrieval/](https://rom1504.github.io/clip - retrieval/) で検索でき、記憶された画像の検出に役立つ可能性があります。
バイアス
画像生成モデルの能力は印象的ですが、社会的バイアスを強化または悪化させる可能性もあります。Stable Diffusion v1は LAION - 2B(en) のサブセットで訓練されており、これは主に英語の説明に限定された画像で構成されています。他の言語を使用するコミュニティや文化のテキストや画像は、十分に考慮されていない可能性があります。これは、白人と西洋文化がしばしばデフォルトとして設定されるため、モデルの全体的な出力に影響を与えます。さらに、英語以外のプロンプトでコンテンツを生成するモデルの能力は、英語のプロンプトと比較して大幅に劣ります。
セーフティモジュール
このモデルの意図された使用方法は、Diffusersの Safety Checker と一緒に使用することです。このチェッカーは、モデルの出力を既知のハードコードされた不適切なコンテンツの概念と比較することで機能します。これらの概念は、このフィルターの逆エンジニアリングの可能性を減らすために意図的に隠されています。具体的には、チェッカーは画像生成後の CLIPTextModel
の埋め込み空間で有害な概念のクラス確率を比較します。これらの概念は生成された画像とともにモデルに渡され、各不適切なコンテンツの概念に対する手動で設計された重みと比較されます。
トレーニング
トレーニングデータ
モデル開発者は、以下のデータセットをモデルのトレーニングに使用しました。
- LAION - 2B (en) およびそのサブセット(次のセクションを参照)
トレーニング手順
Stable Diffusion v1 - 4は、オートエンコーダーとオートエンコーダーの潜在空間で訓練される拡散モデルを組み合わせた潜在拡散モデルです。トレーニング中は以下のようになります。
- 画像はエンコーダーを通じてエンコードされ、画像が潜在表現に変換されます。オートエンコーダーは相対的なダウンサンプリング係数8を使用し、形状H x W x 3の画像を形状H/f x W/f x 4の潜在表現にマッピングします。
- テキストプロンプトはViT - L/14テキストエンコーダーを通じてエンコードされます。
- テキストエンコーダーの非プール出力は、クロスアテンションを介して潜在拡散モデルのUNetバックボーンに入力されます。
- 損失は、潜在表現に追加されたノイズとUNetによる予測の間の再構成目的です。 現在、以下のように訓練された4つのチェックポイントを提供しています。
stable - diffusion - v1 - 1
: 解像度256x256
で237,000ステップ、[laion2B - en](https://huggingface.co/datasets/laion/laion2B - en) で訓練。解像度512x512
で194,000ステップ、[laion - high - resolution](https://huggingface.co/datasets/laion/laion - high - resolution)(LAION - 5Bから解像度>= 1024x1024
の170Mの例)で訓練。stable - diffusion - v1 - 2
:stable - diffusion - v1 - 1
から再開。解像度512x512
で515,000ステップ、「laion - improved - aesthetics」(laion2B - enのサブセットで、元のサイズ>= 512x512
、推定美学スコア> 5.0
、推定透かし確率< 0.5
の画像にフィルタリングされています。透かしの推定はLAION - 5Bのメタデータから、美学スコアは [improved aesthetics estimator](https://github.com/christophschuhmann/improved - aesthetic - predictor) を使用して推定されます)で訓練。stable - diffusion - v1 - 3
:stable - diffusion - v1 - 2
から再開。解像度512x512
で195,000ステップ、「laion - improved - aesthetics」で訓練し、分類器なしガイダンスサンプリング を改善するためにテキスト条件付けを10%削除。stable - diffusion - v1 - 4
stable - diffusion - v1 - 2
から再開。解像度512x512
で225,000ステップ、「laion - aesthetic」で訓練。
📄 ライセンス
このモデルはオープンアクセスであり、すべての人が利用できます。CreativeML OpenRAIL - Mライセンスにより、権利と使用方法がさらに明確に規定されています。
CreativeML OpenRAILライセンスでは以下が規定されています。
- モデルを使用して、意図的に違法または有害な出力やコンテンツを生成したり共有したりしてはなりません。
- 作成者は、生成した出力に対して一切の権利を主張せず、自由に使用できますが、ライセンスに定められた規定に違反しないように使用する責任があります。
- 重みを再配布し、モデルを商業的に使用したりサービスとして提供したりすることができます。その場合は、ライセンスと同じ使用制限を含め、すべてのユーザーにCreativeML OpenRAIL - Mのコピーを共有する必要があります(ライセンス全体を注意深く読んでください)。
完全なライセンスについては、こちら を詳しくお読みください。

