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.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

이 모델은 2022-11-02에 HF papers에 게시되었으며, 2023-08-21에 Hugging Face Transformers에 기여되었습니다.

Pop2Piano

개요

Pop2Piano 모델은 Jongho Choi와 Kyogu Lee가 Pop2Piano : Pop Audio-based Piano Cover Generation에서 제안했습니다.

Pop 음악의 피아노 커버는 널리 사랑받고 있지만, 음악에서 이를 생성하는 것은 쉽지 않은 작업입니다. 피아노 연주에 대한 높은 전문성뿐 아니라 곡의 다양한 특징과 멜로디에 대한 이해가 필요합니다. Pop2Piano를 사용하면 곡의 오디오 웨이브폼에서 직접 커버를 생성할 수 있습니다. 이는 멜로디 및 코드 추출 모듈 없이 팝 오디오에서 피아노 커버를 직접 생성하는 최초의 모델입니다.

Pop2Piano는 T5 기반의 인코더-디코더 Transformer 모델입니다. 입력 오디오는 웨이브폼으로 변환된 후 인코더에 전달되며, 인코더는 이를 잠재 표현(latent representation)으로 변환합니다. 디코더는 이러한 잠재 표현을 사용하여 오토레거시(autoregressive) 방식으로 토큰 ID를 생성합니다. 각 토큰 ID는 time, velocity, note, ‘special’의 네 가지 토큰 유형 중 하나에 해당합니다. 생성된 토큰 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-audio 파일을 생성하는 데 사용할 수 있습니다.
  • Pop2PianoForConditionalGeneration.generate()에서 다른 작곡가를 선택하면 다양한 결과가 나올 수 있습니다.
  • 오디오 파일을 로드할 때 샘플링률을 44.1 kHz로 설정하면 좋은 성능을 얻을 수 있습니다.
  • Pop2Piano는 주로 한국 Pop 음악으로 학습되었지만, 다른 Western Pop이나 Hip Hop 곡에서도 상당히 좋은 성능을 보입니다.

예시

  • 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")
  • 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")
  • 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) — 각 어텐션 헤드당 key, query, value 투영의 크기입니다. 투영 레이어의 inner_dim은 num_heads * d_kv로 정의됩니다.
  • d_ff (int, 선택 사항, 기본값 2048) — MLP 표현의 차원입니다.
  • num_layers (int, 선택 사항, 기본값 6) — Transformer decoder의 hidden layer 수입니다.
  • num_decoder_layers (int, 선택 사항) — Transformer decoder의 숨겨진 레이어 수입니다. 설정하지 않으면 num_layers와 동일한 값을 사용합니다.
  • num_heads (int, 선택 사항, 기본값 8) — Transformer decoder의 각 attention layer에 사용할 attention head의 수입니다.
  • relative_attention_num_buckets (int, 선택 사항, 기본값 32) — 각 attention layer에 사용할 버킷의 수입니다.
  • 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") — 사용할 feed forward layer의 유형입니다. "relu" 또는 "gated-gelu" 중 하나여야 합니다.
  • use_cache (bool, 선택 사항, 기본값 True) — 모델이 마지막 key/values attention을 반환할지 여부입니다(모든 모델에서 사용되지 않음). config.is_decoder=True인 경우 또는 모델이 decoder-only 생성 모델인 경우에만 관련이 있습니다.
  • pad_token_id (int, 선택 사항, 기본값 0) — 어휘에서 패딩에 사용되는 토큰 ID입니다.
  • eos_token_id (Union[int, list[int]], 선택 사항, 기본값 1) — 어휘에서 스트림 종료에 사용되는 토큰 id입니다.
  • dense_act_fn (string, 선택 사항, 기본값 "relu") — Pop2PianoDenseActDense 및 Pop2PianoDenseGatedActDense에서 사용할 활성화 함수(Activation Function)의 유형입니다.
  • is_decoder (bool, 선택 사항, 기본값 False) — 모델이 디코더로 사용되는지 여부입니다. False인 경우 모델은 인코더로 사용됩니다.
  • tie_word_embeddings (bool, 선택, 기본값 True) — 모델의 tied_weights_keys 매핑에 따라 가중치 임베딩을 묶을지 여부.

