Transformers documentation

Pop2Piano

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Эта модель была опубликована в HF papers 02.11.2022 и добавлена в Hugging Face Transformers 21.08.2023.

Pop2Piano

Обзор

Модель Pop2Piano была предложена в работе Pop2Piano : Pop Audio-based Piano Cover Generation авторами Jongho Choi и Kyogu Lee.

Популярные фортепианные аранжировки поп-музыки пользуются большим спросом, но их генерация из исходного аудио — задача непростая. Для этого необходимы глубокие навыки игры на фортепиано, а также знание различных характеристик и мелодий песни. С помощью Pop2Piano вы можете напрямую генерировать аранжировку из аудиоволны песни. Это первая модель, которая генерирует фортепианную аранжировку из поп-музыки напрямую, без модулей извлечения мелодии и аккордов.

Pop2Piano — это модель Transformer с архитектурой «кодировщик-декодер», основанная на T5. Входной аудиосигнал преобразуется в его волновую форму и передается в кодировщик, который преобразует ее в латентное представление. Декодер использует эти латентные представления для генерации идентификаторов токенов в авторегрессивном режиме. Каждый идентификатор токена соответствует одному из четырех различных типов токенов: time, velocity, note и ‘special’. Затем идентификаторы токенов декодируются в соответствующий им MIDI-файл.

Аннотация из статьи следующая:

Пiano-аранжировки поп-музыки пользуются большой популярностью. Однако задача автоматической генерации таких аранжировок остаётся недостаточно изученной. Это отчасти связано с отсутствием синхронизированных пар данных {Pop, Piano Cover}, что затрудняло применение современных методов глубокого обучения, требующих больших объёмов данных. Чтобы использовать преимущества data-driven подхода, мы создали большой набор синхронизированных пар данных {Pop, Piano Cover} с помощью автоматизированного конвейера. В данной статье мы представляем Pop2Piano — сеть на основе Transformer, которая генерирует piano-аранжировки по аудиосигналам поп-музыки. По нашему мнению, это первая модель, способная генерировать piano-аранжировку непосредственно из поп-аудио без использования модулей извлечения мелодии и аккордов. Мы показываем, что Pop2Piano, обученный на нашем наборе данных, способен создавать правдоподобные piano-аранжировки.

Эта модель была предоставлена Susnato Dhar. Исходный код можно найти здесь.

Советы по использованию

  • Для использования Pop2Piano необходимо установить библиотеку 🤗 Transformers, а также следующие сторонние модули:
pip install pretty-midi==0.2.9 essentia==2.1b6.dev1034 librosa scipy

Обратите внимание, что после установки может потребоваться перезапустить среду выполнения.

  • Pop2Piano — это модель с архитектурой «кодировщик-декодировщик», подобная T5.
  • Pop2Piano можно использовать для генерации midi-аудиофайлов для заданной аудиоследовательности.
  • Выбор разных композиторов в Pop2PianoForConditionalGeneration.generate() может привести к разнообразию результатов.
  • Установка частоты дискретизации 44,1 кГц при загрузке аудиофайла может обеспечить хорошее качество.
  • Хотя Pop2Piano обучался преимущественно на корейской поп-музыке, он также хорошо справляется с другими западными поп- или хип-хоп-треками.

Примеры

  • Пример с использованием набора данных HuggingFace:
from datasets import load_dataset

from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor


model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano", device_map="auto")
processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano")
ds = load_dataset("sweetcocoa/pop2piano_ci", split="test")

inputs = processor(
    audio=ds["audio"][0]["array"], sampling_rate=ds["audio"][0]["sampling_rate"], return_tensors="pt"
)
model_output = model.generate(input_features=inputs["input_features"], composer="composer1")
tokenizer_output = processor.batch_decode(
    token_ids=model_output, feature_extractor_output=inputs
)["pretty_midi_objects"][0]
tokenizer_output.write("./Outputs/midi_output.mid")
  • Пример с использованием собственного аудиофайла:
import librosa

from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor


audio, sr = librosa.load("<your_audio_file_here>", sr=44100)  # feel free to change the sr to a suitable value.
model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano", device_map="auto")
processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano")

inputs = processor(audio=audio, sampling_rate=sr, return_tensors="pt").to(model.device)
model_output = model.generate(input_features=inputs["input_features"], composer="composer1")
tokenizer_output = processor.batch_decode(
    token_ids=model_output, feature_extractor_output=inputs
)["pretty_midi_objects"][0]
tokenizer_output.write("./Outputs/midi_output.mid")
  • Пример обработки нескольких аудиофайлов в батче:
