模型概述
模型特點
模型能力
使用案例
🚀 EnCodec模型介紹
EnCodec是Meta AI開發的一款先進的即時音頻編解碼器,能夠實現高質量的音頻壓縮與高效解碼,可直接用於音頻信號的即時壓縮和解壓縮,也能針對特定音頻任務進行微調或集成到更大的音頻處理流程中。
🚀 快速開始
使用以下代碼,結合來自LibriSpeech數據集的示例(約9MB),開啟EnCodec模型的使用之旅。首先,安裝所需的Python包:
pip install --upgrade pip
pip install --upgrade datasets[audio]
pip install git+https://github.com/huggingface/transformers.git@main
然後加載音頻樣本,並運行模型的前向傳播:
from datasets import load_dataset, Audio
from transformers import EncodecModel, AutoProcessor
# 加載示例數據集
librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
# 加載模型和處理器(用於音頻預處理)
model = EncodecModel.from_pretrained("facebook/encodec_48khz")
processor = AutoProcessor.from_pretrained("facebook/encodec_48khz")
# 將音頻數據轉換為模型所需的採樣率
librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
audio_sample = librispeech_dummy[0]["audio"]["array"]
# 預處理輸入
inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt")
# 顯式編碼然後解碼音頻輸入
encoder_outputs = model.encode(inputs["input_values"], inputs["padding_mask"])
audio_values = model.decode(encoder_outputs.audio_codes, encoder_outputs.audio_scales, inputs["padding_mask"])[0]
# 或者使用前向傳播實現相同功能
audio_values = model(inputs["input_values"], inputs["padding_mask"]).audio_values
✨ 主要特性
- 先進架構:採用具有量化潛在空間的流式編碼器 - 解碼器架構,並以端到端的方式進行訓練。
- 高效訓練:使用單一多尺度頻譜圖對抗器簡化並加速訓練,有效減少偽影,生成高質量樣本。
- 穩定機制:引入新穎的損失平衡器機制,通過將超參數的選擇與典型損失規模解耦來穩定訓練。
- 即時性能:使用輕量級Transformer模型進一步壓縮表示,同時保持即時性能。
📦 安裝指南
pip install --upgrade pip
pip install --upgrade datasets[audio]
pip install git+https://github.com/huggingface/transformers.git@main
💻 使用示例
基礎用法
from datasets import load_dataset, Audio
from transformers import EncodecModel, AutoProcessor
# 加載示例數據集
librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
# 加載模型和處理器(用於音頻預處理)
model = EncodecModel.from_pretrained("facebook/encodec_48khz")
processor = AutoProcessor.from_pretrained("facebook/encodec_48khz")
# 將音頻數據轉換為模型所需的採樣率
librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
audio_sample = librispeech_dummy[0]["audio"]["array"]
# 預處理輸入
inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt")
# 顯式編碼然後解碼音頻輸入
encoder_outputs = model.encode(inputs["input_values"], inputs["padding_mask"])
audio_values = model.decode(encoder_outputs.audio_codes, encoder_outputs.audio_scales, inputs["padding_mask"])[0]
# 或者使用前向傳播實現相同功能
audio_values = model(inputs["input_values"], inputs["padding_mask"]).audio_values
高級用法
# EnCodec可以針對特定音頻任務進行微調或集成到更大的音頻處理流程中,例如用於語音生成、音樂生成或文本轉語音任務。
# 以下是一個簡單的示例,展示如何將EnCodec集成到一個簡單的音頻處理流程中:
from datasets import load_dataset, Audio
from transformers import EncodecModel, AutoProcessor
# 加載示例數據集
librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
# 加載模型和處理器(用於音頻預處理)
model = EncodecModel.from_pretrained("facebook/encodec_48khz")
processor = AutoProcessor.from_pretrained("facebook/encodec_48khz")
# 將音頻數據轉換為模型所需的採樣率
librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
audio_sample = librispeech_dummy[0]["audio"]["array"]
# 預處理輸入
inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt")
# 顯式編碼然後解碼音頻輸入
encoder_outputs = model.encode(inputs["input_values"], inputs["padding_mask"])
audio_values = model.decode(encoder_outputs.audio_codes, encoder_outputs.audio_scales, inputs["padding_mask"])[0]
# 在這裡可以添加更多的音頻處理步驟,例如音頻增強、音頻合成等
# ...
# 最後將處理後的音頻保存
import soundfile as sf
sf.write("output_audio.wav", audio_values.numpy(), processor.sampling_rate)
📚 詳細文檔
模型詳情
模型描述
EnCodec是一種利用神經網絡的高保真音頻編解碼器。它引入了具有量化潛在空間的流式編碼器 - 解碼器架構,並以端到端的方式進行訓練。該模型使用單一多尺度頻譜圖對抗器簡化並加速訓練,有效減少偽影並生成高質量樣本。此外,它還包含一種新穎的損失平衡器機制,通過將超參數的選擇與典型損失規模解耦來穩定訓練。另外,使用輕量級Transformer模型進一步壓縮表示,同時保持即時性能。
- 開發者:Meta AI
- 模型類型:音頻編解碼器
模型來源
用途
直接使用
EnCodec可直接用作音頻編解碼器,用於音頻信號的即時壓縮和解壓縮。它提供高質量的音頻壓縮和高效的解碼。該模型在各種帶寬上進行了訓練,可在編碼(壓縮)和解碼(解壓縮)時指定。EnCodec有兩種不同的設置:
- 非流式:將輸入音頻分割成1秒的塊,重疊10毫秒,然後進行編碼。
- 流式:在卷積層上使用權重歸一化,輸入不分割成塊,而是在左側進行填充。
下游使用
EnCodec可針對特定音頻任務進行微調,或集成到更大的音頻處理流程中,用於語音生成、音樂生成或文本轉語音等應用。
訓練詳情
模型訓練了300個epoch,每個epoch包含2000次更新,使用Adam優化器,批量大小為64個1秒的示例,學習率為3 · 10−4,β1 = 0.5,β2 = 0.9。所有模型均使用8個A100 GPU進行訓練。
訓練數據
- 語音數據:
- DNS Challenge 4
- Common Voice
- 通用音頻數據:
- 音樂數據:
他們使用四種不同的訓練策略從這些數據集中採樣:
- (s1) 以0.32的概率從Jamendo中採樣單個源;
- (s2) 以相同的概率從其他數據集中採樣單個源;
- (s3) 以0.24的概率從所有數據集中混合兩個源;
- (s4) 以0.12的概率從除音樂外的所有數據集中混合三個源。
音頻按文件進行歸一化,並應用 -10到6 dB之間的隨機增益。
評估
恢復的主觀指標
該模型使用MUSHRA協議(Series, 2014)進行評估,同時使用隱藏參考和低錨點。通過眾包平臺招募註釋者,要求他們在1到100的範圍內對提供的樣本的感知質量進行評分。他們從測試集的每個類別中隨機選擇50個5秒的樣本,並強制每個樣本至少有10個註釋。為了過濾嘈雜的註釋和異常值,我們移除那些在至少20%的情況下對參考錄音評分低於90,或在超過50%的情況下對低錨點錄音評分高於80的註釋者。
恢復的客觀指標
使用ViSQOL()ink)指標以及尺度不變信噪比(SI - SNR)(Luo & Mesgarani, 2019; Nachmani et al., 2020; Chazan et al., 2021)。
結果
評估結果表明,在不同帶寬(1.5、3、6和12 kbps)下,EnCodec優於基線模型。在相同帶寬下將EnCodec與基線模型進行比較時,EnCodec在MUSHRA評分方面始終優於它們。值得注意的是,EnCodec在3 kbps時的平均性能優於Lyra - v2在6 kbps和Opus在12 kbps時的性能。此外,通過在代碼上合併語言模型,可以實現約25 - 40%的帶寬減少。例如,3 kbps模型的帶寬可以減少到1.9 kbps。
總結
EnCodec是一種先進的即時神經音頻壓縮模型,能夠在各種採樣率和帶寬下生成高保真音頻樣本。該模型的性能在不同設置下進行了評估,從1.5 kbps的24kHz單聲道到48kHz立體聲,展示了主觀和客觀結果。值得注意的是,EnCodec採用了一種新穎的僅頻譜圖對抗損失,有效減少了偽影並提高了樣本質量。通過引入損失權重的梯度平衡器,進一步增強了訓練的穩定性和可解釋性。此外,研究表明,在不影響質量的情況下,特別是在低延遲不是關鍵因素的應用(如音樂流)中,可以使用緊湊的Transformer模型實現高達40%的額外帶寬減少。
🔧 技術細節
- 架構:採用流式編碼器 - 解碼器架構,結合量化潛在空間和輕量級Transformer模型。
- 訓練策略:使用單一多尺度頻譜圖對抗器和損失平衡器機制,結合四種不同的採樣策略。
- 評估指標:使用MUSHRA協議進行主觀評估,使用ViSQOL()ink)和SI - SNR進行客觀評估。
📄 許可證
本項目採用MIT許可證。
📖 引用
@misc{défossez2022high,
title={High Fidelity Neural Audio Compression},
author={Alexandre Défossez and Jade Copet and Gabriel Synnaeve and Yossi Adi},
year={2022},
eprint={2210.13438},
archivePrefix={arXiv},
primaryClass={eess.AS}
}







