[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"))


相关文章
|
JavaScript
Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)
近日,Bert-vits2-v2.2如约更新,该新版本v2.2主要把Emotion 模型换用CLAP多模态模型,推理支持输入text prompt提示词和audio prompt提示语音来进行引导风格化合成,让推理音色更具情感特色,并且推出了新的预处理webuI,操作上更加亲民和接地气。
Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)
|
机器学习/深度学习 编解码 算法
《探秘目标检测算法:YOLO与Faster R-CNN的原理及发展之旅》
目标检测是计算机视觉的重要任务,旨在识别图像或视频中的目标及其类别。早期依赖滑动窗口和人工特征(如HOG、SIFT),结合SVM等分类器,但计算量大、精度有限。随着深度学习兴起,R-CNN系列(R-CNN、Fast R-CNN、Faster R-CNN)逐步引入CNN和区域提议网络(RPN),显著提升速度和精度。YOLO系列(v1-v8)将检测视为回归问题,直接预测边界框和类别,以速度快著称。近年,基于Transformer的DETR等模型崭露头角,利用自注意力机制捕捉全局信息。未来,目标检测将在精度、速度和泛化能力上取得更大突破。
869 16
|
测试技术 开发者
【北京大学 软件工程】二、软件过程
本文介绍了软件生存周期过程的概念及其分类。软件生存周期是从概念形成到产品淘汰的全周期,涵盖开发、交付、维护等阶段。软件生存周期过程则是这些活动中的一系列相关流程。文中详细描述了基本过程(如获取、供应、开发、运行和维护)、支持过程(如文档、配置管理、质量保证)及组织过程(如管理、基础设施、改进)。此外,还介绍了常见的软件生存周期模型,包括瀑布模型、增量模型、演化模型和喷泉模型,分析了它们的特点和优缺点。
【北京大学 软件工程】二、软件过程
|
数据采集 机器学习/深度学习 存储
大数据的处理流程
【10月更文挑战第16天】
2976 2
|
缓存 并行计算 测试技术
阿里云PAI-全模态模型Qwen2.5-Omni-7B推理浅试
阿里云PAI-全模态模型Qwen2.5-Omni-7B推理浅试
3100 12
|
JavaScript 前端开发
植物大战僵尸Javascript版web游戏源码
植物大战僵尸Javascript版web游戏源码,非常强大,1比1还原电脑版植物大战僵尸游戏,带背景音乐,玩法和原版一模一样。
1112 2
|
Linux Shell 虚拟化
开机自动挂载NTFS分区至Linux:分步指南
在Linux中自动挂载Windows NTFS分区,需创建挂载点(如`/media/c_win`),识别分区(如`/dev/sda1`),获取UUID,并编辑`fstab`文件添加挂载信息。推荐使用UUID以保持稳定性。在VMware环境中可能需添加`force`选项。完成这些步骤后,重启系统,NTFS分区将自动挂载。这对于双系统用户非常方便。
|
安全 Windows
如何解决Windows电脑自动黑屏问题?
【8月更文挑战第27天】以下是解决Windows电脑自动黑屏问题的一些常见方法:检查硬件连接,如显示器和电源线;排查硬件故障,包括显卡、内存和CPU问题;调整电源和睡眠设置;检查系统设置和软件冲突;修复系统文件;调整屏幕亮度;检查和更新BIOS设置等。通过这些步骤,可以帮助诊断并解决大部分黑屏问题。
2450 0
|
安全 Windows
搜狗输入法双击输入框崩溃问题
【8月更文挑战第27天】搜狗输入法双击输入框崩溃可能由多种因素造成,包括软件冲突、输入法版本问题、系统故障、设置错误及硬件问题。建议检查并解决潜在冲突软件,更新输入法版本,修复系统文件,调整输入法设置,以及确保硬件正常工作。通过逐步排查,通常可定位并解决问题。
943 0
|
JSON JavaScript 前端开发
dayjs 中文文档
dayjs 中文文档
1775 0