1024程序员节——简单AI音色克隆

简介: 1024程序员节——简单AI音色克隆

学生的第一个1024程序员节,简单记录基于百度飞桨平台训练的AI模型,克隆动漫人物音色


今天就是给大家分享一下当前网络直播环境下大火的配音,咱们如何借助计算机的力量直接做到,借助PaddleSpeech基于百度飞桨平台实现


1. 配置 PaddleSpeech 开发环境


相关使用教程:paddlespeech: PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型 (gitee.com)


注:PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型


特性:易用、高效、灵活以及可拓展的实现    


📦 易用性: 安装门槛低,可使用 CLI 快速开始。

🏆 对标 SoTA: 提供了高速、轻量级模型,且借鉴了最前沿的技术。

🏆 流式 ASR 和 TTS 系统:工业级的端到端流式识别、流式合成系统。

💯 基于规则的中文前端: 我们的前端包含文本正则化和字音转换(G2P)。此外,我们使用自定义语言规则来适应中文语境。


多种工业界以及学术界主流功能支持:

🛎️ 典型音频任务: 本工具包提供了音频任务如音频分类、语音翻译、自动语音识别、文本转语音、语音合成、声纹识别、KWS等任务的实现。

🔬 主流模型及数据集: 本工具包实现了参与整条语音任务流水线的各个模块,并且采用了主流数据集如 LibriSpeech、LJSpeech、AIShell、CSMSC,详情请见 模型列表。

🧩 级联模型应用: 作为传统语音任务的扩展,我们结合了自然语言处理、计算机视觉等任务,实现更接近实际需求的产业级应用。


好的,回归重点,安装

  • 强烈建议在 Linux 环境下,3.7 以上版本的 python 上安装 PaddleSpeech
  • 相关依赖:
  • gcc >= 4.8.5
  • paddlepaddle >= 2.4rc
  • python >= 3.7
  • linux(推荐), mac, windows


PaddleSpeech 依赖于 paddlepaddle,安装可以参考 paddlepaddle 官网,根据自己机器的情况进行选择。这里给出 cpu 版本示例,其它版本大家可以根据自己机器的情况进行安装。


pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple


你也可以安装指定版本的paddlepaddle,或者安装 develop 版本。

# 安装2.3.1版本. 注意:2.3.1只是一个示例,请按照对paddlepaddle的最小依赖进行选择。
pip install paddlepaddle==2.3.1 -i https://mirror.baidu.com/pypi/simple
# 安装 develop 版本
pip install paddlepaddle==0.0.0 -f https://www.paddlepaddle.org.cn/whl/linux/cpu-mkl/develop.html


PaddleSpeech 快速安装方式有两种,一种是 pip 安装,一种是源码编译(推荐)。


pip 安装


pip install pytest-runner
pip install paddlespeech


源码编译


git clone https://github.com/PaddlePaddle/PaddleSpeech.git
cd PaddleSpeech
pip install pytest-runner
pip install .


安装之后测试


  • 安装完成后,开发者可以通过命令行或者 Python 快速开始,命令行模式下改变 --input 可以尝试用自己的音频或文本测试,支持 16k wav 格式音频。
  • 你也可以在 aistudio 中快速体验 👉🏻一键预测,快速上手 Speech 开发任务。

 

ok,目前相关基础已经解决,安装测试也是做完,进入下一步


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}
"""


2d206f9220779962329909b3b66b3ee4_828e6ada9f2c4a46b452a6d983289ed6.png

2.5 生成 Duration 时长信息


cmd = f"""
python3 local/generate_duration.py \
    --mfa_dir={mfa_dir}