import librosa

from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor


# feel free to change the sr to a suitable value.
audio1, sr1 = librosa.load("<your_first_audio_file_here>", sr=44100)
audio2, sr2 = librosa.load("<your_second_audio_file_here>", sr=44100)
model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano", device_map="auto")
processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano")

inputs = processor(audio=[audio1, audio2], sampling_rate=[sr1, sr2], return_attention_mask=True, return_tensors="pt").to(model.device)
# Since we now generating in batch(2 audios) we must pass the attention_mask
model_output = model.generate(
    input_features=inputs["input_features"],
    attention_mask=inputs["attention_mask"],
    composer="composer1",
)
tokenizer_output = processor.batch_decode(
    token_ids=model_output, feature_extractor_output=inputs
)["pretty_midi_objects"]

# Since we now have 2 generated MIDI files
tokenizer_output[0].write("./Outputs/midi_output1.mid")
tokenizer_output[1].write("./Outputs/midi_output2.mid")
  • Пример обработки нескольких аудиофайлов в батче (с использованием Pop2PianoFeatureExtractor и Pop2PianoTokenizer):
import librosa

from transformers import Pop2PianoFeatureExtractor, Pop2PianoForConditionalGeneration, Pop2PianoTokenizer


# feel free to change the sr to a suitable value.
audio1, sr1 = librosa.load("<your_first_audio_file_here>", sr=44100)
audio2, sr2 = librosa.load("<your_second_audio_file_here>", sr=44100)
model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano", device_map="auto")
feature_extractor = Pop2PianoFeatureExtractor.from_pretrained("sweetcocoa/pop2piano")
tokenizer = Pop2PianoTokenizer.from_pretrained("sweetcocoa/pop2piano")

inputs = feature_extractor(
    audio=[audio1, audio2],
    sampling_rate=[sr1, sr2],
    return_attention_mask=True,
    return_tensors="pt",
)
# Since we now generating in batch(2 audios) we must pass the attention_mask
model_output = model.generate(
    input_features=inputs["input_features"],
    attention_mask=inputs["attention_mask"],
    composer="composer1",
)
tokenizer_output = tokenizer.batch_decode(
    token_ids=model_output, feature_extractor_output=inputs
)["pretty_midi_objects"]

# Since we now have 2 generated MIDI files
tokenizer_output[0].write("./Outputs/midi_output1.mid")
tokenizer_output[1].write("./Outputs/midi_output2.mid")

Pop2PianoConfig

класс transformers.Pop2PianoConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0id2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneis_encoder_decoder: bool = Truevocab_size: int = 2400composer_vocab_size: int = 21d_model: int = 512d_kv: int = 64d_ff: int = 2048num_layers: int = 6num_decoder_layers: int | None = Nonenum_heads: int = 8relative_attention_num_buckets: int = 32relative_attention_max_distance: int = 128dropout_rate: float | int = 0.1layer_norm_epsilon: float = 1e-06initializer_factor: float = 1.0feed_forward_proj: str = 'gated-gelu'use_cache: bool = Truepad_token_id: int | None = 0eos_token_id: int | list[int] | None = 1dense_act_fn: str = 'relu'is_decoder: bool = Falsetie_word_embeddings: bool = True )

