【PaddleSpeech进阶】PaddleSpeech小样本合成方案体验
【PaddleSpeech进阶】Speech Web 网页展示一:支持一句话合成,小数据集微调,ERNIE-SAT,建议使用V100GPU运行
PaddleSpeech 小样本合成
🔥 欢迎大家来到 PaddleSpeech 小样本合成运行环境,通过本教程的学习,你可以一键运行 PaddleSpeech 中 demos/speech_web/speech_server/vc.py
所需的后端环境,快速体验 PaddleSpeech 小样本合成功能。
本项目支持:
-
一句话合成:基于 GE2E 和 ECAPA-TDNN 模型的一句话合成方案,可以模仿输入的音频的音色进行合成任务
- GE2E 音色克隆方案可以参考: 【FastSpeech2 + AISHELL-3 Voice Cloning】
- ECAPA-TDNN 音色克隆方案可以参考: 【FastSpeech2 + AISHELL-3 Voice Cloning (ECAPA-TDNN)】
-
小数据微调:基于小数据集的微调方案,内置用12句话标贝中文女声微调示例,你也可以通过一键重置,录制自己的声音,注意在安静环境下录制,效果会更好。你可以在 【Finetune your own AM based on FastSpeech2 with AISHELL-3】中尝试使用自己的数据集进行微调。
-
ENIRE-SAT:语言-语音跨模态大模型 ENIRE-SAT 可视化展示示例,支持个性化合成,跨语言语音合成(音频为中文则输入英文文本进行合成),语音编辑(修改音频文字中间的结果)功能。 ENIRE-SAT 更多实现细节,可以参考:
效果演示:
项目说明:
Aistudio 中不便于展示前端,大家感兴趣的同学可以前往:【SpeechWeb】中通过web_client
,安装 node.js
配置前端环境,在自己的游览器上体验。
喜欢的同学可以点个 ⭐️star⭐️ 支持我们,PaddleSpeech传送门:https://github.com/PaddlePaddle/PaddleSpeech
🎁 学习过程中你遇到任何问题,可以加入PaddleSpeech的交流群进行讨论。