이것은 Pop2PianoModel의 구성을 저장하기 위한 구성 클래스입니다. 지정된 인자에 따라 Pop2Piano 모델을 인스턴스화하고 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 구성을 인스턴스화하면 sweetcocoa/pop2piano와 유사한 구성이 생성됩니다.

Configuration 객체는 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 spectrogram에 사용될 최소 주파수입니다.
  • feature_size (int, 선택 사항, 기본값 512) — 추출된 특징의 차원입니다.
  • num_bars (int, 선택 사항, 기본값 2) — 각 시퀀스 사이의 간격을 결정합니다.

Pop2Piano feature extractor를 생성합니다.

이 feature extractor는 SequenceFeatureExtractor를 상속하며, 이 클래스에는 대부분의 주요 메서드가 포함되어 있습니다. 해당 메서드에 대한 자세한 내용은 이 상위 클래스를 참고하세요.

이 클래스는 리듬을 추출하고 오디오를 전처리한 후 모델에 전달합니다. 먼저 오디오는 RhythmExtractor2013 알고리즘에 전달되어 beat_times, 비트 위치, 해당 신뢰도, 그리고 bpm 단위 템포를 추정합니다. 이후 beat_times를 보간하여 beatsteps를 얻습니다. 다음으로 토크나이저에서 사용될 extrapolated_beatsteps를 계산합니다. 한편 오디오는 self.sampling_rate로 리샘플링되고 전처리된 후, 트랜스포머 모델에서 사용될 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 배열, float 값의 리스트, numpy 배열의 리스트, 또는 float 값의 리스트의 리스트일 수 있습니다.
  • 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.Tensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Noneencoder_outputs: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneinput_features: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqLMOutput or tuple(torch.Tensor)

