Transformers documentation

Pop2Piano

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

and get access to the augmented documentation experience

to get started

このモデルは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

< >

( 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

< >

( 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__

< >

( 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

< >

( config: Pop2PianoConfig )

パラメータ

  • config (Pop2PianoConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

language modelingヘッドを上部に備えたPop2Pianoモデル。

このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

forward

< >

( 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

< >

( 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

< >

( 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__

< >

( 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です。
  • 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

< >

( feature_extractortokenizer )

パラメータ

  • feature_extractor (Pop2PianoFeatureExtractor) — フィーチャーエクストラクターは必須の入力です。
  • tokenizer (tokenizer_class) — トークナイザーは必須の入力です。

Pop2PianoProcessor を構築します。これは、フィーチャーエクストラクターとトークナイザーを単一のプロセッサーにラップします。

Pop2PianoProcessor は、Pop2PianoFeatureExtractor と tokenizer_class のすべての機能を提供します。詳細については、~Pop2PianoFeatureExtractor および ~tokenizer_class を参照してください。

__call__

< >

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

パラメータ

  • audio (Union[numpy.ndarray, list[float], list[numpy.ndarray]], 任意) — 準備対象のオーディオまたはオーディオのバッチです。各オーディオは NumPy 配列または PyTorch テンソルであることができます。 NumPy 配列/PyTorch テンソルの場合、各オーディオの形状は (C, T) である必要があります。ここで C はチャネル数、T はオーディオのサンプル長を表します。
  • sampling_rate (int または list[int]、任意) — 入力オーディオのサンプリングレート (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オブジェクトを返します。
Update on GitHub