首页 每日干货分享 利用AI语音克隆与SO-VITS-SVC技术实现个性化歌唱声音转换的端到端解决方案

利用AI语音克隆与SO-VITS-SVC技术实现个性化歌唱声音转换的端到端解决方案

发布时间: 浏览量:1 0

人工智能语音克隆是一种技术,它能捕捉声音的独特特征,接着以准确性复制该声音。这种技术不但能够让我们复制现有的声音,而且也能创造全新的声音。它是一种工具,可彻底改变内容创作,从个性化歌曲到自定义画外音,开辟出一个超越语言以及文化障碍的创意世界。

本文会提供一种解决方案,该方案利用AI语音克隆技术,通过训练自定义的模型,能把任何音频转换成选定艺术家的音调呀,甚至还能转换成自己的声音呢,这是一种端到端的解决方案。

技术背景

在眼下这篇文章里,我们所运用的技术,被称作歌唱声音转换( Voice ),尤其是那个名为SO-VITS-SVC的系统,其全称是“ VITS Voice ”。

SO - VITS - SVC系统展现了借助深度学习技术的声音转换(SVC)的繁杂实现情形,对于这个系统的领会范畴囊括了知晓其运用的特定机器学习架构以及算法,。

1、变分推理和生成对抗网络

核心将文本转变为语音的变分推理架构属于SO-VITS-SVC,该系统把变分自编码器与生成对抗网络巧妙结合,在SVC里,mel谱图是音频信号的关键表征,借助VAE对mel谱图的分布予以建模,这对捕捉语音潜在变量有益。

按下以式子来表示VAE损失函数,在这个式子之中,将x作为输入 Mel 谱图,其中z是潜变量,而KL是 -散度。

上头那个公式把VAE损失函数给封装起来了,借由 - 散度让mel谱图的重建以及潜空间的正则化达到了平衡 。

GAN增强了合成音频的那种真实感,GAN里有种鉴别器,它会对生成器的输出展开判别,进而提高了生成器的精度,GAN的损失函数是这样的,。

GAN损失函数把对抗训练动态给展示了出来,此项展示有力推动生成模型生成了那种难以被区分开来的歌声 。

要是想着去全面知晓一下变分自编码器(VAEs)以及生成对抗网络(gan)的情况,往下呈现的便是原始论文 ,。

适用于变分自编码器的情况,有作者D. P. 以及作者M. ,其论文题目为“自动贝叶斯” ,该论文发布于arXiv平台,编号为1312.6114 ,发布时间是2013年 。

生成对抗网络:,国际计算机学会,等人。“ .” 论文预印本库:1406.2661,2014年。

2、浅扩散过程

如所附呈现,浅扩散历程起始于噪声样本,借由一连串变更逐步精细化为结构化梅尔谱图 。

上方的图呈现出了SO-VITS-SVC的合成流程,先是从初始噪声生成开始,这初始噪声是浅扩散模型的,接着到mel谱图的细化,最后是最终可听见声音输出时的语音编码。

初始噪声样本:噪声的视觉表示,作为扩散过程的起点。

在扩散模型里,噪声历经一系列步骤,从无序状态逐步过渡到结构化的mel谱图。这里面,xt是步骤t之数据,并且ε代表高斯噪声。有那样一些转换步骤。

上面公式表明了扩散进程里的逐步转变,把随机噪声转换成结构化数据,并捕捉目标歌声的细微差异。在SO-VITS-SVC的情形下,“浅”表示更少的层或者步骤,于计算效率与音频质量之间达成平衡。

进行mel谱图优化,该过程所产生的结果是形成了一个mel谱图,此mel谱图将歌唱声音的音频内容予以封装,从而为接下来的合成阶段做好相应准备。

声音编码,最后的那个步骤,会把mel谱图转变成声音波形,也就是能听到的歌声 。

如果想深入探索扩散模型,请看一下的资料:

Soohl dash J et al Deep using stop arXiv colon 1503 dot 03585逗号 2015句号。

合,J等 ,“ ” ,阿列克谢·里赫曼·伊戈尔·维克托罗维奇·阿列克谢耶夫·里赫曼·伊戈尔·维克托罗维奇·。

3、完整流程与SVC系统的整合

