Hugging Face

Mothersuperior/yue2-mothersuperior-realaudio-tokenizer-v4

YuE2-3B용 실시간 오디오 토크나이저와 디코더 LoRA — 실제 녹음 기반 음악 생성·커버 도구

YuE2-3B에 포함되지 않은 오디오→시맨틱 토큰 인코더와 실제 녹음에 맞춘 NAR 디코더 LoRA를 제공하는 Hugging Face 저장소입니다. 자체 녹음 토큰화, 아티스트별 AR LoRA 학습, 음악 생성과 커버 제작을 지원하며 v4부터 v9까지의 학습 방식과 평가 수치도 함께 공개합니다.

AI 요약

이 저장소는 YuE2-3B를 실제 오디오 제작물에 사용할 수 있도록 보완하는 도구와 가중치를 제공합니다. YuE2는 텍스트·음악 조건을 바탕으로 동작하지만, 사용자가 가진 녹음을 YuE2가 사용하는 semantic token으로 변환하는 오디오→토큰 인코더는 기본 배포에 포함하지 않습니다. 이 저장소는 그 역할을 하는 tokenizer head와, 변환된 토큰을 실제 제작 음원에 가까운 latents와 오디오로 렌더링하도록 학습한 NAR(Non-Autoregressive) branch LoRA를 함께 제공합니다. 이를 이용하면 자신의 녹음을 토큰화하고, 특정 아티스트의 데이터로 YuE2의 AR(Autoregressive) 모델을 LoRA-tuning한 뒤 새 곡이나 커버를 생성할 수 있습니다.

■ v4 토크나이저와 NAR LoRA 구성

`tokenizer_head_joint_v4`는 MERT-v2-FullSong의 layer 20에서 추출한 feature를 입력으로 받습니다. 입력 feature는 곡별 instance normalization을 거치며 초당 25프레임으로 처리되고, 32,768개의 YuE2 semantic code로 변환됩니다. 인코더는 8개 transformer layer, hidden dimension 512, 512-frame window로 구성됩니다. YuE2가 자체 생성한 곡을 대상으로 한 held-out exact-match top-1은 16.1%입니다. 다만 완전히 같은 코드가 아니어도 인접한 코드가 거의 같은 소리를 내는 경우가 있어, NAR round-trip의 청취 테스트 결과는 약 95% 수준으로 제시됩니다.

`nar_lora_joint_v4`는 실제 오디오에서 얻은 latents를 YuE2 디코더가 렌더링하도록 조정하는 rank-32 LoRA입니다. 28개 layer의 `nar_self_attn` 내부 q, k, v, o projection과 `nar_mlp`의 gate, up, down projection에 적용되며, `fullvae2llm`과 `llm2vae`는 LoRA delta가 아니라 해당 Linear layer를 대체하는 전체 가중치로 제공됩니다. 일반적인 LoRA 항목은 `W += lora_B @ lora_A` 규칙과 scale 1.0으로 적용합니다. `.pt`, `.safetensors`, `.bf16.safetensors` 버전은 같은 가중치를 다른 형식으로 저장한 것이며, fp32 기준으로 bit-exact이고 bf16 버전은 파일 크기가 절반입니다. Head의 fp32 대비 bf16 top-1 agreement는 98.6%입니다.

ComfyUI 사용자를 위해 `nar_lora_joint_v4_comfyui.safetensors`도 제공합니다. 이 파일은 `Comfy-Org/YuE2`의 `yue2_3b_bf16.safetensors`를 YuE2 checkpoint loader로 불러온 뒤, MODEL 출력에 표준 `LoraLoader`를 적용하는 방식으로 사용합니다. ComfyUI에서는 q, k, v projection과 gate, up projection이 각각 fused matrix로 저장되므로, 저장소는 분리된 LoRA를 block-diagonal 형태의 단일 LoRA로 패킹했습니다. `vae2llm`과 `llm2vae`의 전체 대체 가중치는 `.diff`와 `.diff_b`로 포함됩니다.

■ 학습 데이터와 실행 환경

기본 학습에는 YuE2가 생성한 4,765곡을 사용한 뒤 실제 오디오에 맞게 추가 적응합니다. AR 학습 시에는 `Mothersuperior/yue2-minted-corpus`의 regularizer pack도 필요합니다. 이 pack에는 4,732개의 YuE2 생성 곡이 곡 이름, 소스, 스타일, 가사, codec 정보와 함께 들어 있으며, AR trainer는 학습 곡의 50%를 이 데이터에서 선택합니다. 이렇게 하면 소규모 아티스트 데이터만으로 학습할 때 YuE2의 token grammar가 붕괴하는 것을 막고, `minted_val` 항목으로 regularizer loss가 유지되는지 확인할 수 있습니다.

제공된 환경은 Python 3.12 virtual environment, `yue2-infer` commit `92a73cc7`, PyTorch 2.10과 CUDA 12.8, torchaudio 2.10, Transformers, SoundFile, SciPy, Safetensors, Demucs를 기준으로 합니다. YuE2-3B, YuE2-Vae, MERT-v2-FullSong 모델을 Hugging Face cache에 내려받아야 하며, gradient checkpointing을 사용하면 24GB GPU에서 모든 단계를 수행할 수 있습니다. 측정된 GPU 사용량은 단계에 따라 14~18GB입니다. 스크립트의 기본 경로는 `/workspace/tok/full`, `/workspace/real/...`, `/workspace/yue2-corpus/tracks`, `/workspace/real/ar/dataset.pt`로 고정되어 있으므로 같은 디렉터리 구조를 만들거나 각 스크립트 상단의 상수를 수정해야 합니다.