安装 PaddleSpeech 以及试验所需环境
# 下载 PaddleSpeech 源代码
!git clone https://gitee.com/paddlepaddle/PaddleSpeech.git
# 安装 PaddleSpeech
%cd PaddleSpeech
!pip install . -i https://mirror.baidu.com/pypi/simple
# 下载 NLTK
%cd /home/aistudio
!wget -P data https://paddlespeech.bj.bcebos.com/Parakeet/tools/nltk_data.tar.gz
!tar zxvf data/nltk_data.tar.gz
# 安装 speech web 小样本合成需要的工具
# 如果已经执行过一次了就不需要在下载相关模型和工具了
%cd /home/aistudio
!bash env.sh
# 安装 speech server 所需环境
%cd /home/aistudio/PaddleSpeech/demos/speech_web/speech_server
!pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple
启动后端服务
需要在命令行中单独执行,点击左侧 ➕ 号后,新建终端,在终端中执行
cd /home/aistudio/PaddleSpeech/demos/speech_web/speech_server
python vc.py --port 8010
出现下面代码,表示服务启动成功
INFO: Started server process [13554]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8010 (Press CTRL+C to quit)
确保服务启动成功后,再执行下面的体验代码
# requests 模拟前端访问
import requests
def use_api(url, methods, para=None):
if methods == "get":
r = requests.get(url)
else:
r = requests.post(url, data=para)
if r.status_code == 200:
return r
else:
return None
一句话合成功能体验
基于 GE2E 和 ECAPA-TDNN 模型的一句话合成方案,可以模仿输入的音频的音色进行合成任务
GE2E 音色克隆 克隆体验
使用 GE2E 模型作为音色提取模型,实现一句话合成功能
# speech server 的路径
# 后端返回的路径都是相对与这个路径的相对路径
SPEECH_SERVER_PATH = "/home/aistudio/PaddleSpeech/demos/speech_web/speech_server"
# 模拟网页前端,发送 GE2E 音色克隆请求, 40s 左右
import json
url = "http://127.0.0.1:8010/vc/clone_g2p"
text = "欢迎使用飞桨语音套件"
methods = "post"
# 这里我们使用 env.sh 中下载的示例音频
para = {
'wavName': "000001.wav",
'wavPath': "source/wav/vc/upload/000001.wav",
'text': text,
'func': 'ge2e'
}
r = use_api(url, methods, json.dumps(para))
# 看看返回了啥
r.json()
{'code': 0,
'result': {'wavName': '000001.wav',
'wavPath': 'source/wav/vc/out/000001.wav'},
'message': 'ok'}
# 我们听一下克隆的效果怎么样
import IPython.display as ipd
import os
# wavPath 里面是相对 speech_server 的路径
wav_path = os.path.join(SPEECH_SERVER_PATH, r.json()['result']['wavPath'])
ipd.Audio(wav_path)
Your browser does not support the audio element.
ECAPA-TDNN 音色克隆体验
使用 ECAPA-TDNN 模型作为音色提取模型,实现一句话合成功能
# 模拟网页前端,发送 ECAPA-TDNN 音色克隆请求, 30s 左右
import json
url = "http://127.0.0.1:8010/vc/clone_g2p"
text = "欢迎使用飞桨语音套件"
methods = "post"
# 这里我们使用 env.sh 中下载的示例音频
para = {
'wavName': "000001.wav",
'wavPath': "source/wav/vc/upload/000001.wav",
'text': text,
'func': 'ecapa_tdnn'
}
r = use_api(url, methods, json.dumps(para))
# 体验一下效果
# wavPath 里面是相对 speech_server 的路径
wav_path = os.path.join(SPEECH_SERVER_PATH, r.json()['result']['wavPath'])
ipd.Audio(wav_path)
小数据集微调方案
PaddleSpeech开源小样本微调方案,基于aishell3开源多说话人数据集得到预训练模型,通过少量音频数据,同样可以学习新发音人的音色。
# 使用 default 数据集 finetune, Aistudio V100 4min 左右
url = "http://127.0.0.1:8010/finetune/clone_finetune"
methods = "post"
para = {
'wav_path': "source/wav/finetune/default"
}
r = use_api(url, methods, json.dumps(para))
# 看看后端返回了啥,是否成功,成功 code = 0
# result 里面是 试验路径, exp_path
r.json()
{'code': 0,
'result': '/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/tmp_dir/finetune/default',
'message': 'ok'}
# 使用微调后的模型合成声音
url = "http://127.0.0.1:8010/finetune/clone_finetune_syn"
methods = "post"
text = "欢迎使用飞桨语音套件"
para = {
'exp_path': r.json()['result'],
'text': text
}
r = use_api(url, methods, json.dumps(para))
# 看看后端返回结果
r.json()
{'code': 0,
'result': {'wavName': 'itybw.wav',
'wavPath': '/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/source/wav/finetune/out/itybw.wav'},
'message': 'ok'}
# 听一下合成的效果
ipd.Audio(r.json()['result']['wavPath'])
# 听一下合成的效果
ipd.Audio('/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/source/wav/SAT/upload/SSB03540307.wav')
语音-语言跨模态大模型 ERNIE-SAT
语音-语言跨模态大模型 ERNIE-SAT :采用语音-文本联合训练的方式在多语言的数据集上训练,合成声音更加自然,可以承接多种下游任务,支持个性化合成、跨语言合成、语音编辑,可有效降低定制化音库所需数据量。
ERNIE-SAT 个性化合成体验
使用跟输入音频相同的音色合成文本
# ERNIE-SAT 个性化合成体验, 30s 左右
url = "http://127.0.0.1:8010/vc/clone_sat"
methods = "post"
# 用自己的数据进行替换
para = {
'old_str': "请播放歌曲小苹果",
'new_str': "你可以使用我的声音合成其它文本",
'language': "zh",
'function': "synthesize",
'wav': "source/wav/SAT/upload/SSB03540307.wav",
'filename': "SSB03540307.wav"
}
r = use_api(url, methods, json.dumps(para))
r.json()
{'code': 0,
'result': '/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/source/wav/SAT/out/sat_syn_zh_SSB03540307.wav',
'message': 'SAT合成成功'}
# 体验一下合成的声音
ipd.Audio(r.json()['result'])
ERNIE-SAT 跨语言合成体验
使用相同音色,合成其它语言,支持 中文 -> 英文 与 英文 -> 中文
# ERNIE-SAT 跨语言合成体验, 30s 左右
url = "http://127.0.0.1:8010/vc/clone_sat"
methods = "post"
# 用自己的数据进行替换
para = {
'old_str': "请播放歌曲小苹果",
'new_str': "you can speak English",
'language': "zh",
'function': "crossclone",
'wav': "source/wav/SAT/upload/SSB03540307.wav",
'filename': "SSB03540307.wav"
}
r = use_api(url, methods, json.dumps(para))
# 体验一下合成的声音
ipd.Audio(r.json()['result'])
ERNIE-SAT 语音编辑体验
支持语音编辑,可以修改 文本中的部分字符,然后智能拼接
# ERNIE-SAT 语音编辑体验, 30s 左右
url = "http://127.0.0.1:8010/vc/clone_sat"
methods = "post"
# 用自己的数据进行替换
para = {
'old_str': "请播放歌曲小苹果",
'new_str': "请播放音乐小苹果",
'language': "zh",
'function': "edit",
'wav': "source/wav/SAT/upload/SSB03540307.wav",
'filename': "SSB03540307.wav"
}
r = use_api(url, methods, json.dumps(para))
r.json()
{'code': 0,
'result': '/home/aistudio/PaddleSpeech/demos/speech_web/speech_server/source/wav/SAT/out/sat_edit_zh_SSB03540307.wav',
'message': 'SAT合成成功'}
# 体验一下合成的声音
ipd.Audio(r.json()['result'])
欢迎大家加入 PaddleSpeech
相信大家通过上面的学习,已经对小样本合成以及 ERNIE-SAT 有了一个初步的了解,关于各个模型的试验细节,大家可以参考项目最上面的说明,各个功能都有配套的 example 供大家学习和参考。
PaddleSpeech自 2022.5.20 发布 1.0 版本以来,收到了越来越多的开发者贡献提交自己的模型与代码,社区开发者们是 PaddleSpeech 的重要力量,欢迎更多开发者参与到 PaddleSpeech 的开发中!感谢各位开发者们的分享与贡献!
# 去除链接,保存版本
!find -L /home/aistudio -type l -delete
此文章为搬运
原项目链接
更多推荐
所有评论(0)