在浅层扩散模型把噪音结构化为更具连贯性的形式之后,如同前面所提及的图表这般呈现,所生成的mel谱图捕获了歌唱声音那微妙的音频内容。此mel谱图充任着原始且非结构化数据与最终声音输出之间的关键纽带。

接下来运用声码器把优化过的 mel 谱图转变为音频波形,在这一环节中呀,会从视觉数据转化成可听见的歌唱声音,声码器的功能呢是合成 mel 谱图中所捕捉到的音高、音色以及节奏的细微差异,进而产生最终的歌唱声音输出 。

为达成高保真度的合成之目的,SO-VITS-SVC系统会历经重新的训练以及优化这一进程。训练涵盖对结合了VAE、GAN以及扩散模型组件贡献的损失函数予以优化。此种优化借助诸如随机梯度下降或者Adam等算法来开展,其最终的目标是将总体损失降至最低限度。这个过程能够确保最终的输出在音色这一方面、音高方面以及节奏方面与目标歌唱声音高度相似。

此过程的最终产物系一个和目标歌唱声响极为相像的合成声音,于维持源声音的音乐特质以及表现力方面细微差别的能力之际,采用目标的音色特性,这乃是SO-VITS-SVC系统复杂性的呈现,。

4、使用的库

AI语音克隆技术_SO-VITS-SVC歌声转换系统_ai克隆声音的软件叫什么

用于实时歌声转换的专业工具,是上的SO-VITS-SVC Fork,它是原始SO-VITS-SVC项目的分支,该分支提供了增强功能,比如使用CREPE进行更准确的音高估计,拥有图形用户界面(GUI),具备更快的训练时间,还具有使用pip安装工具的便利性 。

在原始存储库那里,它把一些相关问题进行了集成,同时还予以修复。而且它有着实时语音转换的支持,接着呢,我们会来演示一下怎么使用它。

AI声音克隆

我们平日常说的推理阶段,就是声音克隆,这是个神经网络模型在数据集上接受训练,能理解特定声音时,会运用所学到的声音去生成新内容的过程。

于这个阶段之中,我们能够借由向预训练的模型给予新的输入,此新输入为原始的声音音频,以此来促使 AI“唱歌”,而后该模型将会在原始声音音频之上生成模仿艺术家歌唱风格的输出 。

1、设置环境

为简单起见,我们将创建一个心的虚拟环境,然后使用它

conda create -n sovits-svc
conda activate sovits-svc

安装必要的库。

!python -m pip install -U pip wheel
%pip install -U ipython
%pip install -U so-vits-svc-fork

如果你运行svc命令报错,例如下图

那么就得运用pip进行卸载掉,随后运用pip再度安装。这大概是由于某些依赖未曾完整地安装,因而卸载之后重新安装就行得通了。

2、预训练模型

在上提供了很多预训练模型

我们直接下载使用:

from huggingface_hub import hf_hub_download
import os

repo_id = 将“Entreprenerdly/drake-so-vits-svc”改写为:“致力于创业的模式下所涉及的/与德雷克相关的某种。
local_directory = '.'
获取,那配置,名为json的,文件,将其下载 。
config_file等于,hf_hub_download所进行的步骤,所产生的结果 。
repo_id=repo_id,
filename='config.json',
local_dir=local_directory,
local_dir_use_symlinks=False
)
建立当前目录之中配置文件的路径 ,将其构造出来 。 文件路径 ,对其进行构造出 ,是当前目录里的那个配置文件的路径要构造 。 是当前目录之中的配置文件的路径去构造 , 把它构造出来 。 要。
请问原句完整内容是什么呢?仅这部分“local_config_path = os.path.join(local_directory, ” 不太足以完成准确改写呵,请补充后让我继续为您操作。'config.json')
print(f"Downloaded config file: {local_config_path}")
# Download the model file
model_file = hf_hub_download(
repo_id=repo_id,
filename='G_106000.pth',
local_dir=local_directory,
local_dir_use_symlinks=False
)

局部模型路径等于应用操作系统路径拼接函数将局部目录串联起来 ,。'G_83000.pth')
print(f"Downloaded model file: {local_model_path}")

3、选择一个干净的音频文件

接下来要做的就是复制音频,然而这里要求音频得是仅有人声的、干净的一个音频文件,要是音频当中的噪声较多,那我们就得手动去做预处理。由于源音频的质量会对语音转换的保真度产生显著影响,所以一直都建议使用高质量且干净的录音。

