模型简介
模型特点
模型能力
使用案例
🚀 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}
}







