跳转到主要内容

高保真神经网络音频编解码器

项目描述

EnCodec:高保真神经网络音频压缩

linter badge tests badge

这是在高保真神经网络音频压缩 [abs] 论文中提出的EnCodec神经网络编解码器的代码。我们提供了我们的两种多频带模型

  • 一个在24 kHz频率下工作的因果模型,用于单声道音频,并在各种音频数据上进行了训练。
  • 一个在48 kHz频率下工作的非因果模型,用于立体声音频,并在仅音乐数据上进行了训练。

24 kHz模型可以压缩到1.5、3、6、12或24 kbps,而48 kHz模型支持3、6、12和24 kbps。我们还为每个模型提供了一个预训练的语言模型,它可以进一步将表示压缩40%,而不会损失任何质量。

作为参考,我们还提供了我们新颖的MS-STFT判别器的代码。

Schema representing the structure of Encodec,
    with a convolutional+LSTM encoder, a Residual Vector Quantization in the middle,
    followed by a convolutional+LSTM decoder. A multiscale complex spectrogram discriminator is applied to the output, along with objective reconstruction losses.
    A small transformer model is trained to predict the RVQ output.

示例

包括基线在内的示例在我们的示例页面上提供。您还可以通过点击缩略图快速演示EnCodec为我们实现的48 kHz音乐的成果,包括熵编码(原始曲目由Lucille CrewVoyageur I 提供)。

Thumbnail for the sample video.
	You will first here the ground truth, then ~3kbps, then 12kbps, for two songs.

发生了什么?

有关发布详情,请参阅变更日志

安装

EnCodec需要Python 3.8,以及一个合理近期的PyTorch版本(理想情况下为1.11.0)。要安装EnCodec,可以从该仓库运行

pip install -U encodec  # stable release
pip install -U git+https://git@github.com/facebookresearch/encodec#egg=encodec  # bleeding edge
# of if you cloned the repo locally
pip install .

用法

然后,您可以使用EnCodec命令,要么作为

python3 -m encodec [...]
# or
encodec [...]

如果您想直接使用压缩API,请查看encodec.compressencodec.model。有关如何提取离散表示的说明,请参阅以下内容。

模型存储

首次使用时,模型将通过Torch Hub自动下载。有关模型存储位置的信息或如何自定义存储位置的信息,请查看相关文档。

压缩

encodec [-b TARGET_BANDWIDTH] [-f] [--hq] [--lm] INPUT_FILE [OUTPUT_FILE]

给定支持的平台上的任何torchaudio音频文件,使用EnCodec压缩到目标带宽(默认为6 kbps,可以是1.5、3、6、12或24)。OUTPUT_FILE必须以.ecdc结尾。如果没有提供,则与INPUT_FILE相同,将扩展名替换为.ecdc。为了在立体声音频上使用48 kHz的模型,请使用--hq标志。使用-f标志强制覆盖现有输出文件。使用--lm标志使用预训练的语言模型进行熵编码(预期它会慢得多)。

如果输入的采样率或通道数与模型不匹配,命令将自动重新采样/减少通道数。

解压缩

encodec [-f] [-r] ENCODEC_FILE [OUTPUT_WAV_FILE]

给定之前生成的.ecdc文件,这将将其解码为指定的输出wav文件。如果没有提供,输出将默认为输入文件,并以.wav扩展名。使用-f文件强制覆盖输出文件(如果在压缩后解压缩,请注意不要覆盖原始文件!)。如果遇到削波,请使用-r标志,这将调整输出文件以避免削波。

压缩 + 解压缩

encodec [-r] [-b TARGET_BANDWIDTH] [-f] [--hq] [--lm] INPUT_FILE OUTPUT_WAV_FILE

OUTPUT_WAV_FILE具有.wav扩展名(而不是.ecdc)时,encodec命令将压缩并立即解压缩,而不存储中间的.ecdc文件。

提取离散表示

EnCodec模型还可以用于从音频波形中提取离散表示。

from encodec import EncodecModel
from encodec.utils import convert_audio

import torchaudio
import torch

# Instantiate a pretrained EnCodec model
model = EncodecModel.encodec_model_24khz()
model.set_target_bandwidth(6.0)

# Load and pre-process the audio waveform
wav, sr = torchaudio.load("<PATH_TO_AUDIO_FILE>")
wav = wav.unsqueeze(0)
wav = convert_audio(wav, sr, model.sample_rate, model.channels)

# Extract discrete codes from EnCodec
encoded_frames = model.encode(wav)
codes = torch.cat([encoded[0] for encoded in encoded_frames], dim=-1)  # [B, n_q, T]

请注意,48 kHz模型以1秒的块处理音频,重叠1%,并将音频重新归一化以具有单位刻度。对于此模型,model.encode(wav)的输出将是一个列表(对于每1秒的帧),其中包含一个元组(codes, scale),其中scale是一个标量张量。

开发安装

这将安装依赖项和在开发者模式下安装encodec(文件更改将直接反映),以及运行单元测试的依赖项。

pip install -e '.[dev]'

测试

您可以使用以下命令运行单元测试:

make tests

引用

如果您在论文中使用此代码或结果,请引用我们的工作如下:

@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}
}

许可

此存储库在LICENSE文件中找到的CC-BY-NC 4.0许可下发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

encodec-0.1.1.tar.gz (3.7 MB 查看哈希值

上传时间:

由以下支持