import requests
vocals_url = 把这个当作一个链接来看待,它是一串字符组合,其中包含了特定的网址格式,即https://drive.google.com/uc?id=154awrw0VxIZKQ2jQpHQQSt__cOUdM__y,句号。
response = requests.get(vocals_url)
with open('vocals.wav', "wb") as file:
file.write(response.content)
display(Audio('vocals.wav', autoplay=True))

4、运行推理

from IPython.display import Audio, display
import os
# Filenames
audio_filename = 'vocals.wav'
model_filename = 'G_106000.pth'
config_filename = 'config.json'
构建完整的本地路径,将它们组合起来,使其成为一个可访问的路径形态,最终形成完整的本地路径结构,这一过程需要。
audio_file = f"\"{os.path.join('.', audio_filename)}\""
model_path = f"\"{os.path.join('.', model_filename)}\""
config_path = f"\"{os.path.join('.', config_filename)}\""
运行推理命令时,要注意相关参数的设置,确保其准确性,以便得到预期的结果,进而能够有效地应用于实际场景,达成。
在特定情况下运用,针对 !svc 的条件下,进行如此这般的操作,即对 {音频文件} 实施某种推断这一行为,借助 {模型路径} 所关联的模型,并且依据 {配置路径} 所规定的配置来。

5、显示输出

可以直接在笔记本或任何界面中显示输出音频:

from IPython.display import Audio, display
经由输出音频文件的路径,是怎样的路径,是什么样的输出音频文件的路径呢,在哪里的路径,是关于输出音频文件的。
output_audio_path = "vocals.out.wav"
# Display the output audio
展示,音频相关内容,其路径为输出音频路径,具备自动播放属性 , = (这里表述不完整呀,你看是不是有遗漏信息呢,应该还有后续相关内容)。True))

使用GUI

存在这样一个情况,SO-VITS-SVC系统给出了一个具备可选择性的GUI ,其目的在于去执行语音转换 ,并且能够运用以下所示的命令将它启动 。

svcg

训练自己的AI模型

我们在上面进行展示的是,运用预训练模型的推理进程,接下来我们要去介绍怎样开展自身模型的训练 。

我们要呈现运用SO-VITS-SVC系统去训练自定义歌声转换模型所需的那些步骤,先起始于准备数据集,接着开展环境设置以及模型训练,最终借助从现有的音频剪辑当中生成歌声来予以生成 。

AI语音克隆技术_SO-VITS-SVC歌声转换系统_ai克隆声音的软件叫什么

此项任务所需计算资源庞大,需具备高端GPU以及大量VRAM的系统,这大量VRAM通常超过10GB。对于那些个人硬件或许不符合这些要求的人而言,Colab提供了一种可行的替代办法,可提供对强大GPU以及充足内存的访问渠道,一块T4 GPU便已足够。

1、数据准备

Face上面能找到好多适用于训练自定义so-vits-svc模型的语音数据集,不过呢,若要让自己的模型个性化,去反映独特的声音特征,那就得录制自己的声音。 。

声音样本要求:

样本的长度,最好是每一段为十秒。这样的长度,对于去捕捉声音的细微差别来讲,是最为理想的,并且同时也不会对处理的过程提出过高的要求。

关于样本数量,存在这样的情况,数据越多,所呈现出的效果就会越好,这里需要至少200个声音样本。要是存在需要唱歌的情形,那便需要50个歌唱样本以及150个说话样本,呈现类似这样的比例。

总得来说,音频的长度就是,要达到至少五分钟的时长,这一情况为模型得以提供一个能够用于学习的结实基础 。

丰富多样的内容,借助朗读语音质量均衡的句子去涵盖各类音素。举例来说,IEEE所推荐的语音质量测量实践给出了一份如此类型的句子清单 这些句子能够向一个全面的数据集贡献力量 。

那录制工具喽,它是那种能够免费且开源的软件呢,是极其适宜去录制您的样本哒,它乃是可以轻轻松松就完成录制、编辑以及导出WAV这个文件的哟,并且它还能够针对音频展开处理呢,所以才推荐使用哒 。

声音样本的预处理

我们需要从音频轨道中去除背景噪音。库可以实现这个功能

!pip install spleeter
from spleeter.separator import Separator

