人声克隆技术:So-Vits-Svc项目解析

news2024/11/18 12:45:14

SO-VITs-SVC

  本文是该系列的第一篇,采用倒序的方式,先从推理过程开始介绍人声克隆的工作流,以及各个模型的功能,之后再去详细介绍各个模型,因此不涉及具体的使用方法,这个官方文档里面已经讲的很清楚了,所以本文主要聚焦于整个项目中对音频数据的预处理、特征提取和最终的推理过程(音频生成的过程)进行介绍,最后放上我制作的两段音频,给大家看看效果。

  1. 人声预处理流程
  2. 人声特征提取流程
  3. 人声的合成流程
  4. Demo展示

1. 预处理阶段

重采样
source audio
人声分离
BGM
Vocals.wav
Vocals.wav 44k
  • source audio : 是指我们要转换的源音频
  • Vocals.wav : 要通过人声分离软件,过滤出源音频中的纯人声
  • Vocals.wav 44k : 模型只能处理采样率为44k的音频,所以对人声音频进行重采样

2. 特征提取阶段

特征提取流程图如下:
在这里插入图片描述

为了完美的复刻人声对源人声的特征提取还是比较丰富的,主要分为下面几类:

  1. 预训练模型,通过预训练模型对音频进行特征提取
  2. 乐理特征,基音频率f0,高音的频率
  3. 频域特征,频谱/梅尔频谱:mel spectrogram
  4. 能量特征,音频音量: audio volume
  5. 增强特征,增加随机噪声后再进行特征提取

2.1 预训练特征提取

encoder
Vocals.wav44k
pretrain
Contextvec
choice 1
Hubert
Whisper-ppg
audio encode

预训练模型三选一即可,不同模型,特征表示维度不一样,如果显存较小可以选择低维的特征编码,Contextvec可以选择不同隐藏层的特征表示。

  • Hubert : 基于BERT改进的HuBERT使用BERT的架构,并做了修改以适应语音序列。HuBERT可以学习出高质量的语音表示,在多种下游任务上都取得了state-of-the-art的结果,如语音情感识别、语言识别、语音生成与理解和人声克隆等。
  • Whisper:是openai提出利用大规模弱监督学习实现了端到端语音识别模型,在少量标注数据的条件下,可以达到很好的识别性能,同时也学习到了语音的高质量表示。其创新之处在于设计的弱监督学习框架,这为利用海量无标注数据提高语音识别系统的鲁棒性提供了一个值得借鉴的范例。
  • Contextvec : 一种新的语音自监督表示学习方法,通过Hubert生成训练标签,通过学生网络来学习音频的表征,其在人声验证和语音理解等任务上达到SOTA的性能,是一种非常有效的语音表示学习框架

2.2 乐理特征

compute
Vocals.wav
modules.F0Predictor
CrepeF0
choice 1
DioF0
HarvestF0
PMF0
audio f0,uv

so-vits-svc提供了四种不同的f0计算方法,选一即可,uv是基于f0的衍生特征,计算方式如下,不同方法略有不同。

data = np.reshape(f0, (f0.size, 1))
    
vuv_vector = np.zeros((data.size, 1), dtype=np.float32)
vuv_vector[data > 0.0] = 1.0
vuv_vector[data <= 0.0] = 0.0

2.3 频域特征

compute
compute
Vocals.wav
modules.mel_processing
spectrogram_torch
sepctrogram
mel_spectrogram_torch
mel sepctrogram
  • spectrogram : 通过对人声音频的时域信号进行短时傅里叶变换(STFT)得到。

  • mel spectrogram : 频谱经过梅尔滤波后得到梅尔频谱。

2.4 能量特征(可选)

True
extract
aug+extract
True
extract
aug+extract
False
True
extract
False
Vocals.wav
if diff
utils.Volume_Extractor
audio volume
aug audio volume
diffusion.vocoder
audio mel
aug audio mel
if volue embed
utils.Volume_Extractor
audio volume
Nothing

能量特征是可选,可有可无。

  • aug volume、aug mel :是在音频数据上增加了随机噪声后,在进行特征提取得到的增强特征。

3. 推理阶段(音频合成)

  推理阶段,提供三种方案来生成目标音频,最后还可以选择是否采用预训练模型NSF_HifiGAN对结果进行增强修饰。

  1. 纯生成,输入源音频特征到生成器生成目标音频。
  2. 纯扩散,输入源音频特征到扩散模型生成目标音频。
  3. 生成+扩散,在生成模型结果的基础上,再次计算梅尔频谱,输入扩散模型,生成目标音频。
  4. 增强,可选。

流程图如下:
在这里插入图片描述

3.1 生成模型

generator
encoder
compute
GeneratorModel
audio encode
audio
audio f0,uv
f0
wav
PretrainModel
F0Predictor

生成模型主要用到,预训练训练模型的特征编码和乐理特征,在生成音频同时,也预测乐理特征,用于生成+扩散的方案。

3.2 扩散模型

only diffusion
encoder
compute
extract
extract
trans
DiffusionModel
audio encode
audio f0,uv
audio mel
audio
Vocoder
audio mel
audio volume
wav
PretrainModel
F0Predictor
Vocoder
volume_extractor

