义无反顾马督工,Bert-vits2V210复刻马督工实践(Python3.10)

简介: Bert-vits2更新了版本V210,修正了日/英的bert对齐问题,效果进一步优化;对底模使用的数据进行优化和加量,减少finetune失败以及电音的可能性;日语bert更换了模型,完善了多语言推理。

madugong.jpg

Bert-vits2更新了版本V210,修正了日/英的bert对齐问题,效果进一步优化;对底模使用的数据进行优化和加量,减少finetune失败以及电音的可能性;日语bert更换了模型,完善了多语言推理。

更多情报请参考Bert-vits2官网:

https://github.com/fishaudio/Bert-VITS2/releases/tag/2.1

最近的事情大家也都晓得了,马督工义无反顾带头冲锋,身体力行地实践着横渠四句:为天地立心,为生民立命,为往圣继绝学,为万世开太平。

本次我们基于Bert-vits2的新版本V210,复刻马督工,向他致敬。

Bert-vits2V210整备数据集

我们知道马督工的风格是语速极快,也没啥肢体语言,语调上也基本没有变化,除了换气,基本上就像机关枪一样无限念稿。当然,这也是因为睡前消息内容密度过大导致的,但作为深度学习训练数据集来说,睡前消息节目的音频素材显然是不合格的。

真正好的高质量数据集应该包含以下几个特征:

音色多样性:数据集应该包含目标说话人的多个语音样本,涵盖他们在不同情感状态、不同语速和不同音高下的说话。这样可以捕捉到目标说话人在不同情境下的声音特征。

音频质量:确保语音样本的音频质量高,没有明显的噪声、失真或其他干扰。音频质量的好坏直接影响到复刻结果的质量。

多样的语音内容:语音样本应该包含不同类型的语音内容,例如单词、短语、句子和段落。这有助于捕捉到目标说话人在不同语境下的音色特征。

语音平衡:确保数据集中包含目标说话人的样本数量相对平衡,以避免训练出偏向某些样本的模型。

覆盖不同音高:收集目标说话人在不同音高和音调下的语音样本。这样可以更好地捕捉到他们声音的变化和音高特征。

语音环境:包含不同环境下的语音样本,例如室内、室外、静音和嘈杂环境等。这样可以使复刻的音色更具鲁棒性,适应不同的环境条件。

长度和多样性:语音样本的长度和多样性也是需要考虑的因素。收集包含不同长度和语音风格的样本,以便更好地捕捉到目标说话人的声音特征。

当然了,完全满足上述特点基本不太可能,这里选择马督工和刘女神的一段采访视频:

https://www.bilibili.com/video/BV1sN411M73g/

首先将视频进行下载,这里使用you-get:

pip install you-get

运行命令:

https://www.bilibili.com/video/BV1sN411M73g/

下载成功后,将马督工的声音提取出来。

Bert-vits2V210训练模型

首先克隆笔者fork自官网的v210项目:

git clone https://github.com/v3ucn/Bert-VITS2_V210.git

将素材放入Data/meimei/raw/meimei目录中,注意必须是wav文件。

然后更换新的底模,下载地址:

https://openi.pcl.ac.cn/Stardust_minus/Bert-VITS2/modelmanage/show_model

把Bert-VITS2_2.1-Emo底模放入项目的pretrained_models目录。

同时单独把deberta-v2-large-japanese-char-wwm模型放入到项目的bert/deberta-v2-large-japanese-char-wwm目录中。

由于新增了多维情感模型,所以也需要单独下载模型:

https://huggingface.co/facebook/wav2vec2-large-robust/tree/main

放入项目的emotional目录:

E:\work\Bert-VITS2-v21_demo\emotional>tree /f  
Folder PATH listing for volume myssd  
Volume serial number is 7CE3-15AE  
E:.  
└───wav2vec2-large-robust-12-ft-emotion-msp-dim  
        .gitattributes  
        config.json  
        LICENSE  
        preprocessor_config.json  
        pytorch_model.bin  
        README.md  
        vocab.json

运行脚本,切分素材:

python3 audio_slicer.py

随后进行重采样和文本识别:

python3 short_audio_transcribe.py

接着进行标注:

python3 preprocess_text.py

和V2.0.2不同的是,V2.1需要生成多维情感模型文件:

python3 emo_gen.py

相对于原版,新版增加了,针对训练集的spec缓存,可以有效提高训练效率:

python3 spec_gen.py

最后生成bert模型可读文件:

python3 bert_gen.py

最后开始训练:

python3 train_ms.py

Bert-vits2V210模型推理

模型训练好之后,进入到推理环节,首先修改根目录的config.yml文件:

bert_gen:  
  config_path: config.json  
  device: cuda  
  num_processes: 2  
  use_multi_device: false  
dataset_path: Data\meimei  
mirror: ''  
openi_token: ''  
preprocess_text:  
  clean: true  
  cleaned_path: filelists/cleaned.list  
  config_path: config.json  
  max_val_total: 8  
  train_path: filelists/train.list  
  transcription_path: filelists/short_character_anno.list  
  val_path: filelists/val.list  
  val_per_spk: 5  