Параметры

  • is_encoder_decoder (bool, необязательный, по умолчанию True) — Указывает, используется ли модель в качестве энкодера/декодера.
  • vocab_size (int, необязательный, по умолчанию 2400) — Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены в input_ids.
  • composer_vocab_size (int, необязательный, по умолчанию 21) — Указывает количество композиторов.
  • d_model (int, необязательный, по умолчанию 512) — Размер слоев кодировщика и пулер-слоя.
  • d_kv (int, необязательный, по умолчанию 64) — Размер проекций ключей, запросов и значений для каждой головы внимания. inner_dim слоя проекции будет определено как num_heads * d_kv.
  • d_ff (int, необязательный, по умолчанию 2048) — Размерность представлений MLP.
  • num_layers (int, необязательный, по умолчанию 6) — Количество скрытых слоёв в декодере Transformer.
  • num_decoder_layers (int, необязательный) — Количество скрытых слоев в декодере Transformer. Если не задано, используется то же значение, что и у num_layers.
  • num_heads (int, необязательный, по умолчанию 8) — Количество головок внимания в каждом слое внимания декодера Transformer.
  • relative_attention_num_buckets (int, необязательный, по умолчанию 32) — Количество бакетов, используемых для каждого слоя внимания.
  • relative_attention_max_distance (int, необязательный, по умолчанию 128) — Максимальное расстояние для более длинных последовательностей при разделении на бакеты.
  • dropout_rate (Union[float, int], необязательный, по умолчанию 0.1) — Доля для всех слоёв dropout.
  • layer_norm_epsilon (float, необязательный, по умолчанию 1e-06) — Значение epsilon, используемое слоями нормализации.
  • initializer_factor (float, необязательный, по умолчанию 1.0) — Коэффициент для инициализации всех матриц весов (должен оставаться равным 1, используется внутренне для тестирования инициализации).
  • feed_forward_proj (string, необязательный, по умолчанию "gated-gelu") — Тип используемого слоя прямой передачи. Должно быть одно из значений "relu" или "gated-gelu".
  • use_cache (bool, необязательный, по умолчанию True) — Указывает, должен ли модель возвращать последние ключи/значения внимания (не используется во всех моделях). Актуально только если config.is_decoder=True или если модель является генеративной моделью только с декодером.
  • pad_token_id (int, необязательный, по умолчанию 0) — Идентификатор токена, используемого для дополнения (padding) в словаре.
  • eos_token_id (Union[int, list[int]], необязательный, по умолчанию 1) — Идентификатор токена, используемого для обозначения конца потока в словаре.
  • dense_act_fn (string, необязательный, по умолчанию "relu") — Тип функции активации, используемой в Pop2PianoDenseActDense и в Pop2PianoDenseGatedActDense.
  • is_decoder (bool, необязательный, по умолчанию False) — Указывает, используется ли модель в качестве декодера. Если False, модель используется как энкодер.
  • tie_word_embeddings (bool, необязательный, по умолчанию True) — Определяет, следует ли связывать веса эмбеддингов согласно маппингу tied_weights_keys модели.

Это класс конфигурации для хранения конфигурации модели Pop2PianoModel. Он используется для создания модели Pop2Piano в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации sweetcocoa/pop2piano

Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.

Pop2PianoFeatureExtractor

класс transformers.Pop2PianoFeatureExtractor

< >

( sampling_rate: int = 22050padding_value: int = 0window_size: int = 4096hop_length: int = 1024min_frequency: float = 10.0feature_size: int = 512num_bars: int = 2**kwargs )

Параметры

  • sampling_rate (int, необязательный, по умолчанию 22050) — Целевая частота дискретизации аудиосигнала. Это частота дискретизации, которую мы передаём в модель.
  • padding_value (int, необязательный, по умолчанию 0) — Значение, используемое для дополнения аудио. Должно соответствовать тишине.
  • window_size (int, необязательный, по умолчанию 4096) — Длина окна в сэмплах, к которому применяется преобразование Фурье.
  • hop_length (int, необязательный, по умолчанию 1024) — Шаг между окнами волнового сигнала, в отсчётах.
  • min_frequency (float, необязательный, по умолчанию 10.0) — Минимальная частота, используемая в лог-мел-спектрограмме.
  • feature_size (int, необязательный, по умолчанию 512) — Размерность признаков извлечённых признаков.
  • num_bars (int, необязательный, по умолчанию 2) — Определяет интервал между каждой последовательностью.

Создаёт экстрактор признаков Pop2Piano.

Этот экстрактор признаков наследуется от SequenceFeatureExtractor, который содержит большинство основных методов. За дополнительной информацией о них следует обращаться к этому суперклассу.

Этот класс извлекает ритм и выполняет предобработку аудио перед передачей в модель. Сначала аудио передаётся в алгоритм RhythmExtractor2013, который извлекает beat_times, позиции битов, оценивает их уверенность, а также темп в bpm. Затем beat_times интерполируется для получения beatsteps. Далее из них вычисляются extrapolated_beatsteps, которые используются в токенизаторе. С другой стороны, аудио ресемплируется до self.sampling_rate и предобрабатывается, после чего из него вычисляется логарифмическая мел-спектрограмма, используемая в нашей трансформерной модели.

__call__

< >

( audio: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]sampling_rate: int | list[int]steps_per_beat: int = 2resample: bool | None = Truereturn_attention_mask: bool | None = Falsereturn_tensors: str | transformers.utils.generic.TensorType | None = None**kwargs )

