Diffusers documentation
AudioLDM 2
AudioLDM 2
AudioLDM 2 được đề xuất trong AudioLDM 2: Learning Holistic Audio Generation with Self-supervised Pretraining của Haohe Liu và cộng sự. AudioLDM 2 nhận một prompt văn bản làm đầu vào và dự đoán âm thanh tương ứng. Nó có thể tạo ra hiệu ứng âm thanh, giọng nói con người và nhạc có điều kiện theo văn bản.
Lấy cảm hứng từ Stable Diffusion, AudioLDM 2 là một latent diffusion model (LDM) từ văn bản sang âm thanh, học các biểu diễn âm thanh liên tục từ các vector nhúng văn bản. Hai mô hình mã hóa văn bản được sử dụng để tính toán các vector nhúng văn bản từ đầu vào prompt: nhánh văn bản của CLAP và bộ mã hóa của Flan-T5. Các vector nhúng văn bản này sau đó được chiếu vào một không gian nhúng chung bởi một AudioLDM2ProjectionModel. Một language model (LM) GPT2 được sử dụng để dự đoán tự hồi quy tám vector nhúng mới, có điều kiện dựa trên các vector nhúng CLAP và Flan-T5 đã được chiếu. Các vector nhúng được tạo ra và các vector nhúng văn bản Flan-T5 được sử dụng làm điều kiện chú ý chéo (cross-attention conditioning) trong LDM. UNet của AudioLDM 2 là độc đáo ở chỗ nó nhận hai vector nhúng chú ý chéo, thay vì một điều kiện chú ý chéo như trong hầu hết các LDM khác.
Tóm tắt của bài báo như sau:
Mặc dù việc tạo âm thanh có những điểm chung giữa các loại âm thanh khác nhau, chẳng hạn như giọng nói, nhạc và hiệu ứng âm thanh, việc thiết kế mô hình cho từng loại đòi hỏi phải xem xét kỹ lưỡng các mục tiêu và thiên kiến cụ thể, vốn có thể khác biệt đáng kể so với các loại khác. Để tiến gần hơn đến một góc nhìn thống nhất về tạo âm thanh, bài báo này đề xuất một khung làm việc sử dụng cùng một phương pháp học cho việc tạo giọng nói, nhạc và hiệu ứng âm thanh. Khung làm việc của chúng tôi giới thiệu một biểu diễn chung của âm thanh, được gọi là “ngôn ngữ của âm thanh” (LOA). Bất kỳ âm thanh nào cũng có thể được dịch sang LOA dựa trên AudioMAE, một mô hình học biểu diễn tiền huấn luyện tự giám sát. Trong quá trình tạo, chúng tôi dịch bất kỳ chế độ nào sang LOA bằng cách sử dụng mô hình GPT-2, và thực hiện học tạo âm thanh tự giám sát bằng một mô hình khuếch tán tiềm ẩn có điều kiện dựa trên LOA. Khung làm việc được đề xuất mang lại các lợi thế tự nhiên như khả năng học trong ngữ cảnh và các mô hình AudioMAE và khuếch tán tiềm ẩn tiền huấn luyện tự giám sát có thể tái sử dụng. Các thí nghiệm trên các bộ chuẩn đánh giá chính về text-to-audio, text-to-music và text-to-speech cho thấy hiệu suất tiên tiến hoặc cạnh tranh so với các phương pháp trước đó. Mã nguồn, mô hình tiền huấn luyện và demo của chúng tôi có sẵn tại this https URL.
Pipeline này được đóng góp bởi sanchit-gandhi và Nguyễn Công Tú Anh. Mã nguồn gốc có thể được tìm thấy tại haoheliu/audioldm2.
Mẹo
Chọn checkpoint
AudioLDM2 có ba biến thể. Hai checkpoint trong số này áp dụng cho tác vụ chung là tạo audio từ văn bản. Checkpoint thứ ba được huấn luyện riêng cho việc tạo nhạc từ văn bản.
Tất cả các checkpoint chia sẻ cùng kích thước mô hình cho text encoder và VAE. Chúng khác nhau về kích thước và độ sâu của UNet. Xem bảng bên dưới để biết chi tiết về ba checkpoint:
| Checkpoint | Nhiệm vụ | Kích thước Mô hình UNet | Tổng kích thước Mô hình | Dữ liệu huấn luyện / h |
|---|---|---|---|---|
| audioldm2 | Văn bản thành âm thanh | 350M | 1.1B | 1150k |
| audioldm2-large | Văn bản thành âm thanh | 750M | 1.5B | 1150k |
| audioldm2-music | Văn bản thành nhạc | 350M | 1.1B | 665k |
| audioldm2-gigaspeech | Chuyển văn bản thành giọng nói | 350M | 1.1B | 10k |
| audioldm2-ljspeech | Chuyển văn bản thành giọng nói | 350M | 1.1B |
Xây dựng một prompt
- Đầu vào prompt mô tả chi tiết hoạt động tốt nhất: hãy dùng tính từ để mô tả âm thanh (ví dụ: “high quality” hoặc “clear”) và làm cho prompt cụ thể về ngữ cảnh (ví dụ: “water stream in a forest” thay vì “stream”).
- Tốt nhất là nên sử dụng các thuật ngữ chung như “cat” hoặc “dog” thay vì các tên riêng hoặc các đối tượng trừu tượng mà mô hình có thể không quen thuộc.
- Việc sử dụng negative prompt có thể cải thiện đáng kể chất lượng của waveform được tạo ra, bằng cách định hướng quá trình tạo ra xa khỏi các từ ngữ tương ứng với âm thanh chất lượng kém. Hãy thử sử dụng negative prompt là “Low quality.”
Kiểm soát suy luận
- Chất lượng của mẫu âm thanh dự đoán có thể được điều chỉnh bằng tham số
num_inference_steps; số bước càng cao thì chất lượng âm thanh càng tốt, nhưng suy luận sẽ chậm hơn. - Độ dài của mẫu âm thanh dự đoán có thể được điều chỉnh bằng cách thay đổi đối số
audio_length_in_s.
Đánh giá các dạng sóng đã tạo:
- Chất lượng của các waveform được tạo ra có thể thay đổi đáng kể tùy thuộc vào seed. Hãy thử tạo với các seed khác nhau cho đến khi bạn tìm được một kết quả tạo ra thỏa mãn.
- Có thể tạo nhiều dạng sóng cùng lúc: đặt
num_waveforms_per_promptthành một giá trị lớn hơn 1. Việc chấm điểm tự động sẽ được thực hiện giữa các dạng sóng được tạo và văn bản prompt, và các tệp âm thanh sẽ được xếp hạng từ tốt nhất đến kém nhất tương ứng.
Ví dụ sau minh họa cách tạo ra nhạc và giọng nói chất lượng tốt bằng cách áp dụng các mẹo đã nêu ở trên: ví dụ.
Hãy chắc chắn xem qua hướng dẫn về Schedulers để tìm hiểu cách khám phá sự đánh đổi giữa tốc độ và chất lượng của scheduler, và xem phần tái sử dụng các thành phần giữa các pipeline để tìm hiểu cách nạp các thành phần giống nhau vào nhiều pipeline một cách hiệu quả.
AudioLDM2Pipeline
lớp 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 )
Tham số
- vae (AutoencoderKL) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh từ và sang các biểu diễn ẩn.
- text_encoder (ClapModel) — Bộ mã hóa văn bản đóng băng đầu tiên. AudioLDM2 sử dụng mô hình nhúng âm thanh-văn bản liên hợp CLAP, cụ thể là biến thể laion/clap-htsat-unfused. Nhánh văn bản được dùng để mã hóa prompt văn bản thành nhúng prompt. Mô hình âm thanh-văn bản đầy đủ được dùng để xếp hạng các dạng sóng được tạo ra so với prompt văn bản bằng cách tính điểm tương đồng.
- text_encoder_2 ([
~transformers.T5EncoderModel,~transformers.VitsModel]) — Bộ mã hóa văn bản đóng băng thứ hai. AudioLDM2 sử dụng bộ mã hóa của T5, cụ thể là biến thể google/flan-t5-large. Bộ mã hóa văn bản đóng băng thứ hai được dùng cho TTS. AudioLDM2 sử dụng bộ mã hóa của Vits. - projection_model (AudioLDM2ProjectionModel) — Một mô hình đã được huấn luyện, dùng để chiếu tuyến tính các hidden-states từ hai mô hình text encoder thứ nhất và thứ hai, và chèn các embedding của token SOS và EOS đã học được. Các hidden-states đã được chiếu từ hai text encoder được nối lại với nhau để tạo thành đầu vào cho mô hình ngôn ngữ. Một Learned Position Embedding cho các hidden-states của Vits
- language_model (GPT2Model) — Một mô hình ngôn ngữ tự hồi quy (auto-regressive) được sử dụng để tạo ra một chuỗi các hidden-state có điều kiện dựa trên các đầu ra đã được chiếu (projected) từ hai bộ mã hóa văn bản.
- tokenizer (RobertaTokenizer) — Tokenizer để tách token cho văn bản của text-encoder đóng băng đầu tiên.
- tokenizer_2 ([
~transformers.T5Tokenizer,~transformers.VitsTokenizer]) — Tokenizer để mã hóa văn bản cho text-encoder đóng băng thứ hai. - feature_extractor (ClapFeatureExtractor) — Bộ trích xuất đặc trưng để tiền xử lý dạng sóng âm thanh đã tạo thành phổ log-mel nhằm chấm điểm tự động.
- unet (UNet2DConditionModel) —
Một
UNet2DConditionModelđể khử nhiễu các latents âm thanh đã được mã hóa. - scheduler (SchedulerMixin) —
Một scheduler được sử dụng kết hợp với
unetđể khử nhiễu các latents âm thanh đã mã hóa. Có thể là một trong DDIMScheduler, LMSDiscreteScheduler, hoặc PNDMScheduler. - vocoder (SpeechT5HifiGan) —
Vocoder thuộc lớp
SpeechT5HifiGanđể chuyển đổi các latent mel-spectrogram thành dạng sóng âm thanh cuối cùng.
Pipeline để tạo audio từ văn bản sử dụng AudioLDM2.
Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).
__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
Tham số
- prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo âm thanh. Nếu không được định nghĩa, bạn cần truyềnprompt_embeds. - transcription (
strhoặclist[str], tùy chọn) —\ Bản ghi chép cho văn bản thành giọng nói. - audio_length_in_s (
int, tùy chọn, mặc định là 10.24) — Chiều dài của mẫu âm thanh được tạo ra, tính bằng giây. - num_inference_steps (
int, tùy chọn, mặc định là 200) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến âm thanh có chất lượng cao hơn với chi phí là suy luận chậm hơn. - guidance_scale (
float, tùy chọn, mặc định là 3.5) — Giá trị guidance scale cao hơn khuyến khích mô hình tạo ra âm thanh gắn kết chặt chẽ vớipromptvăn bản, với cái giá là chất lượng âm thanh thấp hơn. Guidance scale được kích hoạt khiguidance_scale > 1. - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt để hướng dẫn những gì không nên bao gồm trong quá trình tạo âm thanh. Nếu không được định nghĩa, bạn cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (guidance_scale < 1). - num_waveforms_per_prompt (
int, tuỳ chọn, mặc định là 1) — Số lượng waveform cần tạo cho mỗi prompt. Nếunum_waveforms_per_prompt > 1, hệ thống sẽ tự động chấm điểm giữa các đầu ra đã tạo và prompt văn bản. Việc chấm điểm này xếp hạng các waveform đã tạo dựa trên độ tương đồng cosine của chúng với đầu vào văn bản trong không gian nhúng chung văn bản-âm thanh. - eta (
float, tùy chọn, mặc định là 0.0) — Tương ứng với tham số eta (η) trong bài báo DDIM. Chỉ áp dụng cho DDIMScheduler và bị bỏ qua ở các scheduler khác. - generator (
torch.Generatorhoặclist[torch.Generator], tùy chọn) — Mộttorch.Generatorđể làm cho quá trình sinh ra kết quả xác định. - latents (
torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo spectrogram. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụnggeneratorngẫu nhiên được cung cấp. - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản (trọng số prompt). Nếu không được cung cấp,negative_prompt_embedssẽ được tạo từ đối số đầu vàonegative_prompt. - generated_prompt_embeds (
torch.Tensor, tùy chọn) — Các vector nhúng văn bản đã được tạo trước từ mô hình ngôn ngữ GPT2. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, ví dụ như trọng số của prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_generated_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước từ mô hình ngôn ngữ GPT2. Có thể được sử dụng để dễ dàng tinh chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tính toán từ đối số đầu vàonegative_prompt. - attention_mask (
torch.LongTensor, tùy chọn) — Mặt nạ chú ý (attention mask) đã được tính toán trước để áp dụng choprompt_embeds. Nếu không được cung cấp, mặt nạ chú ý sẽ được tính toán từ đối số đầu vàoprompt. - negative_attention_mask (
torch.LongTensor, tùy chọn) — Mặt nạ chú ý (attention mask) đã được tính trước để áp dụng chonegative_prompt_embeds. Nếu không được cung cấp, mặt nạ chú ý sẽ được tính từ đối số đầu vàonegative_prompt. - max_new_tokens (
int, tùy chọn, mặc định là None) — Số lượng token mới cần tạo bằng mô hình ngôn ngữ GPT2. Nếu không được cung cấp, số lượng token sẽ được lấy từ cấu hình của mô hình. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về một StableDiffusionPipelineOutput thay vì một tuple thông thường hay không. - callback (
Callable, tùy chọn) — Một hàm được gọi mỗicallback_stepsbước trong quá trình suy luận. Hàm này được gọi với các đối số sau:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, tùy chọn, mặc định là 1) — Tần suất gọi hàmcallback. Nếu không được chỉ định, callback sẽ được gọi ở mỗi bước. - cross_attention_kwargs (
dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đếnAttentionProcessornhư đã định nghĩa trongself.processor. - output_type (
str, tùy chọn, mặc định là"np") — Định dạng đầu ra của âm thanh được tạo ra. Chọn"np"để trả về mộtnp.ndarraycủa NumPy hoặc"pt"để trả về một đối tượngtorch.Tensorcủa PyTorch. Đặt thành"latent"để trả về đầu ra của mô hình khuếch tán ẩn (LDM).
Trả về
StableDiffusionPipelineOutput hoặc tuple
Nếu return_dict là True, StableDiffusionPipelineOutput sẽ được trả về,
ngoài ra một tuple sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa âm thanh đã tạo.
Hàm gọi call của pipeline để tạo nội dung.
Ví dụ:
>>> 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' )
Tải tất cả các mô hình xuống CPU bằng accelerate, giảm mức sử dụng bộ nhớ với tác động thấp đến hiệu suất. So với enable_sequential_cpu_offload, phương pháp này di chuyển toàn bộ một mô hình lên GPU mỗi khi phương thức forward của nó được gọi, và mô hình sẽ ở lại trên GPU cho đến khi mô hình tiếp theo chạy. Mức tiết kiệm bộ nhớ thấp hơn so với enable_sequential_cpu_offload, nhưng hiệu suất tốt hơn nhiều nhờ việc thực hiện lặp lại của 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)
Tham số
- prompt (
strhoặclist[str], tùy chọn) — prompt cần được mã hóa - transcription (
strhoặclist[str]) — bản chuyển văn bản thành giọng nói - device (
torch.device) — thiết bị torch - num_waveforms_per_prompt (
int) — số lượng waveform cần được tạo cho mỗi prompt - do_classifier_free_guidance (
bool) — có sử dụng classifier free guidance hay không - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo âm thanh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - prompt_embeds (
torch.Tensor, tùy chọn) — Các vector nhúng văn bản đã được tính toán trước từ mô hình Flan T5. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, ví dụ như trọng số của prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tính toán từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tính trước từ mô hình Flan T5. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tính từ tham số đầu vàonegative_prompt. - generated_prompt_embeds (
torch.Tensor, tùy chọn) — Các vector nhúng văn bản đã được tạo trước từ mô hình ngôn ngữ GPT2. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, ví dụ như trọng số của prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_generated_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước từ mô hình ngôn ngữ GPT2. Có thể được sử dụng để dễ dàng tinh chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tính toán từ đối số đầu vàonegative_prompt. - attention_mask (
torch.LongTensor, tùy chọn) — Mặt nạ chú ý (attention mask) đã được tính toán trước để áp dụng choprompt_embeds. Nếu không được cung cấp, mặt nạ chú ý sẽ được tính toán từ đối số đầu vàoprompt. - negative_attention_mask (
torch.LongTensor, tùy chọn) — Mặt nạ chú ý (attention mask) đã được tính trước để áp dụng chonegative_prompt_embeds. Nếu không được cung cấp, mặt nạ chú ý sẽ được tính từ đối số đầu vàonegative_prompt. - max_new_tokens (
int, tùy chọn, mặc định là None) — Số lượng token mới cần tạo ra bằng mô hình ngôn ngữ GPT2.
Trả về
prompt_embeds (torch.Tensor)
Text embeddings từ mô hình Flan T5.
attention_mask (torch.LongTensor):
Attention mask được áp dụng cho prompt_embeds.
generated_prompt_embeds (torch.Tensor):
Text embeddings được tạo ra từ mô hình ngôn ngữ GPT2.
Mã hóa prompt thành các trạng thái ẩn của text encoder.
Ví dụ:
>>> 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)`)
Tham số
- inputs_embeds (
torch.Tensorcó hình dạng(batch_size, sequence_length, hidden_size)) — Chuỗi được sử dụng làm prompt cho quá trình sinh. - max_new_tokens (
int) — Số lượng token mới cần tạo. - model_kwargs (
dict[str, Any], tùy chọn) — Tham số hóa ad hoc cho các kwargs cụ thể của model bổ sung sẽ được chuyển tiếp đến hàmforwardcủa model.
Trả về
inputs_embeds (torch.Tensorof shape(batch_size, sequence_length, hidden_size)`)
Dãy các hidden-states được tạo ra.
Tạo ra một chuỗi hidden-states từ mô hình ngôn ngữ, có điều kiện dựa trên các đầu vào embedding.
AudioLDM2ProjectionModel
lớp diffusers.AudioLDM2ProjectionModel
< source >( text_encoder_dimtext_encoder_1_dimlangauge_model_dimuse_learned_position_embedding = Nonemax_seq_length = None )
Tham số
Một mô hình chiếu tuyến tính đơn giản để ánh xạ hai vector nhúng văn bản vào một không gian ẩn chung. Nó cũng chèn các vector nhúng đã học vào đầu và cuối của mỗi chuỗi vector nhúng văn bản tương ứng. Mỗi biến được thêm hậu tố _1 chỉ đến phần tương ứng với bộ mã hóa văn bản thứ hai. Ngược lại, nó đến từ bộ mã hóa thứ nhất.
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
Tham số
- hidden_states (
torch.Tensorcó hình dạng(batch_size, sequence_length, text_encoder_dim), tùy chọn) — Các vector nhúng văn bản từ trình mã hóa văn bản đầu tiên (CLAP). - hidden_states_1 (
torch.Tensorcó hình dạng(batch_size, sequence_length_1, text_encoder_1_dim), tùy chọn) — Các embedding văn bản từ trình mã hóa văn bản thứ hai (T5 hoặc VITS). - attention_mask (
torch.LongTensorcó hình dạng(batch_size, sequence_length), tùy chọn) — Mặt nạ chú ý chohidden_states. - attention_mask_1 (
torch.LongTensorcó hình dạng(batch_size, sequence_length_1), tùy chọn) — Mặt nạ chú ý chohidden_states_1.
Trả về
AudioLDM2ProjectionModelOutput
Các vector nhúng văn bản đã được chiếu của cả hai bộ mã hóa văn bản, được nối theo chiều chuỗi, cùng với mặt nạ chú ý kết hợp của chúng.
AudioLDM2UNet2DConditionModel
lớp 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 )
Tham số
- sample_size (
inthoặctuple[int, int], tùy chọn, mặc định làNone) — Chiều cao và chiều rộng của mẫu đầu vào/đầu ra. - in_channels (
int, tùy chọn, mặc định là 4) — Số lượng kênh trong mẫu đầu vào. - out_channels (
int, tùy chọn, mặc định là 4) — Số lượng kênh trong đầu ra. - flip_sin_to_cos (
bool, tùy chọn, mặc định làFalse) — Có nên đảo sin thành cos trong time embedding hay không. - freq_shift (
int, tùy chọn, mặc định là 0) — Độ dịch tần số cần áp dụng cho nhúng thời gian. - down_block_types (
tuple[str], tùy chọn, mặc định là("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — Bộ tuple các khối hạ mẫu (downsample) cần sử dụng. - mid_block_type (
str, tùy chọn, mặc định là"UNetMidBlock2DCrossAttn") — Loại khối cho phần giữa của UNet, chỉ có thể làUNetMidBlock2DCrossAttnđối với AudioLDM2. - up_block_types (
tuple[str], tùy chọn, mặc định là("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")) — Bộ tuple các khối upsample cần sử dụng. - only_cross_attention (
boolhoặctuple[bool], tùy chọn, mặc định làFalse) — Có bao gồm self-attention trong các khối transformer cơ bản hay không, xemBasicTransformerBlock. - block_out_channels (
tuple[int], tùy chọn, mặc định là(320, 640, 1280, 1280)) — Bộ tuple các kênh đầu ra cho mỗi khối. - layers_per_block (
int, tùy chọn, mặc định là 2) — Số lượng lớp trong mỗi khối. - downsample_padding (
int, tùy chọn, mặc định là 1) — Padding được sử dụng cho phép tích chập hạ mẫu. - mid_block_scale_factor (
float, tùy chọn, mặc định là 1.0) — Hệ số tỷ lệ sử dụng cho khối giữa. - act_fn (
str, tùy chọn, mặc định là"silu") — Hàm kích hoạt cần sử dụng. - norm_num_groups (
int, tùy chọn, mặc định là 32) — Số nhóm được sử dụng cho phép chuẩn hóa. NếuNone, các lớp chuẩn hóa và kích hoạt sẽ bị bỏ qua trong xử lý hậu kỳ. - norm_eps (
float, tùy chọn, mặc định là 1e-5) — Epsilon được sử dụng cho phép chuẩn hóa. - cross_attention_dim (
inthoặctuple[int], tùy chọn, mặc định là 1280) — Kích thước của các đặc trưng chú ý chéo (cross attention). - transformer_layers_per_block (
inthoặctuple[int], tùy chọn, mặc định là 1) — Số lượng khối transformer có kiểuBasicTransformerBlock. Chỉ liên quan đến~models.unet_2d_blocks.CrossAttnDownBlock2D,~models.unet_2d_blocks.CrossAttnUpBlock2D,~models.unet_2d_blocks.UNetMidBlock2DCrossAttn. - attention_head_dim (
int, tùy chọn, mặc định là 8) — Kích thước của các đầu chú ý (attention heads). - num_attention_heads (
int, tùy chọn) — Số lượng đầu chú ý. Nếu không được định nghĩa, mặc định làattention_head_dim - resnet_time_scale_shift (
str, tùy chọn, mặc định là"default") — Cấu hình dịch chuyển thang thời gian cho các khối ResNet (xemResnetBlock2D). Chọn từdefaulthoặcscale_shift. - class_embed_type (
str, tùy chọn, mặc định làNone) — Loại class embedding được sử dụng, cuối cùng sẽ được cộng với các time embeddings. Chọn từNone,"timestep","identity","projection"hoặc"simple_projection". - num_class_embeds (
int, tuỳ chọn, mặc định làNone) — Kích thước đầu vào của ma trận nhúng có thể học được để chiếu sangtime_embed_dim, khi thực hiện điều kiện theo lớp vớiclass_embed_typebằngNone. - time_embedding_type (
str, tùy chọn, mặc định làpositional) — Loại position embedding cần sử dụng cho timesteps. Chọn từpositionalhoặcfourier. - time_embedding_dim (
int, tuỳ chọn, mặc định làNone) — Một giá trị ghi đè tuỳ chọn cho chiều của time embedding đã được chiếu. - time_embedding_act_fn (
str, tùy chọn, mặc định làNone) — Hàm kích hoạt tùy chọn chỉ được sử dụng một lần trên các embedding thời gian trước khi chúng được truyền đến phần còn lại của UNet. Chọn từsilu,mish,geluvàswish. - timestep_post_act (
str, tùy chọn, mặc định làNone) — Hàm kích hoạt thứ hai được sử dụng trong nhúng bước thời gian. Chọn từsilu,mishvàgelu. - time_cond_proj_dim (
int, tùy chọn, mặc định làNone) — Kích thước của lớpcond_projtrong phần nhúng bước thời gian (timestep embedding). - conv_in_kernel (
int, tùy chọn, mặc định là3) — Kích thước kernel của lớpconv_in. - conv_out_kernel (
int, tùy chọn, mặc định là3) — Kích thước kernel của lớpconv_out. - projection_class_embeddings_input_dim (
int, tuỳ chọn) — Kích thước của đầu vàoclass_labelskhiclass_embed_type="projection". Bắt buộc khiclass_embed_type="projection". - class_embeddings_concat (
bool, tùy chọn, mặc định làFalse) — Có nối các embedding thời gian với các embedding lớp hay không.
Mô hình 2D UNet có điều kiện, nhận vào một mẫu nhiễu, trạng thái điều kiện và một bước thời gian, sau đó trả về một đầu ra có hình dạng của mẫu. So với UNet2DConditionModel thông thường, biến thể này tùy chọn bao gồm một lớp self-attention bổ sung trong mỗi khối Transformer, cũng như nhiều lớp cross-attention. Nó cũng cho phép tối đa hai embedding cross-attention, encoder_hidden_states và encoder_hidden_states_1.
Mô hình này kế thừa từ ModelMixin. Hãy xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các mô hình (chẳng hạn như tải xuống hoặc lưu trữ).
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
Tham số
- sample (
torch.Tensor) — Tensor đầu vào có nhiễu với hình dạng(batch, channel, height, width). - timestep (
torch.Tensorhoặcfloathoặcint) — Số lượng bước thời gian để khử nhiễu một đầu vào. - encoder_hidden_states (
torch.Tensor) — Trạng thái ẩn của bộ mã hóa với hình dạng(batch, sequence_length, feature_dim). - encoder_attention_mask (
torch.Tensor) — Một mask cross-attention có shape(batch, sequence_length)được áp dụng choencoder_hidden_states. NếuTrue, mask được giữ lại, ngược lại nếuFalse, nó sẽ bị loại bỏ. Mask sẽ được chuyển thành một bias, thêm các giá trị âm lớn vào các điểm chú ý (attention scores) tương ứng với các token “bị loại bỏ”. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về một UNet2DConditionOutput thay vì một tuple thông thường hay không. - cross_attention_kwargs (
dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đếnAttnProcessor. - encoder_hidden_states_1 (
torch.Tensor, tùy chọn) — Một tập hợp trạng thái ẩn của bộ mã hóa thứ hai có hình dạng(batch, sequence_length_2, feature_dim_2). Có thể được sử dụng để điều kiện hóa mô hình dựa trên một tập hợp nhúng khác so vớiencoder_hidden_states. - encoder_attention_mask_1 (
torch.Tensor, tùy chọn) — Một mặt nạ chú ý chéo có hình dạng(batch, sequence_length_2)được áp dụng choencoder_hidden_states_1. NếuTrue, mặt nạ được giữ lại, ngược lại nếuFalse, nó sẽ bị loại bỏ. Mặt nạ sẽ được chuyển đổi thành một độ lệch, thêm các giá trị âm lớn vào các điểm chú ý tương ứng với các token “loại bỏ”.
Trả về
UNet2DConditionOutput hoặc tuple
Nếu return_dict là True, một UNet2DConditionOutput sẽ được trả về,
ngoài ra một tuple sẽ được trả về trong đó phần tử đầu tiên là tensor mẫu.
Phương thức forward của AudioLDM2UNet2DConditionModel.
AudioPipelineOutput
lớp diffusers.AudioPipelineOutput
< source >( audios: ndarray )
Lớp đầu ra cho các pipeline âm thanh.