so-vits-svc 4.1 详细使用记录

news2024/12/28 19:11:29

前几个月在B站听到了许多AI孙燕姿的“作品”,自己也很好奇是如何做到的。这不最近有了点时间,体验实践了一下。

其实so-vits-svc的文档写的已经比较详细了。但实际操作起来,因为环境的原因会遇到各种问题。本篇也是将我遇到的问题整理出来,希望可以帮到你。

首先听一下我的成果,感觉还行:

【AI 周杰伦】乌梅子酱

初体验

首先说一下我的电脑环境:

  • MacBook Pro M1 Pro
  • Python 3.9.6

首先克隆项目到本地:

git clone https://github.com/svc-develop-team/so-vits-svc.git

然后进入项目根目录安装依赖:

pip install -r requirements.txt

Mac上安装环境及运行都没有太大问题,但是由于显卡的限制,不能完成训练操作。但是可以用来数据预处理和推理。

所以一开始,我先用了别人训练好的模型来体验了一下推理。具体操作如下:

项目根目录运行命令启动服务:

python webUI.py

终端返回结果:

Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

浏览器打开上面的地址,选择模型文件和配置文件然后点击右侧加载按钮。

在这里插入图片描述


然后滑到页面下面,上传你需要替换的音频,点击转换即可。

在这里插入图片描述

这里我遇到一个问题,由于使用的是4.0版本训练的模型,直接无法使用。所以为了兼容可通过修改 4.0 模型的 config.json 的配置进行支持,具体需要在 config.jsonmodel 字段中添加 speech_encoder 字段。

"model": {
    .........
    "speech_encoder":"vec256l9"
}

4.1版本 speech_encoder 默认值为 vec768l12。这部分文档也有说明,只是一开始比较懵,没有注意到这点。

准备工作

我自己在推理之后发现效果还不错,所以就有了自己训练一个模型的想法,体验一下整个流程。

  • 准备人物的干声,没有背景音,杂音,伴奏,合声,混响的纯人声。
  • 时长最好1小时以上,即使时长不够也要保证声音的质量。不要滥竽充数,这会大大影响训练结果的质量。
  • 音频需要切割成10s左右的片段,不要过短或者过长,wav格式。

下面我们详细说一下如何准备这些素材。

如果你准备训练自己的声音,那就可以跳过这一步。因为这一步是分离歌曲的人声和伴奏的。使用到的软件是UVR5。

第一步:选择Demucs - v3 | UVR_Model_1分离人声和伴奏。
在这里插入图片描述

第二步:选择VR Architecture - 5_HP-Karaoke-UVR分离上一步人声里面的和声。
在这里插入图片描述

如果有混响和回声,可以选择VR Architecture - UVR-DeEcho-DeReverb去除。

同理,如果推理歌曲,也是先分离出干声再推理,然后使用ffmpeg合成伴奏。

ffmpeg -i 1.wav -i 2.wav -filter_complex "[0]adelay=0s:all=1[0a];[1]adelay=0s:all=1[1a];[0a][1a]amix=inputs=2[a]" -map "[a]" output.wav

PS:上面提到的模型,需要点击图中的扳手图标,进入下载中心下载。

经过上一步我们就得到了干声。接下来我们使用Audio Slicer来进行音频切片。配置如下图:

请添加图片描述
如果切片长度过长,可以降低minimum interval的值。最后挨个听一下这些切片,去掉时长,质量不符合的。

我自己按上述步骤处理了50首歌,累计花费了10个小时。。。好累。。。下图是当时的成果。注意文件名字不要有中文。
请添加图片描述

数据预处理

  • 下载checkpoint_best_legacy_500.pt放在pretrain目录下。
  • 下载预训练底模文件G_0.pthD_0.pth放在logs/44k目录下。
  • 使用浅层扩散需要下载nsf_hifigan_20221211.zip解压后,将四个文件放在pretrain/nsf_hifigan目录下。(推荐)

以上下载链接在文档中都有,为了避免链接失效,这里就不提供了。

然后将上面准备好的数据集放入 dataset_raw 目录即可。结构如下:

dataset_raw
├───speaker0
│   ├───xxx1-xxx1.wav
│   ├───...
│   └───Lxx-0xx8.wav
└───speaker1
    ├───xx2-0xxx2.wav
    ├───...
    └───xxx7-xxx007.wav

重采样至 44100Hz 单声道:

python resample.py

自动划分训练集、验证集,以及自动生成配置文件:

python preprocess_flist_config.py

生成 hubert 与 f0:

python preprocess_hubert_f0.py --f0_predictor dio

f0_predictor 拥有以下选择crepe,dio,pm,harvest,rmvpe,fcpe。如果训练集过于嘈杂,请使用 crepe 处理 f0。如果省略f0_predictor 参数,默认值为 rmvpe