Параметры

  • audio (np.ndarray, List) — Аудио или пакет аудио для обработки. Каждое аудио может быть массивом numpy, списком значений float, списком массивов numpy или списком списков значений float.
  • sampling_rate (int) — Частота дискретизации, с которой была оцифрована входная audio. Настоятельно рекомендуется передавать sampling_rate при вызове forward, чтобы избежать скрытых ошибок.
  • steps_per_beat (int, необязательный, по умолчанию 2) — Используется для интерполяции beat_times.
  • resample (bool, необязательный, по умолчанию True) — Определяет, нужно ли ресемплировать аудио до sampling_rate перед обработкой. Должен быть True во время инференса.
  • return_attention_mask (bool, необязательный, по умолчанию False) — Определяет, будет ли attention_mask для input_features, beatsteps и extrapolated_beatstep возвращаться в качестве вывода. Автоматически устанавливается в True для пакетных входных данных.
  • return_tensors (str или TensorType, необязательный) — Если задано, возвращает тензоры вместо списка целых чисел Python. Допустимые значения:
    • 'pt': возвращает объекты torch.Tensor PyTorch.
    • 'np': возвращает объекты Numpy np.ndarray. Если ничего не указано, будет возвращён список массивов np.ndarray.

Основной метод для создания признаков и подготовки данных для модели.

Pop2PianoForConditionalGeneration

класс transformers.Pop2PianoForConditionalGeneration

< >

( config: Pop2PianoConfig )

Параметры

  • config (Pop2PianoConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().

Модель Pop2Piano с головкой language modeling наверху.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Noneencoder_outputs: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneinput_features: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqLMOutput or tuple(torch.Tensor)

Параметры

  • input_ids (torch.LongTensor формы (batch_size, sequence_length)) — Индексы токенов входной последовательности в словаре. Pop2Piano — модель с относительными позиционными эмбеддингами, поэтому входные данные можно дополнять нулями как справа, так и слева. Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call(). Что такое input IDs? Чтобы узнать, как подготовить input_ids для предварительного обучения, ознакомьтесь с разделом Pop2Piano Training.
  • attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

  • decoder_input_ids (torch.LongTensor формы (batch_size, target_sequence_length), необязательный) — Индексы токенов входной последовательности декодера в словаре. Индексы можно получить с помощью AutoTokenizer. Подробности см. в PreTrainedTokenizer.encode() и PreTrainedTokenizer.call(). Что такое decoder input IDs? Pop2Piano использует pad_token_id в качестве стартового токена для генерации decoder_input_ids. Если используется past_key_values, необязательно вводить только последний decoder_input_ids (см. past_key_values). Чтобы узнать больше о том, как подготовить
  • decoder_attention_mask (torch.BoolTensor формы (batch_size, target_sequence_length), необязательный) — Поведение по умолчанию: генерировать тензор, игнорирующий токены заполнения в decoder_input_ids. По умолчанию также будет использоваться каузальная маска.
  • encoder_outputs (tuple[tuple[torch.Tensor]], необязательный) — Кортеж состоит из (last_hidden_state, необязательный: hidden_states, необязательный: attentions) last_hidden_state формы (batch_size, sequence_length, hidden_size), необязательный) — последовательность скрытых состояний на выходе последнего слоя энкодера. Используется в кросс-внимании декодера.
  • past_key_values (~cache_utils.Cache, необязательный) — Предвычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно это past_key_values , возвращённые моделью на предыдущем этапе декодирования, когда use_cache=True или config.use_cache=True.

    В качестве входного параметра допускается только экземпляр Cache, см. наше руководство по кэшу KV. Если past_key_values не переданы, по умолчанию будет инициализирован DynamicCache.

    Модель будет выводить тот же формат кэша, который был передан на вход.

    Если используются past_key_values, ожидается, что пользователь передаст только необработанные input_ids (те, для которых в этой модели ещё не заданы состояния прошлых ключей и значений) формы (batch_size, unprocessed_length), а не все input_ids формы (batch_size, sequence_length).

  • inputs_embeds (torch.Tensor формы (batch_size, sequence_length, hidden_size), необязательный) — При необходимости, вместо передачи input_ids можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы input_ids преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.
  • input_features (torch.Tensor формы (batch_size, sequence_length, feature_dim), необязательный) — Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью Pop2PianoFeatureExtractor. Подробности см. в Pop2PianoFeatureExtractor.call() (Pop2PianoProcessor использует Pop2PianoFeatureExtractor для обработки аудио).
  • decoder_inputs_embeds (torch.Tensor формы (batch_size, target_sequence_length, hidden_size), необязательный) — Необязательно, вместо передачи decoder_input_ids можно напрямую передать встроенное представление. Если past_key_values используется, необязательно вводить только последний decoder_inputs_embeds (см. past_key_values). Это полезно, если вы хотите больше контролировать, как индексы decoder_input_ids преобразуются в соответствующие векторы, чем это делает внутренняя матрица эмбеддингов модели.

    Если decoder_input_ids и decoder_inputs_embeds не заданы, decoder_inputs_embeds принимает значение inputs_embeds.

  • labels (torch.LongTensor формы (batch_size,), необязательный) — Метки для вычисления функции потерь классификации/регрессии последовательности. Индексы должны находиться в диапазоне [-100, 0, ..., config.vocab_size - 1]. Все метки, установленные в -100, игнорируются (маскируются); потери вычисляются только для меток в диапазоне [0, ..., config.vocab_size]
  • use_cache (bool, необязательный) — Если установлено в True, возвращаются состояния ключей и значений past_key_values, которые можно использовать для ускорения декодирования (см. past_key_values).

