Diffusers documentation
AudioLDM 2
AudioLDM 2
AudioLDM 2 был предложен в статье AudioLDM 2: Learning Holistic Audio Generation with Self-supervised Pretraining авторами Haohe Liu и др. AudioLDM 2 принимает текстовый запрос на вход и предсказывает соответствующий аудиосигнал. Он может генерировать звуковые эффекты, речь человека и музыку по текстовому условию.
Вдохновлённый Stable Diffusion, AudioLDM 2 представляет собой модель латентной диффузии (LDM) для генерации аудио по тексту, которая обучает непрерывные представления аудио на основе текстовых эмбеддингов. Для вычисления текстовых эмбеддингов из входного промпта используются две модели текстовых энкодеров: текстовая ветвь CLAP и энкодер Flan-T5. Затем эти текстовые эмбеддинги проецируются в общее пространство эмбеддингов с помощью AudioLDM2ProjectionModel. Модель GPT2 языковой модели (LM) используется для авто-регрессивного предсказания восьми новых векторов эмбеддингов, условно зависящих от спроецированных эмбеддингов CLAP и Flan-T5. Сгенерированные векторы эмбеддингов и текстовые эмбеддинги Flan-T5 применяются в качестве условия для кросс-внимания в LDM. UNet в AudioLDM 2 уникален тем, что принимает два эмбеддинга для кросс-внимания, в отличие от одного условия кросс-внимания, как в большинстве других LDM.
Аннотация к статье следующая:
Although audio generation shares commonalities across different types of audio, such as speech, music, and sound effects, designing models for each type requires careful consideration of specific objectives and biases that can significantly differ from those of other types. To bring us closer to a unified perspective of audio generation, this paper proposes a framework that utilizes the same learning method for speech, music, and sound effect generation. Our framework introduces a general representation of audio, called “language of audio” (LOA). Any audio can be translated into LOA based on AudioMAE, a self-supervised pre-trained representation learning model. In the generation process, we translate any modalities into LOA by using a GPT-2 model, and we perform self-supervised audio generation learning with a latent diffusion model conditioned on LOA. The proposed framework naturally brings advantages such as in-context learning abilities and reusable self-supervised pretrained AudioMAE and latent diffusion models. Experiments on the major benchmarks of text-to-audio, text-to-music, and text-to-speech demonstrate state-of-the-art or competitive performance against previous approaches. Our code, pretrained model, and demo are available at this https URL.
Этот конвейер был предложен sanchit-gandhi и Nguyễn Công Tú Anh. Исходная кодовая база доступна по адресу haoheliu/audioldm2.
Советы
Выбор контрольной точки
AudioLDM2 представлен в трёх вариантах. Два из этих контрольных точек применимы к общей задаче генерации аудио по тексту. Третий контрольный пункт обучен исключительно на генерации музыки по тексту.
Все контрольные точки имеют одинаковый размер модели для текстовых энкодеров и VAE. Они различаются размером и глубиной UNet. См. таблицу ниже для получения подробной информации о трёх контрольных точках:
| Чекпоинт | Задача | Размер модели UNet | Общий размер модели | Данные для обучения / ч |
|---|---|---|---|---|
| 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 |
Составление запроса
- Описательные входные промпты работают лучше всего: используйте прилагательные для описания звука (например, «высокое качество» или «ясный») и делайте промпт контекстно-специфичным (например, «поток воды в лесу» вместо «поток»).
- Лучше использовать общие термины, такие как «cat» или «dog», вместо конкретных имён или абстрактных объектов, с которыми модель может быть не знакома.
- Использование негативного промпта может значительно повысить качество генерируемой звуковой волны, направляя процесс генерации в сторону, противоположную терминам, соответствующим аудио низкого качества. Попробуйте использовать негативный промпт «Low quality.»
Управление выводом
- Качество quality предсказанного аудиосэмпла можно контролировать с помощью аргумента
num_inference_steps; большее количество шагов обеспечивает более высокое качество аудио, но замедляет инференс. - Длину length предсказанного аудиосample можно контролировать, изменяя аргумент
audio_length_in_s.
Оценка сгенерированных волновых форм:
- Качество сгенерированных волновых форм может значительно варьироваться в зависимости от seed. Попробуйте генерацию с разными seed, пока не получите удовлетворительный результат.
- Можно сгенерировать несколько волновых форм за один раз: установите
num_waveforms_per_promptв значение, большее 1. Автоматическая оценка будет выполнена между сгенерированными волновыми формами и текстом запроса, а аудиозаписи будут ранжированы от лучших к худшим соответственно.
Приведённый ниже пример демонстрирует, как с помощью упомянутых выше советов создавать качественную музыку и речь: пример.
Обязательно ознакомьтесь с руководством по планировщикам, чтобы узнать, как исследовать баланс между скоростью и качеством планировщика, а также с разделом повторное использование компонентов в разных конвейерах, чтобы узнать, как эффективно загружать одни и те же компоненты в несколько конвейеров.
AudioLDM2Pipeline
класс 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) — модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
- text_encoder (ClapModel) — Первый замороженный текстовый энкодер. AudioLDM2 использует модель совместного встраивания аудио и текста CLAP, а именно вариант laion/clap-htsat-unfused. Текстовая ветвь используется для кодирования текстового промпта в промпт-встраивание. Полная модель аудио-текста используется для ранжирования сгенерированных волновых форм по отношению к текстовому промпту путём вычисления оценок сходства.
- text_encoder_2 ([
~transformers.T5EncoderModel,~transformers.VitsModel]) — Второй замороженный текстовый энкодер. AudioLDM2 использует энкодер T5, а именно вариант google/flan-t5-large. Второй замороженный текстовый энкодер используется для TTS. AudioLDM2 использует энкодер Vits. - projection_model (AudioLDM2ProjectionModel) — Обученная модель, используемая для линейного проецирования скрытых состояний из первой и второй моделей текстового кодировщика и вставки обученных эмбеддингов токенов SOS и EOS. Спроецированные скрытые состояния из двух текстовых кодировщиков конкатенируются, чтобы сформировать вход для языковой модели. Обученное позиционное эмбеддинг для скрытых состояний Vits
- language_model (GPT2Model) — авто-регрессионная языковая модель, используемая для генерации последовательности скрытых состояний, обусловленной проекциями выходов двух текстовых энкодеров.
- tokenizer (RobertaTokenizer) — Токенизатор для токенизации текста для первого замороженного текстового энкодера.
- tokenizer_2 ([
~transformers.T5Tokenizer,~transformers.VitsTokenizer]) — Токенизатор для токенизации текста для второго замороженного текстового энкодера. - feature_extractor (ClapFeatureExtractor) — Извлекатель признаков для предобработки сгенерированных аудиосигналов в лог-мел-спектрограммы для автоматической оценки.
- unet (UNet2DConditionModel) —
UNet2DConditionModelдля удаления шума из закодированных латентных представлений аудио. - scheduler (SchedulerMixin) —
планировщик, используемый в связке с
unetдля удаления шума из закодированных латентных представлений аудио. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler. - vocoder (SpeechT5HifiGan) —
Vocoder класса
SpeechT5HifiGanдля преобразования латентовых переменных мел-спектрограммы в итоговую аудиоволну.
Pipeline для генерации аудио из текста с использованием AudioLDM2.
Эта модель наследуется от 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 (
strorlist[str], необязательный) —\ Транскрипт для синтеза речи. - audio_length_in_s (
int, необязательный, по умолчанию 10.24) — Длина сгенерированного аудиосэмпла в секундах. - num_inference_steps (
int, необязательный, по умолчанию 200) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к более высокому качеству аудио за счёт замедления инференса. - guidance_scale (
float, необязательный, по умолчанию 3.5) — Более высокое значение guidance scale побуждает модель генерировать аудио, тесно связанное с текстовымprompt, за счёт снижения качества звука. Guidance scale включается, когдаguidance_scale > 1. - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, определяющие, что следует исключить при генерации аудио. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющий сигнал (guidance_scale < 1). - num_waveforms_per_prompt (
int, необязательный, по умолчанию 1) — Количество волновых форм, генерируемых на один промпт. Еслиnum_waveforms_per_prompt > 1, выполняется автоматическая оценка между сгенерированными результатами и текстовым промптом. Эта оценка ранжирует сгенерированные волновые формы на основе их косинусного сходства с текстовым входом в совместном пространстве встраиваний текста и аудио. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) из статьи DDIM. Применяется только к 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_embeds будет вычислено из входного аргументаnegative_prompt. - attention_mask (
torch.LongTensor, необязательный) — Предварительно вычисленная маска внимания, применяемая кprompt_embeds. Если не задана, маска внимания будет вычислена на основе входного аргументаprompt. - negative_attention_mask (
torch.LongTensor, необязательный) — Предварительно вычисленная маска внимания, применяемая кnegative_prompt_embeds. Если не задана, маска внимания будет вычислена на основе входного аргументаnegative_prompt. - max_new_tokens (
int, необязательный, по умолчанию None) — Количество новых токенов, которые нужно сгенерировать языковой моделью GPT2. Если значение не указано, количество токенов будет взято из конфигурации модели. - 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, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processor. - output_type (
str, необязательный, по умолчанию"np") — Формат вывода сгенерированного аудио. Выберите"np", чтобы вернуть массив NumPynp.ndarray, или"pt", чтобы вернуть объект PyTorchtorch.Tensor. Установите значение"latent", чтобы вернуть выход модели латентного диффузионного процесса (LDM).
Возвращает
StableDiffusionPipelineOutput или tuple
Если return_dict равно True, возвращается StableDiffusionPipelineOutput,
в противном случае возвращается tuple, где первый элемент — это список с сгенерированным аудио.
Функция вызова конвейера для генерации.
Примеры:
>>> 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' )
Переносит все модели на CPU с помощью accelerate, снижая потребление памяти с минимальным влиянием на производительность. В отличие от enable_sequential_cpu_offload, этот метод перемещает на GPU целую модель за один раз при вызове её метода forward, и модель остаётся на 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 (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию аудио. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее масштабирование (то есть игнорируется, еслиguidance_scaleменьше1). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно вычисленные текстовые эмбеддинги из модели Flan T5. Можно использовать для простой настройки текстовых входных данных, например взвешивания промпта. Если не передано, текстовые эмбеддинги будут вычислены из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно вычисленные отрицательные текстовые эмбеддинги из модели Flan T5. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет вычислено из входного аргументаnegative_prompt. - generated_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги из языковой модели GPT2. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_generated_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги из языковой модели GPT2. Можно использовать для простой настройки текстовых входов, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет вычислено из входного аргументаnegative_prompt. - 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формы(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)`)
Последовательность сгенерированных скрытых состояний.
Генерирует последовательность скрытых состояний из языковой модели, обусловленную входными эмбеддингами.
AudioLDM2ProjectionModel
класс diffusers.AudioLDM2ProjectionModel
< source >( text_encoder_dimtext_encoder_1_dimlangauge_model_dimuse_learned_position_embedding = Nonemax_seq_length = None )
Параметры
- text_encoder_dim (
int) — Размерность текстовых эмбеддингов от первого текстового энкодера (CLAP). - text_encoder_1_dim (
int) — Размерность текстовых эмбеддингов от второго текстового энкодера (T5 или VITS). - langauge_model_dim (
int) — Размерность текстовых эмбеддингов, полученных из языковой модели (GPT2).
Простая модель линейного проецирования для отображения двух текстовых эмбеддингов в общее латентное пространство. Она также вставляет обученные векторы эмбеддингов в начало и конец каждой последовательности текстовых эмбеддингов соответственно. Каждая переменная, дополненная _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формы(batch_size, sequence_length_1, text_encoder_1_dim), необязательный) — Текстовые эмбеддинги из второго текстового энкодера (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 (
boolortuple[bool], необязательный, по умолчаниюFalse) — Указывает, следует ли включать self-attention в базовых блоках трансформера, см.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) — Коэффициент масштабирования для среднего блока. - act_fn (
str, необязательный, по умолчанию"silu") — Функция активации, которую следует использовать. - norm_num_groups (
int, необязательный, по умолчанию 32) — количество групп, используемых для нормализации. ЕслиNone, слои нормализации и активации пропускаются на этапе постобработки. - norm_eps (
float, необязательный, по умолчанию 1e-5) — значение эпсилон, используемое для нормализации. - cross_attention_dim (
intилиtuple[int], необязательный, по умолчанию 1280) — Размерность признаков кросс-внимания. - transformer_layers_per_block (
intилиtuple[int], необязательный, по умолчанию 1) — Количество блоков трансформера типаBasicTransformerBlock. Актуально только для~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) — Тип классовой эмбеддинга, который в итоге суммируется с временными эмбеддингами. Выберите одно из значений:None,"timestep","identity","projection"или"simple_projection". - num_class_embeds (
int, необязательный, по умолчаниюNone) — Входное измерение обучаемой матрицы эмбеддингов, проецируемой вtime_embed_dim, при выполнении условного кодирования по классу, когдаclass_embed_typeравноNone. - 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) — Вторая функция активации, используемая во вложении временного шага. Выберите из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_labels, когдаclass_embed_type="projection". Обязателен, еслиclass_embed_type="projection". - class_embeddings_concat (
bool, необязательный, по умолчаниюFalse) — Соединять ли временные эмбеддинги с эмбеддингами классов.
Условная 2D-модель UNet, которая принимает зашумленный образец, условное состояние и шаг времени и возвращает выход с формой образца. В отличие от стандартной UNet2DConditionModel, этот вариант опционально включает дополнительный слой self-attention в каждом блоке Transformer, а также несколько слоёв cross-attention. Он также допускает до двух cross-attention эмбеддингов: encoder_hidden_states и encoder_hidden_states_1.
Эта модель наследуется от 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) — Маска кросс-внимания формы(batch, sequence_length), применяемая кencoder_hidden_states. ЕслиTrue, маска сохраняется, иначе, еслиFalse, она отбрасывается. Маска преобразуется в смещение (bias), которое добавляет большие отрицательные значения к оценкам внимания, соответствующим токенам «отбрасывания». - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать UNet2DConditionOutput вместо обычного кортежа. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttnProcessor. - encoder_hidden_states_1 (
torch.Tensor, необязательный) — Второй набор скрытых состояний кодировщика с формой(batch, sequence_length_2, feature_dim_2). Может использоваться для условного формирования модели на основе другого набора эмбеддингов, отличного отencoder_hidden_states. - encoder_attention_mask_1 (
torch.Tensor, необязательный) — Маска кросс-внимания формы(batch, sequence_length_2), применяемая кencoder_hidden_states_1. Если значениеTrue, маска сохраняется, иначе, еслиFalse, она отбрасывается. Маска преобразуется в смещение (bias), которое добавляет большие отрицательные значения к оценкам внимания, соответствующим токенам «отбрасывания».
Возвращает
UNet2DConditionOutput или tuple
Если return_dict равно True, возвращается UNet2DConditionOutput,
иначе возвращается tuple, где первый элемент — это тензор выборки.
Метод forward модели AudioLDM2UNet2DConditionModel.
AudioPipelineOutput
класс diffusers.AudioPipelineOutput
< source >( audios: ndarray )
Класс вывода для аудиопайплайнов.