需要浅扩散功能(个人推荐),需要增加--use_diff 参数,例如:

python preprocess_hubert_f0.py --f0_predictor dio --use_diff

主模型训练

python train.py -c configs/config.json -m 44k

扩散模型(个人推荐)
尚若需要浅扩散功能,需要训练扩散模型,扩散模型训练方法为:

python train_diff.py -c configs/diffusion.yaml

模型训练结束后,模型文件保存在logs/44k目录下,扩散模型在logs/44k/diffusion下。


4.1的一个变化就是有了浅扩散,4.0的vec256l9编码器不支持扩散模型。4.1默认的vec768l12编码器优点是还原音色,缺点是咬字能力较弱,有时转换的歌曲会出现发音不准。但是浅扩散可以显著改善电音、底噪等问题。

实操

上面也提到了我自己的电脑不支持,所以只能尝试使用云端训练。方法和平台有很多,也有可以白嫖算力的。我自己最后使用的是智星云服务,前前后后折腾花了快两百块钱(租的是一小时两块的GeForce RTX 3090),具体配置和环境如下:

请添加图片描述
当然配置好的机子也有,价格也更贵。我的经验是为了节省租用费用,我们最好提前做好上面的准备工作,上传到服务提供的云盘,云端上去就是下载装环境然后训练。

但是说到装环境,或者说装Windows的环境,是我遇到问题最多的环节。下面我来分享我遇到的坑。。。

1.远程连接到云服务器后,第一件事就是确认gpu的情况是否正常。

import torch
print(torch.cuda.is_available()) #是否有可用的gpu
print(torch.cuda.device_count()) #有几个可用的gpu

我一开始有租用两个gpu的4090设备,直到训练时提示torch.cuda.OutOfMemoryError: CUDA out of memory,我就纳闷24显存的设备,我的配置也设置正常为啥提示爆显存了。后面发现只有一个gpu可用,然后我修改了代码(os.environ["CUDA_VISIBLE_DEVICES"] = "1"),指定了可用gpu,然后正常了。但是租用两个gpu价格是一个的双倍,我为啥花这个冤枉钱。这种问题的原因不清楚,可能是驱动?但我没必要花时间去处理这种问题,直接换机子最快。

2.安装依赖前先安装C++ 组件,否则会提示C++ extension is not available.。下载地址:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/

请添加图片描述
按图中选择然后点击安装。安装后可以运行pip install -r requirements_win.txt --user 安装依赖了。

3.AttributeError: module ‘numpy’ has no attribute ‘bool’.

解决方法:pip install numpy==1.23.4 --user ,安装指定numpy版本1.23.4(不加限制会下载到1.24的),所以可以一开始在requirements_win.txt文件中修改。

4.No module named ‘faiss’
解决方法:pip install faiss-cpu --user

5.Cannot uninstall ‘llvmlite’.
解决方法:pip install librosa --ignore-installed llvmlite --user

6.TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.

解决方法:pip install protobuf==3.19.0 --user

7.module ‘PIL.Image’ has no attribute ‘ANTIALIAS’
解决方法:pip install Pillow==9.5.0 --user

8.OSError: [WinError 1455] 页面文件太小,无法完成操作 或 torch.multiprocessing.spawn.ProcessExitedException: process 0 terminated with exit code 3221225477
解决方法:按文中内容操作设置。

9.torch.cuda.OutOfMemoryError: CUDA out of memory
解决方法:修改configs/config.json文件中的batch_size参数。比如24G显存我设置的18。

10.TypeError: init() got an unexpected keyword argument ‘dtype’
解决方法:我直接删除了train.py代码中的dtype参数。

11.ImportError: cannot import name ‘Mish’ from ‘torch.nn’
这个是训练扩散模型时遇到的,需要升级torch。首先是我租用设备的版本信息如下:

>>> import torch
>>> torch.__version__
'1.8.0+cu111'
>>> import torchvision
>>> torchvision.__version__
'0.9.0+cu111'

所以升级选择的是:

pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html

经过上述一系列的坑,现在我上去装这一套环境到能正常跑起来只需要三四十分钟(主要是下载耗时,虽然下载速度已经很快了)。真是熟练的让人心疼,哈哈。

过程记录

我准备了379个音频片段,时长45分钟。(一开始有六百多片段,一个半小时。后面发现训练出来的效果不理想,删除了一些效果不好的。)

主模型训练过程图:

请添加图片描述
这个截图是当时训练六百多条数据时的,如果没有将configs/config.json文件中all_in_mem改为true,大概一次epoch 60s左右。七八分钟两百步的样子。图中是开启后的效果,提升了30%的样子。后面三百多条数据时,大概一次epoch 25s左右。

扩散模型训练过程图:

