🚀 MusicGen - Small - 300M
MusicGen是一個文本到音樂的模型,能夠根據文本描述或音頻提示生成高質量的音樂樣本。它為音樂生成研究提供了新的解決方案,也讓機器學習愛好者能體驗基於文本或旋律的音樂生成。
🚀 快速開始
你可以通過以下方式體驗MusicGen:
- Audiocraft Colab:
- Hugging Face Colab:
- Hugging Face Demo:
✨ 主要特性
- 單階段自迴歸:MusicGen是一個單階段自迴歸Transformer模型,在32kHz的EnCodec分詞器上進行訓練,有4個以50Hz採樣的碼本。與現有方法(如MusicLM)不同,它不需要自監督語義表示,並且可以一次性生成所有4個碼本。
- 並行預測:通過在碼本之間引入小的延遲,可以並行預測它們,因此每秒音頻只有50個自迴歸步驟。
📦 安裝指南
使用🤗 Transformers庫
- 首先安裝🤗 Transformers庫 和
scipy
:
pip install --upgrade pip
pip install --upgrade transformers scipy
- 安裝
ffmpeg
(如果需要):
apt-get install ffmpeg
使用Audiocraft庫
- 安裝
audiocraft
庫:
pip install git+https://github.com/facebookresearch/audiocraft.git
- 確保安裝了
ffmpeg
:
apt-get install ffmpeg
💻 使用示例
基礎用法
使用🤗 Transformers庫的pipeline
from transformers import pipeline
import scipy
synthesiser = pipeline("text-to-audio", "facebook/musicgen-small")
music = synthesiser("lo-fi music with a soothing melody", forward_params={"do_sample": True})
scipy.io.wavfile.write("musicgen_out.wav", rate=music["sampling_rate"], data=music["audio"])
使用🤗 Transformers庫的建模代碼
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
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",
)
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].numpy(), rate=sampling_rate)
使用 scipy
保存為 .wav
文件
import scipy
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].numpy())
高級用法
使用Audiocraft庫
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write
model = MusicGen.get_pretrained("small")
model.set_generation_params(duration=8)
descriptions = ["happy rock", "energetic EDM"]
wav = model.generate(descriptions)
for idx, one_wav in enumerate(wav):
audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness")
📚 詳細文檔
更多關於使用🤗 Transformers庫進行MusicGen模型推理的詳細信息,請參考 MusicGen文檔。
🔧 技術細節
模型詳情
屬性 |
詳情 |
開發組織 |
Meta AI的FAIR團隊 |
模型日期 |
2023年4月至2023年5月進行訓練 |
模型版本 |
版本1 |
模型類型 |
由用於音頻分詞的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倉庫 發送,或通過創建issue。 |
預期用途
- 主要用途:MusicGen的主要用途是基於人工智能的音樂生成研究,包括探索和理解生成模型的侷限性以改進科學現狀,以及讓機器學習愛好者通過文本或旋律引導生成音樂來了解生成式AI模型的當前能力。
- 主要用戶:主要用戶是音頻、機器學習和人工智能領域的研究人員,以及希望更好理解這些模型的業餘愛好者。
- 非預期用途:在沒有進一步風險評估和緩解措施的情況下,模型不應用於下游應用。模型不應被用於故意創建或傳播會給人帶來敵對或疏離環境的音樂作品。
評估指標
模型性能指標
- 客觀指標:
- 在預訓練音頻分類器(VGGish)提取的特徵上計算的Frechet音頻距離。
- 在預訓練音頻分類器(PaSST)提取的標籤分佈上的Kullback - Leibler散度。
- 從預訓練CLAP模型提取的音頻嵌入和文本嵌入之間的CLAP分數。
- 主觀指標:通過人類參與者進行定性研究,從音樂樣本的整體質量、與輸入文本的相關性、旋律引導音樂生成中對旋律的遵循等方面評估模型性能。
評估數據集
模型在 MusicCaps基準 和一個領域內保留評估集上進行評估,評估集與訓練集沒有藝術家重疊。
訓練數據集
模型在以下來源的許可數據上進行訓練:Meta音樂倡議聲音集、Shutterstock音樂集 和 Pond5音樂集。
📄 許可證
代碼採用MIT許可證發佈,模型權重採用CC - BY - NC 4.0許可證發佈。
⚠️ 重要提示
模型的偏差和侷限性可能導致生成的樣本被認為有偏差、不適當或冒犯性。MusicGen是為可控音樂生成的人工智能研究而開發的模型,在沒有進一步調查和風險緩解的情況下,不應用於下游應用。
💡 使用建議
由於模型有時難以評估哪種文本描述能提供最佳生成效果,可能需要進行提示工程以獲得滿意的結果。同時,要注意模型在不同音樂風格和文化上的表現可能不同,生成的音樂可能存在侷限性。