[PaddleSpeech 原神] 音色克隆之胡桃

简介: [PaddleSpeech 原神] 音色克隆之胡桃

1. 配置 PaddleSpeech 开发环境

安装 PaddleSpeech 并在 PaddleSpeech/examples/other/tts_finetune/tts3 路径下配置 tools,下载预训练模型

# 配置 PaddleSpeech 开发环境
!git clone https://gitee.com/paddlepaddle/PaddleSpeech.git
%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
# 删除软链接
# aistudio会报错: paddlespeech 的 repo中存在失效软链接
# 执行下面这行命令!!
!find -L /home/aistudio -type l -delete
# 配置 MFA & 下载预训练模型
%cd /home/aistudio
!bash env.sh


2 数据集配置

本项目数据集提供了完整的wav、labelx以及MFA对齐标注文件

如果要自行对齐,请去PaddleSpeech查阅完整资料

Finetune your own AM based on FastSpeech2 with multi-speakers dataset.


解压文件中的

音频

work/dataset/胡桃/wav/xx.wav


和标签

work/dataset/胡桃/wav/labels.txt


对齐的textgrid

work/dataset/胡桃/textgrid/newdir/xx.TextGrid

本项目采用胡桃的声音完成


2.1 解压数据集

!unzip /home/aistudio/data/data171682/yuanshen_zip.zip -d work/
!unzip /home/aistudio/work/yuanshen_zip/胡桃.zip -d work/dataset/


2.2 编写执行cmd函数代码

import subprocess
# 命令行执行函数,可以进入指定路径下执行
def run_cmd(cmd, cwd_path):
    p = subprocess.Popen(cmd, shell=True, cwd=cwd_path)
    res = p.wait()
    print(cmd)
    print("运行结果:", res)
    if res == 0:
        # 运行成功
        print("运行成功")
        return True
    else:
        # 运行失败
        print("运行失败")
        return False


2.3 配置各项参数

import os
# 试验路径
exp_dir = "/home/aistudio/work/exp"
# 配置试验相关路径信息
cwd_path = "/home/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3"
# 可以参考 env.sh 文件,查看模型下载信息
pretrained_model_dir = "models/fastspeech2_mix_ckpt_1.2.0"
# # 同时上传了 wav+标注文本 以及本地生成的 textgrid 对齐文件
# 输入数据集路径
data_dir = "/home/aistudio/work/dataset/胡桃/wav"
# 如果上传了 MFA 对齐结果,则使用已经对齐的文件
mfa_dir = "/home/aistudio/work/dataset/胡桃/textgrid"
# 输出文件路径
wav_output_dir = os.path.join(exp_dir, "output")
os.makedirs(wav_output_dir, exist_ok=True)
dump_dir = os.path.join(exp_dir, 'dump')
output_dir = os.path.join(exp_dir, 'exp')
lang = "zh"


2.4 检查数据集是否合法

# check oov
cmd = f"""
    python3 local/check_oov.py \
        --input_dir={data_dir} \
        --pretrained_model_dir={pretrained_model_dir} \
        --newdir_name={new_dir} \
        --lang={lang}
"""
# 执行该步骤
run_cmd(cmd, cwd_path)
    python3 local/check_oov.py         --input_dir=/home/aistudio/work/dataset/胡桃/wav         --pretrained_model_dir=models/fastspeech2_mix_ckpt_1.2.0         --newdir_name=work/dataset/胡桃/textgrid/newdir         --lang=zh
运行结果: 0
运行成功
True


2.5 生成 Duration 时长信息

cmd = f"""
python3 local/generate_duration.py \
    --mfa_dir={mfa_dir}
"""
# 执行该步骤
run_cmd(cmd, cwd_path)
python3 local/generate_duration.py     --mfa_dir=/home/aistudio/work/dataset/胡桃/textgrid
运行结果: 0
运行成功
True


2.6. 数据预处理

