声音克隆是怎么实现的20分钟看懂multi-speaker-tacotron-tensorflow背后的3篇经典论文Tacotron/Deep Voice 2/Speech Chain【免费下载链接】multi-speaker-tacotron-tensorflowMulti-speaker Tacotron in TensorFlow.项目地址: https://gitcode.com/gh_mirrors/mu/multi-speaker-tacotron-tensorflowmulti-speaker-tacotron-tensorflow 是一个基于 TensorFlow 的多说话人语音合成TTS开源项目实现了声音克隆只需准备目标说话人的少量录音就能让模型用这个人的音色读出任意文字。本文将结合这个项目用 20 分钟带你拆解 Tacotron、Deep Voice 2、Speech Chain 这 3 篇经典论文的核心思想以及从数据准备到合成语音的完整流程——不需要写一行代码新手也能看懂。️ 一句话理解声音克隆文字怎么变成那个人的声音把声音克隆拆开看本质是两步学会文字 → 声音的映射文本转语音模型读到文字后逐帧预测出声音的频谱图再还原成波形把音色绑定到说话人多说话人建模模型内部有一个说话人身份证speaker embedding同一个文字换一张身份证说出来的音色就变了。整个合成链路大致是文字 → 编码器理解语义→ 注意力机制逐字对齐→ 解码器画出梅尔频谱→ 后处理网络补细节→ 线性频谱 → Griffin-Lim 算法还原成波形音频这条链路的完整实现就在 models/tacotron.py 中下面先认识一下三大论文各自解决了什么问题。 三篇经典论文各解决了什么问题1. Tacotron2017端到端语音合成的开创者传统 TTS 系统是一条手工流水线分词、韵律标注、音素转换、声学模型、声码器……环节多、质量互相拖累。Google 的 Tacotron 用一个编码器-解码器 注意力机制的神经网络把整条链路线一次性打通编码器把文字序列变成语义向量核心是 CBHG 结构卷积组 双向 RNN负责理解整句话的语境注意力机制像人朗读时用手指点着字一样让解码器每一步都知道现在该读哪个字解码器循环网络逐步画出梅尔频谱mel spectrogram每步预测 4 帧reduction_factor4速度和质量兼顾。CBHG 的具体实现可看 models/modules.py。2. Deep Voice 22017多说话人的秘密是说话人嵌入Deep Voice 2三菱电机解决的问题是一个模型说 N 种声音。它的核心技巧是给每个说话人学一个向量speaker embedding项目里对应两种注入方式在 hparams.py 的model_type里切换模式思路类比simple把说话人向量直接拼进网络输入和输出在每句话前加个请用小明的声音说deepvoice用说话人向量初始化编码器和解码器的 RNN 初始状态开工前先把嗓子状态调成小明的deepvoice模式的初始化逻辑在 models/tacotron.py说话人嵌入被用来生成编码器 RNN、注意力 RNN 和解码器各层 RNN 的初始状态这样音色从第一步就渗透进整个解码过程。3. Speech Chain2017让模型边说边听自己Speech Chain 论文Listening while Speaking提出了一个很自然的想法真实说话人是边说边听自己的模型也应该是。具体做法是解码器在预测下一帧声音时把模型自己刚生成的频谱而不只是训练时的标准答案喂回前馈网络decoder prenet。这样做的好处是训练和推理时输入分布一致语音更连贯、不容易破音。在本项目中解码器 prenet 接收上一时刻梅尔帧的反馈回路见 models/rnn_wrappers.py 中的DecoderPrenetWrapper。 一图看懂完整合成链路这张架构图从左到右就是文字变声音的全过程左侧编码器文字经字符嵌入Char 1…Char n后经过 PreNet 和CBHGFilter-Bank 卷积组 Highway Layers Bi-GRU提取语义。注意左上角——Tacotron Speaker的说话人嵌入通过 softsign 层影响编码中间注意力 解码器Attention 模块让解码器逐字朗读堆叠的残差 GRUStacked Residual GRU逐步输出梅尔频谱帧 Mel i-1、Mel i、Mel i1右侧后处理 声码PostNetDecoder CBHG细化频谱 → FC 层得到线性频谱 →Griffin-Lim算法把频谱还原成可播放的波形Audio。右侧那个Vocal Speaker框就是 Deep Voice 2 的说话人嵌入入口同一个文字输入换不同说话人最终波形完全不同——这就是克隆任何已注册说话人的原理。 注意力机制模型是如何逐字朗读的注意力attention是 TTS 的手指解码器每一步都会对所有字符算一次权重权重高的字就是正在读的字。下图是本项目训练单说话人模型时注意力权重随训练步数的变化横轴是文字纵轴是时间步可以看到随着 step 增加权重逐渐从一团乱麻收敛成从左到右的一条平滑对角线——模型学会了按顺序读完每个字不会跳字、漏字或重复。项目默认使用单调注意力bah_monBahdanau 单调变体配置在 hparams.py它强制注意力只能从左往右推进从结构上杜绝读回头的怪音非常适合语音合成场景。️ 多说话人训练一个模型N 种音色多说话人模型训练时的注意力对齐画面如下四张子图分别对应四个不同说话人的句子训练时每个样本都带着自己的speaker_id模型要学会同一套发音规律 不同音色。流程很简单见 train.py单说话人python3 train.py --data_pathdatasets/son多说话人先把 hparams.py 中model_type改为deepvoice或simple再传入多个数据目录python3 train.py --data_pathdatasets/son1,datasets/son2 20分钟上手从数据集到合成语音第一步获取项目并安装依赖git clone https://gitcode.com/gh_mirrors/mu/multi-speaker-tacotron-tensorflow pip3 install -r requirements.txt环境要求Python 3.6、TensorFlow 1.x、FFmpeg详见 README.md。第二步准备语音数据集项目要求数据集组织成音频 文本对照的结构核心是一个alignment.json音频路径 → 对应文字示例和目录结构见 README.md。项目还内置了一整套自动化数据准备工具按静音自动切分音频audio/silence.py调用语音识别 API 自动转写文字recognition/google.py对齐原始文本与识别文本recognition/alignment.py英文用户也可以直接用现成的 LJSpeech 数据集转换脚本在 datasets/LJSpeech_1_0/prepare.py。第三步生成训练数据python3 -m datasets.generate_data ./datasets/YOUR_DATASET/alignment.json这一步会把原始音频转成训练用的梅尔频谱、线性频谱和字符序列numpy 文件文本清洗规则英文/韩文在 text/cleaners.py 中切换语言只需修改 hparams.py 里的cleaners参数。第四步开始训练python3 train.py --data_pathdatasets/son训练过程会周期性生成测试音频和注意力对齐图可直观看到手指是否对齐。数据量建议随机初始化需 20 小时以上录音若用预训练模型初始化--initialize_path5 小时以上即可见 train.py。第五步合成你的第一句克隆语音python3 synthesizer.py --load_path logs/son-20171015 --text Winter is coming.或者启动一个带波形动画的 Web 试听界面python3 app.py --load_path logs/son-20171015 --num_speakers1前端页面在 web/templates/index.html多说话人推理与评估脚本分别是 eval.py。 实用小贴士数据质量 数据数量项目作者明确提醒自动生成的对齐数据噪声较大录音环境尽量安静、文本尽量准确音色由数据决定所谓克隆是让模型在目标说话人的录音上训练/微调deepvoice模式对音色分离效果最好版本注意项目基于 TensorFlow 1.x 的contribAPI安装时请选对版本合规提醒项目 DISCLAIMER 强调请勿用于冒用他人声音等不当用途克隆声音请取得本人同意。总结论文核心贡献在项目中的位置Tacotron编码器-解码器 注意力的端到端 TTS 框架models/tacotron.py、models/modules.pyDeep Voice 2speaker embedding 实现多说话人models/tacotron.py、hparams.pySpeech Chain解码器反馈自身输出边说边听models/rnn_wrappers.py看完这三篇论文的分工你就理解了声音克隆的完整图景Tacotron 搭好文字到声音的骨架Deep Voice 2 给骨架装上可切换的音色开关Speech Chain 让模型学会自我监听从而说得更稳。而 multi-speaker-tacotron-tensorflow 把这三者拧成了一个可以跑起来的教学级开源项目——20 分钟从原理到第一句合成语音到这里就算完成了 ✅【免费下载链接】multi-speaker-tacotron-tensorflowMulti-speaker Tacotron in TensorFlow.项目地址: https://gitcode.com/gh_mirrors/mu/multi-speaker-tacotron-tensorflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考