Diffusers documentation
AutoencoderKL
AutoencoderKL
KL損失付きのバリアンスオートエンコーダ(VAE)モデルは、Diederik P. Kingma氏とMax Welling氏によるAuto-Encoding Variational Bayesで提案されました。このモデルは、🤗 Diffusersにおいて画像を潜在変数(latents)にエンコードし、潜在表現を画像にデコードするために使用されます。
論文の抄録は以下の通りです:
連続潜在変数が取り扱えない事後分布を持ち、かつ大規模なデータセットが存在する場合、有向確率モデルにおいて効率的な推論と学習をどのように行えばよいでしょうか。本稿では、大規模なデータセットにスケーリングでき、ある程度の微分可能性条件の下では、取り扱えないケースでも機能する確率変分推論および学習アルゴリズムを導入します。我々の貢献は2点あります。第一に、変分下界の再パラメータ化により、標準的な確率勾配法を用いて直接的に最適化できる下界の推定量が得られることを示します。第二に、データポイントごとに連続潜在変数を持つ独立同分布(i.i.d.)データセットにおいて、提案した下界の推定量を用いて取り扱えない事後分布に近似推論モデル(認識モデルとも呼ばれる)を適合させることで、事後推論を特に効率的に行えることを示します。理論的な利点は、実験結果にも反映されています。
元の形式から読み込む
デフォルトでは、AutoencoderKLはfrom_pretrained()で読み込む必要がありますが、FromOriginalModelMixin.from_single_fileを使用して元の形式から読み込むこともできます。以下のようにします:
from diffusers import AutoencoderKL
url = "https://huggingface.co/stabilityai/sd-vae-ft-mse-original/blob/main/vae-ft-mse-840000-ema-pruned.safetensors" # can also be a local file
model = AutoencoderKL.from_single_file(url)AutoencoderKL
class diffusers.AutoencoderKL
< source >( in_channels: int = 3out_channels: int = 3down_block_types: tuple = ('DownEncoderBlock2D',)up_block_types: tuple = ('UpDecoderBlock2D',)block_out_channels: tuple = (64,)layers_per_block: int = 1act_fn: str = 'silu'latent_channels: int = 4norm_num_groups: int = 32sample_size: int = 32scaling_factor: float = 0.18215shift_factor: float | None = Nonelatents_mean: tuple[float] | None = Nonelatents_std: tuple[float] | None = Noneforce_upcast: bool = Trueuse_quant_conv: bool = Trueuse_post_quant_conv: bool = Truemid_block_add_attention: bool = True )
パラメータ
- in_channels (int, 任意、デフォルトは 3) — 入力画像のチャネル数。
- out_channels (int, 任意, デフォルトは 3) — 出力のチャネル数。
- down_block_types (
tuple[str]、任意、デフォルトは("DownEncoderBlock2D",)) — ダウンサンプルブロックのタイプのタプルです。 - up_block_types (
tuple[str]、任意、デフォルトは("UpDecoderBlock2D",)) — アップサンプリングブロックのタイプのタプルです。 - block_out_channels (
tuple[int]、任意、デフォルトは(64,)) — ブロックの出力チャネルのタプル。 - act_fn (
str、任意、デフォルトは"silu") — 使用する活性化関数。 - latent_channels (
int、任意、デフォルトは 4)— 潜在空間のチャネル数。 - sample_size (
int、任意、デフォルトは32) — サンプルの入力サイズ。 - scaling_factor (
float, 任意、デフォルト値は 0.18215) — 学習済み潜在空間の要素ごとの標準偏差です。これは、学習セットの最初のバッチを使用して計算されます。拡散モデルの学習時に、潜在空間を単位分散にスケーリングするために使用されます。潜在変数は、拡散モデルに渡される前に、式z = z * scaling_factorによってスケーリングされます。デコード時には、式z = 1 / scaling_factor * zによって、潜在変数は元のスケールに戻されます。詳細については、High-Resolution Image Synthesis with Latent Diffusion Models 論文のセクション 4.3.2 と D.1 を参照してください。 - force_upcast (
bool、任意、デフォルトはTrue) — 有効にすると、SD-XL などの高解像度画像向けパイプラインにおいて、VAE を float32 で実行するよう強制します。VAE を低精度の範囲でファインチューニング / 学習し、精度の低下を抑えることが可能な場合、force_upcastをFalseに設定できます。参考: https://huggingface.co/madebyollin/sdxl-vae-fp16-fix - mid_block_add_attention (
bool、任意、デフォルトはTrue) — 有効にすると、Encoder と Decoder の mid_block に attention ブロックが追加されます。false に設定すると、mid_block には resnet ブロックのみが含まれます。
KL損失を用いて画像を潜在変数にエンコードし、潜在表現を画像にデコードするためのVAEモデル。
このモデルは ModelMixin を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存など)については、スーパークラスのドキュメントを参照してください。
decode
< source >( z: FloatTensorreturn_dict: bool = Truegenerator = None ) → ~models.vae.DecoderOutput or tuple
画像のバッチをデコードします。
encode
< source >( x: Tensorreturn_dict: bool = True )
バッチの画像を潜在変数にエンコードします。
forward
< source >( sample: Tensorsample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → ~models.vae.DecoderOutput or tuple
パラメータ
- sample (
torch.Tensor) — 入力サンプル。 - sample_posterior (
bool、省略可能、デフォルトはFalse) — 後方分布からサンプリングするかどうか。 - return_dict (
bool、省略可、デフォルトはTrue) —DecoderOutputを返すか、プレーンなタプルを返すかを指定します。 - generator (
torch.Generator、省略可) — サンプリングを決定論的に行うためのtorch.Generator。
戻り値
~models.vae.DecoderOutput または tuple
return_dict が True の場合、~models.vae.DecoderOutput が返され、それ以外の場合は通常の tuple が返されます。
融合された QKV 投影を有効にします。自己注意モジュールでは、すべての投影行列(つまり、クエリ、キー、バリュー)が融合されます。相互注意モジュールでは、キーとバリューの投影行列が融合されます。
> このAPIは🧪実験的です。
カスタムアテンションプロセッサを無効にし、デフォルトのアテンション実装を設定します。
tiled_decode
< source >( z: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple
タイル化されたデコーダーを使用して、画像のバッチをデコードします。
tiled_encode
< source >( x: Tensorreturn_dict: bool = True ) → ~models.autoencoder_kl.AutoencoderKLOutput or tuple
パラメータ
- x (
torch.Tensor) — 画像の入力バッチ。 - return_dict (
bool、省略可能、デフォルトはTrue) —~models.autoencoder_kl.AutoencoderKLOutputを返すか、それとも通常のタプルを返すかを指定します。
戻り値
~models.autoencoder_kl.AutoencoderKLOutput または tuple
If return_dict is True, a ~models.autoencoder_kl.AutoencoderKLOutput is returned, otherwise a plain
tuple is returned.
タイル化されたエンコーダーを使用して、画像のバッチをエンコードします。
このオプションを有効にすると、VAE は入力テンソルをタイルに分割し、複数ステップでエンコーディングを計算します。これにより、画像サイズに関係なくメモリ使用量を一定に保つことができます。タイル化されたエンコーディングの結果は、タイル化されていないエンコーディングとは異なります。これは、各タイルが異なるエンコーダーを使用するためです。タイル化によるアーティファクトを回避するために、タイルはオーバーラップし、滑らかな出力を形成するためにブレンドされます。出力にタイルサイズの変化が見られる場合もありますが、以前よりもはるかに目立たなくなります。
AutoencoderKLOutput
class diffusers.models.modeling_outputs.AutoencoderKLOutput
< source >( latent_dist: DiagonalGaussianDistribution )
AutoencoderKLのエンコードメソッドの出力。
DecoderOutput
class diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
デコードメソッドの出力。