特点
🌍 支持中文:支持普通话,并使用多种数据集进行了测试:aidatatang_200zh、magicdata、aishell3、data_aishell 等。
🤩 PyTorch:支持 PyTorch,并在 1.9.0 版本中测试(最新版本为 2021 年 8 月),支持 GPU Tesla T4 和 GTX 2060。
🌍 Windows + Linux:在 Windows 和 Linux 操作系统(甚至 M1 MACOS)上运行。
🤩 简单且出色:通过重用预训练的编码器/声码器,仅用新训练的合成器即可获得出色效果。
🌍 Web服务器准备就绪:可通过远程调用提供结果。
演示视频
快速开始
1. 安装要求
1.1 通用设置
请参照原始仓库,确保您已经准备好了所有环境。
需要 Python 3.7 或更高版本来运行工具箱。
- 安装 PyTorch。
如果您收到
ERROR: Could not find a version that satisfies the requirement torch==1.9.0+cu102 (from versions: 0.1.2, 0.1.2.post1, 0.1.2.post2 )
的错误提示,这可能是由于 Python 版本过低,请尝试使用 3.9 版本,应该可以成功安装。
-
安装 ffmpeg。
-
运行
pip install -r requirements.txt
来安装其余必要的包。
推荐的环境是
Repo Tag 0.0.1
、Pytorch1.9.0 with Torchvision0.10.0 and cudatoolkit10.2
、requirements.txt
、webrtcvad-wheels
,因为requirements.txt
是几个月前导出的,因此不适用于较新版本。
- 安装 webrtcvad
pip install webrtcvad-wheels
(如有需要)
或
-
使用
conda
或mamba
安装依赖项conda env create -n env_name -f env.yml
mamba env create -n env_name -f env.yml
将创建一个安装了必要依赖项的虚拟环境。通过
conda activate env_name
切换到新环境并开始使用。env.yml 只包含运行项目所需的依赖项,暂时不包括 monotonic-align。您可以查看官方网站安装 GPU 版本的 PyTorch。
1.2 在 M1 Mac 上的设置
以下步骤是直接使用原始
demo_toolbox.py
的解决方法,无需更改代码。
由于主要问题是
demo_toolbox.py
中使用的 PyQt5 包与 M1 芯片不兼容,如果尝试在 M1 芯片上训练模型,可以选择放弃demo_toolbox.py
或尝试项目中的web.py
。
1.2.1 安装 PyQt5
,参考这里。
-
创建并打开 Rosetta 终端,参考这里。
-
使用系统 Python 为项目创建虚拟环境
/usr/bin/python3 -m venv /PathToMockingBird/venv source /PathToMockingBird/venv/bin/activate
-
升级 pip 并安装
PyQt5
pip install --upgrade pip pip install pyqt5
1.2.2 安装 pyworld
和 ctc-segmentation
这两个包似乎是此项目独有的,在原始 Real-Time Voice Cloning 项目中没有。使用
pip install
安装时,这两个包缺少轮子,因此程序尝试直接从 c 代码编译,并找不到Python.h
。
-
安装
pyworld
brew install python
,Python.h
可以通过 brew 安装的 Python 获得。export CPLUS_INCLUDE_PATH=/opt/homebrew/Frameworks/Python.framework/Headers
,brew 安装的Python.h
路径对于 M1 MacOS 是唯一的,需要手动将路径添加到环境变量中。pip install pyworld
应该可以完成安装。
-
安装
ctc-segmentation
同样的方法不适用于
ctc-segmentation
,需要从 github 上的源代码编译它。git clone https://github.com/lumaku/ctc-segmentation.git
cd ctc-segmentation
source /PathToMockingBird/venv/bin/activate
如果尚未部署虚拟环境,激活它。cythonize -3 ctc_segmentation/ctc_segmentation_dyn.pyx
/usr/bin/arch -x86_64 python setup.py build
使用 x86 架构构建。/usr/bin/arch -x86_64 python setup.py install --optimize=1 --skip-build
使用 x86 架构安装。
1.2.3 其他依赖项
-
/usr/bin/arch -x86_64 pip install torch torchvision torchaudio
以 x86 架构安装PyTorch
,这是一个示例,表明它已通过 x86 架构安装。 -
pip install ffmpeg
安装 ffmpeg。 -
pip install -r requirements.txt
安装其他要求。
1.2.4 运行推理时间(带工具箱)
使用 x86 架构运行项目。参考这里。
-
vim /PathToMockingBird/venv/bin/pythonM1
创建可执行文件pythonM1
,以设置/PathToMockingBird/venv/bin
目录下的 Python 解释器。 -
写入以下内容:
#!/usr/bin/env zsh mydir=${0:a:h} /usr/bin/arch -x86_64 $mydir/python "$@"
-
chmod +x pythonM1
设置文件为可执行文件。 -
如果使用 PyCharm IDE,请将项目解释器配置为
pythonM1
(步骤在这里),如果使用命令行 python,则运行/PathToMockingBird/venv/bin/pythonM1 demo_toolbox.py
。
2. 准备模型
请注意,我们使用的是预训练的编码器/声码器,而不是合成器,因为原始模型与中文符号不兼容。这意味着 demo_cli 目前无法使用,因此需要额外的合成器模型。
您可以选择训练自己的模型或使用现有模型:
2.1 使用您的数据集训练编码器(可选)
-
使用音频和 mel 频谱图进行预处理:
python encoder_preprocess.py <datasets_root>
允许参数--dataset {dataset}
来支持您要预处理的数据集。仅使用这些数据集的训练集。可能的名称:librispeech_other、voxceleb1、voxceleb2。使用逗号分隔多个数据集。 -
训练编码器:
python encoder_train.py my_run <datasets_root>/SV2TTS/encoder
对于训练,编码器使用 visdom。您可以通过
--no_visdom
禁用它,但有 visdom 还是很不错的。运行 "visdom" 在单独的 CLI/进程中启动您的 visdom 服务器。
2.2 使用您的数据集训练合成器
-
下载数据集并解压:确保您可以访问文件夹中的所有 .wav 文件。
-
使用音频和 mel 频谱图进行预处理:
`python pre.py <datasets_root <SOURCE_TEXT> | URL | 标识 | 标题 | 实现来源 | | --- | ----------- | ----- | --------------------- | | 1803.09017 | GlobalStyleToken (synthesizer) | 风格标记: 端到端语音合成中的无监督风格建模、控制与转换 | 此仓库 | | 2010.05646 | HiFi-GAN (vocoder) | 高效且高保真语音合成的生成对抗网络 | 此仓库 | | 2106.02297 | Fre-GAN (vocoder) | Fre-GAN: 频率一致性音频合成的对抗性方法 | 此仓库 | |1806.04558 | SV2TTS | 从说话人验证到多说话人文本到语音合成的迁移学习 | 此仓库 | |1802.08435 | WaveRNN (vocoder) | 高效的神经音频合成 | fatchord/WaveRNN | |1703.10135 | Tacotron (synthesizer) | Tacotron: 迈向端到端语音合成 | fatchord/WaveRNN | |1710.10467 | GE2E (encoder) | 用于说话人验证的广义端到端损失 | 此仓库 |
F Q&A
1.我在哪里可以下载数据集?
数据集 | 原始来源 | 替代来源 |
---|---|---|
aidatatang_200zh | OpenSLR | Google Drive |
magicdata | OpenSLR | Google Drive (开发集) |
aishell3 | OpenSLR | Google Drive |
data_aishell | OpenSLR |
解压 aidatatang_200zh 后,你需要解压
aidatatang_200zh\corpus\train
下的所有文件
2.什么是<datasets_root>
?
如果数据集路径为 D:\data\aidatatang_200zh
,那么 <datasets_root>
就是D:\data
3.显存不足
训练合成器:调整 synthesizer/hparams.py
中的 batch_size
//调整前
tts_schedule = [(2, 1e-3, 20_000, 12), # 逐步训练计划
(2, 5e-4, 40_000, 12), # (r, lr, step, batch_size)
(2, 2e-4, 80_000, 12), #
(2, 1e-4, 160_000, 12), # r = 缩减因子 (每次解码迭代合成的mel帧数)
(2, 3e-5, 320_000, 12), # lr = 学习率
(2, 1e-5, 640_000, 12)], #
//调整后
tts_schedule = [(2, 1e-3, 20_000, 8), # 逐步训练计划
(2, 5e-4, 40_000, 8), # (r, lr, step, batch_size)
(2, 2e-4, 80_000, 8), #
(2, 1e-4, 160_000, 8), # r = 缩减因子 (每次解码迭代合成的mel帧数)
(2, 3e-5, 320_000, 8), # lr = 学习率
(2, 1e-5, 640_000, 8)], #
训练声码器-数据预处理:调整 synthesizer/hparams.py
中的 batch_size
//调整前
### 数据预处理
max_mel_frames = 900,
rescale = True,
rescaling_max = 0.9,
synthesis_batch_size = 16, # 用于声码器预处理和推理
//调整后
### 数据预处理
max_mel_frames = 900,
rescale = True,
rescaling_max = 0.9,
synthesis_batch_size = 8, # 用于声码器预处理和推理
训练声码器-训练声码器:调整 vocoder/wavernn/hparams.py
中的 batch_size
//调整前
# 训练
voc_batch_size = 100
voc_lr = 1e-4
voc_gen_at_checkpoint = 5
voc_pad = 2
//调整后
# 训练
voc_batch_size = 6
voc_lr = 1e-4
voc_gen_at_checkpoint = 5
voc_pad = 2
4.如果发生 RuntimeError: Error(s) in loading state_dict for Tacotron: size mismatch for encoder.embedding.weight: copying a param with shape torch.Size([70, 512]) from checkpoint, the shape in current model is torch.Size([75, 512]).
请参考问题 #37
5. 如何提高 CPU 和 GPU 的占用率?
适当调整 batch_size 以提高
6. 如果发生 页面文件太小,无法完成操作
请参考这个 视频 并将虚拟内存更改为100G (102400),例如:当文件位于 D 盘时,将 D 盘的虚拟内存更改。
7. 训练时何时应该停止?
供参考,我的注意力是在18000步后出现的,损失在50000步后降到0.4以下。 </SOURCE_TEXT>