cmd = f"""
python3 local/extract_feature.py \
    --duration_file="./durations.txt" \
    --input_dir={data_dir} \
    --dump_dir={dump_dir}\
    --pretrained_model_dir={pretrained_model_dir}
"""
# 执行该步骤
run_cmd(cmd, cwd_path)


2.7. 准备微调环境

cmd = f"""
python3 local/prepare_env.py \
    --pretrained_model_dir={pretrained_model_dir} \
    --output_dir={output_dir}
"""
# 执行该步骤
run_cmd(cmd, cwd_path)
python3 local/prepare_env.py     --pretrained_model_dir=models/fastspeech2_mix_ckpt_1.2.0     --output_dir=/home/aistudio/work/exp/exp
运行结果: 0
运行成功
True


2.8. 微调并训练

不同的数据集是不好给出统一的训练参数,因此在这一步,开发者可以根据自己训练的实际情况调整参数,重要参数说明:

训练轮次: epoch

  • epoch 决定了训练的轮次,可以结合 VisualDL 服务,在 AIstudio 中查看训练数据是否已经收敛,当数据集数量增加时,预设的训练轮次(100)不一定可以达到收敛状态
  • 当训练轮次过多(epoch > 200)时,建议新建终端,进入/home/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3 路径下, 执行 cmd 命令,AIStudio 在打印特别多的训练信息时,会产生错误


配置文件:

/home/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/conf/finetune.yaml

# 将默认的 yaml 拷贝一份到 exp_dir 下,方便修改
import shutil
in_label = "/home/aistudio/PaddleSpeech/examples/other/tts_finetune/tts3/conf/finetune.yaml"
shutil.copy(in_label, exp_dir)
'/home/aistudio/work/exp/finetune.yaml'
epoch = 250
config_path = os.path.join(exp_dir, "finetune.yaml")
cmd = f"""
python3 local/finetune.py \
    --pretrained_model_dir={pretrained_model_dir} \
    --dump_dir={dump_dir} \
    --output_dir={output_dir} \
    --ngpu=1 \
    --epoch={epoch} \
    --finetune_config={config_path}
"""
# 执行该步骤
# 如果训练轮次过多,则复制上面的cmd到终端中运行
run_cmd(cmd, cwd_path)


3 生成音频

输入我们需要生成的文字,即可生成对应的音频文件


3.1 文本输入

text_dict = {
    "0": "大家好,我是 胡桃,今天 天气 很不错啊,大家一起来原神找我玩呀!",
    "1": "hehe,太阳 出 来 我 晒 太阳 ,月亮 出 来 我 晒 月亮 咯。",
    "2": "我是it er hui , 一名 P P D E ,欢迎 大家 来飞桨 社区 找我,谢谢大家 fork 这个项目"
}
# 生成 sentence.txt
text_file = os.path.join(exp_dir, "sentence.txt")
with open(text_file, "w", encoding="utf8") as f:
    for k,v in sorted(text_dict.items(), key=lambda x:x[0]):
        f.write(f"{k} {v}\n")


3.2 调训练的模型

# 找到最新生成的模型
def find_max_ckpt(model_path):
    max_ckpt = 0
    for filename in os.listdir(model_path):
        if filename.endswith('.pdz'):
            files = filename[:-4]
            a1, a2, it = files.split("_")
            if int(it) > max_ckpt:
                max_ckpt = int(it)
    return max_ckpt


3.2 生成语音

# 配置一下参数信息
model_path = os.path.join(output_dir, "checkpoints")
ckpt = find_max_ckpt(model_path)
cmd = f"""
python3 /home/aistudio/PaddleSpeech/paddlespeech/t2s/exps/fastspeech2/../synthesize_e2e.py \
                --am=fastspeech2_mix \
                --am_config=models/fastspeech2_mix_ckpt_1.2.0/default.yaml \
                --am_ckpt={output_dir}/checkpoints/snapshot_iter_{ckpt}.pdz \
                --am_stat=models/fastspeech2_mix_ckpt_1.2.0/speech_stats.npy \
                --voc="hifigan_aishell3" \
                --voc_config=models/hifigan_aishell3_ckpt_0.2.0/default.yaml \
                --voc_ckpt=models/hifigan_aishell3_ckpt_0.2.0/snapshot_iter_2500000.pdz \
                --voc_stat=models/hifigan_aishell3_ckpt_0.2.0/feats_stats.npy \
                --lang=mix \
                --text={text_file} \
                --output_dir={wav_output_dir} \
                --phones_dict={dump_dir}/phone_id_map.txt \
                --speaker_dict={dump_dir}/speaker_id_map.txt \
                --spk_id=0 \
                --ngpu=1
"""
run_cmd(cmd, cwd_path)