resample:  
  in_dir: raw  
  out_dir: raw  
  sampling_rate: 44100  
server:  
  device: cuda  
  models:  
  - config: ./Data/meimei/config.json  
    device: cuda  
    language: ZH  
    model: ./Data/meimei/models/G_0.pth  
    speakers:  
    - length_scale: 1  
      noise_scale: 0.6  
      noise_scale_w: 0.8  
      sdp_ratio: 0.2  
      speaker: "\u79D1\u6BD4"  
    - length_scale: 0.5  
      noise_scale: 0.7  
      noise_scale_w: 0.8  
      sdp_ratio: 0.3  
      speaker: "\u4E94\u6761\u609F"  
    - length_scale: 1.2  
      noise_scale: 0.6  
      noise_scale_w: 0.8  
      sdp_ratio: 0.2  
      speaker: "\u5B89\u500D\u664B\u4E09"  
  - config: ./Data/meimei/config.json  
    device: cuda  
    language: JP  
    model: ./Data/meimei/models/G_0.pth  
    speakers: []  
  port: 7860  
train_ms:  
  base:  
    model_image: "Bert-VITS2_2.1-Emo底模"  
    repo_id: Stardust_minus/Bert-VITS2  
    use_base_model: false  
  config_path: config.json  
  env:  
    MASTER_ADDR: localhost  
    MASTER_PORT: 10086  
    RANK: 0  
    THE_ENV_VAR_YOU_NEED_TO_USE: '1234567'  
    WORLD_SIZE: 1  
  keep_ckpts: 8  
  model: models  
  num_workers: 16  
  spec_cache: true  
translate:  
  app_key: ''  
  secret_key: ''  
webui:  
  config_path: Data/meimei/config.json  
  debug: false  
  device: cuda  
  language_identification_library: langid  
  model: models/G_150.pth  
  port: 7860  
  share: false

在后面的webui配置中写入模型文件名:model: models/G_150.pth。

随后启动推理脚本:

python3 webui.py

就可以进行推理了:

请注意,推理建议使用官方的基于Gradio版本的推理页面,而非FastApi的版本。

结语

本项目只是用于Bert-vits2的研究和测试,毫无疑问,想通过30秒的素材就复刻马督工根本是天方夜谭,但马督工的精神,是我们每一个人都可以复刻的。

相关文章
|
5天前
|
Python
深入理解Python装饰器:从入门到实践####
本文旨在通过简明扼要的方式,为读者揭开Python装饰器的神秘面纱,从基本概念、工作原理到实际应用场景进行全面解析。不同于常规的摘要仅概述内容概要,本文将直接以一段精炼代码示例开篇,展示装饰器如何优雅地增强函数功能,激发读者探索兴趣,随后深入探讨其背后的机制与高级用法。 ####
34 11
|
2天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
1天前
|
设计模式 缓存 开发框架
Python中的装饰器:从入门到实践####
本文深入探讨了Python中装饰器的工作原理与应用,通过具体案例展示了如何利用装饰器增强函数功能、提高代码复用性和可读性。读者将学习到装饰器的基本概念、实现方法及其在实际项目开发中的实用技巧。 ####
13 3
|
5天前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据科学中的应用:从入门到实践
本文旨在为读者提供一个Python在数据科学领域应用的全面概览。我们将从Python的基础语法开始,逐步深入到数据处理、分析和可视化的高级技术。文章不仅涵盖了Python中常用的数据科学库,如NumPy、Pandas和Matplotlib,还探讨了机器学习库Scikit-learn的使用。通过实际案例分析,本文将展示如何利用Python进行数据清洗、特征工程、模型训练和结果评估。此外,我们还将探讨Python在大数据处理中的应用,以及如何通过集成学习和深度学习技术来提升数据分析的准确性和效率。
|
4天前
|
数据采集 IDE 测试技术
Python实现自动化办公:从基础到实践###
【10月更文挑战第21天】 本文将探讨如何利用Python编程语言实现自动化办公,从基础概念到实际操作,涵盖常用库、脚本编写技巧及实战案例。通过本文,读者将掌握使用Python提升工作效率的方法,减少重复性劳动,提高工作质量。 ###
15 1
|
5天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
12 2
|
8天前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
19 2
|
7天前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
20 1
|
9天前
|
Python
探索Python装饰器:从入门到实践
【10月更文挑战第32天】在编程世界中,装饰器是一种特殊的函数,它允许我们在不改变原有函数代码的情况下,增加额外的功能。本文将通过简单易懂的语言和实际案例,带你了解Python中装饰器的基础知识、应用以及如何自定义装饰器,让你的代码更加灵活和强大。
15 2
|
10天前
|
监控 Python
探索Python中的装饰器:从入门到实践
【10月更文挑战第31天】在Python的世界里,装饰器是那些隐藏在幕后的魔法师,它们拥有着改变函数行为的能力。本文将带你走进装饰器的世界,从基础概念到实际应用,一步步揭开它的神秘面纱。你将学会如何用几行代码增强你的函数功能,以及如何避免常见的陷阱。让我们一起来发现装饰器的魔力吧!