"""


df50d24777bfe0bdfd80c837f67fd887_c3644d1e30124a6eb5afc3d6f60ac309.png


2.6. 数据预处理


1.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)

1f3ca0eac142c439a8a69b5d6e5d2803_e99764921ad74eafac0c0e3f6444b663.png


2.8. 微调并训练


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


训练轮次: epoch

  1. epoch 决定了训练的轮次,可以结合 VisualDL 服务,在 AIstudio 中查看训练数据是否已经收敛,当数据集数量增加时,预设的训练轮次(100)不一定可以达到收敛状态
  2. 当训练轮次过多(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)
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 这个项目"
}


In [93]

# 生成 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 语音展示


c0b9fa891b6fda923cfd36332002004d_aff8bc0d5c234f5b88f73a66f2d5941c.png


4.总结


在paddlespeech的加持下,音色克隆变成了一件非常简单的事情(虽然效果还不是很好),不过可玩性还是很高的,大家可以去试试,素材包有很多相关文件,大家可以尝试其他人物角色

在前行道路上,欢迎大家来进行友好交流做朋友!



目录
相关文章
|
8天前
|
人工智能 算法 架构师
AI时代程序员的生存与突围从需求分析开始
AI能3秒生成代码框架,还要程序员干什么?
137 9
|
4月前
|
人工智能 自然语言处理 前端开发
AI + 低代码,程序员的副驾还是替代者?
AI + 低代码,程序员的副驾还是替代者?
95 0
|
7月前
|
人工智能 程序员 API
Motia:程序员福音!AI智能体三语言混编,零基础秒级部署
Motia 是一款专为软件工程师设计的 AI Agent 开发框架,支持多种编程语言,提供零基础设施部署、模块化设计和内置可观测性功能,帮助开发者快速构建和部署智能体。
536 15
Motia:程序员福音!AI智能体三语言混编,零基础秒级部署
|
6月前
|
人工智能 运维 算法
AI浪潮下程序员的职业重构与生存指南
当代码生成器能写出比人类更规范的代码时,程序员的价值在哪里?这个问题曾让我陷入长时间的思考
|
6月前
|
人工智能 算法 Java
后端程序员逆袭之路:巧用 AI 工具,拿下高薪 offer
在技术职场中,后端程序员面临诸多挑战,如复杂业务逻辑、繁琐代码编写与调试及持续学习压力。然而,AI 工具的兴起为后端开发带来了全新机遇。智能代码生成工具如飞算 JavaAI 可高效完成需求分析、设计与代码生成;智能调试工具如 CodeGuru 能快速定位问题;知识学习工具如 ChatGPT 助力技术提升。借助这些工具,后端程序员不仅能显著提高项目质量和效率,还能展示技术前瞻性与学习能力,拓展技能边界,从而在求职市场中脱颖而出,顺利拿下高薪 offer。
|
4月前
|
SQL 人工智能 程序员
AI狂飙,程序员饭碗要丢?
AI 编程工具正大幅提升程序员的效率:生成重复性代码(如 CRUD 接口)、解读报错信息加速 Debug、快速生成文档/注释、自动化测试和脚本编写。它们像效率倍增器,让新手更快上手,让老手省去大量“体力活”。 核心冲击在于:​ 单纯编写基础业务逻辑代码(尤其是模式化任务)的价值被稀释,能被 AI 有效替代。 出路是能力跃升,工作重心转移,掌握关键新技能,构筑护城河 本质:​ AI 如同强大新“实习生”。程序员需成为高效“指挥者”——善用 AI 者解决高阶问题腾飞,仅依赖基础编码能力者面临挤压。未来属于驾驭 AI 的程序员。
126 1
|
7月前
|
人工智能 API 语音技术
EmotiVoice:网易开源AI语音合成黑科技,2000+音色情感可控
EmotiVoice是网易有道开源的多语言语音合成系统,支持中英文2000多种音色,通过提示词控制情感输出,提供Web界面和API接口,具备语音克隆等先进功能。
703 43
EmotiVoice:网易开源AI语音合成黑科技,2000+音色情感可控
|
3月前
|
人工智能 架构师 程序员
用户说 | 手把手体验通义灵码 2.0:AI 程序员如何让我从“调参侠”进阶“架构师”?
通义灵码 2.0 是强大的 AI 编程工具,助力开发者从“调参侠”进阶为“架构师”。它支持跨语言开发、智能单元测试生成和图生代码等功能,显著提升开发效率。新增 QwQ 模型具备“代码脑补”能力,可推荐性能优化策略。尽管功能强大,但仍需注意环境隔离与代码审查,避免过度依赖。通义灵码 2.0 不仅是工具,更是开发者的“外接大脑”,帮助应对全栈开发挑战。
269 0
|
6月前
|
人工智能 Java 程序员
Java程序员在AI时代必会的技术:Spring AI
在AI时代,Java程序员需掌握Spring AI技术以提升竞争力。Spring AI是Spring框架在AI领域的延伸,支持自然语言处理、机器学习集成与自动化决策等场景。它简化开发流程,无缝集成Spring生态,并提供对多种AI服务(如OpenAI、阿里云通义千问)的支持。本文介绍Spring AI核心概念、应用场景及开发步骤,含代码示例,助你快速入门并构建智能化应用,把握AI时代的机遇。
1307 61
|
6月前
|
人工智能 自然语言处理 搜索推荐
AI对话像真人!交交:上海交大推出全球首个口语对话情感大模型,支持多语言与实时音色克隆
上海交通大学推出的交交是全球首个纯学术界自研的口语对话情感大模型,具备多语言交流、方言理解、角色扮演和情感互动等能力,通过创新技术实现端到端语音对话和实时音色克隆。
394 14
AI对话像真人!交交:上海交大推出全球首个口语对话情感大模型,支持多语言与实时音色克隆

热门文章

最新文章