Google에서 게시한 SOTA 텍스트 대 음악 모델인 MusicLM을 몇 가지 수정하여 Pytorch로 구현했습니다. 우리는 MuLan을 대신하여 CLAP를 사용하고, SoundStream을 대신하여 Encodec을, w2v-BERT를 대신하여 MERT를 사용합니다.
CLAP은 LAION-Audio-630K에서 훈련된 공동 오디오-텍스트 모델입니다. MuLan과 유사하게 공유 잠재 공간(CLAP의 512차원과 MuLan의 128차원)에 해당 미디어를 투사하는 오디오 타워와 텍스트 타워로 구성됩니다.
MuLan은 5천만 개의 텍스트-음악 쌍에 대해 교육을 받았습니다. 안타깝게도 이를 복제할 데이터가 없기 때문에 CLAP의 사전 훈련된 체크포인트를 사용하여 근접하게 작업하고 있습니다. CLAP는 LAION-630k(~633k 텍스트-오디오 쌍) 및 AudioSet(키워드-캡션 모델에 의해 생성된 캡션이 포함된 2백만 개의 샘플)에서 총 260만 개의 텍스트-오디오 쌍에 대해 교육되었습니다. 이는 MuLan을 훈련하는 데 사용된 데이터의 일부에 불과하지만 CLAP을 사용하여 다양한 음악 샘플을 생성하는 데 성공했습니다. 여기에서 들을 수 있습니다(이것은 매우 초기 결과라는 점을 명심하세요). CLAP의 잠재 공간이 음악 생성을 위해 충분히 표현되지 않는 경우, 음악에 대해 CLAP를 훈련하거나 훈련된 후 모델을 @lucidrain의 MuLan 구현으로 대체할 수 있습니다.
SoundStream과 Encodec은 모두 모든 파형을 일련의 음향 토큰으로 인코딩한 다음 원본과 유사한 파형으로 디코딩할 수 있는 신경 오디오 코덱입니다. 그런 다음 이러한 중간 토큰을 seq2seq 작업으로 모델링할 수 있습니다. Encodec은 Facebook에서 출시되었으며 사전 훈련된 체크포인트는 공개적으로 사용 가능하지만 SoundStream의 경우에는 그렇지 않습니다.
이 프로젝트의 목표는 논문의 아키텍처에 얽매이지 않고 가능한 한 빨리 MusicLM의 결과를 복제하는 것입니다. 보다 실제적인 구현을 원하는 사람들은 musiclm-pytorch를 확인하세요.
우리는 또한 CLAP의 잠재 공간에 대한 더 나은 이해를 얻으려고 노력합니다.
참여하고 싶다면 디스코드에 참여하세요!
conda env create -f environment.yaml
conda activate open-musiclm
"모델 구성"에는 레이어 수, 양자화기 수, 각 단계의 대상 오디오 길이 등과 같은 모델 아키텍처에 대한 정보가 포함되어 있습니다. 이는 훈련 및 추론 중에 모델을 인스턴스화하는 데 사용됩니다.
"훈련 구성"에는 모델 훈련을 위한 초매개변수가 포함되어 있습니다. 훈련 중에 트레이너 클래스를 인스턴스화하는 데 사용됩니다.
예제 구성은 ./configs
디렉터리를 참조하세요.
첫 번째 단계는 연속적인 CLAP 삽입을 개별 토큰 시퀀스에 매핑하는 잔여 벡터 양자화기를 훈련하는 것입니다.
python ./scripts/train_clap_rvq.py
--results_folder ./results/clap_rvq # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json # path to model config
--training_config ./configs/training/train_musiclm_fma.json # path to training config
다음으로 MERT 임베딩을 의미 체계 토큰으로 양자화하는 데 사용하는 K-평균 레이어를 학습합니다.
python ./scripts/train_hubert_kmeans.py
--results_folder ./results/hubert_kmeans # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_musiclm_fma.json
작동하는 K-평균과 RVQ가 있으면 이제 의미론적, 대략적, 세부적 단계를 훈련할 수 있습니다. 이러한 단계는 동시에 훈련될 수 있습니다.
python ./scripts/train_semantic_stage.py
--results_folder ./results/semantic # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_musiclm_fma.json
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
python ./scripts/train_coarse_stage.py
--results_folder ./results/coarse # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_musiclm_fma.json
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
python ./scripts/train_fine_stage.py
--results_folder ./results/fine # where to save results and checkpoints
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_musiclm_fma.json
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
위의 경우 CLAP, Hubert 및 Encodec을 사용하여 훈련 중에 박수, 의미 체계 및 음향 토큰을 실시간으로 생성합니다. 그러나 이러한 모델은 GPU에서 공간을 차지하므로 동일한 데이터에 대해 여러 번 실행하는 경우 이러한 토큰을 다시 계산하는 것은 비효율적입니다. 대신 이러한 토큰을 미리 계산하고 훈련 중에 반복할 수 있습니다.
이렇게 하려면 구성에서 data_preprocessor_cfg
필드를 채우고 트레이너 구성에서 use_preprocessed_data
True로 설정하세요(영감을 얻으려면 train_fma_preprocess.json 참조). 그런 다음 다음을 실행하여 데이터세트를 전처리한 다음 학습 스크립트를 실행합니다.
python ./scripts/preprocess_data.py
--model_config ./configs/model/musiclm_small.json
--training_config ./configs/training/train_fma_preprocess.json
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
여러 샘플을 생성하고 CLAP를 사용하여 가장 좋은 샘플을 선택합니다.
python scripts/infer_top_match.py
" your text prompt "
--num_samples 4 # number of samples to generate
--num_top_matches 1 # number of top matches to return
--semantic_path PATH_TO_SEMANTIC_CHECKPOINT # path to previously trained semantic stage
--coarse_path PATH_TO_COARSE_CHECKPOINT # path to previously trained coarse stage
--fine_path PATH_TO_FINE_CHECKPOINT # path to previously trained fine stage
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
--model_config ./configs/model/musiclm_small.json
--duration 4
다양한 테스트 프롬프트에 대한 샘플을 생성합니다.
python scripts/infer.py
--semantic_path PATH_TO_SEMANTIC_CHECKPOINT # path to previously trained semantic stage
--coarse_path PATH_TO_COARSE_CHECKPOINT # path to previously trained coarse stage
--fine_path PATH_TO_FINE_CHECKPOINT # path to previously trained fine stage
--rvq_path PATH_TO_RVQ_CHECKPOINT # path to previously trained rvq
--kmeans_path PATH_TO_KMEANS_CHECKPOINT # path to previously trained kmeans
--model_config ./configs/model/musiclm_small.json
--duration 4
--return_coarse_wave
플래그를 사용하여 미세 단계를 건너뛰고 거친 토큰만으로 오디오를 재구성할 수 있습니다.
여기에서 musiclm_large_small_context 모델에 대한 실험적 체크포인트를 다운로드할 수 있습니다. 모델을 미세 조정하려면 --fine_tune_from
플래그를 사용하여 훈련 스크립트를 호출하십시오.
@inproceedings { Agostinelli2023MusicLMGM ,
title = { MusicLM: Generating Music From Text } ,
author = { Andrea Agostinelli and Timo I. Denk and Zal{'a}n Borsos and Jesse Engel and Mauro Verzetti and Antoine Caillon and Qingqing Huang and Aren Jansen and Adam Roberts and Marco Tagliasacchi and Matthew Sharifi and Neil Zeghidour and C. Frank } ,
year = { 2023 }
}
@article { wu2022large ,
title = { Large-scale Contrastive Language-Audio Pretraining with Feature Fusion and Keyword-to-Caption Augmentation } ,
author = { Wu, Yusong and Chen, Ke and Zhang, Tianyu and Hui, Yuchen and Berg-Kirkpatrick, Taylor and Dubnov, Shlomo } ,
journal = { arXiv preprint arXiv:2211:06687 } ,
year = { 2022 } ,
}
@article { defossez2022highfi ,
title = { High Fidelity Neural Audio Compression } ,
author = { Défossez, Alexandre and Copet, Jade and Synnaeve, Gabriel and Adi, Yossi } ,
journal = { arXiv preprint arXiv:2210.13438 } ,
year = { 2022 }
}
@misc { li2023mert ,
title = { MERT: Acoustic Music Understanding Model with Large-Scale Self-supervised Training } ,
author = { Yizhi Li and Ruibin Yuan and Ge Zhang and Yinghao Ma and Xingran Chen and Hanzhi Yin and Chenghua Lin and Anton Ragni and Emmanouil Benetos and Norbert Gyenge and Roger Dannenberg and Ruibo Liu and Wenhu Chen and Gus Xia and Yemin Shi and Wenhao Huang and Yike Guo and Jie Fu } ,
year = { 2023 } ,
eprint = { 2306.00107 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.SD }
}