语音编解码
语音编解码
这是ESPnet2的编解码器配方模板。
目录
配方流程
编解码器配方包含9个阶段。
- 数据准备
数据准备阶段。您有两种方法可以生成数据:
ESPnet格式:
它会调用local/data.sh在data/目录下创建Kaldi风格的数据目录,用于训练集、验证集和评估集。
需要注意的是,由于我们通常只需要波形数据来训练模型,因此可以直接使用wav.scp进行模型训练。不过,如果您希望使用额外信息(如文本转录、说话人信息)进行评估,我们可能需要完整的kaldi风格支持。
另请参阅:
- 音频转储/嵌入准备
音频转储阶段。此阶段会重新格式化数据目录中的wav.scp文件。
如果指定kaldi,我们还会额外提取MFCC特征和VAD决策。
- 移除长/短数据
处理阶段,用于从训练和验证数据中移除过长或过短的语音片段。您可以通过--min_wav_duration和--max_wav_duration参数调整阈值。
- 编解码器统计数据收集
统计计算阶段。该阶段收集输入和输出的形状信息,并在需要时计算用于特征归一化的统计量(训练数据的均值和方差)。
- 编解码器训练
编解码器模型训练阶段。您可以通过--train_config和--train_args选项更改训练设置。
另请参阅:
- 编解码器解码
编解码器模型解码阶段。您可以通过--inference_config和--inference_args修改解码设置。
另请参阅:
- 编解码器评分
编解码器模型评分阶段。评分由VERSA支持。您可以通过--scoring_config和--scoring_args更改评分设置。
另请参阅:
- (可选) 打包结果以上传
打包阶段。将训练好的模型文件打包,为上传至Hugging Face做准备。
- (可选) 将模型上传至Hugging Face
将训练好的模型上传至Hugging Face以便分享。更多信息请参阅Docs。
如何运行
这里,我们展示使用egs2/libritts/codec1运行配方的流程。
进入配方目录。
$ cd egs2/libritts/codec1如需更改下载目录,请修改db.sh中的libritts变量。
$ vim db.sh如需使用作业调度器,请修改cmd.sh和conf/*.conf文件。详情请参阅using job scheduling system。
$ vim cmd.sh运行run.sh脚本,该脚本会执行上述所有阶段的操作。
$ ./run.sh默认情况下,我们使用conf/train.yaml配置训练Tacotron2,其中feats_type=raw + token_type=phn。
然后,您可以在配方目录中看到以下目录。
├── data/ # Kaldi-style data directory
│ ├── dev/ # validation set
│ ├── eval1/ # evaluation set
│ └── tr_no_dev/ # training set
├── dump/ # feature dump directory
│ └── raw/
│ ├── org/
│ │ ├── tr_no_dev/ # training set before filtering
│ │ └── dev/ # validation set before filtering
│ ├── eval1/ # evaluation set
│ ├── dev/ # validation set after filtering
│ └── tr_no_dev/ # training set after filtering
└── exp/ # experiment directory
├── codec_stats_raw_phn_tacotron_g2p_en_no_space # statistics
└── codec_train_raw_phn_tacotron_g2p_en_no_space # model
├── tensorboard/ # tensorboard log
├── images/ # plot of training curves
├── decode_train.loss.ave/ # decoded results
│ ├── dev/ # validation set
│ └── eval1/ # evaluation set
│ ├── wav/ # generated wav via Griffin-Lim
│ ├── feats_type # feature type
│ └── speech_shape # shape info of generated features
├── config.yaml # config used for the training
├── train.log # training log
├── *epoch.pth # model parameter file
├── checkpoint.pth # model + optimizer + scheduler parameter file
├── latest.pth # symlink to latest model parameter
├── *.ave_5best.pth # model averaged parameters
└── *.best.pth # symlink to the best model parameter loss首次使用时,建议通过--stage和--stop-stage选项逐步执行每个阶段。
$ ./run.sh --stage 1 --stop-stage 1
$ ./run.sh --stage 2 --stop-stage 2
...
$ ./run.sh --stage 8 --stop-stage 8这可能有助于您理解每个阶段的处理流程和目录结构。
支持的模型
您可以通过修改codec.sh中--train_config选项对应的*.yaml配置文件来训练以下模型。
当前支持的模型(您可以参考libritts配方,因为我们通常从该语料库开始)。
常见问题
预训练的编解码器模型及使用方法
我们在ESPnet huggingface中提供了预训练的编解码器模型
预训练模型的快速使用方法如下:
from espnet2.bin.gan_codec_inference import AudioCoding
import numpy as np
# the model tag can be found in ESPnet huggingface models
codec_api = AudioCoding.from_pretrained(model_tag="espnet/libritts_soundstream16k")
audio_info = codec_api(np.zeros(16000, dtype=np.float32))如需高级用法(例如批量标记化和自动打包到其他任务),请参阅 egs2/TEMPLATE/codec1/scripts/feats/codec_tokenization.sh