3.4 语音展示

import IPython.display as ipd
ipd.Audio(os.path.join(wav_output_dir, "0.wav"))


相关文章
|
2月前
|
自然语言处理 搜索推荐 Docker
CosyVoice实现声音复刻
这篇文章介绍了如何使用CosyVoice平台实现个性化的声音复刻,包括录制样本音频、上传处理以及生成定制化语音的全流程。
448 6
CosyVoice实现声音复刻
|
27天前
|
机器学习/深度学习 人工智能 算法
青否数字人声音克隆算法升级,16个超真实直播声音模型免费送!
青否数字人的声音克隆算法全面升级,能够完美克隆真人的音调、语速、情感和呼吸。提供16种超真实的直播声音模型,支持3大AI直播类型和6大核心AIGC技术,60秒快速开播,助力商家轻松赚钱。AI讲品、互动和售卖功能强大,支持多平台直播,确保每场直播话术不重复,智能互动和真实感十足。新手小白也能轻松上手,有效规避违规风险。
|
7月前
|
编解码 人工智能 语音技术
GPT-SoVits:刚上线两天就获得了1.4k star的开源声音克隆项目!效果炸裂的跨语言音色克隆模型!
GPT-SoVits:刚上线两天就获得了1.4k star的开源声音克隆项目!效果炸裂的跨语言音色克隆模型!
776 3
|
人工智能 自然语言处理 算法
|
容器
借助开源项目,又好又快的实现视频文件”剧情连拍(剧情截图)”功能
借助开源项目,又好又快的实现视频文件”剧情连拍(剧情截图)”功能
694 0
借助开源项目,又好又快的实现视频文件”剧情连拍(剧情截图)”功能
|
人工智能
【必备工具】兔哥视频助手,一键配音、字幕、配图,让你的视频秒变高大上!
通过输入文字,自动生成视频,让你的视频制作更加高效。
1403 0
|
传感器 编解码 人工智能
把B超探头做成贴纸贴在身上,48小时不间断成像,MIT新研究登上Science
把B超探头做成贴纸贴在身上,48小时不间断成像,MIT新研究登上Science
114 0
|
算法 图形学
使用ZBrush制作恶魔模型
3D艺术家Gregg Hartley为大家分享使用ZBrush制作装甲恶魔模型的过程,该项目主要是将旧草图转换为3D角色,介绍在ZBrush和Substance Painter中的工作流程。
266 0
使用ZBrush制作恶魔模型
|
网络协议 算法 机器人
Halcon标定系列(3):我个人总结的“眼在手外“和“眼在手上”的心得笔记
Halcon标定系列(3):我个人总结的“眼在手外“和“眼在手上”的心得笔记
2925 0
Halcon标定系列(3):我个人总结的“眼在手外“和“眼在手上”的心得笔记
|
机器学习/深度学习 数据采集 算法
谷歌Up主自制秃头生成器张东升躺枪,而这款生发GAN让你发际线前进一公里!
最近,国产悬疑剧《隐秘的角落》火爆全网,张东升的秃头形象深入人心,B站up主利用StyleGAN自制了一款秃头生成器,只需几行代码就能完成你的秃头梦想,但是如果你想摆脱中年秃顶的危机,GAN也可以做到!
198 0
谷歌Up主自制秃头生成器张东升躺枪,而这款生发GAN让你发际线前进一公里!