매개변수

  • input_ids (torch.LongTensor, shape (batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. Pop2Piano는 상대 위치 임베딩을 사용하는 모델이므로, 입력을 오른쪽과 왼쪽 모두에 패딩할 수 있습니다. 인덱스는 AutoTokenizer를 사용하여 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참고하세요. input ID란 무엇인가요? 사전 학습을 위해 input_ids를 준비하는 방법에 대해 자세히 알아보려면 Pop2Piano Training을 참고하세요.
  • attention_mask (torch.Tensor 형상이 (batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요? [0, 1]:
    • 마스크되지 않은 토큰에 대해 1
    • 마스크된 토큰에 대해 0

    어텐션 마스크란 무엇인가요?

  • decoder_input_ids (torch.LongTensor, shape (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)으로 구성된 Tuple입니다. last_hidden_state의 shape은 (batch_size, sequence_length, hidden_size), 선택 사항)이며, 인코더의 마지막 레이어 출력에서 생성된 hidden-states의 시퀀스입니다. 디코더의 cross-attention에 사용됩니다.
  • past_key_values (~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는 past_key_values 디코딩의 이전 단계에서 모델이 반환한 use_cache=True 또는 config.use_cache=True.

    입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요. past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.

    모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.

    past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은 input_ids만 입력해야 하며, 이때의 shape은 (batch_size, unprocessed_length)입니다. shape이 (batch_size, sequence_length)인 전체 input_ids를 입력하지 않습니다.

  • inputs_embeds (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택) — input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다 input_ids 인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다.
  • input_features (torch.Tensor, shape (batch_size, sequence_length, feature_dim), 선택 사항) — 입력 오디오 특징에 해당하는 텐서입니다. 오디오 특징은 Pop2PianoFeatureExtractor를 사용하여 얻을 수 있습니다. 자세한 내용은 Pop2PianoFeatureExtractor.call()를 참조하세요 (Pop2PianoProcessor는 오디오 처리에 Pop2PianoFeatureExtractor를 사용합니다).
  • decoder_inputs_embeds (torch.Tensor 형상 (batch_size, target_sequence_length, hidden_size), 선택 사항) — 선택적으로, decoder_input_ids 대신에 임베딩된 표현을 직접 전달할 수 있습니다. past_key_values 이 사용되면, 선택적으로 마지막 decoder_inputs_embeds 만 입력하면 됩니다(참고: past_key_values). 이는 decoder_input_ids 인덱스를 관련 벡터로 변환하는 방식을 모델의 내부 임베딩 조회 행렬보다 더 세밀하게 제어하려는 경우에 유용합니다.

    decoder_input_ids와 decoder_inputs_embeds가 모두 설정되지 않은 경우, decoder_inputs_embeds는 inputs_embeds의 값을 가져옵니다.

  • labels (torch.LongTensor, 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.Tensor)

torch.Tensor의 튜플 또는 Seq2SeqLMOutput입니다. return_dict=False가 전달되었거나 config.return_dict=False인 경우, 구성(Pop2PianoConfig)과 입력에 따라 다양한 요소를 포함합니다.

Pop2PianoForConditionalGeneration의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.

이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신 Module 인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.

  • loss (torch.Tensor, shape (1,), 선택 사항, labels이 제공될 때 반환됨) — 언어 모델링 손실.

  • logits (torch.Tensor, shape (batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드에서 생성된 예측 점수(SoftMax 적용 전 각 어휘 토큰에 대한 점수).

  • past_key_values (EncoderDecoderCache, 선택 사항, use_cache=True가 전달되었거나 config.use_cache=True인 경우 반환됨) — EncoderDecoderCache 인스턴스입니다. 자세한 내용은 kv 캐시 가이드를 참고하세요.

    순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록과 크로스 어텐션 블록의 key 및 value)를 포함합니다(입력 past_key_values 참조).

  • decoder_hidden_states (tuple(torch.Tensor), 선택 사항, output_hidden_states=True가 전달되거나 config.output_hidden_states=True인 경우 반환됨) — torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 디코더의 Hidden-states와 초기 임베딩 출력을 더한 값.

  • decoder_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    self-attention 헤드에서 가중 평균을 계산하는 데 사용되는, attention softmax 이후의 decoder의 attention 가중치입니다.

  • cross_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    decoder의 cross-attention 레이어에서 attention softmax를 적용한 후, cross-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention 가중치입니다.

  • encoder_last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — 모델 인코더의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.

  • encoder_hidden_states (tuple(torch.Tensor), 선택 사항, output_hidden_states=True가 전달되었거나 config.output_hidden_states=True인 경우 반환됨) — torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 인코더의 Hidden-states와 초기 임베딩 출력을 더한 값.

  • encoder_attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    self-attention 헤드에서 가중 평균을 계산하는 데 사용되는, attention softmax 이후의 인코더 attention 가중치입니다.

예:

>>> 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.Tensor, shape (batch_size, sequence_length, hidden_size), 선택 사항) — Pop2PianoFeatureExtractor로 생성된 오디오의 특징 추출 버전입니다.
  • attention_mask — 배치 생성 시 input_features 모든 예제에서 동일한 형태를 갖도록 패딩됩니다. attention_mask 어떤 영역이 패딩되었는지, 그렇지 않은지를 결정하는 데 도움을 줍니다.
    • 패딩되지 않은 토큰에 대해 1
    • 패딩된 토큰은 0입니다.
  • composer (str, 선택 사항, 기본값 "composer1") — 이 값은 Pop2PianoConcatEmbeddingToMel에 전달되어 각 "composer"에 대해 서로 다른 임베딩을 생성합니다. generation_config의 composer_to_feature_token에 해당 composer 값이 포함되어 있는지 확인하십시오. 예시는 https://huggingface.co/sweetcocoa/pop2piano/blob/main/generation_config.json을 참조하십시오.
  • generation_config (~generation.GenerationConfig, 선택) — 생성 호출의 기본 파라미터화로 사용할 생성 구성입니다. **kwargs로 전달된 값 중 generation_config의 속성과 일치하는 값은 해당 속성을 덮어씁니다. generation_config가 제공되지 않으면 기본값이 사용되며, 이 기본값은 다음 우선순위로 로드됩니다. 1) generation_config.json 모델 파일이 존재하는 경우 해당 파일에서; 2) 모델 구성에서. 명시되지 않은 파라미터는 GenerationConfig의 기본값을 상속받으므로, 생성을 파라미터화하려면 해당 문서에서 기본값을 확인하시기 바랍니다.
  • kwargs — generate_config의 즉석 파라미터화 및/또는 모델의 forward 함수로 전달되는 추가적인 모델 전용 kwargs입니다. 모델이 encoder-decoder 모델인 경우, encoder 전용 kwargs에는 접두사를 붙이지 않고 decoder 전용 kwargs에는 decoder_ 접두사를 붙여야 합니다.

반환값

ModelOutput 또는 torch.LongTensor

return_dict_in_generate=True인 경우 또는 config.return_dict_in_generate=True인 경우 ModelOutput 또는 torch.Tensor입니다. Pop2Piano는 인코더-디코더 모델(model.config.is_encoder_decoder=True)이므로, 가능한 ModelOutput 유형은 다음과 같습니다:

midi 출력을 위한 토큰 ID를 생성합니다.

대부분의 생성 제어 매개변수는 generation_config에 설정되며, 전달되지 않으면 모델의 기본 생성 구성으로 설정됩니다. generation_config의 항목은 generate()에 해당 매개변수를 전달하여 덮어쓸 수 있습니다. 예를 들어 .generate(inputs, num_beams=4, do_sample=True)와 같습니다. 생성 전략 개요와 코드 예제는 다음 가이드를 참고하세요.

Pop2PianoTokenizer

클래스 transformers.Pop2PianoTokenizer

< >

( vocabdefault_velocity = 77num_bars = 2unk_token = '-1'eos_token = '1'pad_token = '0'bos_token = '2'**kwargs )

매개변수

  • vocab (str) — 어휘를 포함하는 vocab 파일의 경로입니다.
  • 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) — 배치 처리를 위해 토큰 배열의 크기를 동일하게 만드는 데 사용되는 특수 토큰입니다. 이후 attention 메커니즘이나 손실 계산에서는 무시됩니다.
  • 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인 경우:

    • 각 시퀀스는 onset idx, offset idx, pitch, velocity의 4개 값을 가져야 합니다. notes가 pretty_midi.Note 객체를 포함하는 list인 경우:
    • 각 시퀀스는 start, end, pitch, velocity의 4개 속성을 가져야 합니다.
  • padding (bool, str 또는 PaddingStrategy, 선택 사항, 기본값은 False) — 패딩을 활성화하고 제어합니다. 다음 값을 받을 수 있습니다: True 또는 'longest': 배치 내 가장 긴 시퀀스 길이로 패딩합니다(단일 시퀀스만 제공된 경우 패딩하지 않음). 'max_length': max_length 인수로 지정된 최대 길이로 패딩하거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 패딩합니다. False 또는 'do_not_pad' (기본값): 패딩하지 않음(즉, 서로 다른 길이의 시퀀스로 구성된 배치 출력 가능).
    • True 또는 'longest': 배치 내 가장 긴 시퀀스 길이에 맞게 패딩을 수행합니다(단일 시퀀스만 제공된 경우 패딩을 하지 않음).
    • 'max_length': max_length 인수로 지정된 최대 길이로 패딩하거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 패딩합니다.
    • False 또는 'do_not_pad' (기본값): 패딩을 하지 않습니다(즉, 서로 다른 길이의 시퀀스로 구성된 배치로 출력할 수 있습니다).
  • truncation (bool, str 또는 TruncationStrategy, 선택 사항, 기본값은 False) — 잘림을 활성화하고 제어합니다. 다음 값을 허용합니다:
    • True 또는 'longest_first': max_length 인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 경우 토큰 단위로 잘라내며, 시퀀스 쌍(또는 쌍의 배치)이 제공되면 쌍 중 가장 긴 시퀀스에서 토큰을 하나씩 제거합니다.
    • 'only_first': max_length 인수로 지정된 최대 길이 또는 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘립니다. 이 옵션은 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우 쌍의 첫 번째 시퀀스만 잘립니다.
    • 'only_second': max_length 인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 옵션은 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우에만 쌍의 두 번째 시퀀스를 잘라냅니다.
    • False 또는 'do_not_truncate' (기본값): 잘라내기 없음 (즉, 모델이 허용하는 최대 입력 크기보다 긴 시퀀스 길이를 가진 배치 출력 가능).
  • max_length (int, 선택 사항) — truncation/padding 파라미터 중 하나가 사용할 최대 길이를 제어합니다. 설정하지 않거나 None으로 설정한 경우, truncation/padding 파라미터 중 하나가 최대 길이를 요구하면 미리 정의된 모델의 최대 길이를 사용합니다. 모델에 특정 최대 입력 길이가 없는 경우(XLNet 등) 최대 길이로 truncation/padding하는 기능이 비활성화됩니다.
  • pad_to_multiple_of (int, 선택 사항) — 설정된 경우, 시퀀스를 제공된 값의 배수로 패딩합니다. 이는 NVIDIA 하드웨어에서 Volta 아키텍처의 연산 능력 >= 7.5를 활용하여 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 노트를 transformer가 생성한 token id로 변환합니다.

Pop2PianoProcessor

클래스 transformers.Pop2PianoProcessor

< >

( feature_extractortokenizer )

매개변수

  • feature_extractor (Pop2PianoFeatureExtractor) — 피처 추출기는 필수 입력입니다.
  • tokenizer (tokenizer_class) — 토크나이저는 필수 입력값입니다.

Pop2PianoProcessor를 생성하며, feature extractor와 tokenizer를 단일 processor로 래핑합니다.

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 텐서의 경우, 각 오디오의 shape은 (C, T)여야 하며, 여기서 C는 채널 수, T는 오디오의 샘플 길이입니다.
  • sampling_rate (int 또는 list[int], 선택 사항) — 입력 오디오의 Hz 단위 샘플링 레이트입니다. 이는 feature extractor에서 사용된 샘플링 레이트와 일치해야 합니다. 제공되지 않으면 processor 구성의 기본 샘플링 레이트가 사용됩니다.
  • steps_per_beat (int, 선택 사항, 기본값 2) — 음악 박스당 시간 단계 수입니다. 이 매개변수는 음악 표현의 시간 해상도를 제어합니다. 값이 높을수록 시간적 세분화 정도가 높아지지만 시퀀스 길이가 증가합니다. 오디오를 처리하여 음악 특성을 추출할 때 사용됩니다.
  • resample (bool, 선택 사항, 기본값 True) — 이미지 크기를 조정할 때 사용할 리샘플링 필터입니다. PILImageResampling enum 중 하나를 사용할 수 있습니다. 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, 선택 사항) — 잘림(truncation)을 활성화하고 제어합니다. 다음 값을 받을 수 있습니다:
    • True 또는 'longest_first': max_length 인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 경우 토큰 단위로 잘라내며, 시퀀스 쌍(또는 쌍의 배치)이 제공되면 쌍 중 가장 긴 시퀀스에서 토큰을 하나씩 제거합니다.
    • 'only_first': max_length 인수로 지정된 최대 길이 또는 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘립니다. 이 옵션은 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우 쌍의 첫 번째 시퀀스만 잘립니다.
    • 'only_second': max_length 인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 옵션은 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우에만 쌍의 두 번째 시퀀스를 잘라냅니다.
    • False 또는 'do_not_truncate' (기본값): 잘라내기 없음 (즉, 모델이 허용하는 최대 입력 크기보다 긴 시퀀스 길이를 가진 배치 출력 가능).
  • max_length (int, 선택 사항) — truncation/padding 파라미터 중 하나가 사용할 최대 길이를 제어합니다.

    설정하지 않거나 None으로 설정하면, truncation/padding 파라미터 중 하나가 최대 길이를 요구할 경우 미리 정의된 모델 최대 길이를 사용합니다. 모델에 특정 최대 입력 길이가 없는 경우(XLNet 등) 최대 길이로 truncation/padding하는 기능이 비활성화됩니다.

  • pad_to_multiple_of (int, 선택 사항) — 설정된 경우, 제공된 값의 배수가 되도록 시퀀스를 패딩합니다. padding이 활성화되어 있어야 합니다. 이는 Volta에서 >= 7.5의 컴퓨트 기능을 가진 NVIDIA 하드웨어에서 Tensor Cores를 사용하도록 하는 데 특히 유용합니다.
  • verbose (bool, 선택 사항, 기본값 True) — 추가 정보와 경고를 출력할지 여부.
  • return_tensors (str 또는 TensorType, 선택 사항) — 설정된 경우, 특정 프레임워크의 텐서를 반환합니다. 허용되는 값은 다음과 같습니다:
    • 'pt': PyTorch torch.Tensor 객체를 반환합니다.
    • 'np': NumPy np.ndarray 객체를 반환합니다.
Update on GitHub