Highlights
适用于英文的语音量化编码(Speech Codec)模型。
- 更低的比特率
- 更高的量化语音质量
项目介绍
FunCodec 是达摩院语音团队开源的音频量化工具包。 本项目提供了在 LibriTTS 英文数据集上预训练的语音量化模型,可以被应用于低比特率语音通讯、语音离散化表示、zero-shot语音合成等相关的学术研究。 在同等比特率的情况下,该模型获得了优于现有Encodec和SoundStream的量化语音质量,ViSQOL 得分更高。
FunCodec的模型包括域转换模块(Domain Transformation)、编码器(Encoder), 残差量化器(Residual Vector Quantization,RVQ)、解码器(Decoder)和域反转模块(Domain Inversion)。 具体而言:
- 域转换模块:根据需要将音频信号转化为所需的表示形式,包括时域、短时频域、幅度相位域、幅度角度域等
- 编码器:将不同表示形式的信号进行编码,得到较为紧凑的隐层表示
- 残差量化器:对紧凑的隐层表示进行逐层量化,得到多组等长的离散编码,用以表示音频信号
- 解码器:将多组离散编码解码成不同表示形式的音频信号
- 域反转模块:将不同的表示恢复成人耳能够感知的音频信号
更多细节详见:
如何使用模型
在本地机器中推理
如果您有本地推理或定制模型的需求,请前往下载 FunCodec 音频量化工具包。
FunCodec 框架安装
- 安装 FunCodec
# 安装 Pytorch GPU (version >= 1.12.0):
conda install pytorch==1.12.0
# 对于其他版本,请参考 https://pytorch.org/get-started/locally
# 下载项目代码:
git clone https://github.com/alibaba-damo-academy/FunCodec.git
# 安装 FunCodec:
cd FunCodec
pip install --editable ./
使用 FunCodec 提取音频量化编码
接下以 LibriTTS 数据集为例,介绍如何使用 FunCodec 提取量化编码:
# 进入工作目录
cd egs/LibriTTS/codec
model_name="audio_codec-encodec-en-libritts-16k-nq32ds640-pytorch"
# 下载模型
bash encoding_decoding.sh --stage 0 --model_name ${model_name}
# 提取量化编码,输入为 input_wav.scp,结果保存在 outputs/codecs 下
bash encoding_decoding.sh --stage 1 --batch_size 16 --num_workers 4 --gpu_devices "0,1" \
--model_dir exp/${model_name} --bit_width 8000 --file_sampling_rate 16000 \
--wav_scp input_wav.scp --out_dir outputs/codecs
# input_wav.scp 的格式如下:
# uttid1 path/to/file1.wav
# uttid2 path/to/file2.wav
# ...
使用 FunCodec 从量化编码恢复音频
# 恢复出的音频保存在 outputs/recon_wavs 下
bash encoding_decoding.sh --stage 2 --batch_size 16 --num_workers 4 --gpu_devices "0,1" \
--model_dir exp/${model_name} --bit_width 8000 --file_sampling_rate 16000 \
--wav_scp codecs.txt --out_dir outputs/recon_wavs
# codecs.txt 为上一步骤中提取出的量化编码,格式类似:
# uttid1 [[[1, 2, 3, ...],[2, 3, 4, ...], ...]]
# uttid2 [[[9, 7, 5, ...],[3, 1, 2, ...], ...]]
Benchmark
训练配置
- Feature info: raw waveform input
- Train info: Adam, lr 3e-4, batchsize 32, 2 gpu(Tesla V100), accgrad 1, 300000 steps, speechmaxlength 51200
- Loss info: L1, L2, discriminative loss
- Model info: SEANet, Conv, LSTM
- Train config: config.yaml
- Model size: 57.83 M parameters
实验结果 (ViSQOL)
- Test set: LibriTTS-test, ViSQOL scores
testset | 50 tk/s | 100 tk/s | 200 tk/s | 400 tk/s |
---|---|---|---|---|
LibriTTS | 3.64 | 3.94 | 4.16 | 4.29 |
使用方式以及适用范围
运行范围
- 现阶段只能在 Linux-x86_64 运行,暂未适配 Mac 和 Windows 。
使用方式
- 直接推理:可以提取音频信号的离散化表示
- 微调:请使用 FunCodec 中的 run.sh 进行相关实验
使用范围与目标场景
- 适用于相关学术研究,在英文数据集上进行语音量化、离散化编码等任务。
模型局限性以及可能的偏差
- 特征提取流程和工具差异,会对 ViSQOL 的数值带来一定的差异( < 0.1 )
相关论文以及引用信息
@misc{du2023funcodec,
title={FunCodec: A Fundamental, Reproducible and Integrable Open-source Toolkit for Neural Speech Codec},
author={Zhihao Du, Shiliang Zhang, Kai Hu, Siqi Zheng},
year={2023},
eprint={2309.07405},
archivePrefix={arXiv},
primaryClass={cs.Sound}
}
评论