扩散模型基本全部用到之前的特征,扩散模型的预测不直接生成目标音频数据,而是生成目标音频的梅尔频谱,然后通过转换得到最终的目标音频。

3.3 生成+扩散

Diffusion
Generator
encoder
compute
extract
extract
trans
DiffusionModel
audio mel
audio
audio mel
audio volume
GeneratorModel
audio encode
audio
audio f0,uv
f0
wav
PretrainModel
F0Predictor
volume_extractor
Vocoder
  • 生成阶段和纯生成模型一样
  • 扩散阶段,音频的编码特征和能量特征仍采用源音频提取的,乐理特征和梅尔频谱分别从生成器和生成音频中得到。
3.4 增强

HiFiGAN是较为常用的声码器,能够将声学模型产生的频谱转换为高质量的音频,从名字可以看出采用的是生成对抗网络模型。

STFT
enhance
audio
HiFiGAN
f0
audio

推理流程总览
![在这里插入图片描述](https://img-blog.csdnimg.cn/715b5c8db5a4492095f9f02f7d5875a7.png#pic_center)
generator & diffusion
generator
only diffusion
encoder
compute
extract
extract
True
trans
False
False
True
extract
trans
True
STFT
STFT
STFT
audio mel
Vocoder
DiffusionModel
audio
Vocoder
audio mel
GeneratorModel
audio
f0
DiffusionModel
audio encode
audio f0,uv
audio mel
audio
Vocoder
audio mel
audio volume
wav
PretrainModel
F0Predictor
Vocoder
volume_extractor
if only_diffusion
shallow_diffusion
if enhance
NSF_HifiGAN
audio

4. Demo展示

展示两段demo,分别克隆了懂王(建国)、睡神(振华)、观海的声音,翻唱《All out of Lvoe》,原唱:Air Supply。

Demo 1: 翻唱:乔振华、奥观海

《All out of Love》乔振华,奥观海翻唱


Demo 2: 翻唱:川建国、乔振华

懂王、睡神深情合唱《All Out Of Love》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

相机成像原理【第一节】

文章目录 1、胶片摄影与数码摄影2、相机的组成2.1 只有传感器相机的成像 3、小孔成像3.1 小孔相机的参数和成像结果3.2 关于小孔成像的两个问题 1、胶片摄影与数码摄影 胶片摄影是把光学镜头的光信号投射到胶片上&#xff0c; 数码摄影是把光学镜头的光信号投射到传感器上&…

「又是干货」史诗级漏洞挖掘的过程快get一下

前言 本文记录了针对前台RCE的挖掘过程&#xff0c;由于该CMS前几天才做了修复&#xff0c;所以将挖掘过程写出来 接着直接来看代码&#xff0c;首先目标仍然是解析if标签的代码块&#xff0c;看一下三个正则 /\{pboot:if\(([^}^\$])\)\}([\s\S]*?)\{\/pboot:if\}//([\w])(…

零基础也能轻松制作电子邀请函教程

随着互联网技术的发展&#xff0c;电子邀请函已经逐渐取代传统的纸质邀请函成为一种趋势。不仅可以节省纸张和邮寄的成本&#xff0c;还能够更加个性化和创意化地展现活动。自己制作电子邀请函&#xff0c;百利而无一害&#xff0c;如果你也想自己动手制作一份电子邀请函&#…

VTK 悬浮显示 actor详细

需求&#xff1a;场景中一个actor&#xff0c;鼠标悬浮时 显示此actor的信息。 效果&#xff1a; 实现&#xff1a; 1&#xff0c;利用vtkInteractorStyleTrackballCamera 的OnMouseMove 事件 判断是否处于悬浮状态 2&#xff0c;判断悬浮后&#xff0c;首先将世界坐标转为…

10分钟教你学会使用ab 进行并发压力测试

目录 ab全称为&#xff1a;apache bench。 安装ab命令&#xff1a; 使用&#xff1a; 测试结果&#xff1a; 结果分析&#xff1a; 总结&#xff1a; ab全称为&#xff1a;apache bench。 是apache自带的压力测试工具。ab非常实用&#xff0c;它不仅可以对apache服务器进…

离子风枪的功能特点及应用领域

除静电离子风枪是一种常见的设备&#xff0c;被广泛应用于各个领域的生产线上&#xff0c;其作用是通过产生离子气流&#xff0c;有效地去除物体表面的静电。在现代工业生产中&#xff0c;静电可能引发诸多问题&#xff0c;如引起电子元器件损坏、拖尘吸附、产品互粘等。除静电…

如何使用Wu10Man启用或禁用自动更新

使用Wu10Man启用或禁用自动更新 启用自动更新禁用自动更新Windows 10 将在你设置为自动维护时自动检查新的 Windows 更新。默认情况下,Windows 10 将自动下载并安装重要和关键更新。 某些更新不是自动安装的。这包括可选更新和要求你接受新使用条款的更新。当这些更新可用时,…

哈工大操作系统实验三(整理自用)

一、实验内容 基于模板 process.c 编写多进程的样本程序&#xff0c;实现如下功能&#xff1a; 所有子进程都并行运行&#xff0c;每个子进程的实际运行时间一般不超过 30 秒&#xff1b; 父进程向标准输出打印所有子进程的 id&#xff0c;并在所有子进程都退出后才退出&…

SpringBoot项目做成Docker 镜像

1.使用Xshell5使用 put指令上传到Centos put D:\git\repository_idea\emsms\target\emsms-0.0.1-SNAPSHOT.jar 2.编辑文件 vim spring ROM java:8 ADD emsms-0.0.1-SNAPSHOT.jar dd.jar CMD java -jar dd.jar 示例&#xff1a; 3.退出并保存编辑 4.将文件打包成镜像 dock…

Flink中FileSink的使用

在Flink中提供了StreamingFileSink用以将数据流输出到文件系统. 这里结合代码介绍如何使用FileSink. 首先FileSink有两种模式forRowFormat和forBulkFormat public static <IN> DefaultRowFormatBuilder<IN> forRowFormat(final Path basePath, final Encoder<IN…

Labview视觉一键尺寸测量仪,多产品,多尺寸,快速编辑, 测量,导出结果

这是一个关于LabVIEW视觉一键尺寸测量仪的描述&#xff0c;它具有以下特点&#xff1a;支持多种产品和尺寸的测量&#xff0c;可以快速进行编辑、测量和导出结果。 这个领域涉及到的知识点和领域范围包括&#xff1a;LabVIEW、视觉测量、尺寸测量、编辑功能和结果导出。 LabV…

HCIP-7.4交换机STP生成树协议原理

HCIP-7.4交换机STP生成树协议原理 1、什么是交换机生成树&#xff1f;2、STP生成树2.1、标准生成树基本计算过程(802.1D)2.2、STP的基本概念2.3、 BPDU格式及字段说明2.4、 STP的选举原则2.4.1 配置案例说明2.4.2 华为设备的COST值 2.5、端口状态描述2.6、cost值修改2.6.1、非根…

【UCOS-III】自我学习笔记→第20讲→时间管理

文章目录 前言实验步骤1.复制任务创建和删除工程文件并删除task3任务&#xff0c;修改任务1和任务2的优先级为22.修改任务1和任务2的内容3.查看示波器现象 测试代码工程文件总结 前言 无&#xff0c;仅作记录&#xff0c;不具有参考价值&#xff0c;所用开发板为STM32F411RET6…

计算机视觉:分割一切AI大模型segment-anything

1 segment-anything介绍 Segment Anything Model (SAM)来源于Facebook公司Meta AI实验室。据Mata实验室介绍&#xff0c;SAM 已经学会了关于物体的一般概念&#xff0c;并且它可以为任何图像或视频中的任何物体生成 mask&#xff0c;甚至包括在训练过程中没有遇到过的物体和图…

刷题日记《链表01》

题目概述&#xff08;力扣&#xff09; 给定循环单调非递减列表中的一个点&#xff0c;写一个函数向这个列表中插入一个新元素 insertVal &#xff0c;使这个列表仍然是循环升序的。 给定的可以是这个列表中任意一个顶点的指针&#xff0c;并不一定是这个列表中最小元素的指针。…

SpringCloud-13_Alibaba OSS

对象存储 OSS 就是所谓的“图床”吗&#xff1f;&#xff08;致敬yupi /捂脸&#xff09; 一图说明&#xff1a; 阿里云对象存储oos 阿里云对象存储 OSS&#xff08;Object Storage Service&#xff09;是一款海量、安全、低成本、高可靠的云存储服务&#xff0c;提供最高可达 …

汉王人脸考勤管理系统 万能密码登录 漏洞复现

fofa&#xff1a;title“汉王人脸考勤管理系统” 漏洞复现 登录页面&#xff1a; 使用万能密码登录 用户名&#xff1a;or’ or 11– 密码&#xff1a;or

Minio的使用

今天学习的时候用到了阿里云的OSS&#xff0c;由于在公司项目上用到了Minio作为云端文件服务器&#xff0c;因此学习了以下Minio&#xff0c;打算替换掉阿里云的OSS 1.Minio的安装 在这里提供了Docker-compose的模式作为Minio的下载(其中9002作为API请求接口端&#xff0c;90…

Matlab【旅行商问题】—— 基于模拟退火算法的无人机药品配送路线最优化

文章目录 问题描述模拟退火算法Metropolis准则算法流程图&#xff1a; Demo1&#xff1a;只考虑累计距离&#xff0c;通过模拟退火算法求解最短路径matlab代码&#xff1a;最优解之一&#xff1a;适应度进行曲线&#xff1a; Demo1&#xff1a;考虑每个站点的病人数量&#xff…

Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析

专题一 地下水数值软件的操作流程、建模步骤和所需资料处理及相关注意事项 [1] Visual MODFLOW Flex特征 [2] Visual MODFLOW Flex软件界面及模块 [3] 地下水数值模拟的建模步骤及数据需求 专题二 模型建模操作方法 技巧、真实案例演练、特殊问题处理 [1] 直接模型建模的操…