Google が公開した SOTA テキスト音楽モデルである MusicLM の Pytorch 実装にいくつかの変更を加えたもの。 MuLan の代わりに CLAP、SoundStream の代わりに Encodec、w2v-BERT の代わりに MERT を使用します。
CLAP は、LAION-Audio-630K でトレーニングされた共同オーディオテキストモデルです。 MuLan と同様に、オーディオ タワーとテキスト タワーで構成され、それぞれのメディアを共有潜在空間 (CLAP では 512 次元、MuLan では 128 次元) に投影します。
MuLan は 5,000 万のテキストと音楽のペアでトレーニングされました。残念ながら、これを再現するデータがないので、それに近づくために CLAP の事前トレーニングされたチェックポイントに頼っています。 CLAP は、LAION-630k (約 633,000 個のテキスト音声ペア) と AudioSet (キーワードからキャプションへのモデルによって生成されたキャプションを含む 200 万個のサンプル) からの合計 260 万のテキスト音声ペアでトレーニングされました。これは MuLan のトレーニングに使用されるデータの一部ですが、CLAP を使用してさまざまな音楽サンプルを生成することに成功しました。ここで聴くことができます (これらは非常に初期の結果であることに留意してください)。 CLAP の潜在空間が音楽生成に十分な表現力を持たない場合は、CLAP を音楽でトレーニングするか、トレーニング後にモデルを @lucidrain の MuLan 実装に置き換えることができます。
SoundStream と Encodec は両方ともニューラル オーディオ コーデックであり、任意の波形を一連の音響トークンにエンコードし、その後、元の波形に似た波形にデコードできます。これらの中間トークンは、seq2seq タスクとしてモデル化できます。エンコーデックは Facebook によってリリースされ、事前トレーニングされたチェックポイントは公開されていますが、SoundStream には当てはまりません。
このプロジェクトの目標は、必ずしも論文内のアーキテクチャに固執することなく、MusicLM の結果をできるだけ早く再現することです。より忠実な実装を探している人は、musiclm-pytorch をチェックしてください。
また、CLAP の潜在的な空間についての理解を深めることも目指しています。
参加したい場合はdiscordに参加してください!
conda env create -f environment.yaml
conda activate open-musiclm
「モデル構成」には、レイヤーの数、量子化器の数、各ステージのターゲットオーディオの長さなど、モデルのアーキテクチャに関する情報が含まれています。これは、トレーニングおよび推論中にモデルをインスタンス化するために使用されます。
「トレーニング設定」には、モデルをトレーニングするためのハイパーパラメーターが含まれています。これは、トレーニング中にトレーナー クラスをインスタンス化するために使用されます。
config の例については、 ./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 }
}