Transformers documentation
Pop2Piano
Эта модель была опубликована в 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
< source >( 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
< source >( 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__
< source >( 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.TensorPyTorch.'np': возвращает объекты Numpynp.ndarray. Если ничего не указано, будет возвращён список массивовnp.ndarray.
Основной метод для создания признаков и подготовки данных для модели.
Pop2PianoForConditionalGeneration
класс transformers.Pop2PianoForConditionalGeneration
< source >( config: Pop2PianoConfig )
Параметры
- config (Pop2PianoConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель Pop2Piano с головкой language modeling наверху.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( 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
< source >( 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
< source >( 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__
< source >( 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.
- Каждая последовательность должна содержать 4 значения:
- 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.TensorPyTorch.'np': возвращает объекты Numpynp.ndarray.
- verbose (
bool, необязательный, по умолчаниюTrue) — Выводить ли дополнительную информацию и предупреждения.
Это метод __call__ для Pop2PianoTokenizer. Он преобразует ноты MIDI в идентификаторы токенов, сгенерированные трансформером.
Pop2PianoProcessor
класс transformers.Pop2PianoProcessor
< source >( feature_extractortokenizer )
Создаёт объект Pop2PianoProcessor, который объединяет экстрактор признаков и токенизатор в единый процессор.
Pop2PianoProcessor предоставляет все возможности Pop2PianoFeatureExtractor и tokenizer_class. Подробнее см. в ~Pop2PianoFeatureExtractor и ~tokenizer_class.
__call__
< source >( 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.TensorPyTorch.'np': возвращает объекты NumPynp.ndarray.