각 곡에는 `<name>.flac`, 전체 가사가 들어 있는 `<name>.lyrics.txt`, 그리고 trigger phrase로 시작하는 스타일 설명이 담긴 `<name>.txt`가 필요합니다. `prep_real.py`는 MERT feature, VAE latent, prompt prefix를 만들고, `cursor_prep.py`는 Demucs vocal stem과 MMS forced alignment를 사용해 가사 cursor target을 자동 생성합니다. 새 아티스트나 새로운 시대의 음원을 대상으로 더 잘 맞추려면 `joint.py joint_mine`으로 head와 NAR를 함께 적응시킬 수 있습니다. 이후 `ar_prep.py`가 곡을 토큰화하고 regularizer pack을 `dataset.pt`에 병합하며, `ar_lora_cursor.py`가 아티스트 데이터와 minted 데이터의 50 대 50 혼합으로 rank-64 AR LoRA를 학습합니다. 예시 설정은 1,600 steps, lyric-cursor weight 0.08이며, 약 1,500 steps 이후에는 곡을 암기하기 시작하므로 더 오래 학습하지 말라고 안내합니다. 여러 checkpoint를 `ladder.sh`로 같은 prompt에 렌더링한 뒤 청취로 선택하며, 공개된 실험에서는 step 800을 선택했습니다.

■ v5부터 v9까지의 확장 결과

추가로 공개된 v5 head는 14,547곡의 minted corpus 전체를 대상으로 AdamW, learning rate 5e-4, betas 0.9와 0.99, weight decay 0.01, 30,000 steps, cosine schedule로 학습했습니다. minted track의 held-out token accuracy는 top-1 18.9%, top-5 45.0%, top-1-or-neighbour 34.1%였으며, v4 시기의 수치인 15.9%, 39.2%, 30.9%보다 높습니다. v5 joint pair는 rock, metal, bass music 세 아티스트의 실제 트랙 128곡과 minted anchor 4,000곡을 사용해 3,000 steps 동안 head와 rank-32 decoder LoRA를 함께 학습했습니다. 실제 오디오 decoder loss는 1.056에서 0.981로 낮아졌고, minted top-1은 약 18.9%로 유지됐으며, 실제 오디오의 token repeat rate는 9.3%에서 3.0%로 낮아졌습니다.

v6부터는 VAE latent loss만으로 실제 청취 품질을 충분히 예측하지 못한다는 문제를 다루기 위해 audio-domain loss를 추가했습니다. 각 실제 오디오 학습 단계에서 decoder의 clean-latent estimate를 동결된 동시에 미분 가능한 YuE2 VAE로 디코딩하고, 원본 녹음의 같은 구간과 비교합니다. 비교 항목은 log-mel L1, 여러 해상도의 STFT에서 계산한 spectral convergence와 log-magnitude, stereo-width term이며 noise level 0.4 이하에서 적용합니다. gradient는 decoder LoRA와 straight-through token choice를 거쳐 head까지 전달됩니다. 데이터와 나머지 설정은 v5와 같고, v6부터 v9까지 audio-loss weight를 각각 0.3, 1.0, 2.0, 4.0으로 바꿨습니다.

세 개의 held-out 트랙에 대한 LTAS(long-term average spectrum) 거리는 v5에서 rock 1.56dB, metal 2.07dB, bass 2.27dB였고, v9에서는 각각 1.23dB, 1.49dB, 1.92dB로 낮아졌습니다. 반면 minted top-1은 v5 18.9%, v6 18.8%, v7 18.7%, v8 19.0%, v9 18.7%로 거의 변하지 않았습니다. 따라서 audio loss가 head의 일반적인 token 성능을 크게 바꾸지 않았다고 보고합니다. Mel L1은 청취 결과와 같은 방향으로 움직이지 않았지만 LTAS는 청취 결과와 더 잘 맞았으며, 제공된 청취 평가에서는 v7보다 v8이, v8보다 v9가 선호됐습니다. 다만 간헐적으로 음이 어긋나는 token-choice 오류는 이 loss로 개선되지 않았고 head 정확도의 문제로 남아 있습니다. 실제 오디오를 토큰화할 때는 v9 또는 v8 head를 사용하고, 같은 버전의 `nar_lora_joint_v9_comfyui` 또는 `nar_lora_joint_v8_comfyui`를 decoder에 model strength 1.0으로 적용해야 합니다.

VAE는 기본 `YuE2-Vae` 대신 `Mothersuperior/YuE2-Vae-merge-0.666`을 선택할 수도 있습니다. 이 모델은 YuE2-Vae와 YuE2-Vae-legacy를 0.666 대 0.334로 merge한 decoder이며, 두 모델은 encoder를 공유하고 decoder만 다릅니다. 생성 스크립트는 AR LoRA와 NAR LoRA를 base weight에 병합한 뒤 YuE2의 원래 pipeline, sampler, CFG, VAE를 그대로 사용합니다. 새 곡은 스타일 caption과 가사로 생성하고, 커버는 SheetSage2의 `--melody-only`로 녹음에서 score를 추출한 뒤 ABC 파일을 입력하는 절차를 제공합니다. 모든 가중치는 YuE2-3B의 CC BY-NC 4.0 조건을 따르므로 비상업적 사용만 허용됩니다.

원문: Hugging Face / 번역·요약: Trawling