请添加图片描述
浅扩散速度就很快了,跑了大约三小时5万步就出来了。

关于浅扩散步数
完整的高斯扩散为 1000 步,当浅扩散步数达到 1000 步时,此时的输出结果完全是扩散模型的输出结果,So-VITS 模型将被抑制。浅扩散步数越高,越接近扩散模型输出的结果。如果你只是想用浅扩散去除电音底噪,尽可能保留 So-VITS 模型的音色,浅扩散步数可以设定为 50-100.

TensorBoard:(查看命令:tensorboard --logdir=logs/44k

请添加图片描述

下面引用大佬关于loss的指标说明:

  • loss/g/total上升,loss/d/total收敛:考虑数据集质量问题。
  • loss/g/fm上升为正常现象。
  • loss/g/total先下降后上升:考虑是否过拟合。
  • loss/g/lf0应收敛在1e-4以下,loss/g/kl应收敛在0.5以下,loss/g/mel应震荡下降。
  • 这绝不是衡量模型的唯一标准,最好的loss计算器就是你自己。

总结

目前我主模型和扩散模型都训练了5万步,效果还可以。硬伤还是音频数据集质量不高,再练下去感觉提升也不会太多了。

请添加图片描述

以我目前的亲测尝试,选择crepe作为f0预测器可以减少一些哑音,但是会跑调(具体数值需要自己去调整)。使用浅扩散模型可以减少电流音。当然这两个同时打开推理的时间也会变得很长。但是效果也是相对较好的。另外发现rmvpe的效果也不错。

请添加图片描述


文末,我也贴出来了我参考过的一些相关内容,希望可以帮到你。

到此,就是我最近对so-vits-svc-4.1的完整心得记录,后面如果有新的发现也会继续更新。如果你也有好的经验及建议,欢迎评论区讨论。文中如果有理解不对的地方也欢迎指出,让我们共同进步!

参考

  • 最强 AI 人声伴奏分离工具 UVR5
  • So-VITS-SVC 4.0 训练/推理常见报错和Q&A
  • 【AI变声/翻唱】so-vits-svc指南
  • so-vits-svc4.0 中文详细安装、训练、推理使用教程
  • 手把手教你声音克隆(so-vits-svc)
  • 喂饭级SO-VITS-SVC教程,轻松生成AI歌曲

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

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

相关文章

字母异位词分组——力扣49

vector<vector<string>> groupAnagrams(vector<string>& strs){unordered_map<string, vector<string>> mp;for

总结记录Keras开发构建神经网络模型的三种主流方式:序列模型、函数模型、子类模型

Keras是一个易于使用且功能强大的神经网络建模库&#xff0c;它是基于Python语言开发的。Keras提供了高级API&#xff0c;使得用户能够轻松地定义和训练神经网络模型&#xff0c;无论是用于分类、回归还是其他任务。 Keras的主要特点如下&#xff1a; 简单易用&#xff1a;Kera…

自动化脚本本地可以跑成功云服务器报错:FileNotFoundError:[Errno 2] No such file or directory

出现这种情况&#xff0c;原因之一可能是脚本中某些路径没有使用自动获取&#xff0c;当使用相对路径可能就会报错 把路径改为自动获取之后 self.data get_yaml_data(os.path.join(configs_path, method_path.yaml))再次运行代码就不会报文件找不到的错误了

如何保障Facebook账号登录稳定

当谈到保障Facebook账号的稳定性时&#xff0c;我们不得不提到那些令人头疼的情况——Facebook账号被封。尽管我们已经踏入数字化的未来&#xff0c;但是被封号似乎是一个时常困扰着社交媒体用户的问题。那么&#xff0c;让我们来看看一些常见的Facebook账号被封的原因&#xf…

【TDSQL-C Serverless 产品体验】| 实战分享 | 文末送书

目录 一. &#x1f981; 产品引入二. &#x1f981; TDSQL-C数据库使用体验——实战案例2.1 实战案例介绍2.2 实操指导1. 购买TDSQL数据库2. [配置选择](https://buy.cloud.tencent.com/cynosdb#/)3. 配置TDSQL-C 集群4. 点击授权并创建5. 记住主机名和端口6. 登录TDSQL7. 链接…

Bit Timing Configuration

注意 此功能是实验性的。在未来的版本中,实现可能会发生变化。 ISO 11898中规定的CAN协议允许针对给定应用优化比特率、采样点和采样数量。这些被称为比特定时的参数可以被调整以满足通信系统和物理通信信道的要求。 这些参数包括: tseg1: 时间段1(TSEG1)是从同步段结束到采…

24V输入防反接电路

#24V输入防反接电路 &#xff08;部分图片参考东沃电子&#xff09; 用于对输入的24V电源进行防反接及ESD保护&#xff0c;可用于EMC测试实验的电源输入保护&#xff0c;额定电流3A&#xff0c;后级电路最大损坏电压为48V。 1.24V输入防反接原理图 如上图所示&#xff0c;24V_…

华为AR路由器 典型配置案例——以太网交换

目录 Eth-Trunk 例&#xff1a;配置三层链路聚合 组网需求 操作步骤 检查配置结果 配置脚本 VLAN 举例&#xff1a;配置基于接口划分VLAN&#xff0c;实现同一VLAN内的互通&#xff08;同设备&#xff09; 组网需求 操作步骤 检查配置结果 配置脚本 举例&#xff…

2023年国赛 高教社杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

ui设计专业学生实习报告范文

ui设计实习报告范文篇四 经过了四年的理论学习&#xff0c;使我们对平面设计有了基本掌握&#xff0c;对于平面设计这个专业也有了一个系统的学习和掌握。我们即将离开大学校园&#xff0c;作为平面设计专业的毕业生&#xff0c;心中想得更多的是如何去做好一个平面设计师、如…

操作系统-笔记-第五章-输入输出管理

目录 五、第五章——输入输出管理 1、IO设备的概念和分类 &#xff08;1&#xff09;IO设备分类——使用特性 &#xff08;2&#xff09;IO设备分类——传输速率 &#xff08;3&#xff09;IO设备分类——信息交换&#xff08;块、字符&#xff09; 2、IO控制器 &#x…

【Terraform学习】使用 Terraform 将 EC2 实例作为 Web 服务器启动(Terraform-AWS最佳实战学习)

使用 Terraform 将 EC2 实例作为 Web 服务器启动 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_ec2 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_secr…

入耳式无线耳机哪个款式好?无线蓝牙耳机音质排行榜

本着要买就认认真真的挑选一台的想法。和有线耳机相比&#xff0c;无线耳机确实有一定优势&#xff0c;比如说它的实用性明显要高不少。那么如何挑选&#xff0c;一款合适自己的耳机呢&#xff0c;首先&#xff0c;还是挑选出当前的热门款式&#xff0c;和各种网红推荐款&#…

Linux 挂载局域网内共享目录

Linux 挂载局域网内共享目录 1、安装samba服务端2、samba服务端配置3、添加samba服务访问账户4、防火墙5、重启服务6、windows访问7、linux访问 1、安装samba服务端 sudo apt-get install -y samba yum install -y samba2、samba服务端配置 vim /etc/samba/smb.conf在文档尾部…

shell 04(shell字符串变量)

一、字符串变量 字符串 (String)就是一系列字符的组合。字符串是 Shell编程中最常用的数据类型之一(除了数字和字符串&#xff0c;也没有其他类型了) 1.1 字符串格式 1.单引号方式 varabc 任何字符都会原样输出&#xff0c;在其中使用变量是无效的。 2.双引号方式,推荐 …

(动态规划) 剑指 Offer 42. 连续子数组的最大和 ——【Leetcode每日一题】

❓ 剑指 Offer 42. 连续子数组的最大和 难度&#xff1a;简单 输入一个整型数组&#xff0c;数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为 O(n)。 示例1: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1…

wazuh环境配置以及案例复现

目录 wazuh环境配置wazuh案例复现 wazuh环境配置 一、wazuh配置 1.1进入官网下载OVA启动软件 Virtual Machine (OVA) - Installation alternatives (wazuh.com) 1.2点击启动部署&#xff0c;傻瓜式操作 1.3通过账号&#xff1a;wazuh-user&#xff0c;密码&#xff1a;wazuh进…

机器视觉工程师,一个踏实喜欢加班,一个技术强挑活,老板怎么选

我们机器视觉工程师对于公司来说&#xff0c;降低成本&#xff0c;带来利润。所以在公司人才选拔上非常重要。 各有各的用处&#xff0c;踏实的可以用作后卫把容错率最小最重要的活给他在幕后&#xff1b;把出头沟通横向和门面出彩的活给后面那个。 同时要让他俩都知道自己在团…

记录protocol buffers Mac安装

使用brew安装最新的protobuf 在Mac 上安装&#xff0c;使用brew 可以安装最新的protobuf。这个也比较简单&#xff0c;简单说一下。 首先先检查一下是否安装了brew。如果没有安装brew的话&#xff0c;请先安装brew.可以通过brew --version来检查 使用brew install protobuf 来…

Kali 网络参数的配置

手工方式 Wired 有线 Woreless 无线 图形化的网络管理器&#xff08;依赖的服务&#xff1a;NetworkManager&#xff09; ┌──(root㉿kali)-[~] └─# systemctl status NetworkManager ● NetworkManager.service - Network ManagerLoaded: loaded (/lib/systemd/system/N…