菜单

数据预处理

相关源文件

本页面介绍了实时语音克隆系统的语音数据预处理流程。数据预处理是关键步骤,它将原始音频文件转换为适合系统三个核心组件:说话人编码器(Speaker Encoder)、合成器(Synthesizer)和声码器(Vocoder)进行训练和推理的格式。

有关预处理后模型训练的信息,请参阅 训练模型

预处理流程概述

预处理流程包括几个步骤,为SV2TTS框架的每个组件准备数据。每个组件都需要不同形式的预处理数据。

来源:encoder_preprocess.py1-71 synthesizer_preprocess_audio.py1-47 synthesizer_preprocess_embeds.py1-25

通用音频预处理步骤

系统在整个过程中使用多种音频预处理操作来标准化音频输入。

音频加载和重采样

第一步是加载音频文件并将其标准化到一致的采样率。

来源:encoder/audio.py19-42

音量归一化

对音频进行归一化以确保一致的音量水平。

来源:encoder/audio.py111-117

静音修剪

移除音频中的长静音以提高训练效率。

静音修剪算法使用WebRTC VAD(语音活动检测)来识别发声片段。

  1. 音频按窗口(默认为30毫秒)进行处理。
  2. 每个窗口都进行语音活动检测。
  3. 使用移动平均来平滑语音检测结果。
  4. 二值膨胀操作扩展发声区域,以防止结果出现断断续续的情况。
  5. 最终掩码被应用于仅保留发声部分。

来源:encoder/audio.py68-108

梅尔频谱图转换

将音频波形转换为梅尔频谱图,这更适合神经网络处理。

来源:encoder/audio.py53-65 vocoder/audio.py45-81 synthesizer/audio.py51-65

编码器数据预处理

说话人编码器需要来自语音样本的梅尔频谱图来学习说话人的特征。

编码器预处理命令

python encoder_preprocess.py <datasets_root> [options]

此命令预处理LibriSpeech、VoxCeleb1和VoxCeleb2等数据集的音频。

编码器预处理流程

对于每个说话人

  1. 创建一个说话人目录
  2. 处理该说话人的每个音频文件
  3. 归一化并修剪静音
  4. 转换为梅尔频谱图
  5. 保存预处理后的数据
  6. 创建用于训练的元数据

对于VoxCeleb数据集,会执行额外的过滤步骤,仅选择英语说话人。

来源:encoder/preprocess.py58-184

合成器数据预处理

合成器需要对齐的文本和音频数据,以学习从文本到梅尔频谱图的映射。

合成器预处理命令

# Step 1: Preprocess audio and text
python synthesizer_preprocess_audio.py <datasets_root> [options]

# Step 2: Create embeddings using the trained encoder
python synthesizer_preprocess_embeds.py <synthesizer_root> -e <encoder_model>

合成器预处理流程

合成器预处理有两个主要路径:

  1. 对于带有对齐信息的的数据集(如LibriSpeech)
    • 解析对齐文件以获取文本-音频对
    • 在静音点分割长发音
  2. 对于不带对齐信息的的数据集
    • 处理音频文件
    • 从相应的.txt文件中加载文本

对于两条路径,后续步骤是相似的:

  1. 预处理音频(归一化、修剪静音)
  2. 过滤掉太短或太长的样本
  3. 生成梅尔频谱图
  4. 保存处理后的音频和梅尔频谱图
  5. 创建用于训练的元数据

音频预处理后,第二步使用训练好的编码器模型创建说话人嵌入。

来源:synthesizer/preprocess.py13-226 synthesizer_preprocess_audio.py1-47 synthesizer_preprocess_embeds.py1-25

声码器数据预处理

声码器需要配对的音频和梅尔频谱图,以学习从频谱图映射回波形的模型。

声码器使用在合成器预处理阶段创建的梅尔频谱图和相应的音频文件。其他处理可能包括:

  1. 对音频应用预加重(pre-emphasis)
  2. 将音频转换为 mu-law 表示
  3. 将处理后的音频与相应的梅尔频谱图配对

来源:vocoder/audio.py19-107 vocoder_train.py1-53

预处理参数

控制预处理行为的关键参数在配置文件中定义。

参数描述默认值用途
sample_rate音频采样率16000 赫兹所有组件
n_fft频谱图的 FFT 大小800合成器、声码器
num_mels梅尔频带数80合成器、声码器
hop_size帧移(采样点)200合成器、声码器
win_size窗口大小(采样点)800合成器、声码器
mel_n_channels梅尔频带数40编码器
mel_window_length窗口长度(毫秒)25编码器
mel_window_step窗口步长(毫秒)10编码器
silence_min_duration_split分割时的最小静音时长(秒)0.4合成器
utterance_min_duration保留的最小发音时长(秒)1.6合成器
vad_window_lengthVAD 窗口长度(毫秒)30编码器
vad_moving_average_widthVAD 平滑宽度8编码器
vad_max_silence_length保留的最大静音帧数6编码器
audio_norm_target_dBFS归一化的目标 dB 值-30编码器
trim_silence是否修剪静音True合成器
clip_mels_length是否裁剪频谱图True合成器

来源:encoder/params_data.py(推断),synthesizer/hparams.py21-89

数据目录结构

预处理后,数据按以下结构组织:

<datasets_root>/SV2TTS/
├── encoder/
│   ├── <speaker_id>/
│   │   ├── <utterance_id>.npy  # Mel spectrograms for encoder training
│   │   └── _sources.txt        # Source file references
│   └── Log_*.txt               # Processing logs
├── synthesizer/
│   ├── mels/
│   │   └── mel-<utterance_id>.npy  # Mel spectrograms for synthesizer
│   ├── audio/
│   │   └── audio-<utterance_id>.npy  # Processed audio
│   ├── embeds/
│   │   └── embed-<utterance_id>.npy  # Speaker embeddings
│   └── train.txt               # Metadata for training
└── vocoder/
    └── ...                     # Vocoder training data

来源:encoder_preprocess.py55-60 synthesizer_preprocess_audio.py37-42 synthesizer/preprocess.py22-27

预处理工作流程总结

按照此序列的预处理和训练步骤,为完整的语音克隆系统做好准备。

来源: encoder_preprocess.py1-71 synthesizer_preprocess_audio.py1-47 synthesizer_preprocess_embeds.py1-25 encoder_train.py1-44 synthesizer_train.py1-36 vocoder_train.py1-53