Возвращает

Seq2SeqLMOutput или tuple(torch.Tensor)

Объект Seq2SeqLMOutput или кортеж torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (Pop2PianoConfig) и входных данных.

Метод forward класса Pop2PianoForConditionalGeneration переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • loss (torch.Tensor формы (1,), необязательный, возвращается, если задан labels) — Потери языковой модели.

  • logits (torch.Tensor формы (batch_size, sequence_length, config.vocab_size)) — Оценки предсказаний языковой модели (оценки для каждого токена словаря до применения SoftMax).

  • past_key_values (EncoderDecoderCache, необязательный, возвращается при передаче use_cache=True или когда config.use_cache=True) — это экземпляр EncoderDecoderCache. Подробнее см. в нашем руководстве по кэшу kv.

    Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать (см. вход past_key_values) для ускорения последовательного декодирования.

  • decoder_hidden_states (tuple(torch.Tensor), необязательный, возвращается при передаче output_hidden_states=True или при config.output_hidden_states=True) — Кортеж из torch.Tensor (один для вывода эмбеддингов, если у модели есть слой эмбеддингов, + один для вывода каждого слоя) формы (batch_size, sequence_length, hidden_size).

    Скрытые состояния декодера на выходе каждого слоя, а также выходные значения начального слоя встраивания.

  • decoder_attentions (tuple(torch.Tensor), необязательный, возвращается при передаче output_attentions=True или когда config.output_attentions=True) — Кортеж torch.Tensor (по одному на каждый слой) формы (batch_size, num_heads, sequence_length, sequence_length).

    Веса внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

  • cross_attentions (tuple(torch.Tensor), необязательный, возвращается при передаче output_attentions=True или при config.output_attentions=True) — Кортеж torch.Tensor (по одному на каждый слой) формы (batch_size, num_heads, sequence_length, sequence_length).

    Веса внимания кросс-внимания декодера после softmax внимания, используемые для вычисления взвешенного среднего в головах кросс-внимания.

  • encoder_last_hidden_state (torch.Tensor формы (batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя энкодера модели.

  • encoder_hidden_states (tuple(torch.Tensor), необязательный, возвращается, если передано output_hidden_states=True или если config.output_hidden_states=True) — Кортеж torch.Tensor (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы (batch_size, sequence_length, hidden_size).

    Скрытые состояния кодировщика на выходе каждого слоя, а также выходные значения начального слоя встраиваний.

  • encoder_attentions (tuple(torch.Tensor), необязательный, возвращается при передаче output_attentions=True или при config.output_attentions=True) — Кортеж torch.Tensor (по одному на каждый слой) формы (batch_size, num_heads, sequence_length, sequence_length).

    Веса внимания энкодера после softmax внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Пример:

>>> from transformers import AutoProcessor, Pop2PianoForConditionalGeneration
>>> from datasets import load_dataset
>>> import torch

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

>>> processor = AutoProcessor.from_pretrained("sweetcocoa/pop2piano")
>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano")

>>> # audio file is decoded on the fly
>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
...     logits = model(**inputs).logits
>>> predicted_ids = torch.argmax(logits, dim=-1)

>>> # transcribe speech
>>> transcription = processor.batch_decode(predicted_ids)
>>> transcription[0]
...

>>> inputs["labels"] = processor(text=dataset[0]["text"], return_tensors="pt").input_ids

>>> # compute loss
>>> loss = model(**inputs).loss
>>> round(loss.item(), 2)
...

generate

< >

( input_featuresattention_mask = Nonecomposer = 'composer1'generation_config = None**kwargs ) → ModelOutput or torch.LongTensor

Параметры

  • input_features (torch.Tensor формы (batch_size, sequence_length, hidden_size), необязательный) — Это векторное представление аудио, сгенерированное Pop2PianoFeatureExtractor.
  • attention_mask — при пакетной генерации input_features выравниваются по длине, чтобы все примеры имели одинаковую форму. attention_mask помогает определить, какие области были дополнены, а какие — нет.
    • 1 для токенов, которые не дополнены,
    • 0 для токенов, которые заполнены.
  • composer (str, необязательный, по умолчанию "composer1") — Это значение передаётся в Pop2PianoConcatEmbeddingToMel для генерации различных эмбеддингов для каждого "composer". Убедитесь, что значение composer присутствует в composer_to_feature_token в generation_config. Пример см. по адресу https://huggingface.co/sweetcocoa/pop2piano/blob/main/generation_config.json .
  • generation_config (~generation.GenerationConfig, необязательный) — Конфигурация генерации, используемая в качестве базовой параметризации для вызова генерации. **kwargs, передаваемые в generate и совпадающие с атрибутами generation_config, переопределяют их. Если generation_config не указан, будет использовано значение по умолчанию, которое загружается со следующим приоритетом: 1) из файла модели generation_config.json, если он существует; 2) из конфигурации модели. Обратите внимание, что не указанные параметры наследуют значения по умолчанию из GenerationConfig, документация по которым должна быть проверена для параметризации генерации.
  • kwargs — Неформализованная параметризация generate_config и/или дополнительные специфичные для модели kwargs, которые будут переданы в функцию forward модели. Если модель является моделью encoder-decoder, kwargs, специфичные для encoder, не должны иметь префикса, а kwargs, специфичные для decoder, должны иметь префикс decoder_.

Возвращает

ModelOutput или torch.LongTensor

Объект ModelOutput (если return_dict_in_generate=True или когда config.return_dict_in_generate=True) или torch.Tensor. Поскольку Pop2Piano является моделью с архитектурой «кодировщик-декодировщик» (model.config.is_encoder_decoder=True), возможные типы ModelOutput:

Генерирует идентификаторы токенов для MIDI-выходов.

Большинство параметров, управляющих генерацией, задаются в generation_config, который, если не передан явно, принимает значения конфигурации генерации по умолчанию для модели. Любой параметр generation_config можно переопределить, передав соответствующий аргумент в generate(), например .generate(inputs, num_beams=4, do_sample=True). С обзором стратегий генерации и примерами кода можно ознакомиться в этом руководстве.

Pop2PianoTokenizer

класс transformers.Pop2PianoTokenizer

< >

( vocabdefault_velocity = 77num_bars = 2unk_token = '-1'eos_token = '1'pad_token = '0'bos_token = '2'**kwargs )

Параметры

  • vocab (str) — Путь к файлу словаря, содержащему словарь.
  • default_velocity (int, необязательный, по умолчанию 77) — Определяет скорость по умолчанию, используемую при создании нот MIDI.
  • num_bars (int, необязательный, по умолчанию 2) — Определяет cutoff_time_idx для каждого токена.
  • unk_token (str или tokenizers.AddedToken, необязательный, по умолчанию "-1") — Токен неизвестного слова. Токен, отсутствующий в словаре, не может быть преобразован в ID, поэтому вместо него устанавливается этот токен.
  • eos_token (str или tokenizers.AddedToken, необязательный, по умолчанию 1) — Токен конца последовательности.
  • pad_token (str или tokenizers.AddedToken, необязательный, по умолчанию 0) — Специальный токен, используемый для приведения массивов токенов к одинаковому размеру в целях батчинга. Затем он игнорируется механизмами внимания или вычислением функции потерь.
  • bos_token (str или tokenizers.AddedToken, необязательный, по умолчанию 2) — Токен начала последовательности, использовавшийся при предварительном обучении. Может применяться в качестве токена классификатора последовательности.

Создаёт токенизатор Pop2Piano. Этот токенизатор не требует обучения.

Этот токенизатор наследуется от PreTrainedTokenizer, который содержит большинство основных методов. За дополнительной информацией об этих методах следует обращаться к этому суперклассу.

__call__

< >

( notes: numpy.ndarray | list[pretty_midi.Note] | list[list[pretty_midi.Note]]padding: bool | str | transformers.utils.generic.PaddingStrategy = Falsetruncation: bool | str | transformers.tokenization_utils_base.TruncationStrategy | None = Nonemax_length: int | None = Nonepad_to_multiple_of: int | None = Nonereturn_attention_mask: bool | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Noneverbose: bool = True**kwargs )

Параметры

  • notes (numpy.ndarray формы [batch_size, max_sequence_length, 4] или list список pretty_midi.Note объектов) — Это представляет собой MIDI-ноты.

    Если notes — это numpy.ndarray:

    • Каждая последовательность должна содержать 4 значения: onset idx, offset idx, pitch и velocity. Если notes — это list, содержащий объекты pretty_midi.Note:
    • Каждая последовательность должна иметь 4 атрибута: start, end, pitch и velocity.
  • padding (bool, str или PaddingStrategy, необязательный, по умолчанию False) — Включает и управляет выравниванием. Принимает следующие значения:
    • True или 'longest': дополнить до самой длинной последовательности в батче (или не дополнять, если предоставлена только одна последовательность).
    • 'max_length': Дополнить до максимальной длины, указанной аргументом max_length, или до максимально допустимой длины входных данных для модели, если этот аргумент не указан.
    • False или 'do_not_pad' (по умолчанию): без дополнения нулями (т. е. может выводить батч с последовательностями разной длины).
  • truncation (bool, str или TruncationStrategy, необязательный, по умолчанию False) — Включает и управляет усечением. Принимает следующие значения:
    • True или 'longest_first': обрезка до максимальной длины, заданной аргументом max_length, или до максимально допустимой длины входа для модели, если этот аргумент не указан. Обрезка выполняется посимвольно: если предоставлена пара последовательностей (или батч пар), то токен удаляется из самой длинной последовательности в паре.
    • 'only_first': Обрезка до максимальной длины, указанной аргументом max_length, или до максимально допустимой длины входа для модели, если этот аргумент не задан. Если предоставлена пара последовательностей (или батч пар), будет обрезана только первая последовательность пары.
    • 'only_second': Обрезка до максимальной длины, указанной аргументом max_length, или до максимальной допустимой длины входа для модели, если этот аргумент не задан. Это приводит к обрезке только второй последовательности в паре, если предоставлена пара последовательностей (или батч пар).
    • False или 'do_not_truncate' (по умолчанию): без усечения (т.е. может выдать батч с длиной последовательности, превышающей максимальный допустимый размер входа модели).
  • max_length (int, необязательный) — Определяет максимальную длину, используемую одним из параметров усечения/дополнения. Если значение не задано или равно None, будет использована предопределенная максимальная длина модели, если один из параметров усечения/дополнения требует указания максимальной длины. Если у модели нет конкретной максимальной длины входных данных (как у XLNet), усечение/дополнение до максимальной длины будет отключено.
  • pad_to_multiple_of (int, необязательный) — Если задано, последовательность будет дополнена до кратного указанного значения. Это особенно полезно для использования Tensor Cores на оборудовании NVIDIA с вычислительной способностью >= 7.5 (Volta).
  • return_attention_mask (bool, необязательный) — Возвращать ли маску внимания. Если значение не указано, маска внимания будет возвращена в соответствии со значением по умолчанию для конкретного токенизатора, определяемым атрибутом return_outputs .

    Что такое маски внимания?

  • return_tensors (str или TensorType, необязательный) — Если задано, возвращает тензоры вместо списка целых чисел Python. Допустимые значения:
    • 'pt': возвращает объекты torch.Tensor PyTorch.
    • 'np': возвращает объекты Numpy np.ndarray.
  • verbose (bool, необязательный, по умолчанию True) — Выводить ли дополнительную информацию и предупреждения.

Это метод __call__ для Pop2PianoTokenizer. Он преобразует ноты MIDI в идентификаторы токенов, сгенерированные трансформером.

Pop2PianoProcessor

класс transformers.Pop2PianoProcessor

< >

( feature_extractortokenizer )

Параметры

  • feature_extractor (Pop2PianoFeatureExtractor) — Экстрактор признаков является обязательным входным параметром.
  • tokenizer (tokenizer_class) — Токенизатор является обязательным входным параметром.

Создаёт объект Pop2PianoProcessor, который объединяет экстрактор признаков и токенизатор в единый процессор.

Pop2PianoProcessor предоставляет все возможности Pop2PianoFeatureExtractor и tokenizer_class. Подробнее см. в ~Pop2PianoFeatureExtractor и ~tokenizer_class.

__call__

< >

( audio: numpy.ndarray | list[float] | list[numpy.ndarray] = Nonesampling_rate: int | list[int] | None = Nonesteps_per_beat: int = 2resample: bool | None = Truenotes: list | transformers.utils.generic.TensorType = Nonepadding: bool | str | transformers.utils.generic.PaddingStrategy = Falsetruncation: bool | str | transformers.tokenization_utils_base.TruncationStrategy = Nonemax_length: int | None = Nonepad_to_multiple_of: int | None = Noneverbose: bool = True**kwargs )

Параметры

  • audio (Union[numpy.ndarray, list[float], list[numpy.ndarray]], необязательный) — Аудио или пакет аудио, подлежащий подготовке. Каждое аудио может быть массивом NumPy или тензором PyTorch. В случае массива NumPy/тензора PyTorch каждое аудио должно иметь форму (C, T), где C — количество каналов, а T — длина выборки аудио.
  • sampling_rate (int или list[int], необязательный) — Частота дискретизации входного аудио в Гц. Она должна совпадать с частотой дискретизации, используемой извлечателем признаков. Если значение не указано, будет использована частота дискретизации по умолчанию из конфигурации процессора.
  • steps_per_beat (int, необязательный, по умолчанию 2) — Количество временных шагов на один музыкальный бит. Этот параметр управляет временным разрешением музыкального представления. Более высокое значение обеспечивает более мелкую временную детализацию, но увеличивает длину последовательности. Используется при обработке аудио для извлечения музыкальных признаков.
  • resample (bool, необязательный, по умолчанию True) — Фильтр ресемплинга, используемый при изменении размера изображения. Может принимать одно из значений перечисления PILImageResampling. Влияет только в том случае, если do_resize установлено в True.
  • notes (list или TensorType, необязательный) — Предварительно извлечённые музыкальные ноты в формате MIDI. Если этот параметр указан, процессор пропускает этап извлечения аудиопризнаков и сразу обрабатывает ноты через токенизатор. Каждая нота должна быть представлена в виде списка или тензора, содержащего информацию о высоте, громкости и времени.
  • padding (bool, str или PaddingStrategy, необязательный, по умолчанию False) — Включает и управляет выравниванием. Принимает следующие значения:
    • True или 'longest': дополнить до самой длинной последовательности в батче (или не дополнять, если предоставлена только одна последовательность).
    • 'max_length': Дополнить до максимальной длины, указанной аргументом max_length, или до максимально допустимой длины входных данных для модели, если этот аргумент не указан.
    • False или 'do_not_pad' (по умолчанию): без дополнения нулями (т. е. может выводить батч с последовательностями разной длины).
  • truncation (bool, str или TruncationStrategy, необязательно) — Включает и управляет усечением. Принимает следующие значения:
    • True или 'longest_first': обрезка до максимальной длины, заданной аргументом max_length, или до максимально допустимой длины входа для модели, если этот аргумент не указан. Обрезка выполняется посимвольно: если предоставлена пара последовательностей (или батч пар), то токен удаляется из самой длинной последовательности в паре.
    • 'only_first': Обрезка до максимальной длины, указанной аргументом max_length, или до максимально допустимой длины входа для модели, если этот аргумент не задан. Если предоставлена пара последовательностей (или батч пар), будет обрезана только первая последовательность пары.
    • 'only_second': Обрезка до максимальной длины, указанной аргументом max_length, или до максимальной допустимой длины входа для модели, если этот аргумент не задан. Это приводит к обрезке только второй последовательности в паре, если предоставлена пара последовательностей (или батч пар).
    • False или 'do_not_truncate' (по умолчанию): без усечения (т.е. может выдать батч с длиной последовательности, превышающей максимальный допустимый размер входа модели).
  • max_length (int, необязательный) — Управляет максимальной длиной, используемой одним из параметров усечения/дополнения.

    Если параметр не задан или установлен в None, будет использована предопределённая максимальная длина модели, если одна из параметров усечения/дополнения требует указания максимальной длины. Если у модели нет конкретной максимальной длины входных данных (как у XLNet), усечение/дополнение до максимальной длины будет отключено.

  • pad_to_multiple_of (int, необязательный) — Если задано, последовательность будет дополнена до кратного указанного значения. Требуется, чтобы padding был активирован. Это особенно полезно для использования Tensor Cores на аппаратных средствах NVIDIA с вычислительной способностью >= 7.5 (Volta).
  • verbose (bool, необязательный, по умолчанию True) — Выводить ли дополнительную информацию и предупреждения.
  • return_tensors (str или TensorType, необязательный) — Если задано, возвращает тензоры конкретного фреймворка. Допустимые значения:
    • 'pt': возвращает объекты torch.Tensor PyTorch.
    • 'np': возвращает объекты NumPy np.ndarray.
Update on GitHub