这儿,“spleeter:2stems”所表达的意思是,我们期望将音频划分成两种主干部分,分别是歌声和伴奏音乐,注意这儿,“spleeter:2stems”所表达的意思是,我们期望将音频划分成两种主干部分,分别是歌声和伴奏音乐。
separator = Separator('spleeter:2stems')
利用那分隔符于音频文件, 运用那分隔符在音频文件之上, 使用那分隔符处于音频文件之中。
这个函数会将音频文件分成两个文件,一个包含人声,另一个包含背景音乐。具体而言,就是通过该函数实现这样的分拆操作,从而得到这两个不同内容的文件。。。。。。。。。。。。。。。。。。。。。。。。。。。
separator.separate_to_file('audiofile.wav', './')

我们能够运用,把诸多的音频文件,切割成适宜用于训练模型的,时长在10至15秒的片段,以此来将音频轨道进行分割 。

from audioslicer import slice_audio
#通往输入音频文件的路径, #输入音频文件的路径所通往之处 , #路径是通往输入音频文件的 。
input_audio_path = 'long_audio_file.wav'
输出目录的路径,在该目录中代码片段将被保存 。处代码片段该保存将中目录在,路径的目录出输 。
output_directory = 'output/snippets/'
以秒为单位的每个音频片段的时长,每个音频片段以秒来计量其长度 。
snippet_length = 15
先把音频文件切成许多小片段,再把这些小片段进行切片,然后把音频文件的切片工作完成🔊 把音频文件切片成小片段的。
将输入的音频路径的音频进行切片,放置到输出目录那里,切片的长度是指定的片段长度 。

于当前所处目录之下使得文件夹被创建出来了,而且录音被存储于那个规定的/{}目录之中,就如同下面所呈现的这般文件夹结构的样子 。

├── dataset_raw
│ └── {speaker_id}
│ └── {wav_file}.wav

我们处理后的音频以这种形式保存即可

然后需要运行,进行svc的自动预处理

!svc pre-resample
!svc pre-config
!svc pre-hubert

2、训练配置

还在训练之前配置模型,要求需要在/44k/目录里创建.json文件作为配置文件,这个配置文件中的关键参数涵盖了:、、、:并且存在需要在/44k/目录中创建的.json文件,此文件用于训练之前的模型配置 。

在一个装有200个样本,且批量大小设定为20的数据集里,每一次训练轮次所对应的是10步。要是打算进行100轮训练,由此算来,这就等同于1,000个步 。

默认的设置,其有可能会给出一万步的建议,然而依据您的硬件以及数据集的大小情况,这个设置或许是需要去进行调整的。一种切实可行的办法,大概是以两万步(两万除以十约略等于两千轮)作为目标,接着对性能展开评估,之后再判定是否要将训练予以延长。

3、开始训练

使用svc train命令开始实际的模型训练。

!svc train

4、模型推理

模型历经训练,之后又进行了微调,还通过验证,在此之后,下一步要做的是运行推理,把源音频转化成目标语音 。

from IPython.display import Audio, display
import os
# Filenames
audio_filename = 'vocals.wav' 把歌声应用到经过训练获得的模型上 ,歌声应用到已训练好的模型上 ,将歌声运用到训练好的模型那儿。
model_filename = 'model.pth' # model file created
config_filename = 'config.json' # config file created
# Construct the full local paths
audio_file = f"\"{os.path.join('.', audio_filename)}\""
model_path = f"\"{os.path.join('.', model_filename)}\""
config_path = f"\"{os.path.join('.', config_filename)}\""
# Running the inference command
!svc infer {audio_file} -m {model_path} -c {config_path}

然后就可以查看结果了

总结

用于达成实时歌声转换的SO-VITS-SVC,也就是基于扩散模型和变分自动编码器的歌声转换系统,是个强大工具,它通过把扩散模型、变分自动编码器和生成对抗网络等技术结合起来,能捕捉歌声的细微差别,进而产生高质量的合成歌声。

SO-VITS-SVC系统,是个功能强大又灵活的歌声转换工具,它能应用于多种场景,像音乐制作领域,还有语音合成领域,以及语音转换等领域,给用户提供了达成个性化歌声转换的便利乃至于可能。

欢迎 发表评论:

请填写验证码

评论列表

暂无评论,快抢沙发吧~