Transformers documentation
Pop2Piano
Model ini dipublikasikan di HF papers pada 2022-11-02 dan disumbangkan ke Hugging Face Transformers pada 2023-08-21.
Pop2Piano
Ikhtisar
Model Pop2Piano diusulkan dalam Pop2Piano : Pop Audio-based Piano Cover Generation oleh Jongho Choi dan Kyogu Lee.
Piano covers dari musik pop sangat dinikmati, tetapi menghasilkannya dari musik bukanlah tugas yang mudah. Hal ini membutuhkan keahlian tinggi dalam bermain piano serta pemahaman tentang karakteristik dan melodi yang berbeda dari sebuah lagu. Dengan Pop2Piano, Anda dapat langsung menghasilkan cover dari waveform audio lagu. Ini adalah model pertama yang secara langsung menghasilkan piano cover dari audio pop tanpa modul ekstraksi melodi dan akor.
Pop2Piano adalah model Transformer encoder-decoder yang berbasis pada T5. Audio input diubah menjadi bentuk waveform-nya dan diteruskan ke encoder, yang kemudian mengubahnya menjadi representasi laten. Decoder menggunakan representasi laten ini untuk menghasilkan token id secara autoregresif. Setiap token id sesuai dengan salah satu dari empat jenis token yang berbeda: time, velocity, note, dan ‘special’. Token id tersebut kemudian didekode menjadi file MIDI yang setara.
Abstrak dari makalah tersebut adalah sebagai berikut:
Cover piano dari musik pop dinikmati oleh banyak orang. Namun, tugas menghasilkan cover piano dari musik pop secara otomatis masih kurang diteliti. Hal ini sebagian disebabkan oleh kurangnya pasangan data {Pop, Piano Cover} yang tersinkronisasi, yang membuat penerapan metode berbasis deep learning intensif data terbaru menjadi menantang. Untuk memanfaatkan kekuatan pendekatan berbasis data, kami membuat sejumlah besar data {Pop, Piano Cover} yang berpasangan dan tersinkronisasi menggunakan pipeline otomatis. Dalam makalah ini, kami memperkenalkan Pop2Piano, sebuah jaringan Transformer yang menghasilkan cover piano dari waveform musik pop. Sejauh pengetahuan kami, ini adalah model pertama yang menghasilkan cover piano langsung dari audio pop tanpa menggunakan modul ekstraksi melodi dan akor. Kami menunjukkan bahwa Pop2Piano, yang dilatih dengan dataset kami, mampu menghasilkan cover piano yang masuk akal.
Model ini disumbangkan oleh Susnato Dhar. Kode aslinya dapat ditemukan di sini.
Tips penggunaan
- Untuk menggunakan Pop2Piano, Anda perlu menginstal pustaka 🤗 Transformers, serta modul pihak ketiga berikut:
pip install pretty-midi==0.2.9 essentia==2.1b6.dev1034 librosa scipy
Perhatikan bahwa Anda mungkin perlu memulai ulang runtime Anda setelah instalasi.
- Pop2Piano adalah model berbasis Encoder-Decoder seperti T5.
- Pop2Piano dapat digunakan untuk menghasilkan file midi-audio untuk urutan audio tertentu.
- Memilih komposer yang berbeda di
Pop2PianoForConditionalGeneration.generate()dapat menghasilkan variasi hasil yang berbeda. - Menetapkan laju sampling ke 44,1 kHz saat memuat file audio dapat memberikan kinerja yang baik.
- Meskipun Pop2Piano terutama dilatih pada musik Pop Korea, model ini juga cukup baik dalam menangani lagu-lagu Pop Barat atau Hip Hop lainnya.
Contoh
- Contoh menggunakan Dataset 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")- Contoh menggunakan file audio Anda sendiri:
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")- Contoh pemrosesan beberapa file audio dalam batch:
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")- Contoh pemrosesan beberapa file audio dalam batch (menggunakan
Pop2PianoFeatureExtractordanPop2PianoTokenizer):
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
kelas 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 )
Parameter
- is_encoder_decoder (
bool, opsional, defaultnyaTrue) — Apakah model digunakan sebagai encoder/decoder atau tidak. - vocab_size (
int, opsional, default2400) — Ukuran kosakata model. Menentukan jumlah token berbeda yang dapat direpresentasikan olehinput_ids. - composer_vocab_size (
int, opsional, default 21) — Menunjukkan jumlah komposer. - d_model (
int, opsional, default512) — Ukuran lapisan encoder dan lapisan pooler. - d_kv (
int, opsional, default64) — Ukuran proyeksi key, query, dan value per kepala perhatian.inner_dimdari lapisan proyeksi akan didefinisikan sebagainum_heads * d_kv. - d_ff (
int, opsional, default2048) — Dimensi representasi MLP. - num_layers (
int, opsional, default6) — Jumlah lapisan tersembunyi dalam decoder Transformer. - num_decoder_layers (
int, opsional) — Jumlah lapisan tersembunyi dalam decoder Transformer. Akan menggunakan nilai yang sama dengannum_layersjika tidak diatur. - num_heads (
int, opsional, default8) — Jumlah kepala perhatian untuk setiap lapisan perhatian dalam decoder Transformer. - relative_attention_num_buckets (
int, opsional, defaultnya 32) — Jumlah bucket yang digunakan untuk setiap lapisan perhatian. - relative_attention_max_distance (
int, opsional, default 128) — Jarak maksimum dari urutan yang lebih panjang untuk pemisahan bucket. - dropout_rate (
Union[float, int], opsional, defaultnya0.1) — Rasio untuk semua lapisan dropout. - layer_norm_epsilon (
float, opsional, defaultnya1e-06) — Epsilon yang digunakan oleh lapisan normalisasi lapisan. - initializer_factor (
float, opsional, default1.0) — Faktor untuk menginisialisasi semua matriks bobot (sebaiknya dipertahankan pada 1, digunakan secara internal untuk pengujian inisialisasi). - feed_forward_proj (
string, opsional, default"gated-gelu") — Jenis lapisan feed forward yang akan digunakan. Harus salah satu dari"relu"atau"gated-gelu". - use_cache (
bool, opsional, defaultnyaTrue) — Apakah model harus mengembalikan perhatian kunci/nilai terakhir (tidak digunakan oleh semua model). Hanya relevan jikaconfig.is_decoder=Trueatau ketika model adalah model generatif yang hanya decoder. - pad_token_id (
int, opsional, default0) — ID token yang digunakan untuk padding dalam kosakata. - eos_token_id (
Union[int, list[int]], opsional, default1) — ID token yang digunakan untuk end-of-stream dalam kosakata. - dense_act_fn (
string, opsional, defaultnya"relu") — Jenis Activation Function yang akan digunakan diPop2PianoDenseActDensedan diPop2PianoDenseGatedActDense. - is_decoder (
bool, opsional, defaultFalse) — Apakah model digunakan sebagai decoder atau tidak. JikaFalse, model digunakan sebagai encoder. - tie_word_embeddings (
bool, opsional, defaultTrue) — Apakah akan mengikat bobot embedding sesuai dengan pemetaantied_weights_keysmodel.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari Pop2PianoModel. Kelas ini digunakan untuk membuat instans model Pop2Piano sesuai dengan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari sweetcocoa/pop2piano
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
Pop2PianoFeatureExtractor
kelas 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 )
Parameter
- sampling_rate (
int, opsional, default 22050) — Laju sampling target dari sinyal audio. Ini adalah laju sampling yang diteruskan ke model. - padding_value (
int, opsional, default 0) — Nilai padding yang digunakan untuk mengisi audio. Seharusnya sesuai dengan bagian hening. - window_size (
int, opsional, default 4096) — Panjang jendela dalam sampel yang menjadi objek transformasi Fourier. - hop_length (
int, opsional, default 1024) — Ukuran langkah antara setiap jendela waveform, dalam sampel. - min_frequency (
float, opsional, default 10.0) — Frekuensi terendah yang akan digunakan dalam spektrogram log-mel. - feature_size (
int, opsional, default 512) — Dimensi fitur dari fitur yang diekstrak. - num_bars (
int, opsional, default 2) — Menentukan interval antara setiap urutan.
Membangun ekstraktor fitur Pop2Piano.
Feature extractor ini mewarisi dari SequenceFeatureExtractor yang berisi sebagian besar metode utama. Pengguna harus merujuk ke superclass ini untuk informasi lebih lanjut mengenai metode-metode tersebut.
Kelas ini mengekstrak ritme dan memproses praproses audio sebelum diteruskan ke model. Pertama, audio diteruskan ke algoritma RhythmExtractor2013 yang mengekstrak beat_times, posisi beat, serta memperkirakan tingkat kepercayaan dan tempo dalam bpm. Kemudian, beat_times diinterpolasi untuk mendapatkan beatsteps. Selanjutnya, kita menghitung extrapolated_beatsteps darinya untuk digunakan dalam tokenizer. Di sisi lain, audio diresample ke self.sampling_rate dan diproses praproses, kemudian log mel spectogram dihitung dari hasilnya untuk digunakan dalam model transformer kita.
__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 )
Parameter
- audio (
np.ndarray,List) — Audio atau batch audio yang akan diproses. Setiap audio dapat berupa array numpy, daftar nilai float, daftar array numpy, atau daftar dari daftar nilai float. - sampling_rate (
int) — Laju sampling di mana inputaudiodisampelkan. Sangat disarankan untuk meneruskansampling_ratepada panggilan forward untuk mencegah kesalahan yang tidak terdeteksi. - steps_per_beat (
int, opsional, defaultnya 2) — Ini digunakan dalam interpolasibeat_times. - resample (
bool, opsional, defaultTrue) — Menentukan apakah audio akan diresample kesampling_rateatau tidak sebelum diproses. Harus True selama inferensi. - return_attention_mask (
boolopsional, defaultnyaFalse) — Menunjukkan apakah attention_mask untuk input_features, beatsteps, dan extrapolated_beatstep akan diberikan sebagai output atau tidak. Secara otomatis diatur ke True untuk input yang di-batch. - return_tensors (
stratau TensorType, opsional) — Jika diset, akan mengembalikan tensor alih-alih daftar integer Python. Nilai yang dapat diterima adalah:'pt': Mengembalikan objek PyTorchtorch.Tensor.'np': Mengembalikan objek Numpynp.ndarray. Jika tidak ada yang ditentukan, akan mengembalikan daftar arraynp.ndarray.
Metode utama untuk melakukan featurisasi dan persiapan untuk model.
Pop2PianoForConditionalGeneration
kelas transformers.Pop2PianoForConditionalGeneration
< source >( config: Pop2PianoConfig )
Parameter
- config (Pop2PianoConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Model Pop2Piano dengan kepala language modeling di atasnya.
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
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)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length)) — Indeks token dari urutan input dalam kosakata. Pop2Piano adalah model dengan posisi relatif sehingga Anda seharusnya dapat mengisi (padding) input di sisi kanan dan kiri. Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detail. Apa itu input ID? Untuk mengetahui lebih lanjut tentang cara menyiapkaninput_idsuntuk pra-pelatihan, lihat Pop2Piano Training. - attention_mask (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker,
- 0 untuk token yang dimasker.
- decoder_input_ids (
torch.LongTensordengan bentuk(batch_size, target_sequence_length), opsional) — Indeks token dari urutan input decoder dalam kosakata. Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya. Apa itu decoder input IDs? Pop2Piano menggunakanpad_token_idsebagai token awal untuk generasidecoder_input_ids. Jikapast_key_valuesdigunakan, secara opsional hanyadecoder_input_idsterakhir yang perlu diinput (lihatpast_key_values). Untuk mengetahui lebih lanjut tentang cara menyiapkan - decoder_attention_mask (
torch.BoolTensordengan bentuk(batch_size, target_sequence_length), opsional) — Perilaku default: menghasilkan tensor yang mengabaikan token pad didecoder_input_ids. Mask kausal juga akan digunakan secara default. - encoder_outputs (
tuple[tuple[torch.Tensor]], opsional) — Tuple terdiri dari (last_hidden_state, opsional:hidden_states, opsional:attentions)last_hidden_statedengan bentuk(batch_size, sequence_length, hidden_size), opsional) adalah rangkaian hidden-states pada keluaran lapisan terakhir encoder. Digunakan dalam cross-attention decoder. - past_key_values (
~cache_utils.Cache, opsional) — Hidden-states yang sudah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan untuk mempercepat decoding berurutan. Ini biasanya terdiri daripast_key_valuesyang dikembalikan oleh model pada tahap decoding sebelumnya, ketikause_cache=Trueatauconfig.use_cache=True.Hanya instance Cache yang diizinkan sebagai input, lihat panduan kv cache kami. Jika tidak ada
past_key_valuesyang diteruskan, DynamicCache akan diinisialisasi secara default.Model akan menghasilkan format cache yang sama dengan yang diberikan sebagai input.
Jika
past_key_valuesdigunakan, pengguna diharapkan hanya memasukkaninput_idsyang belum diproses (yang tidak memiliki state past key value yang diberikan ke model ini) dengan bentuk(batch_size, unprocessed_length)alih-alih semuainput_idsdengan bentuk(batch_size, sequence_length). - inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskaninput_ids, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Hal ini berguna jika Anda ingin memiliki kendali lebih atas cara mengonversi indeksinput_idsmenjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - input_features (
torch.Tensordengan bentuk(batch_size, sequence_length, feature_dim), opsional) — Tensor yang sesuai dengan fitur audio input. Fitur audio dapat diperoleh menggunakan Pop2PianoFeatureExtractor. Lihat Pop2PianoFeatureExtractor.call() untuk detailnya (Pop2PianoProcessor menggunakan Pop2PianoFeatureExtractor untuk memproses audio). - decoder_inputs_embeds (
torch.Tensordengan bentuk(batch_size, target_sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskandecoder_input_idsAnda dapat memilih untuk langsung meneruskan representasi tertanam. Jikapast_key_valuesdigunakan, secara opsional hanyadecoder_inputs_embedsyang perlu dimasukkan (lihatpast_key_values). Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversidecoder_input_idsindeks menjadi vektor terkait daripada matriks pencarian embedding internal model.Jika
decoder_input_idsdandecoder_inputs_embedskeduanya tidak disetel,decoder_inputs_embedsmengambil nilai dariinputs_embeds. - labels (
torch.LongTensordengan bentuk(batch_size,), opsional) — Label untuk menghitung loss klasifikasi/regresi sekuens. Indeks harus berada dalam[-100, 0, ..., config.vocab_size - 1]. Semua label yang disetel ke-100akan diabaikan (diberi mask), loss hanya dihitung untuk label dalam[0, ..., config.vocab_size] - use_cache (
bool, opsional) — Jika diset keTrue, state kunci-nilaipast_key_valuesakan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihatpast_key_values).
Mengembalikan
Seq2SeqLMOutput atau tuple(torch.Tensor)
A Seq2SeqLMOutput atau tuple dari
torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (Pop2PianoConfig) dan input.
Metode forward dari Pop2PianoForConditionalGeneration menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
loss (
torch.Tensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Loss pemodelan bahasa.logits (
torch.Tensordengan bentuk(batch_size, sequence_length, config.vocab_size)) — Skor prediksi dari kepala pemodelan bahasa (skor untuk setiap token kosakata sebelum SoftMax).past_key_values (
EncoderDecoderCache, opsional, dikembalikan ketikause_cache=Truediteruskan atau ketikaconfig.use_cache=True) — Ini adalah instance EncoderDecoderCache. Untuk detail lebih lanjut, lihat panduan kv cache kami.Mengandung hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan (lihat input
past_key_values) untuk mempercepat decoding berurutan.decoder_hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states dari decoder pada output setiap layer ditambah output embedding awal.
decoder_attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap lapisan) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian dari decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
cross_attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian dari lapisan cross-attention decoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala cross-attention.
encoder_last_hidden_state (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), opsional) — Urutan hidden-states pada keluaran lapisan terakhir dari encoder model.encoder_hidden_states (
tuple(torch.Tensor), opsional, dikembalikan ketikaoutput_hidden_states=Truedilewatkan atau ketikaconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states dari encoder pada output setiap layer ditambah output embedding awal.
encoder_attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap lapisan) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian dari encoder, setelah softmax perhatian, yang digunakan untuk menghitung rata-rata berbobot di kepala self-attention.
Contoh:
>>> 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
Parameter
- input_features (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), opsional) — Ini adalah versi audio yang difeaturisasi yang dihasilkan olehPop2PianoFeatureExtractor. - attention_mask —
Untuk generasi batched
input_featuresdi-pad agar memiliki bentuk yang sama di semua contoh.attention_maskmembantu menentukan area mana yang di-pad dan mana yang tidak.- 1 untuk token yang tidak di-padded,
- 0 untuk token yang diisi.
- composer (
str, opsional, default"composer1") — Nilai ini diteruskan kePop2PianoConcatEmbeddingToMeluntuk menghasilkan embedding yang berbeda untuk setiap"composer". Pastikan nilai composer tersebut ada dicomposer_to_feature_tokenpadageneration_config. Untuk contoh, silakan lihat https://huggingface.co/sweetcocoa/pop2piano/blob/main/generation_config.json . - generation_config (
~generation.GenerationConfig, opsional) — Konfigurasi generasi yang akan digunakan sebagai parametrisasi dasar untuk panggilan generasi.**kwargsyang diteruskan ke generate dan cocok dengan atribut darigeneration_configakan menimpanya. Jikageneration_configtidak disediakan, nilai default akan digunakan, yang memiliki prioritas pemuatan sebagai berikut: 1) dari file modelgeneration_config.json, jika ada; 2) dari konfigurasi model. Perhatikan bahwa parameter yang tidak ditentukan akan mewarisi nilai default dari GenerationConfig, yang dokumentasinya harus diperiksa untuk memparametrisasi generasi. - kwargs —
Parametrisasi ad hoc untuk
generate_configdan/atau kwargs spesifik model tambahan yang akan diteruskan ke fungsiforwarddari model. Jika model adalah model encoder-decoder, kwargs spesifik encoder tidak boleh diberi awalan dan kwargs spesifik decoder harus diberi awalan decoder_.
Mengembalikan
ModelOutput atau torch.LongTensor
ModelOutput (jika return_dict_in_generate=True
atau ketika config.return_dict_in_generate=True) atau torch.Tensor.
Karena Pop2Piano adalah model encoder-decoder (model.config.is_encoder_decoder=True), tipe
ModelOutput yang mungkin adalah:
Membuat token id untuk output midi.
Sebagian besar parameter pengendali generasi diatur dalam
generation_configyang, jika tidak diberikan, akan disetel ke konfigurasi generasi default model. Anda dapat menimpageneration_configmana pun dengan meneruskan parameter yang sesuai ke generate(), misalnya.generate(inputs, num_beams=4, do_sample=True). Untuk ringkasan strategi generasi dan contoh kode, lihat panduan berikut.
Pop2PianoTokenizer
kelas transformers.Pop2PianoTokenizer
< source >( vocabdefault_velocity = 77num_bars = 2unk_token = '-1'eos_token = '1'pad_token = '0'bos_token = '2'**kwargs )
Parameter
- vocab (
str) — Path ke file vocab yang berisi kosa kata. - default_velocity (
int, opsional, defaultnya 77) — Menentukan kecepatan default yang akan digunakan saat membuat Note midi. - num_bars (
int, opsional, default 2) — Menentukan cutoff_time_idx untuk setiap token. - unk_token (
stratautokenizers.AddedToken, opsional, default"-1") — Token yang tidak diketahui. Token yang tidak ada dalam kosakata tidak dapat dikonversi menjadi ID dan akan diset sebagai token ini. - eos_token (
stratautokenizers.AddedToken, opsional, default 1) — Token akhir dari urutan. - pad_token (
stratautokenizers.AddedToken, opsional, default 0) — Token khusus yang digunakan untuk membuat array token berukuran sama untuk keperluan batching. Token ini kemudian akan diabaikan oleh mekanisme attention atau perhitungan loss. - bos_token (
stratautokenizers.AddedToken, opsional, default 2) — Token awal urutan yang digunakan selama pra-pelatihan. Dapat digunakan sebagai token klasifikator urutan.
Membangun tokenizer Pop2Piano. Tokenizer ini tidak memerlukan pelatihan.
Tokenizer ini mewarisi dari PreTrainedTokenizer yang berisi sebagian besar metode utama. Pengguna harus merujuk ke superclass ini untuk informasi lebih lanjut mengenai metode-metode tersebut.
__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 )
Parameter
- notes (
numpy.ndarraydengan bentuk[batch_size, max_sequence_length, 4]ataulistdaftarpretty_midi.Noteobjek) — Ini mewakili nada midi.Jika
notesadalahnumpy.ndarray:- Setiap urutan harus memiliki 4 nilai, yaitu
onset idx,offset idx,pitchdanvelocity. Jikanotesadalahlistyang berisi objekpretty_midi.Note: - Setiap urutan harus memiliki 4 atribut, yaitu
start,end,pitchdanvelocity.
- Setiap urutan harus memiliki 4 nilai, yaitu
- padding (
bool,stratau PaddingStrategy, opsional, defaultnyaFalse) — Mengaktifkan dan mengontrol padding. Menerima nilai-nilai berikut:Trueatau'longest': Pad hingga urutan terpanjang dalam batch (atau tanpa padding jika hanya satu urutan yang diberikan).'max_length': Pad hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan.Falseatau'do_not_pad'(default): Tidak ada padding (yaitu, dapat menghasilkan batch dengan urutan yang panjangnya berbeda).
- truncation (
bool,stratau TruncationStrategy, opsional, defaultnyaFalse) — Mengaktifkan dan mengontrol pemotongan. Menerima nilai-nilai berikut:Trueatau'longest_first': Memotong hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan. Ini akan memotong per token, dengan menghapus satu token dari urutan terpanjang dalam pasangan jika sepasang urutan (atau batch pasangan) diberikan.'only_first': Potong hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan. Ini hanya akan memotong urutan pertama dari sebuah pasangan jika sepasang urutan (atau batch dari pasangan) diberikan.'only_second': Potong hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan. Ini hanya akan memotong urutan kedua dari sebuah pasangan jika sepasang urutan (atau batch dari pasangan) diberikan.Falseatau'do_not_truncate'(default): Tidak ada pemotongan (yaitu, dapat menghasilkan batch dengan panjang sekuens yang lebih besar dari ukuran input maksimum yang diizinkan model).
- max_length (
int, opsional) — Mengontrol panjang maksimum yang digunakan oleh salah satu parameter truncation/padding. Jika tidak disetel atau disetel keNone, ini akan menggunakan panjang maksimum model yang telah ditentukan sebelumnya jika panjang maksimum diperlukan oleh salah satu parameter truncation/padding. Jika model tidak memiliki panjang input maksimum spesifik (seperti XLNet) truncation/padding ke panjang maksimum akan dinonaktifkan. - pad_to_multiple_of (
int, opsional) — Jika diset, akan melakukan padding pada urutan hingga menjadi kelipatan dari nilai yang diberikan. Ini sangat berguna untuk memungkinkan penggunaan Tensor Cores pada perangkat keras NVIDIA dengan kemampuan komputasi>= 7.5(Volta). - return_attention_mask (
bool, opsional) — Apakah akan mengembalikan attention mask. Jika dibiarkan pada nilai default, akan mengembalikan attention mask sesuai dengan default tokenizer tertentu, yang didefinisikan olehreturn_outputsatribut. - return_tensors (
stratau TensorType, opsional) — Jika diset, akan mengembalikan tensor alih-alih daftar integer Python. Nilai yang dapat diterima adalah:'pt': Mengembalikan objek PyTorchtorch.Tensor.'np': Mengembalikan objek Numpynp.ndarray.
- verbose (
bool, opsional, defaultnyaTrue) — Apakah akan mencetak lebih banyak informasi dan peringatan.
Ini adalah metode __call__ untuk Pop2PianoTokenizer. Metode ini mengkonversi nada midi menjadi id token yang dihasilkan transformer.
Pop2PianoProcessor
kelas transformers.Pop2PianoProcessor
< source >( feature_extractortokenizer )
Membangun Pop2PianoProcessor yang membungkus feature extractor dan tokenizer menjadi satu processor.
Pop2PianoProcessor menyediakan semua fungsionalitas dari Pop2PianoFeatureExtractor dan tokenizer_class. Lihat ~Pop2PianoFeatureExtractor dan ~tokenizer_class untuk informasi lebih lanjut.
__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 )
Parameter
- audio (
Union[numpy.ndarray, list[float], list[numpy.ndarray]], opsional) — Audio atau batch audio yang akan disiapkan. Setiap audio dapat berupa array NumPy atau tensor PyTorch. Jika berupa array NumPy/tensor PyTorch, setiap audio harus memiliki bentuk (C, T), di mana C adalah jumlah channel, dan T adalah panjang sampel dari audio tersebut. - sampling_rate (
intataulist[int], opsional) — Laju sampling audio input dalam Hz. Nilai ini harus sesuai dengan laju sampling yang digunakan oleh ekstraktor fitur. Jika tidak diberikan, laju sampling default dari konfigurasi prosesor akan digunakan. - steps_per_beat (
int, opsional, default2) — Jumlah langkah waktu per ketukan musik. Parameter ini mengontrol resolusi temporal dari representasi musik. Nilai yang lebih tinggi memberikan granularitas temporal yang lebih halus tetapi meningkatkan panjang urutan. Digunakan saat memproses audio untuk mengekstrak fitur musik. - resample (
bool, opsional, defaultTrue) — Filter resampling yang digunakan jika mengubah ukuran gambar. Nilai ini dapat berupa salah satu enumPILImageResampling. Hanya berpengaruh jikado_resizediatur keTrue. - notes (
listatauTensorType, opsional) — Catatan musik yang sudah diekstrak sebelumnya dalam format MIDI. Jika disediakan, prosesor akan melewati ekstraksi fitur audio dan langsung memproses catatan melalui tokenizer. Setiap catatan harus direpresentasikan sebagai list atau tensor yang berisi informasi pitch, velocity, dan timing. - padding (bool, str atau PaddingStrategy, opsional, defaultnya
False) — Mengaktifkan dan mengontrol padding. Menerima nilai-nilai berikut:Trueatau'longest': Pad hingga urutan terpanjang dalam batch (atau tanpa padding jika hanya satu urutan yang diberikan).'max_length': Pad hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan.Falseatau'do_not_pad'(default): Tidak ada padding (yaitu, dapat menghasilkan batch dengan urutan yang panjangnya berbeda).
- truncation (bool, str atau TruncationStrategy, opsional) —
Mengaktifkan dan mengontrol pemotongan. Menerima nilai-nilai berikut:
Trueatau'longest_first': Memotong hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan. Ini akan memotong per token, dengan menghapus satu token dari urutan terpanjang dalam pasangan jika sepasang urutan (atau batch pasangan) diberikan.'only_first': Potong hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan. Ini hanya akan memotong urutan pertama dari sebuah pasangan jika sepasang urutan (atau batch dari pasangan) diberikan.'only_second': Potong hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan. Ini hanya akan memotong urutan kedua dari sebuah pasangan jika sepasang urutan (atau batch dari pasangan) diberikan.Falseatau'do_not_truncate'(default): Tidak ada pemotongan (yaitu, dapat menghasilkan batch dengan panjang sekuens yang lebih besar dari ukuran input maksimum yang diizinkan model).
- max_length (
int, opsional) — Mengontrol panjang maksimum yang digunakan oleh salah satu parameter truncation/padding.Jika tidak disetel atau disetel ke
None, ini akan menggunakan panjang maksimum model yang telah didefinisikan sebelumnya jika panjang maksimum diperlukan oleh salah satu parameter truncation/padding. Jika model tidak memiliki panjang input maksimum yang spesifik (seperti XLNet), truncation/padding ke panjang maksimum akan dinonaktifkan. - pad_to_multiple_of (
int, optional) — If set will pad the sequence to a multiple of the provided value. Requirespaddingto be activated. This is especially useful to enable using Tensor Cores on NVIDIA hardware with compute capability>= 7.5(Volta). - verbose (
bool, opsional, defaultnyaTrue) — Apakah akan mencetak lebih banyak informasi dan peringatan. - return_tensors (
stratau TensorType, opsional) — Jika diset, akan mengembalikan tensor dari framework tertentu. Nilai yang dapat diterima adalah:'pt': Mengembalikan objek PyTorchtorch.Tensor.'np': Mengembalikan objek NumPynp.ndarray.