Diffusers documentation
AudioLDM 2
AudioLDM 2
AudioLDM 2 は、Haohe Liu らによって AudioLDM 2: Learning Holistic Audio Generation with Self-supervised Pretraining で提案されました。AudioLDM 2 はテキストプロンプトを入力として受け取り、それに対応するオーディオを予測します。テキスト条件付きのサウンドエフェクト、人間の音声、音楽を生成できます。
Stable Diffusionに着想を得たAudioLDM 2は、テキスト埋め込みから連続的な音声表現を学習する、テキストから音声を生成する潜在拡散モデル(LDM)です。プロンプト入力からテキスト埋め込みを計算するために、2つのテキストエンコーダーモデルが使用されます。具体的には、CLAPのテキストブランチと、Flan-T5のエンコーダーです。これらのテキスト埋め込みは、AudioLDM2ProjectionModelによって共有埋め込み空間に射影されます。次に、GPT2の言語モデル(LM)が使用され、射影されたCLAPとFlan-T5の埋め込みを条件として、8つの新しい埋め込みベクトルを自己回帰的に予測します。生成された埋め込みベクトルとFlan-T5のテキスト埋め込みは、LDMにおけるクロスアテンションの条件付けとして使用されます。AudioLDM 2のUNetは、他の多くのLDMが1つのクロスアテンション条件付けを使用するのに対し、2つのクロスアテンション埋め込みを受け取る点で独自性を持っています。
本論文の抄録は以下の通りです。
音声生成は、音声、音楽、効果音といった異なるタイプの音声間で共通点を持つ一方で、各タイプ向けのモデル設計には、他のタイプとは大きく異なる可能性のある特定の目的やバイアスについて慎重な検討が必要です。音声生成の統合的な視点に近づけるために、本論文では、音声、音楽、効果音の生成に同じ学習手法を利用するフレームワークを提案します。提案するフレームワークでは、AudioMAE(自己教師あり事前学習された表現学習モデル)に基づいて任意の音声をLOA(Language of Audio)に変換できる、音声を表す一般的な表現「language of audio」(LOA)を導入します。生成プロセスでは、GPT-2モデルを用いて任意のモーダルをLOAに変換し、LOAを条件とする潜在拡散モデルで自己教師あり音声生成学習を行います。提案するフレームワークは、インコンテキスト学習能力や、再利用可能な自己教師あり事前学習済みAudioMAEおよび潜在拡散モデルといった利点を自然にもたらします。テキストから音声、テキストから音楽、テキストから音声合成への主要なベンチマークでの実験により、従来の手法に対して最先端または競争力のある性能が示されました。コード、事前学習済みモデル、デモはこのhttps URLで利用できます。
このパイプラインは、sanchit-gandhi と Nguyễn Công Tú Anh によって提供されました。元のコードベースは haoheliu/audioldm2 で確認できます。
ヒント
チェックポイントの選択
AudioLDM2には3つのバリアントがあります。このうち2つのチェックポイントは、テキストからオーディオを生成する一般的なタスクに適用できます。3つ目のチェックポイントは、テキストから音楽を生成するタスクにのみ特化して学習されています。
すべてのチェックポイントは、テキストエンコーダーとVAEのモデルサイズが同一です。違いはUNetのサイズと深さです。 3つのチェックポイントの詳細については、以下の表を参照してください。
| チェックポイント | タスク | UNetモデルサイズ | モデルの総サイズ | 学習データ / h |
|---|---|---|---|---|
| audioldm2 | テキストからオーディオ | 350M | 1.1B | 1150k |
| audioldm2-large | テキストからオーディオ | 750M | 1.5B | 1150k |
| audioldm2-music | テキストから音楽 | 350M | 1.1B | 665k |
| audioldm2-gigaspeech | テキストから音声 | 350M | 1.1B | 10k |
| audioldm2-ljspeech | テキストから音声 | 350M | 1.1B |
プロンプトの構築
- 説明的なプロンプト入力が最も効果的です。形容詞を使用して音の特徴を記述し(例: “high quality” や “clear”)、プロンプトの文脈を具体的に指定してください(例: “stream” ではなく “water stream in a forest”)。
- モデルが認識していない可能性のある固有名詞や抽象的な対象ではなく、「cat」や「dog」のような一般的な用語を使用するのが望ましいです。
- ネガティブプロンプトを使用すると、低品質の音声に対応する用語から生成を導くことで、生成される波形の品質を大幅に向上させることができます。「Low quality.」をネガティブプロンプトとして使用してみてください。
推論の制御
- 予測されたオーディオサンプルの品質は、
num_inference_steps引数によって制御できます。ステップ数を増やすと品質の高いオーディオが得られますが、推論速度は低下します。 - 予測された音声サンプルの長さは、
audio_length_in_s引数の値を変更することで制御できます。
生成された波形の評価:
- 生成された波形の品質は、シードによって大きく変動する可能性があります。満足できる生成結果が得られるまで、異なるシードで生成を試みてください。
- 一度に複数の波形を生成できます。
num_waveforms_per_promptを1より大きい値に設定してください。生成された波形とプロンプトテキストの間の自動スコアリングが実行され、オーディオが最良から最悪の順にランク付けされます。
上記のヒントを用いて、優れた音楽および音声の生成を行う方法を示す例を以下に示します: example。
スケジューラーのトレードオフ、すなわち速度と品質のバランスをどのように探求するかを学ぶには、ガイドを必ずご確認ください。また、同じコンポーネントを複数のパイプラインに効率的に読み込む方法については、パイプライン間でコンポーネントを再利用するセクションを参照してください。
AudioLDM2Pipeline
class diffusers.AudioLDM2Pipeline
< source >( vae: AutoencoderKLtext_encoder: ClapModeltext_encoder_2: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.vits.modeling_vits.VitsModelprojection_model: AudioLDM2ProjectionModellanguage_model: GPT2LMHeadModeltokenizer: RobertaTokenizertokenizer_2: transformers.models.t5.tokenization_t5.T5Tokenizer | transformers.models.vits.tokenization_vits.VitsTokenizerfeature_extractor: ClapFeatureExtractorunet: AudioLDM2UNet2DConditionModelscheduler: KarrasDiffusionSchedulersvocoder: SpeechT5HifiGan )
パラメータ
- vae (AutoencoderKL) — 画像を潜在表現にエンコードし、潜在表現からデコードするための Variational Auto-Encoder (VAE) モデル。
- text_encoder (ClapModel) — 最初の凍結されたテキストエンコーダーです。AudioLDM2 は、音声とテキストの埋め込みを統合したモデルである CLAP を使用しており、具体的には laion/clap-htsat-unfused バリアントです。テキストブランチは、テキストプロンプトをプロンプト埋め込みに変換するために使用されます。音声とテキストの統合モデルは、類似度スコアを計算することにより、生成された波形をテキストプロンプトに対してランキングするために使用されます。
- text_encoder_2 ([
~transformers.T5EncoderModel,~transformers.VitsModel]) — 2番目の凍結されたテキストエンコーダー。AudioLDM2 は T5 のエンコーダー、具体的には google/flan-t5-large バリアントを使用します。TTS 用に 2番目の凍結されたテキストエンコーダーを使用します。AudioLDM2 は Vits のエンコーダーを使用します。 - projection_model (AudioLDM2ProjectionModel) — 1 つ目と 2 つ目のテキストエンコーダーモデルの hidden-states を線形に射影し、学習された SOS トークンおよび EOS トークンの埋め込みを挿入するために使用される学習済みモデルです。2 つのテキストエンコーダーからの射影された hidden-states は連結され、言語モデルの入力となります。Vits の hidden-states 用の学習済み位置埋め込み
- language_model (GPT2Model) — 2つのテキストエンコーダーからの投影出力を条件として、隠れ状態のシーケンスを生成するために使用される自己回帰型言語モデル。
- tokenizer (RobertaTokenizer) — 最初の凍結されたテキストエンコーダー用のテキストをトークン化するトークナイザー。
- tokenizer_2 ([
~transformers.T5Tokenizer,~transformers.VitsTokenizer]) — 2番目の凍結されたテキストエンコーダー用のテキストをトークン化するトークナイザー。 - feature_extractor (ClapFeatureExtractor) — 自動スコアリングのために、生成されたオーディオ波形をログメルスペクトログラムへ前処理するフィーチャーエクストラクター。
- unet (UNet2DConditionModel) —
エンコードされたオーディオの潜在変数をノイズ除去するための
UNet2DConditionModel。 - scheduler (SchedulerMixin) —
エンコードされたオーディオの潜在変数をノイズ除去するために、
unetと組み合わせて使用するスケジューラーです。DDIMScheduler、LMSDiscreteScheduler、または PNDMScheduler のいずれかになります。 - vocoder (SpeechT5HifiGan) —
SpeechT5HifiGanクラスのボコーダー。メルスペクトログラムの潜在変数を最終的な音声波形に変換するために使用します。
AudioLDM2 を使用したテキストからオーディオへの生成を行う Pipeline。
このモデルは DiffusionPipeline を継承しています。すべてのパイプラインに実装されている汎用的なメソッド(ダウンロード、保存、特定のデバイスでの実行など)については、スーパークラスのドキュメントを参照してください。
__call__
< source >( prompt: str | list[str] = Nonetranscription: str | list[str] = Noneaudio_length_in_s: float | None = Nonenum_inference_steps: int = 200guidance_scale: float = 3.5negative_prompt: str | list[str] | None = Nonenum_waveforms_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonegenerated_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_generated_prompt_embeds: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.LongTensor] = Nonenegative_attention_mask: typing.Optional[torch.LongTensor] = Nonemax_new_tokens: int | None = Nonereturn_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int | None = 1cross_attention_kwargs: dict[str, typing.Any] | None = Noneoutput_type: str | None = 'np' ) → StableDiffusionPipelineOutput or tuple
パラメータ
- prompt (
strまたはlist[str]、省略可) — 音声生成をガイドするためのプロンプトです。未定義の場合、prompt_embedsを渡す必要があります。 - transcription (
strまたはlist[str]、省略可能) —\ テキスト読み上げ用の文字起こし。 - audio_length_in_s (
int、任意、デフォルトは 10.24) — 生成される音声サンプルの長さ(秒)。 - num_inference_steps (
int、任意、デフォルトは 200) — デノイジングのステップ数です。ステップ数を増やすと、推論速度が遅くなる代わりに、通常、より高品質なオーディオが得られます。 - guidance_scale (
float、任意、デフォルト値は 3.5)— guidance scale の値を高くすると、音質が低下する代わりに、promptと密接に関連したオーディオを生成するようモデルが促されます。guidance_scale > 1の場合、guidance scale が有効になります。 - negative_prompt (
strまたはlist[str]、省略可) — 音声生成において含めるべきでない内容を指示するためのプロンプトです。未定義の場合、代わりにnegative_prompt_embedsを渡す必要があります。ガイダンスを使用していない場合(guidance_scale < 1)は無視されます。 - num_waveforms_per_prompt (
int、任意、デフォルト値は 1)— 1 つのプロンプトごとに生成する波形の数。num_waveforms_per_prompt > 1の場合、生成された出力とテキストプロンプトの間に自動スコアリングが実行されます。このスコアリングは、テキストと音声の埋め込み空間におけるテキスト入力とのコサイン類似度に基づいて、生成された波形をランキング付けします。 - eta (
float、省略可、デフォルト値は 0.0) — DDIM論文のパラメータ eta (η) に対応します。DDIMSchedulerでのみ適用され、他のスケジューラーでは無視されます。 - generator (
torch.Generatorまたはlist[torch.Generator]、省略可) — 生成を決定論的にするためのtorch.Generator。 - latents (
torch.Tensor, 任意) — ガウス分布からサンプリングされた事前生成されたノイズ付き潜在変数で、スペクトログラム生成の入力として使用されます。異なるプロンプトで同じ生成を調整するために使用できます。指定されない場合、指定されたランダムgeneratorを使用してサンプリングを行い、潜在変数テンソルが生成されます。 - prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたテキスト埋め込みです。テキスト入力(プロンプトの重み付けなど)を簡単に調整するために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — 事前に生成されたネガティブなテキスト埋め込み。テキスト入力(プロンプトの重み付け)を簡単に調整するために使用できます。指定されない場合、negative_prompt_embedsはnegative_prompt入力引数から生成されます。 - generated_prompt_embeds (
torch.Tensor, 任意) — GPT2 言語モデルから生成された事前テキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_generated_prompt_embeds (
torch.Tensor、任意) — GPT2言語モデルから事前生成されたネガティブなテキスト埋め込みです。テキスト入力の調整、例えばプロンプトの重み付けなどを簡単に実行できます。指定されない場合、negative_prompt引数からnegative_prompt_embedsが計算されます。 - attention_mask (
torch.LongTensor, 任意) —prompt_embedsに適用する事前計算済みのアテンションマスクです。指定しない場合、prompt入力引数からアテンションマスクが計算されます。 - negative_attention_mask (
torch.LongTensor, 任意) —negative_prompt_embedsに適用する事前計算済みのアテンションマスクです。指定しない場合、negative_prompt入力引数からアテンションマスクが計算されます。 - max_new_tokens (
int、任意、デフォルトは None) — GPT2 言語モデルで生成する新しいトークンの数です。指定しない場合、モデルの config からトークン数が取得されます。 - return_dict (
bool、任意、デフォルトはTrue) — プレーンなタプルではなく StableDiffusionPipelineOutput を返すかどうかを指定します。 - callback (
Callable, 省略可) — 推論中にcallback_stepsステップごとに呼び出される関数です。この関数は、以下の引数とともに呼び出されます:callback(step: int, timestep: int, latents: torch.Tensor)。 - callback_steps (
int、任意、デフォルトは 1) —callback関数が呼び出される頻度です。指定しない場合、callback はすべてのステップで呼び出されます。 - cross_attention_kwargs (
dict, 任意) — 指定された場合、self.processorで定義されているAttentionProcessorに渡される kwargs の辞書です。 - output_type (
str, 任意、デフォルトは"np") — 生成されたオーディオの出力形式です。"np"を指定すると NumPy のnp.ndarrayを返し、"pt"を指定すると PyTorch のtorch.Tensorオブジェクトを返します。"latent"を設定すると、潜在拡散モデル (LDM) の出力を返します。
戻り値
StableDiffusionPipelineOutput または tuple
return_dict が True の場合、StableDiffusionPipelineOutput が返され、それ以外の場合は、最初の要素が生成されたオーディオのリストである tuple が返されます。
生成用の pipeline への呼び出し関数。
例:
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline
>>> repo_id = "cvssp/audioldm2"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> # define the prompts
>>> prompt = "The sound of a hammer hitting a wooden surface."
>>> negative_prompt = "Low quality."
>>> # set the seed for generator
>>> generator = torch.Generator("cuda").manual_seed(0)
>>> # run the generation
>>> audio = pipe(
... prompt,
... negative_prompt=negative_prompt,
... num_inference_steps=200,
... audio_length_in_s=10.0,
... num_waveforms_per_prompt=3,
... generator=generator,
... ).audios
>>> # save the best audio sample (index 0) as a .wav file
>>> scipy.io.wavfile.write("techno.wav", rate=16000, data=audio[0])#Using AudioLDM2 for Text To Speech
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline
>>> repo_id = "anhnct/audioldm2_gigaspeech"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> # define the prompts
>>> prompt = "A female reporter is speaking"
>>> transcript = "wish you have a good day"
>>> # set the seed for generator
>>> generator = torch.Generator("cuda").manual_seed(0)
>>> # run the generation
>>> audio = pipe(
... prompt,
... transcription=transcript,
... num_inference_steps=200,
... audio_length_in_s=10.0,
... num_waveforms_per_prompt=2,
... generator=generator,
... max_new_tokens=512, #Must set max_new_tokens equa to 512 for TTS
... ).audios
>>> # save the best audio sample (index 0) as a .wav file
>>> scipy.io.wavfile.write("tts.wav", rate=16000, data=audio[0])enable_model_cpu_offload
< source >( gpu_id: int | None = Nonedevice: typing.Union[torch.device, str] = 'cuda' )
enable_sequential_cpu_offload とは異なり、accelerate を使用してすべてのモデルを CPU にオフロードし、パフォーマンスへの影響を最小限に抑えながらメモリ使用量を削減します。このメソッドでは、forward メソッドが呼び出されたときに、モデル全体を一度に GPU へ移動し、次のモデルが実行されるまで GPU に保持されます。enable_sequential_cpu_offload と比較するとメモリ削減効果は低くなりますが、unet の反復的な実行により、パフォーマンスは大幅に向上します。
encode_prompt
< source >( promptdevicenum_waveforms_per_promptdo_classifier_free_guidancetranscription = Nonenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonegenerated_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_generated_prompt_embeds: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.LongTensor] = Nonenegative_attention_mask: typing.Optional[torch.LongTensor] = Nonemax_new_tokens: int | None = None ) → prompt_embeds (torch.Tensor)
パラメータ
- prompt (
strまたはlist[str]、省略可能) — エンコードするプロンプト - transcription (
strまたはlist[str]) — テキストの音声化 - device (
torch.device) — torch デバイス - num_waveforms_per_prompt (
int) — プロンプトごとに生成すべき波形の数 - do_classifier_free_guidance (
bool) — classifier free guidance を使用するかどうか - negative_prompt (
strまたはlist[str]、省略可) — 音声生成をガイドしないプロンプトです。未定義の場合、代わりにnegative_prompt_embedsを渡す必要があります。ガイダンスを使用していない場合は無視されます(guidance_scaleが1未満の場合は無視されます)。 - prompt_embeds (
torch.Tensor, 任意) — Flan T5 モデルから取得した事前計算済みのテキスト埋め込み。テキスト入力の調整、例プロンプトの重み付けなどを容易に行うことができます。指定されない場合、prompt入力引数からテキスト埋め込みが計算されます。 - negative_prompt_embeds (
torch.Tensor, 任意) — Flan T5 モデルによる事前計算済みのネガティブテキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うことができます。指定されない場合、negative_prompt入力引数から negative_prompt_embeds が計算されます。 - generated_prompt_embeds (
torch.Tensor, 任意) — GPT2 言語モデルから生成された事前テキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_generated_prompt_embeds (
torch.Tensor、任意) — GPT2言語モデルから事前生成されたネガティブなテキスト埋め込みです。テキスト入力の調整、例えばプロンプトの重み付けなどを簡単に実行できます。指定されない場合、negative_prompt引数からnegative_prompt_embedsが計算されます。 - attention_mask (
torch.LongTensor, 任意) —prompt_embedsに適用する事前計算済みのアテンションマスクです。指定しない場合、prompt入力引数からアテンションマスクが計算されます。 - negative_attention_mask (
torch.LongTensor, 任意) —negative_prompt_embedsに適用する事前計算済みのアテンションマスクです。指定しない場合、negative_prompt入力引数からアテンションマスクが計算されます。 - max_new_tokens (
int、任意、デフォルトは None)— GPT2 言語モデルで生成する新しいトークンの数。
戻り値
prompt_embeds (torch.Tensor)
Flan T5 モデルからのテキスト埋め込み。
attention_mask (torch.LongTensor):
prompt_embeds に適用するアテンションマスク。
generated_prompt_embeds (torch.Tensor):
GPT2 言語モデルから生成されたテキスト埋め込み。
プロンプトをテキストエンコーダーの隠れ状態にエンコードします。
例:
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline
>>> repo_id = "cvssp/audioldm2"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> # Get text embedding vectors
>>> prompt_embeds, attention_mask, generated_prompt_embeds = pipe.encode_prompt(
... prompt="Techno music with a strong, upbeat tempo and high melodic riffs",
... device="cuda",
... do_classifier_free_guidance=True,
... )
>>> # Pass text embeddings to pipeline for text-conditional audio generation
>>> audio = pipe(
... prompt_embeds=prompt_embeds,
... attention_mask=attention_mask,
... generated_prompt_embeds=generated_prompt_embeds,
... num_inference_steps=200,
... audio_length_in_s=10.0,
... ).audios[0]
>>> # save generated audio sample
>>> scipy.io.wavfile.write("techno.wav", rate=16000, data=audio)generate_language_model
< source >( inputs_embeds: Tensor = Nonemax_new_tokens: int = 8**model_kwargs ) → inputs_embeds (torch.Tensorof shape(batch_size, sequence_length, hidden_size)`)
パラメータ
- inputs_embeds (
torch.Tensor、shape(batch_size, sequence_length, hidden_size)) — 生成のプロンプトとして使用されるシーケンスです。 - max_new_tokens (
int) — 生成する新しいトークンの数。 - model_kwargs (
dict[str, Any]、任意) — モデルのforward関数に転送される、モデル固有の追加の引数をアドホックにパラメータ化するための辞書。
戻り値
inputs_embeds (torch.Tensorof shape(batch_size, sequence_length, hidden_size)`)
生成された hidden-states のシーケンス。
埋め込み入力を条件として、言語モデルから隠れ状態のシーケンスを生成します。
AudioLDM2ProjectionModel
クラス diffusers.AudioLDM2ProjectionModel
< source >( text_encoder_dimtext_encoder_1_dimlangauge_model_dimuse_learned_position_embedding = Nonemax_seq_length = None )
2つのテキスト埋め込みを共有潜在空間にマッピングするための、シンプルな線形投影モデルです。また、各テキスト埋め込みシーケンスの先頭と末尾に、それぞれ学習された埋め込みベクトルを挿入します。_1 が付加された各変数は、2番目のテキストエンコーダーに対応するものです。それ以外は、1番目のテキストエンコーダー由来です。
forward
< source >( hidden_states: typing.Optional[torch.Tensor] = Nonehidden_states_1: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.LongTensor] = Noneattention_mask_1: typing.Optional[torch.LongTensor] = None ) → AudioLDM2ProjectionModelOutput
パラメータ
- hidden_states (
torch.Tensor、形状(batch_size, sequence_length, text_encoder_dim)、任意) — 最初のテキストエンコーダー(CLAP)からのテキスト埋め込み。 - hidden_states_1 (
torch.Tensor、shape(batch_size, sequence_length_1, text_encoder_1_dim)、任意) — 2番目のテキストエンコーダー (T5 または VITS) からのテキスト埋め込み。 - attention_mask (
torch.LongTensor、形状(batch_size, sequence_length)、任意) —hidden_states用のアテンションマスク。 - attention_mask_1 (
torch.LongTensor、形状(batch_size, sequence_length_1)、任意) —hidden_states_1用のアテンションマスク。
戻り値
AudioLDM2ProjectionModelOutput
両方のテキストエンコーダーの射影されたテキスト埋め込みをシーケンス次元に沿って連結したもの、およびそれらの結合されたアテンションマスク。
AudioLDM2UNet2DConditionModel
クラス diffusers.AudioLDM2UNet2DConditionModel
< source >( sample_size: int | None = Nonein_channels: int = 4out_channels: int = 4flip_sin_to_cos: bool = Truefreq_shift: int = 0down_block_types: tuple = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D')mid_block_type: str = 'UNetMidBlock2DCrossAttn'up_block_types: tuple = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D')only_cross_attention: bool | tuple[bool] = Falseblock_out_channels: tuple = (320, 640, 1280, 1280)layers_per_block: int | tuple[int] = 2downsample_padding: int = 1mid_block_scale_factor: float = 1act_fn: str = 'silu'norm_num_groups: int | None = 32norm_eps: float = 1e-05cross_attention_dim: int | tuple[int] = 1280transformer_layers_per_block: int | tuple[int] = 1attention_head_dim: int | tuple[int] = 8num_attention_heads: int | tuple[int] | None = Noneuse_linear_projection: bool = Falseclass_embed_type: str | None = Nonenum_class_embeds: int | None = Noneupcast_attention: bool = Falseresnet_time_scale_shift: str = 'default'time_embedding_type: str = 'positional'time_embedding_dim: int | None = Nonetime_embedding_act_fn: str | None = Nonetimestep_post_act: str | None = Nonetime_cond_proj_dim: int | None = Noneconv_in_kernel: int = 3conv_out_kernel: int = 3projection_class_embeddings_input_dim: int | None = Noneclass_embeddings_concat: bool = False )
パラメータ
- sample_size (
intまたはtuple[int, int]、省略可能、デフォルトはNone) — 入力/出力サンプルの高さと幅。 - in_channels (
int、任意、デフォルトは 4) — 入力サンプルのチャネル数。 - out_channels (
int、任意、デフォルトは 4) — 出力のチャネル数。 - flip_sin_to_cos (
bool、省略可、デフォルトはFalse) — 時間埋め込みにおいて sin を cos に反転させるかどうか。 - freq_shift (
int、任意、デフォルト値は 0) — 時間埋め込みに適用する周波数シフト。 - down_block_types (
tuple[str]、任意、デフォルトは("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — 使用するダウンサンプリングブロックのタプルです。 - mid_block_type (
str、省略可、デフォルトは"UNetMidBlock2DCrossAttn") — UNet の中央部分のブロックタイプです。AudioLDM2 ではUNetMidBlock2DCrossAttnのみ指定できます。 - up_block_types (
tuple[str]、任意、デフォルトは("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")) — 使用するアップサンプリングブロックのタプルです。 - only_cross_attention (
boolまたはtuple[bool]、省略可、デフォルトはFalse) — 基本的な Transformer ブロックに自己注意機構を含めるかどうかを指定します。BasicTransformerBlockを参照してください。 - block_out_channels (
tuple[int]、任意、デフォルトは(320, 640, 1280, 1280)) — 各ブロックの出力チャネル数を表すタプルです。 - layers_per_block (
int、任意、デフォルトは 2) — ブロックあたりのレイヤー数。 - downsample_padding (
int、任意、デフォルトは 1) — ダウンサンプリング用畳み込みで使用するパディング。 - mid_block_scale_factor (
float、任意、デフォルトは 1.0) — mid block に使用するスケール係数。 - act_fn (
str、任意、デフォルトは"silu") — 使用する活性化関数。 - norm_num_groups (
int、任意、デフォルトは 32) — 正規化に使用するグループ数です。Noneの場合、後処理で正規化層と活性化層がスキップされます。 - norm_eps (
float、任意、デフォルト値は 1e-5) — 正規化に使用する epsilon。 - cross_attention_dim (
intまたはtuple[int]、省略可能、デフォルト値は 1280) — クロスアテンション特徴量の次元です。 - transformer_layers_per_block (
intまたはtuple[int]、省略可、デフォルトは 1) —BasicTransformerBlock型の Transformer ブロックの数。~models.unet_2d_blocks.CrossAttnDownBlock2D、~models.unet_2d_blocks.CrossAttnUpBlock2D、~models.unet_2d_blocks.UNetMidBlock2DCrossAttnの場合にのみ関連します。 - attention_head_dim (
int、任意、デフォルトは 8)— アテンションヘッドの次元数。 - num_attention_heads (
int, 省略可) — アテンションヘッドの数です。定義されていない場合、デフォルトでattention_head_dimになります。 - resnet_time_scale_shift (
str、任意、デフォルトは"default") — ResNetブロック用のタイムスケールシフト設定(ResnetBlock2Dを参照)。defaultまたはscale_shiftから選択します。 - class_embed_type (
str、任意、デフォルトはNone) — 最終的に time embeddings と加算される class embedding の種類を指定します。None、"timestep"、"identity"、"projection"、または"simple_projection"から選択してください。 - num_class_embeds (
int、任意、デフォルトはNone) —class_embed_typeがNoneの場合、クラス条件付けを行う際にtime_embed_dimへ射影される学習可能な埋め込み行列の入力次元。 - time_embedding_type (
str、任意、デフォルトはpositional) — タイムステップに使用する位置埋め込みの種類。positionalまたはfourierから選択します。 - time_embedding_dim (
int、任意、デフォルトはNone) — 投影された時間埋め込みの次元を指定するための任意の上書きです。 - time_embedding_act_fn (
str、任意、デフォルトはNone) — UNet の残りの部分に渡す前に、時間埋め込みに一度だけ適用する任意の活性化関数。silu、mish、gelu、swishから選択できます。 - timestep_post_act (
str、任意、デフォルトはNone) — タイムステップ埋め込みで使用する第2の活性化関数。silu、mish、geluから選択します。 - time_cond_proj_dim (
int、省略可、デフォルトはNone) — タイムステップ埋め込みにおけるcond_projレイヤーの次元数です。 - conv_in_kernel (
int、任意、デフォルトは3) —conv_inレイヤーのカーネルサイズ。 - conv_out_kernel (
int、任意、デフォルトは3) —conv_out層のカーネルサイズ。 - projection_class_embeddings_input_dim (
int, 任意) —class_embed_type="projection"の場合のclass_labels入力の次元です。class_embed_type="projection"の場合は必須です。 - class_embeddings_concat (
bool、省略可、デフォルトはFalse) — 時間埋め込みをクラス埋め込みと連結するかどうか。
ノイズ付きサンプル、条件付き状態、タイムステップを受け取り、サンプル形状の出力を返す条件付き2D UNetモデルです。バニラ版のUNet2DConditionModelと比較して、このバリアントでは、各Transformerブロックに追加の自己注意層を任意に含めることができ、また複数の相互注意層も備えています。さらに、encoder_hidden_statesとencoder_hidden_states_1の2つまでの相互注意埋め込みを許可します。
このモデルは ModelMixin を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存など)については、スーパークラスのドキュメントを参照してください。
forward
< source >( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensorclass_labels: typing.Optional[torch.Tensor] = Nonetimestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = Trueencoder_hidden_states_1: typing.Optional[torch.Tensor] = Noneencoder_attention_mask_1: typing.Optional[torch.Tensor] = None ) → UNet2DConditionOutput or tuple
パラメータ
- sample (
torch.Tensor) — 形状が(batch, channel, height, width)のノイズ付き入力テンソルです。 - timestep (
torch.Tensorまたはfloatまたはint) — 入力のノイズ除去を行うステップ数。 - encoder_hidden_states (
torch.Tensor) —(batch, sequence_length, feature_dim)の形状を持つエンコーダーの隠れ状態です。 - encoder_attention_mask (
torch.Tensor) —encoder_hidden_statesに適用される、形状が(batch, sequence_length)のクロスアテンションマスクです。Trueの場合はマスクが保持され、Falseの場合は破棄されます。マスクはバイアスに変換され、 「破棄」対象のトークンに対応するアテンションスコアに大きな負の値が加算されます。 - return_dict (
bool、任意、デフォルトはTrue) — プレーンなタプルではなく UNet2DConditionOutput を返すかどうか。 - cross_attention_kwargs (
dict、省略可) — 指定された場合、AttnProcessorに渡される kwargs 辞書です。 - encoder_hidden_states_1 (
torch.Tensor, 任意) — 形状が(batch, sequence_length_2, feature_dim_2)の、2 番目のエンコーダーの隠れ状態のセットです。encoder_hidden_statesとは異なる埋め込みのセットでモデルを条件付けするために使用できます。 - encoder_attention_mask_1 (
torch.Tensor, 任意) —encoder_hidden_states_1に適用される、形状が(batch, sequence_length_2)のクロスアテンションマスクです。Trueの場合はマスクが保持され、Falseの場合は破棄されます。マスクはバイアスに変換され、「破棄」対象のトークンに対応するアテンションスコアに大きな負の値が加算されます。
戻り値
UNet2DConditionOutput または tuple
return_dict が True の場合、UNet2DConditionOutput が返され、それ以外の場合は、最初の要素がサンプルテンソルである tuple が返されます。
AudioLDM2UNet2DConditionModelのforwardメソッド。
AudioPipelineOutput
class diffusers.AudioPipelineOutput
< source >( audios: ndarray )
音声パイプライン用の出力クラス。