模型概述
模型特點
模型能力
使用案例
🚀 MusicGen - Stereo - Large - 3.3B
MusicGen是一個文本到音樂的模型,能夠根據文本描述或音頻提示生成高質量的音樂樣本。本項目進一步發佈了一組支持立體聲的模型,這些模型是在單聲道模型的基礎上進行了20萬次更新的微調。
🚀 快速開始
使用🤗 Transformers庫運行MusicGen立體聲模型
你可以按照以下步驟在本地運行MusicGen立體聲模型:
- 安裝依賴庫:首先安裝🤗 Transformers庫 和
scipy
:
pip install --upgrade pip
pip install --upgrade git+https://github.com/huggingface/transformers.git scipy
- 通過
Text-to-Audio
(TTA)管道進行推理:你可以通過TTA管道在幾行代碼內對MusicGen模型進行推理!
import torch
import soundfile as sf
from transformers import pipeline
synthesiser = pipeline("text-to-audio", "facebook/musicgen-stereo-small", device="cuda:0", torch_dtype=torch.float16)
music = synthesiser("lo-fi music with a soothing melody", forward_params={"max_new_tokens": 256})
sf.write("musicgen_out.wav", music["audio"][0].T, music["sampling_rate"])
- 通過Transformers建模代碼進行推理:你可以使用處理器 + 生成代碼將文本轉換為單聲道32 kHz音頻波形,以獲得更精細的控制。
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-stereo-large")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-stereo-large").to("cuda")
inputs = processor(
text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
padding=True,
return_tensors="pt",
).to("cuda")
audio_values = model.generate(**inputs, max_new_tokens=256)
- 播放或保存音頻樣本:
- 在ipynb筆記本中播放音頻樣本:
from IPython.display import Audio
sampling_rate = model.config.audio_encoder.sampling_rate
Audio(audio_values[0].cpu().numpy(), rate=sampling_rate)
- 使用第三方庫(如 `soundfile`)將音頻樣本保存為 `.wav` 文件:
import soundfile as sf
sampling_rate = model.config.audio_encoder.sampling_rate
audio_values = audio_values.cpu().numpy()
sf.write("musicgen_out.wav", audio_values[0].T, sampling_rate)
使用Audiocraft庫運行MusicGen模型
你也可以通過原始的 Audiocraft庫 在本地運行MusicGen模型:
- 安裝Audiocraft庫:
pip install git+https://github.com/facebookresearch/audiocraft.git
- 安裝
ffmpeg
:
apt get install ffmpeg
- 運行Python代碼:
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write
model = MusicGen.get_pretrained("large")
model.set_generation_params(duration=8) # generate 8 seconds.
descriptions = ["happy rock", "energetic EDM"]
wav = model.generate(descriptions) # generates 2 samples.
for idx, one_wav in enumerate(wav):
# Will save under {idx}.wav, with loudness normalization at -14 db LUFS.
audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness")
✨ 主要特性
- 立體聲支持:進一步發佈了一組支持立體聲的模型,這些模型是在單聲道模型的基礎上進行微調得到的。
- 高質量音樂生成:能夠根據文本描述或音頻提示生成高質量的音樂樣本。
- 單階段自迴歸模型:是一個單階段自迴歸Transformer模型,不需要自監督語義表示,並且可以一次性生成所有4個碼本。
- 簡單可控:通過引入碼本之間的小延遲,可以並行預測碼本,從而每秒音頻只有50個自迴歸步驟。
📦 安裝指南
使用🤗 Transformers庫
pip install --upgrade pip
pip install --upgrade git+https://github.com/huggingface/transformers.git scipy
使用Audiocraft庫
pip install git+https://github.com/facebookresearch/audiocraft.git
apt get install ffmpeg
💻 使用示例
基礎用法
通過Text-to-Audio
(TTA)管道進行推理:
import torch
import soundfile as sf
from transformers import pipeline
synthesiser = pipeline("text-to-audio", "facebook/musicgen-stereo-small", device="cuda:0", torch_dtype=torch.float16)
music = synthesiser("lo-fi music with a soothing melody", forward_params={"max_new_tokens": 256})
sf.write("musicgen_out.wav", music["audio"][0].T, music["sampling_rate"])
高級用法
通過Transformers建模代碼進行推理:
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-stereo-large")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-stereo-large").to("cuda")
inputs = processor(
text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
padding=True,
return_tensors="pt",
).to("cuda")
audio_values = model.generate(**inputs, max_new_tokens=256)
📚 詳細文檔
預訓練模型
我們提供了10個預訓練模型,具體如下:
facebook/musicgen-small
:300M模型,僅支持文本到音樂 - 🤗 Hubfacebook/musicgen-medium
:1.5B模型,僅支持文本到音樂 - 🤗 Hubfacebook/musicgen-melody
:1.5B模型,支持文本到音樂和文本+旋律到音樂 - 🤗 Hubfacebook/musicgen-large
:3.3B模型,僅支持文本到音樂 - 🤗 Hubfacebook/musicgen-melody-large
:3.3B模型,支持文本到音樂和文本+旋律到音樂 - 🤗 Hubfacebook/musicgen-stereo-*
:所有之前的模型針對立體聲生成進行了微調 - small medium large melody melody large
試用MusicGen
你可以通過以下方式試用MusicGen:
模型詳情
- 開發組織:Meta AI的FAIR團隊。
- 模型日期:MusicGen於2023年4月至5月期間進行訓練。
- 模型版本:這是模型的第1版。
- 模型類型:MusicGen由一個用於音頻分詞的EnCodec模型和一個基於Transformer架構的自迴歸語言模型組成,用於音樂建模。模型有不同的大小:300M、1.5B和3.3B參數;有兩種變體:一種是針對文本到音樂生成任務訓練的模型,另一種是針對旋律引導的音樂生成訓練的模型。
- 論文或資源:更多信息可以在論文 Simple and Controllable Music Generation 中找到。
- 引用詳情:
@misc{copet2023simple,
title={Simple and Controllable Music Generation},
author={Jade Copet and Felix Kreuk and Itai Gat and Tal Remez and David Kant and Gabriel Synnaeve and Yossi Adi and Alexandre Défossez},
year={2023},
eprint={2306.05284},
archivePrefix={arXiv},
primaryClass={cs.SD}
}
- 許可證:代碼遵循MIT許可證發佈,模型權重遵循CC-BY-NC 4.0許可證發佈。
- 問題反饋:關於MusicGen的問題和評論可以通過項目的 Github倉庫 發送,或通過創建問題進行反饋。
預期用途
- 主要預期用途:MusicGen的主要用途是基於人工智能的音樂生成研究,包括:
- 研究工作,如探索和更好地理解生成模型的侷限性,以進一步推動科學發展。
- 由文本或旋律引導的音樂生成,以便機器學習愛好者更好地瞭解生成式人工智能模型的當前能力。
- 主要預期用戶:該模型的主要預期用戶是音頻、機器學習和人工智能領域的研究人員,以及希望更好地瞭解這些模型的愛好者。
- 超出範圍的用例:在沒有進一步的風險評估和緩解措施的情況下,該模型不應用於下游應用。該模型不應被用於故意創建或傳播會給人們造成敵對或疏離環境的音樂作品。這包括生成人們可預見會感到不安、痛苦或冒犯的音樂;或傳播歷史或當前刻板印象的內容。
評估指標
- 模型性能指標:我們使用以下客觀指標在標準音樂基準上評估模型:
- 基於預訓練音頻分類器(VGGish)提取的特徵計算的Frechet音頻距離。
- 基於預訓練音頻分類器(PaSST)提取的標籤分佈的Kullback-Leibler散度。
- 基於預訓練CLAP模型提取的音頻嵌入和文本嵌入之間的CLAP分數。
- 定性研究:我們還進行了有人類參與者的定性研究,從以下幾個方面評估模型的性能:
- 音樂樣本的整體質量。
- 與提供的文本輸入的文本相關性。
- 旋律引導的音樂生成對旋律的遵循程度。
評估數據集
該模型在 MusicCaps基準 和一個領域內保留的評估集上進行評估,評估集與訓練集沒有藝術家重疊。
訓練數據集
該模型使用以下來源的許可數據進行訓練:Meta Music Initiative Sound Collection、Shutterstock音樂集 和 Pond5音樂集。有關訓練集和相應預處理的更多詳細信息,請參閱論文。
評估結果
以下是發佈的模型在MusicCaps上獲得的客觀指標。請注意,對於公開發布的模型,我們讓所有數據集通過了最先進的音樂源分離方法,即使用開源的 Hybrid Transformer for Music Source Separation (HT-Demucs),以僅保留樂器部分。這解釋了與論文中使用的模型在客觀指標上的差異。
模型 | Frechet音頻距離 | KLD | 文本一致性 | 色度餘弦相似度 |
---|---|---|---|---|
facebook/musicgen-small | 4.88 | 1.42 | 0.27 | - |
facebook/musicgen-medium | 5.14 | 1.38 | 0.28 | - |
facebook/musicgen-large | 5.48 | 1.37 | 0.28 | - |
facebook/musicgen-melody | 4.93 | 1.41 | 0.27 | 0.44 |
🔧 技術細節
立體聲模型通過從EnCodec模型獲取2個令牌流,並使用延遲模式交錯這些令牌來工作。立體聲技術用於再現具有深度和方向的聲音,它使用通過揚聲器(或耳機)播放的兩個獨立音頻通道,從而產生聲音來自多個方向的印象。
MusicGen是一個單階段自迴歸Transformer模型,在一個32kHz的EnCodec分詞器上進行訓練,該分詞器有4個以50 Hz採樣的碼本。與現有的方法(如MusicLM)不同,MusicGen不需要自監督語義表示,並且可以一次性生成所有4個碼本。通過在碼本之間引入小延遲,我們可以並行預測它們,從而每秒音頻只有50個自迴歸步驟。
📄 許可證
代碼遵循MIT許可證發佈,模型權重遵循CC-BY-NC 4.0許可證發佈。







