尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

VITS2数据预处理实战:梅尔频谱提取、文本音素化与filelist生成全解

VITS2数据预处理实战:梅尔频谱提取、文本音素化与filelist生成全解 VITS2数据预处理实战梅尔频谱提取、文本音素化与filelist生成全解【免费下载链接】vits2VITS2: Improving Quality and Efficiency of Single-Stage Text-to-Speech with Adversarial Learning and Architecture Design项目地址: https://gitcode.com/gh_mirrors/vi/vits2VITS2 是一个基于对抗学习的单阶段文本转语音TTS合成模型其音质与推理效率在同类开源 TTS 项目中表现突出。而要让 VITS2 训练出自然的语音前提是数据预处理梅尔频谱提取、文本音素化、filelist 生成这三步做对了训练才算成功了一半。本文带你从零走一遍 VITS2 的完整数据准备流程。一、先看懂预处理数据喂给模型的谁VITS2 的训练需要文本 token 梅尔频谱成对数据。文本经编码器转为语义表示频谱则经归一化流与解码器还原为波形图中 Input Sequences 正是预处理阶段产出的音素 token 序列文本侧质量直接决定h_text的上限。二、第一步音频重采样与质量检测 拿到原始数据集如 LJSpeech、VCTK后先统一音频规格。1. 批量重采样preprocess/audio_resampling.py 提供了一套完整的批量处理流程每条音频依次经过静音裁切trim_wavtop_db40峰值归一化normalize_peak防止削波失真重采样到目标采样率VITS2 默认 22050 Hz见 datasets/ljs_base/config.yaml全程用ProcessPoolExecutor多进程并行几十 GB 的数据也能在合理时间内跑完。2. 损坏文件排查preprocess/audio_find_corrupted.ipynb 用于批量找出无法解码的损坏 wav避免训练中途报错中断。三、第二步梅尔频谱提取全解 梅尔频谱是 VITS2 训练的主输入核心脚本是 preprocess/mel_transform.py只需两行命令即可对全量音频执行python preprocess/mel_transform.py --data_dir 音频目录 -c datasets/ljs_base/config.yaml关键参数定义在 config.yaml 的data段参数LJSpeech 默认值含义sample_rate22050采样率必须与重采样结果一致n_fft2048FFT 窗口大小hop_length256帧移决定时间分辨率win_length1024分析窗长n_mels80梅尔维度工程上它有两个值得学习的点按128 条/批做批量矩阵运算以优化 I/O并用 32 进程并发提速。产物是每条 wav 对应的.spec.pt张量文件训练时直接读取无需重复计算。频谱最终进入流模型与解码器被映射为潜在表示z四、第三步文本音素化与词表构建 VITS2 不直接吃字母而是吃IPA 音素。整条流水线由 config 中的text_cleaners依次驱动phonemize_text → add_spaces → tokenize_text → add_bos_eos音素化text/cleaners.py 中phonemize_text调用 espeak 后端将文本转为带音强标记的 IPA这是最耗时的步骤词表构建preprocess/vocab_generation.ipynb 基于全量音素序列统计生成 datasets/ljs_base/vocab.txt共129 个 token含pad、unk、bos、eos、space等特殊符号定义于 text/symbols.py未知音素兜底训练与推理时 OOV 符号统一映射为unkset_default_index(UNK_ID)保证流水线不崩溃。⚠️新手最容易踩的坑更换数据集或语言language: en-us后必须重新生成 vocab.txt否则bos、eos之外的音素 token ID 与旧词表错位。五、第四步生成 filelist filelist 是训练器data_utils.py读取数据清单的唯一入口格式为制表符分隔的音频路径|token单说话人LJSpeech路径|token_id 序列可直接看 datasets/ljs_base/filelists/train.txt 的样例多说话人VCTK路径|说话人id|文本见 datasets/vctk_base/filelists/vctk_audio_sid_text_train_filelist.txt共 43470 条训练样本。生成脚本 datasets/ljs_base/prepare/filelists.ipynb 的完整步骤是读取 metadata → 文本清洗音素化 → 构建词表 → 转为 token ID →随机打乱后切分train/val/testLJSpeech 取 100 条验证、500 条测试。之所以要预先清洗config 中cleaned_text: true是因为音素化很慢缓存 token 后训练阶段零开销。六、数据质量与时长对齐 最后一张图揭示了预处理数据准不准为什么关键——VITS2 用MAS单调对齐搜索让文本 token 与梅尔帧精确对齐时长判别器与预测器直接依赖这份对齐若音频截断、静音残留或文本与音频错配MAS 对齐会学到错误的时长分布表现为合成时吞字、拖音。因此重采样阶段的裁切与峰值归一化不是锦上添花而是对齐质量的底线。七、新手避坑清单 ✅采样率不一致→mel_transform.py会直接 assert 报错先跑重采样词表过期→ 换数据集/语言后务必重建 vocab.txtfilelist 分隔符→ 必须是制表符\t 管道符|手动编辑时别用空格替代切分顺序→ 先 shuffle 再切分避免同批次音频扎堆在 val/test多说话人→ 别忘了 filelist 中间的 speaker id 字段且 config 中n_speakers要大于 0。写在最后VITS2 的数据预处理链条可以概括为一句话统一音频规格 → 批量提取梅尔频谱 → 文本音素化建词表 → 生成 train/val/test filelist。所有脚本都集中在 preprocess/ 与 datasets/ 目录下配合 preprocess/README.md 中的进度清单你可以按 LJSpeech 单说话人流程先跑通再扩展到 VCTK 多说话人场景。数据这块地基打牢了后面的对抗训练才能真正发挥 VITS2 的潜力 【免费下载链接】vits2VITS2: Improving Quality and Efficiency of Single-Stage Text-to-Speech with Adversarial Learning and Architecture Design项目地址: https://gitcode.com/gh_mirrors/vi/vits2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表