Transformers documentation
Pop2Piano
このモデルは2022年11月2日にHF papersで公開され、2023年8月21日にHugging Face Transformersに貢献されました。
Pop2Piano
概要
Pop2Pianoモデルは、Jongho Choi氏とKyogu Lee氏によるPop2Piano : Pop Audio-based Piano Cover Generationで提案されました。
ポップミュージックのピアノカヴァーは広く楽しまれていますが、音楽からそれらを生成することは容易ではありません。ピアノ演奏に関する高度な専門知識と、楽曲のさまざまな特徴やメロディの理解が求められます。Pop2Pianoを使用すると、楽曲のオーディオ波形から直接カヴァーを生成できます。メロディやコードの抽出モジュールを介さずに、ポップミュージックのオーディオから直接ピアノカヴァーを生成する初のモデルです。
Pop2Piano は T5 に基づくエンコーダー・デコーダー型 Transformer モデルです。入力オーディオは波形に変換され、エンコーダーに渡されます。エンコーダーはこれを潜在表現に変換します。デコーダーはこれらの潜在表現を用いて、自己回帰的にトークン ID を生成します。各トークン ID は、time、velocity、note、および ‘special’ の 4 つの異なるトークン型のいずれかに対応します。その後、トークン ID は対応する MIDI ファイルにデコードされます。
論文の抄録は以下の通りです。
ポップミュージックのピアノカヴァーは多くの人々に楽しまれています。しかし、ポップミュージックのピアノカヴァーを自動生成するタスクについては、まだ十分に研究が進んでいません。これは部分的に、同期された {Pop, Piano Cover} データペアの不足が原因であり、データ集約型の最新の深層学習ベースの手法を適用することが困難でした。データ駆動型アプローチの力を活用するために、自動パイプラインを使用して、大量のペアリングされ同期された {Pop, Piano Cover} データを作成しました。本論文では、ポップミュージックの波形からピアノカヴァーを生成する Transformer ネットワークである Pop2Piano を提案します。私たちの知る限り、これはメロディやコードの抽出モジュールを使用せずに、ポップオーディオから直接ピアノカヴァーを生成する最初のモデルです。私たちのデータセットで訓練された Pop2Piano が、妥当なピアノカヴァーを生成できることを示します。
このモデルはSusnato Dhar氏によって提供されました。 元のコードはこちらで確認できます。
使用のコツ
- Pop2Pianoを使用するには、🤗 Transformersライブラリと、以下のサードパーティ製モジュールをインストールする必要があります。
pip install pretty-midi==0.2.9 essentia==2.1b6.dev1034 librosa scipy
インストール後、ランタイムの再起動が必要な場合があります。
- Pop2Pianoは、T5と同様にEncoder-Decoderベースのモデルです。
- Pop2Pianoは、与えられたオーディオシーケンスに対してmidiオーディオファイルを生成するために使用できます。
Pop2PianoForConditionalGeneration.generate()で異なる作曲家を選択すると、多様な結果が得られます。- オーディオファイルを読み込む際にサンプリングレートを44.1 kHzに設定すると、良好なパフォーマンスが得られます。
- Pop2Pianoは主に韓国ポップミュージックで訓練されましたが、他の西洋ポップやヒップホップの曲でもかなり良いパフォーマンスを発揮します。
例
- HuggingFace Dataset を使用した例:
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) — 語彙内でパディングに使用されるトークン ID。 - eos_token_id (
Union[int, list[int]]、任意、デフォルトは1) — 語彙内でストリーム終了に使用されるトークン ID。 - 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
class 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)— log-mel スペクトラムで使用する最低周波数。 - feature_size (
int、任意、デフォルトは 512) — 抽出された特徴量の次元数です。 - num_bars (
int, 省略可、デフォルトは 2) — 各シーケンス間の間隔を決定します。
Pop2Pianoのフィーチャーエクストラクターを構築します。
このフィーチャーエクストラクターは、主要なメソッドの大部分を含む SequenceFeatureExtractor を継承しています。これらのメソッドに関する詳細については、このスーパークラスを参照してください。
このクラスはリズムを抽出し、モデルに渡す前にオーディオを前処理します。まずオーディオがRhythmExtractor2013アルゴリズムに渡され、beat_times、ビート位置、それらの信頼度、およびbpm単位のテンポが推定されます。次にbeat_timesが補間されてbeatstepsが得られます。その後、tokenizerで使用するためにextrapolated_beatstepsが計算されます。一方、オーディオはself.sampling_rateにリサンプリングされ、前処理が行われた後、transformerモデルで使用するためにlog mel spectrogramが計算されます。
__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 配列、浮動小数点数のリスト、numpy 配列のリスト、または浮動小数点数のリストのリストであることができます。 - sampling_rate (
int) —audio入力がサンプリングされた際のサンプリングレートです。サイレントエラーを防ぐため、forward 呼び出し時にsampling_rateを渡すことを強く推奨します。 - steps_per_beat (
int、任意、デフォルトは 2) —beat_timesの補間処理で使用されます。 - resample (
bool、任意、デフォルトはTrue) — 処理前にオーディオをsampling_rateにリサンプリングするかどうかを決定します。推論時には True にする必要があります。 - return_attention_mask (
bool省略可能、デフォルトはFalse) — 入力である input_features、beatsteps、extrapolated_beatstep に対する attention_mask を出力として返すかどうかを示します。バッチ入力の場合は自動的に True に設定されます。 - return_tensors (
strまたは TensorType, 省略可) — 設定した場合、Python の整数のリストではなくテンソルを返します。指定可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': Numpy のnp.ndarrayオブジェクトを返します。 何も指定しない場合、np.ndarray配列のリストを返します。
モデル用に特徴量を作成し、準備するための主要なメソッド。
Pop2PianoForConditionalGeneration
class transformers.Pop2PianoForConditionalGeneration
< source >( config: Pop2PianoConfig )
パラメータ
- config (Pop2PianoConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
language modelingヘッドを上部に備えたPop2Pianoモデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.FloatTensor] = 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.FloatTensor] = Noneinput_features: typing.Optional[torch.FloatTensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqLMOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensor、shape(batch_size, sequence_length)) — 語彙における入力シーケンスのトークンインデックスです。Pop2Piano は相対位置埋め込みを持つモデルであるため、入力の右側と左側の両方にパディングを適用できます。インデックスは AutoTokenizer を使用して取得できます。詳細については、PreTrainedTokenizer.encode() および PreTrainedTokenizer.call() を参照してください。 input ID とは何か? プリトレーニング用にinput_idsを準備する方法について詳しく知るには、Pop2Piano Training をご覧ください。 - attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- decoder_input_ids (
torch.LongTensor、形状(batch_size, target_sequence_length)、任意) — ボキャブラリにおけるデコーダー入力シーケンスのトークンインデックスです。インデックスは AutoTokenizer を使用して取得できます。詳細については、PreTrainedTokenizer.encode() および PreTrainedTokenizer.call() を参照してください。 デコーダー入力IDとは何ですか? Pop2Piano は、decoder_input_idsの生成の開始トークンとしてpad_token_idを使用します。past_key_valuesを使用する場合、任意で最後のdecoder_input_idsだけを入力すれば十分です(past_key_valuesを参照)。準備方法の詳細については - decoder_attention_mask (
torch.BoolTensor、shape(batch_size, target_sequence_length)、任意) — デフォルトの動作:decoder_input_ids内の pad トークンを無視するテンソルを生成します。デフォルトでは、causal mask も使用されます。 - 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 cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - input_features (
torch.FloatTensor、形状(batch_size, sequence_length, feature_dim)、任意) — 入力音声特徴に対応するテンソルです。音声特徴は Pop2PianoFeatureExtractor を使用して取得できます。詳細は Pop2PianoFeatureExtractor.call() を参照してください(Pop2PianoProcessor は音声の処理に Pop2PianoFeatureExtractor を使用します)。 - decoder_inputs_embeds (
torch.FloatTensorの形状(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、shape(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.FloatTensor)
torch.FloatTensor のタプル、または return_dict=False が渡された場合、または config.return_dict=False の場合は torch.FloatTensor のタプルとして、設定 (Pop2PianoConfig) および入力に応じてさまざまな要素を含む Seq2SeqLMOutput を返します。
Pop2PianoForConditionalGenerationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
loss (
torch.FloatTensor、shape(1,)、optional、labelsが指定された場合に返されます)— 言語モデリングの損失。logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。past_key_values (
EncoderDecoderCache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — EncoderDecoderCache のインスタンスです。詳細については、kv cache ガイドを参照してください。自己注意ブロックおよび相互注意ブロック内のキーとバリューの事前計算済み隠れ状態(hidden-states)を保持しており、シーケンシャルデコーディングを高速化するために使用できます(
past_key_values入力参照)。decoder_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力および初期埋め込み出力における、デコーダーの隠れ状態。
decoder_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。自己アテンションヘッドにおける加重平均を計算するために使用される、アテンションのsoftmax後のデコーダーのアテンション重み。
cross_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。クロスアテンション層のアテンション重みは、アテンションのsoftmax適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。
encoder_last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)、optional) — モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。encoder_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力および初期埋め込み出力におけるエンコーダーの隠れ状態。
encoder_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(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.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —Pop2PianoFeatureExtractorによって生成された、音声の特徴量化されたバージョンです。 - attention_mask —
バッチ生成では
input_featuresは、すべての例で同じ形状になるようにパディングされます。attention_maskは、どの部分がパディングで、どの部分がパディングでないかを判断するのに役立ちます。- パディングされていないトークンに対して1
- paddingされたトークンに対しては 0 です。
- composer (
str、任意、デフォルトは"composer1") — この値はPop2PianoConcatEmbeddingToMelに渡され、各"composer"に対して異なる埋め込みを生成するために使用されます。composer の値がgeneration_config内のcomposer_to_feature_tokenに存在することを確認してください。例については、https://huggingface.co/sweetcocoa/pop2piano/blob/main/generation_config.json を参照してください。 - generation_config (
~generation.GenerationConfig, 任意) — 生成呼び出しのベースパラメータ化として使用される生成設定です。**kwargsでgeneration_configの属性に一致するものが generate に渡された場合、それらは上書きされます。generation_configが指定されない場合、デフォルトが使用されます。その読み込み優先順位は以下の通りです: 1) 存在する場合、generation_config.jsonモデルファイルから; 2) モデル設定から。未指定のパラメータは GenerationConfig のデフォルト値を継承することに注意してください。生成をパラメータ化するには、そのドキュメントを確認する必要があります。 - kwargs —
generate_configのアドホックなパラメータ化、および/またはモデルのforward関数に転送される追加のモデル固有の kwargs です。モデルがエンコーダー・デコーダーモデルの場合、エンコーダー固有の kwargs にはプレフィックスを付与せず、デコーダー固有の kwargs には decoder_ をプレフィックスとして付与してください。
戻り値
ModelOutput または torch.LongTensor
return_dict_in_generate=True の場合、または config.return_dict_in_generate=True の場合は ModelOutput、それ以外は torch.FloatTensor です。
Pop2Piano はエンコーダー・デコーダーモデル (model.config.is_encoder_decoder=True) であるため、考えられる
ModelOutput の型は以下の通りです。
MIDI出力用のトークンIDを生成します。
生成を制御するほとんどのパラメータは
generation_configで設定されます。この引数が渡されない場合、モデルのデフォルトの生成設定が使用されます。generation_configの任意の設定は、generate()に該当するパラメータを渡すことで上書きできます。例えば、.generate(inputs, num_beams=4, do_sample=True)のように指定します。生成戦略の概要とコード例については、次のガイドを参照してください。
Pop2PianoTokenizer
class 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 Note を作成する際に使用されるデフォルトの velocity を決定します。 - 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がpretty_midi.Noteオブジェクトを含むlistの場合: - 各シーケンスには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で指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。この場合、トークン単位で切り詰めが行われ、ペアのシーケンス(またはペアのバッチ)が提供されている場合は、ペアの中で最も長いシーケンスから1トークンずつ削除します。'only_first': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが受け入れることのできる最大入力長まで切り詰めます。この設定では、ペアのシーケンス(またはペアのバッチ)が提供された場合のみ、ペアの最初のシーケンスだけが切り詰められます。'only_second': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが受け入れ可能な最大入力長まで切り詰めます。このモードでは、シーケンスのペア(またはペアのバッチ)が提供された場合のみ、ペアの2番目のシーケンスが切り詰められます。Falseまたは'do_not_truncate'(デフォルト): トランケーションを行いません(つまり、モデルが許容する最大入力サイズを超えるシーケンス長を持つバッチを出力する可能性があります)。
- max_length (
int, 任意) — truncation/padding パラメータのいずれかによって使用される最大長を制御します。未設定またはNoneに設定されている場合、truncation/padding パラメータのいずれかが最大長を必要とする場合、事前に定義されたモデルの最大長が使用されます。モデルに特定の最大入力長がない場合(XLNet など)、最大長への truncation/padding は無効になります。 - pad_to_multiple_of (
int, 省略可) — 設定すると、シーケンスを指定された値の倍数にパディングします。これは、計算能力が>= 7.5(Volta) の NVIDIA ハードウェアで Tensor Cores を使用できるようにするため、特に有用です。 - return_attention_mask (
bool, 省略可能) — attention mask を返すかどうか。デフォルトのままにすると、return_outputs属性によって定義される、特定の tokenizer のデフォルトに従って attention mask を返します。 - return_tensors (
strまたは TensorType, 省略可) — 設定すると、Python の整数のリストではなくテンソルを返します。指定可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': Numpy のnp.ndarrayオブジェクトを返します。
- verbose (
bool、任意、デフォルトはTrue) — より多くの情報や警告を表示するかどうかを指定します。
これはPop2PianoTokenizerの__call__メソッドです。MIDIノートを、transformersが生成するトークンIDに変換します。
Pop2PianoProcessor
class 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]、任意) — 入力オーディオのサンプリングレート (Hz) です。これは、フィーチャーエクストラクターで使用されるサンプリングレートと一致する必要があります。指定されない場合、プロセッサ設定のデフォルトのサンプリングレートが使用されます。 - steps_per_beat (
int、任意、デフォルトは2) — 1拍あたりのタイムステップ数です。このパラメータは、音楽表現の時間分解能を制御します。値を大きくすると時間的な粒度が細かくなりますが、シーケンス長が増加します。オーディオを処理して音楽的特徴を抽出する際に使用されます。 - 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で指定された最大長、またはその引数が指定されていない場合はモデルが許容する最大入力長まで切り詰めます。この場合、トークン単位で切り詰めが行われ、ペアのシーケンス(またはペアのバッチ)が提供されている場合は、ペアの中で最も長いシーケンスから1トークンずつ削除します。'only_first': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが受け入れることのできる最大入力長まで切り詰めます。この設定では、ペアのシーケンス(またはペアのバッチ)が提供された場合のみ、ペアの最初のシーケンスだけが切り詰められます。'only_second': 引数max_lengthで指定された最大長、またはその引数が指定されていない場合はモデルが受け入れ可能な最大入力長まで切り詰めます。このモードでは、シーケンスのペア(またはペアのバッチ)が提供された場合のみ、ペアの2番目のシーケンスが切り詰められます。Falseまたは'do_not_truncate'(デフォルト): トランケーションを行いません(つまり、モデルが許容する最大入力サイズを超えるシーケンス長を持つバッチを出力する可能性があります)。
- max_length (
int, 省略可能) — truncation/padding パラメータのいずれかによって使用される最大長を制御します。未設定のまま、または
Noneに設定されている場合、truncation/padding パラメータのいずれかが最大長を必要とする場合、事前に定義されたモデルの最大長が使用されます。モデルに特定の最大入力長がない場合(XLNet など)、最大長への truncation/padding は無効になります。 - pad_to_multiple_of (
int, 任意) — 設定すると、シーケンスを指定された値の倍数にパディングします。paddingが有効になっている必要があります。 これは、計算能力が>= 7.5(Volta) の NVIDIA ハードウェア上で Tensor Cores を使用できるようにするため、特に有用です。 - verbose (
bool、任意、デフォルトはTrue) — より多くの情報や警告を表示するかどうかを指定します。 - return_tensors (
strまたは TensorType, 省略可) — 設定すると、特定のフレームワークのテンソルを返します。使用可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': NumPyのnp.ndarrayオブジェクトを返します。