Transformers documentation
Pop2Piano
Este modelo foi publicado no HF papers em 2022-11-02 e contribuído para o Hugging Face Transformers em 2023-08-21.
Pop2Piano
Visão geral
O modelo Pop2Piano foi proposto em Pop2Piano : Pop Audio-based Piano Cover Generation por Jongho Choi e Kyogu Lee.
Coberturas de piano de músicas pop são amplamente apreciadas, mas gerá-las a partir de música não é uma tarefa trivial. Isso exige grande experiência na execução do piano, bem como o conhecimento das diferentes características e melodias de uma canção. Com o Pop2Piano, é possível gerar diretamente uma cobertura a partir da forma de onda de áudio de uma música. Trata-se do primeiro modelo a gerar diretamente uma cobertura de piano a partir de áudio pop, sem módulos de extração de melodia e acordes.
Pop2Piano é um modelo Transformer encoder-decoder baseado no T5. O áudio de entrada é transformado em sua forma de onda e enviado ao encoder, que o converte em uma representação latente. O decoder utiliza essas representações latentes para gerar ids de tokens de forma autoregressiva. Cada id de token corresponde a um de quatro tipos diferentes de tokens: tempo, velocidade, nota e ‘especial’. Os ids de tokens são então decodificados para o arquivo MIDI equivalente.
O resumo do artigo é o seguinte:
Coberturas de piano de músicas pop são apreciadas por muitas pessoas. No entanto, a tarefa de gerar automaticamente coberturas de piano de músicas pop ainda é pouco estudada. Isso se deve em parte à falta de pares de dados sincronizados {Pop, Piano Cover}, o que dificultou a aplicação dos métodos mais recentes baseados em deep learning e intensivos em dados. Para aproveitar o poder da abordagem orientada por dados, criamos uma grande quantidade de dados pareados e sincronizados {Pop, Piano Cover} usando um pipeline automatizado. Neste artigo, apresentamos o Pop2Piano, uma rede Transformer que gera coberturas de piano a partir de formas de onda de músicas pop. Até onde sabemos, este é o primeiro modelo a gerar uma cobertura de piano diretamente de áudio pop, sem usar módulos de extração de melodia e acordes. Mostramos que o Pop2Piano, treinado com nosso conjunto de dados, é capaz de produzir coberturas de piano plausíveis.
Este modelo foi contribuído por Susnato Dhar. O código original pode ser encontrado aqui.
Dicas de uso
- Para usar o Pop2Piano, você precisará instalar a biblioteca 🤗 Transformers, bem como os seguintes módulos de terceiros:
pip install pretty-midi==0.2.9 essentia==2.1b6.dev1034 librosa scipy
Observe que você pode precisar reiniciar o runtime após a instalação.
- Pop2Piano é um modelo baseado em Encoder-Decoder, como o T5.
- O Pop2Piano pode ser usado para gerar arquivos midi-audio para uma sequência de áudio fornecida.
- Escolher diferentes compositores em
Pop2PianoForConditionalGeneration.generate()pode levar a uma variedade de resultados diferentes. - Definir a taxa de amostragem em 44,1 kHz ao carregar o arquivo de áudio pode resultar em bom desempenho.
- Embora o Pop2Piano tenha sido treinado principalmente em música Pop coreana, ele também se sai bem em outras músicas Pop ou Hip Hop ocidentais.
Exemplos
- Exemplo usando o Dataset do 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")- Exemplo usando seu próprio arquivo de áudio:
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")- Exemplo de processamento de vários arquivos de áudio em lote:
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")- Exemplo de processamento de vários arquivos de áudio em lote (usando
Pop2PianoFeatureExtractorePop2PianoTokenizer):
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
classe 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 )
Parâmetros
- is_encoder_decoder (
bool, opcional, padrãoTrue) — Indica se o modelo é usado como encoder/decoder ou não. - vocab_size (
int, opcional, padrão2400) — Tamanho do vocabulário do modelo. Define o número de tokens diferentes que podem ser representados pelosinput_ids. - composer_vocab_size (
int, opcional, padrão 21) — Indica o número de compositores. - d_model (
int, opcional, padrão512) — Tamanho das camadas do codificador e da camada pooler. - d_kv (
int, opcional, padrão64) — Tamanho das projeções de chave, consulta e valor por cabeça de atenção. Oinner_dimda camada de projeção será definido comonum_heads * d_kv. - d_ff (
int, opcional, padrão2048) — Dimensão das representações do MLP. - num_layers (
int, opcional, padrão6) — Número de camadas ocultas no decodificador do Transformer. - num_decoder_layers (
int, opcional) — Número de camadas ocultas no decodificador do Transformer. Se não for definido, usará o mesmo valor denum_layers. - num_heads (
int, opcional, padrão8) — Número de cabeças de atenção para cada camada de atenção no decodificador do Transformer. - relative_attention_num_buckets (
int, opcional, padrão 32) — O número de buckets a serem usados em cada camada de atenção. - relative_attention_max_distance (
int, opcional, padrão 128) — A distância máxima das sequências mais longas para a separação em buckets. - dropout_rate (
Union[float, int], opcional, padrão0.1) — A proporção para todas as camadas de dropout. - layer_norm_epsilon (
float, opcional, padrão1e-06) — O epsilon usado pelas camadas de normalização de camada. - initializer_factor (
float, opcional, padrão1.0) — Fator para inicializar todas as matrizes de pesos (deve ser mantido em 1, usado internamente para testes de inicialização). - feed_forward_proj (
string, opcional, padrão"gated-gelu") — Tipo de camada feed forward a ser utilizada. Deve ser um dos valores"relu"ou"gated-gelu". - use_cache (
bool, opcional, padrãoTrue) — Se o modelo deve ou não retornar as últimas chaves/valores de atenção (não usado por todos os modelos). Relevante apenas seconfig.is_decoder=Trueou quando o modelo for um modelo generativo somente decodificador. - pad_token_id (
int, opcional, padrão0) — ID do token usado para preenchimento no vocabulário. - eos_token_id (
Union[int, list[int]], opcional, padrão1) — ID do token usado para o fim do fluxo no vocabulário. - dense_act_fn (
string, opcional, padrão"relu") — Tipo de Função de Ativação a ser usada emPop2PianoDenseActDensee emPop2PianoDenseGatedActDense. - is_decoder (
bool, opcional, padrãoFalse) — Indica se o modelo é usado como decodificador ou não. SeFalse, o modelo é usado como codificador. - tie_word_embeddings (
bool, opcional, padrãoTrue) — Se deve vincular as embeddings de pesos de acordo com o mapeamentotied_weights_keysdo modelo.
Esta é a classe de configuração para armazenar a configuração de um Pop2PianoModel. Ela é usada para instanciar um modelo Pop2Piano de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do sweetcocoa/pop2piano
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Pop2PianoFeatureExtractor
classe 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 )
Parâmetros
- sampling_rate (
int, opcional, padrão 22050) — Taxa de amostragem alvo do sinal de áudio. É a taxa de amostragem que enviamos para o modelo. - padding_value (
int, opcional, padrão 0) — Valor de preenchimento usado para preencher o áudio. Deve corresponder a silêncios. - window_size (
int, opcional, padrão 4096) — Comprimento da janela em amostras ao qual a transformada de Fourier é aplicada. - hop_length (
int, opcional, padrão 1024) — Tamanho do passo entre cada janela da forma de onda, em amostras. - min_frequency (
float, opcional, padrão 10.0) — Frequência mínima que será utilizada no espectrograma log-mel. - feature_size (
int, opcional, padrão 512) — A dimensão dos recursos das características extraídas. - num_bars (
int, opcional, padrão 2) — Determina o intervalo entre cada sequência.
Constrói um extrator de recursos Pop2Piano.
Este extrator de características herda de SequenceFeatureExtractor, que contém a maioria dos métodos principais. Os usuários devem consultar essa superclasse para obter mais informações sobre esses métodos.
Esta classe extrai o ritmo e pré-processa o áudio antes de enviá-lo ao modelo. Primeiro, o áudio é enviado para o algoritmo RhythmExtractor2013, que extrai os beat_times, as posições dos beats e estima sua confiança, bem como o tempo em bpm. Em seguida, beat_times é interpolado para obter beatsteps. Depois, calculamos extrapolated_beatsteps a partir dele para uso no tokenizer. Por outro lado, o áudio é reamostrado para self.sampling_rate e pré-processado, e então o log mel spectogram é calculado a partir dele para uso em nosso modelo transformer.
__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 )
Parâmetros
- audio (
np.ndarray,List) — O áudio ou lote de áudios a ser processado. Cada áudio pode ser um array numpy, uma lista de valores float, uma lista de arrays numpy ou uma lista de listas de valores float. - sampling_rate (
int) — A taxa de amostragem na qual a entradaaudiofoi amostrada. É fortemente recomendável passarsampling_ratena chamada de forward para evitar erros silenciosos. - steps_per_beat (
int, opcional, padrão 2) — Isso é usado na interpolação debeat_times. - resample (
bool, opcional, padrãoTrue) — Determina se o áudio deve ser reamostrado parasampling_rateantes do processamento. Deve ser True durante a inferência. - return_attention_mask (
boolopcional, padrãoFalse) — Indica se o attention_mask para input_features, beatsteps e extrapolated_beatstep será fornecido como saída ou não. Definido automaticamente como True para entradas em lote. - return_tensors (
strou TensorType, opcional) — Se definido, retornará tensors em vez de uma lista de inteiros do Python. Os valores aceitos são:'pt': Retorna objetostorch.Tensordo PyTorch.'np': Retorna objetos Numpynp.ndarray. Se nada for especificado, será retornado uma lista de arraysnp.ndarray.
Método principal para criar os recursos e preparar os dados para o modelo.
Pop2PianoForConditionalGeneration
classe transformers.Pop2PianoForConditionalGeneration
< source >( config: Pop2PianoConfig )
Parâmetros
- config (Pop2PianoConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
Modelo Pop2Piano com uma cabeça de language modeling no topo.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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)
Parâmetros
- input_ids (
torch.LongTensorde forma(batch_size, sequence_length)) — Índices dos tokens da sequência de entrada no vocabulário. O Pop2Piano é um modelo com embeddings de posição relativa, portanto, você deve poder fazer padding nas entradas tanto à direita quanto à esquerda. Os índices podem ser obtidos usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() e PreTrainedTokenizer.call() para mais detalhes. O que são IDs de entrada? Para saber mais sobre como prepararinput_idspara pré-treinamento, dê uma olhada em Pop2Piano Training. - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- decoder_input_ids (
torch.LongTensorde forma(batch_size, target_sequence_length), opcional) — Índices dos tokens da sequência de entrada do decodificador no vocabulário. Os índices podem ser obtidos usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() e PreTrainedTokenizer.call() para mais detalhes. O que são IDs de entrada do decodificador? O Pop2Piano usa opad_token_idcomo o token inicial para a geração dedecoder_input_ids. Sepast_key_valuesfor usado, opcionalmente apenas o últimodecoder_input_idsprecisa ser inserido (vejapast_key_values). Para saber mais sobre como preparar - decoder_attention_mask (
torch.BoolTensorde forma(batch_size, target_sequence_length), opcional) — Comportamento padrão: gera um tensor que ignora tokens de preenchimento emdecoder_input_ids. A máscara causal também será usada por padrão. - encoder_outputs (
tuple[tuple[torch.Tensor]], opcional) — A tupla consiste em (last_hidden_state, opcional:hidden_states, opcional:attentions)last_hidden_statede forma(batch_size, sequence_length, hidden_size), opcional) é uma sequência de hidden-states na saída da última camada do encoder. Usado na cross-attention do decoder. - past_key_values (
~cache_utils.Cache, opcional) — Estados ocultos pré-computados (chaves e valores nos blocos de autoatenção e nos blocos de atenção cruzada) que podem ser usados para acelerar a decodificação sequencial. Isso geralmente consiste nopast_key_valuesretornado pelo modelo em uma etapa anterior da decodificação, quandouse_cache=Trueouconfig.use_cache=True.Apenas uma instância de Cache é permitida como entrada, consulte nosso guia de cache de kv. Se nenhum
past_key_valuesfor passado, DynamicCache será inicializado por padrão.O modelo sairá no mesmo formato de cache que é fornecido como entrada.
Se
past_key_valuesforem usados, espera-se que o usuário insira apenas osinput_idsnão processados (aqueles que não têm seus estados de chave e valor passados fornecidos a este modelo) com a forma(batch_size, unprocessed_length), em vez de todos osinput_idscom a forma(batch_size, sequence_length). - inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, em vez de passarinput_ids, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices deinput_idsnos vetores associados do que a matriz de busca de incorporação interna do modelo. - input_features (
torch.Tensorde forma(batch_size, sequence_length, feature_dim), opcional) — Os tensores correspondentes às características de áudio de entrada. As características de áudio podem ser obtidas usando Pop2PianoFeatureExtractor. Consulte Pop2PianoFeatureExtractor.call() para obter detalhes (Pop2PianoProcessor usa Pop2PianoFeatureExtractor para processar os áudios). - decoder_inputs_embeds (
torch.Tensorde forma(batch_size, target_sequence_length, hidden_size), opcional) — Opcionalmente, em vez de passardecoder_input_idsvocê pode escolher passar diretamente uma representação incorporada. Sepast_key_valuesfor usado, opcionalmente apenas o últimodecoder_inputs_embedsprecisa ser entrada (vejapast_key_values). Isso é útil se você quiser mais controle sobre como converterdecoder_input_idsíndices em vetores associados do que a matriz de busca de incorporação interna do modelo.Se
decoder_input_idsedecoder_inputs_embedsestiverem ambos não definidos,decoder_inputs_embedsassume o valor deinputs_embeds. - labels (
torch.LongTensorde forma(batch_size,), opcional) — Rótulos para o cálculo da perda de classificação/regressão de sequência. Os índices devem estar em[-100, 0, ..., config.vocab_size - 1]. Todos os rótulos definidos como-100são ignorados (mascarados); a perda é calculada apenas para rótulos em[0, ..., config.vocab_size] - use_cache (
bool, opcional) — Se definido comoTrue, os estados de chave-valorpast_key_valuessão retornados e podem ser usados para acelerar a decodificação (vejapast_key_values).
Retorna
Seq2SeqLMOutput ou tuple(torch.Tensor)
Um Seq2SeqLMOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (Pop2PianoConfig) e das entradas.
O método forward de Pop2PianoForConditionalGeneration sobrescreve o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
loss (
torch.Tensorde forma(1,), opcional, retornado quandolabelsé fornecido) — Perda de modelagem de linguagem.logits (
torch.Tensorde forma(batch_size, sequence_length, config.vocab_size)) — Pontuações de previsão da cabeça de modelagem de linguagem (pontuações para cada token do vocabulário antes do SoftMax).past_key_values (
EncoderDecoderCache, opcional, retornado quandouse_cache=Trueé passado ou quandoconfig.use_cache=True) — Trata-se de uma instância de EncoderDecoderCache. Para mais detalhes, consulte nosso guia de cache kv.Contém estados ocultos pré-computados (chaves e valores nos blocos de autoatenção e nos blocos de atenção cruzada) que podem ser usados (veja a entrada
past_key_values) para acelerar a decodificação sequencial.decoder_hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do decodificador na saída de cada camada, além das saídas do embedding inicial.
decoder_attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção do decodificador, após o softmax de atenção, usados para calcular a média ponderada nas cabeças de autoatenção.
cross_attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção da camada de atenção cruzada do decodificador, após o softmax de atenção, usados para calcular a média ponderada nas cabeças de atenção cruzada.
encoder_last_hidden_state (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Sequência de estados ocultos na saída da última camada do codificador do modelo.encoder_hidden_states (
tuple(torch.Tensor), opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do codificador na saída de cada camada, além das saídas do embedding inicial.
encoder_attentions (
tuple(torch.Tensor), opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção do codificador, após o softmax de atenção, usados para calcular a média ponderada nas cabeças de autoatenção.
Exemplo:
>>> 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
Parâmetros
- input_features (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Esta é a versão com características extraídas do áudio, gerada porPop2PianoFeatureExtractor. - attention_mask —
Para geração em lote
input_featuressão preenchidos para ter a mesma forma em todos os exemplos.attention_maskajuda a determinar quais áreas foram preenchidas e quais não foram.- 1 para tokens que não são preenchidos,
- 0 para tokens que são preenchidos.
- composer (
str, opcional, padrão"composer1") — Esse valor é passado paraPop2PianoConcatEmbeddingToMelpara gerar embeddings diferentes para cada"composer". Certifique-se de que o valor do compositor esteja presente emcomposer_to_feature_tokenemgeneration_config. Para um exemplo, consulte https://huggingface.co/sweetcocoa/pop2piano/blob/main/generation_config.json . - generation_config (
~generation.GenerationConfig, opcional) — A configuração de geração a ser usada como parametrização base para a chamada de geração. Os**kwargspassados para generate que correspondam aos atributos degeneration_configos sobrescreverão. Segeneration_confignão for fornecido, o padrão será usado, que tem a seguinte prioridade de carregamento: 1) do arquivo de modelogeneration_config.json, se existir; 2) da configuração do modelo. Observe que os parâmetros não especificados herdarão os valores padrão de GenerationConfig, cuja documentação deve ser consultada para parametrizar a geração. - kwargs —
Parametrização ad hoc de
generate_confige/ou kwargs específicos do modelo adicionais que serão encaminhados para a funçãoforwarddo modelo. Se o modelo for um modelo encoder-decoder, os kwargs específicos do encoder não devem ter prefixo e os kwargs específicos do decoder devem ter o prefixo decoder_.
Retorna
ModelOutput ou torch.LongTensor
Um ModelOutput (se return_dict_in_generate=True
ou quando config.return_dict_in_generate=True) ou um torch.Tensor.
Como o Pop2Piano é um modelo encoder-decoder (model.config.is_encoder_decoder=True), os tipos
de ModelOutput possíveis são:
Gera ids de tokens para saídas midi.
A maioria dos parâmetros de controle de geração é definida em
generation_config, que, se não for passada, será definida como a configuração de geração padrão do modelo. Você pode sobrescrever qualquergeneration_configpassando os parâmetros correspondentes para generate(), por exemplo,.generate(inputs, num_beams=4, do_sample=True). Para uma visão geral das estratégias de geração e exemplos de código, consulte o guia a seguir.
Pop2PianoTokenizer
classe transformers.Pop2PianoTokenizer
< source >( vocabdefault_velocity = 77num_bars = 2unk_token = '-1'eos_token = '1'pad_token = '0'bos_token = '2'**kwargs )
Parâmetros
- vocab (
str) — Caminho para o arquivo de vocabulário que contém o vocabulário. - default_velocity (
int, opcional, padrão 77) — Determina a velocidade padrão a ser usada ao criar notas MIDI. - num_bars (
int, opcional, padrão 2) — Determina o cutoff_time_idx para cada token. - unk_token (
stroutokenizers.AddedToken, opcional, padrão"-1") — O token desconhecido. Um token que não está no vocabulário não pode ser convertido em um ID e é definido como este token em vez disso. - eos_token (
stroutokenizers.AddedToken, opcional, padrão 1) — O token de fim de sequência. - pad_token (
stroutokenizers.AddedToken, opcional, padrão 0) — Um token especial usado para tornar os arrays de tokens do mesmo tamanho para fins de loteamento. Em seguida, será ignorado pelos mecanismos de atenção ou pelo cálculo da perda. - bos_token (
stroutokenizers.AddedToken, opcional, padrão 2) — O token de início de sequência usado durante o pré-treinamento. Pode ser usado como token de classificador de sequência.
Constrói um tokenizador Pop2Piano. Este tokenizador não requer treinamento.
Este tokenizer herda de PreTrainedTokenizer, que contém a maioria dos métodos principais. Os usuários devem consultar essa superclasse para obter mais informações sobre esses métodos.
__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 )
Parâmetros
- notes (
numpy.ndarrayde forma[batch_size, max_sequence_length, 4]oulistdepretty_midi.Noteobjetos) — Isso representa as notas midi.Se
notesfor umnumpy.ndarray:- Cada sequência deve ter 4 valores, que são
onset idx,offset idx,pitchevelocity. Senotesfor umalistcontendo objetospretty_midi.Note: - Cada sequência deve ter 4 atributos, que são
start,end,pitchevelocity.
- Cada sequência deve ter 4 valores, que são
- padding (
bool,strou PaddingStrategy, opcional, padrão éFalse) — Ativa e controla o padding. Aceita os seguintes valores:Trueou'longest': Preenche até a sequência mais longa do lote (ou não aplica preenchimento se apenas uma sequência for fornecida).'max_length': Preenche até o comprimento máximo especificado com o argumentomax_lengthou até o comprimento máximo aceitável de entrada para o modelo, caso esse argumento não seja fornecido.Falseou'do_not_pad'(padrão): Sem padding (ou seja, pode gerar um lote com sequências de comprimentos diferentes).
- truncation (
bool,strou TruncationStrategy, opcional, padrão éFalse) — Ativa e controla a truncagem. Aceita os seguintes valores:Trueou'longest_first': Trunca para um comprimento máximo especificado com o argumentomax_lengthou para o comprimento máximo aceitável de entrada para o modelo, caso esse argumento não seja fornecido. Isso trunca token por token, removendo um token da sequência mais longa do par, se um par de sequências (ou um lote de pares) for fornecido.'only_first': Trunca para o comprimento máximo especificado com o argumentomax_lengthou para o comprimento máximo aceitável de entrada do modelo, caso esse argumento não seja fornecido. Isso trunca apenas a primeira sequência de um par, se um par de sequências (ou um lote de pares) for fornecido.'only_second': Trunca para um comprimento máximo especificado com o argumentomax_lengthou para o comprimento máximo aceitável de entrada do modelo, caso esse argumento não seja fornecido. Isso trunca apenas a segunda sequência de um par, se um par de sequências (ou um lote de pares) for fornecido.Falseou'do_not_truncate'(padrão): Sem truncamento (ou seja, pode gerar um lote com comprimentos de sequência maiores que o tamanho máximo de entrada aceitável pelo modelo).
- max_length (
int, opcional) — Controla o comprimento máximo a ser usado por um dos parâmetros de truncamento/preenchimento. Se não for definido ou for definido comoNone, será usado o comprimento máximo predefinido do modelo, caso um dos parâmetros de truncamento/preenchimento exija um comprimento máximo. Se o modelo não tiver um comprimento máximo de entrada específico (como o XLNet), o truncamento/preenchimento para um comprimento máximo será desativado. - pad_to_multiple_of (
int, opcional) — Se definido, a sequência será preenchida até um múltiplo do valor fornecido. Isso é especialmente útil para habilitar o uso de Tensor Cores em hardware NVIDIA com capacidade de computação>= 7.5(Volta). - return_attention_mask (
bool, opcional) — Se deve retornar a attention mask. Se mantido o valor padrão, a attention mask será retornada de acordo com o padrão do tokenizer específico, definido pelo atributoreturn_outputs. - return_tensors (
strou TensorType, opcional) — Se definido, retornará tensors em vez de uma lista de inteiros do Python. Os valores aceitos são:'pt': Retorna objetostorch.Tensordo PyTorch.'np': Retorna objetosnp.ndarraydo Numpy.
- verbose (
bool, opcional, padrãoTrue) — Se deve ou não exibir mais informações e avisos.
Este é o método __call__ para Pop2PianoTokenizer. Ele converte as notas midi nos ids de tokens gerados pelo transformer.
Pop2PianoProcessor
classe transformers.Pop2PianoProcessor
< source >( feature_extractortokenizer )
Constrói um Pop2PianoProcessor que encapsula um extrator de recursos e um tokenizer em um único processador.
Pop2PianoProcessor oferece todas as funcionalidades de Pop2PianoFeatureExtractor e tokenizer_class. Consulte ~Pop2PianoFeatureExtractor e ~tokenizer_class para mais informações.
__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 )
Parâmetros
- audio (
Union[numpy.ndarray, list[float], list[numpy.ndarray]], opcional) — O áudio ou lote de áudios a ser preparado. Cada áudio pode ser um array NumPy ou um tensor PyTorch. No caso de um array NumPy/tensor PyTorch, cada áudio deve ter a forma (C, T), onde C é o número de canais e T é o comprimento de amostragem do áudio. - sampling_rate (
intoulist[int], opcional) — A taxa de amostragem do áudio de entrada em Hz. Isso deve corresponder à taxa de amostragem usada pelo extrator de recursos. Se não for fornecida, a taxa de amostragem padrão da configuração do processador será utilizada. - steps_per_beat (
int, opcional, padrão2) — O número de passos de tempo por batida musical. Este parâmetro controla a resolução temporal da representação musical. Um valor maior fornece uma granularidade temporal mais fina, mas aumenta o comprimento da sequência. Utilizado ao processar áudio para extrair características musicais. - resample (
bool, opcional, padrãoTrue) — Filtro de reamostragem a ser usado ao redimensionar a imagem. Pode ser um dos valores da enumeraçãoPILImageResampling. Tem efeito apenas sedo_resizeestiver definido comoTrue. - notes (
listouTensorType, opcional) — Notas musicais pré-extraídas em formato MIDI. Quando fornecidas, o processador ignora a extração de características de áudio e processa diretamente as notas por meio do tokenizer. Cada nota deve ser representada como uma lista ou tensor contendo informações de altura, velocidade e tempo. - padding (bool, str ou PaddingStrategy, opcional, padrão é
False) — Ativa e controla o padding. Aceita os seguintes valores:Trueou'longest': Preenche até a sequência mais longa do lote (ou não aplica preenchimento se apenas uma sequência for fornecida).'max_length': Preenche até o comprimento máximo especificado com o argumentomax_lengthou até o comprimento máximo aceitável de entrada para o modelo, caso esse argumento não seja fornecido.Falseou'do_not_pad'(padrão): Sem padding (ou seja, pode gerar um lote com sequências de comprimentos diferentes).
- truncation (bool, str ou TruncationStrategy, opcional) —
Ativa e controla a truncagem. Aceita os seguintes valores:
Trueou'longest_first': Trunca para um comprimento máximo especificado com o argumentomax_lengthou para o comprimento máximo aceitável de entrada para o modelo, caso esse argumento não seja fornecido. Isso trunca token por token, removendo um token da sequência mais longa do par, se um par de sequências (ou um lote de pares) for fornecido.'only_first': Trunca para o comprimento máximo especificado com o argumentomax_lengthou para o comprimento máximo aceitável de entrada do modelo, caso esse argumento não seja fornecido. Isso trunca apenas a primeira sequência de um par, se um par de sequências (ou um lote de pares) for fornecido.'only_second': Trunca para um comprimento máximo especificado com o argumentomax_lengthou para o comprimento máximo aceitável de entrada do modelo, caso esse argumento não seja fornecido. Isso trunca apenas a segunda sequência de um par, se um par de sequências (ou um lote de pares) for fornecido.Falseou'do_not_truncate'(padrão): Sem truncamento (ou seja, pode gerar um lote com comprimentos de sequência maiores que o tamanho máximo de entrada aceitável pelo modelo).
- max_length (
int, opcional) — Controla o comprimento máximo a ser usado por um dos parâmetros de truncamento/preenchimento.Se não for definido ou for definido como
None, isso usará o comprimento máximo predefinido do modelo, caso um dos parâmetros de truncamento/preenchimento exija um comprimento máximo. Se o modelo não tiver um comprimento máximo de entrada específico (como o XLNet), o truncamento/preenchimento para um comprimento máximo será desativado. - pad_to_multiple_of (
int, opcional) — Se definido, a sequência será preenchida até um múltiplo do valor fornecido. Exige quepaddingesteja ativado. Isso é especialmente útil para permitir o uso de Tensor Cores em hardware NVIDIA com capacidade de computação>= 7.5(Volta). - verbose (
bool, opcional, padrãoTrue) — Se deve ou não exibir mais informações e avisos. - return_tensors (
strou TensorType, opcional) — Se definido, retornará tensors de um framework específico. Os valores aceitos são:'pt': Retorna objetostorch.Tensordo PyTorch.'np': Retorna objetosnp.ndarraydo NumPy.