so-vits-svc4.0 中文详细安装、训练、推理使用教程

这篇具有很好参考价值的文章主要介绍了so-vits-svc4.0 中文详细安装、训练、推理使用教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本帮助文档为项目 so-vits-svc 的详细中文安装、调试、推理教程,您也可以直接选择官方README文档
撰写:Sucial 点击跳转B站主页

写在开头:与3.0版本相比,4.0和4.1版本的安装、训练、推理操作更为简单

建议直接点击访问官方文档


2023.8.2文档更新:

1. 提供4.1训练底模,需自行下载,下载地址:https://huggingface.co/Sucial/so-vits-svc4.1-pretrain_model 还包含扩散模型训练底模

2. 提供4.0训练底模,需自行下载,下载地址:https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/tree/main/sovits_768l12_pre_large_320k 并需要改名为G_0.pth和D_0.pth

3. 提供3.0训练底模,需自行下载,下载地址:https://pan.baidu.com/s/1uw6W3gOBvMbVey1qt_AzhA?pwd=80eo 提取码:80eo

4. 修改了一下文档内容。

其实到这里你完全可以参考官方的文档来一步一步配置了,但如果你不清楚前置环境配置,可以继续往下阅读下面文章的第一部分 1. 环境依赖 即可


下面的文章仅介绍4.0版本的安装方法(其实是懒的更新)因为4.1的安装过程官方写的真的很详细!!!


1. 环境依赖

  • 本项目需要的环境:
    NVIDIA-CUDA
    Python <= 3.10
    Pytorch
    FFmpeg

- Cuda

  • 在cmd控制台里输入nvidia-smi.exe以查看显卡驱动版本和对应的cuda版本

  • 前往 NVIDIA-Developer 官网下载与系统对应的Cuda版本
    Cuda-11.7版本为例(注:本文下述所有配置均在Cuda-11.7下演示)Cuda11.7下载地址 根据自己的系统和需求选择安装(一般本地Windows用户请依次选择Windows, x86_64, 系统版本, exe(local)

  • 安装成功之后在cmd控制台中输入nvcc -V, 出现类似以下内容则安装成功:

    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2022 NVIDIA Corporation
    Built on Tue_May__3_19:00:59_Pacific_Daylight_Time_2022
    Cuda compilation tools, release 11.7, V11.7.64
    Build cuda_11.7.r11.7/compiler.31294372_0
特别注意!
  • 目前为止pytorch最高支持到cuda11.7
  • 如果您在上述第一步中查看到自己的Cuda版本>11.7,请依然选择11.7进行下载安装(Cuda有版本兼容性)并且安装完成后再次在cmd输入nvidia-smi.exe并不会出现cuda版本变化,即任然显示的是>11,7的版本
  • **Cuda的卸载方法:**打开控制面板-程序-卸载程序,将带有NVIDIA CUDA的程序全部卸载即可(一共5个)

- Python

  • 前往 Python官网 下载Python,版本需要低于3.10(详细安装方法以及添加Path此处省略,网上随便一查都有)
  • 安装完成后在cmd控制台中输入python出现类似以下内容则安装成功:
    Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 
  • 配置python下载镜像源(有国外网络条件可跳过)
    在cmd控制台依次执行
    # 设置清华大学下载镜像
    pip config set global.index-url http://pypi.tuna.tsinghua.edu.cn/simple
    pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
安装依赖库
  • 在任意位置新建名为requirements.txt的文本文件,输入以下内容保存
    Flask==2.1.2
    Flask_Cors==3.0.10
    gradio==3.4.1
    numpy==1.23.5
    playsound==1.3.0
    PyAudio==0.2.12
    pydub==0.25.1
    pyworld==0.3.2
    requests==2.28.1
    scipy==1.10.0
    sounddevice==0.4.5
    SoundFile==0.10.3.post1
    starlette==0.19.1
    tqdm==4.63.0
    scikit-maad
    praat-parselmouth
    tensorboard
    librosa
    fairseq
  • 在该文本文件所处文件夹内右击空白处选择 在终端中打开 并执行下面命令以安装库(若出现报错请尝试用pip install [库名称]重新单独安装直至成功)
    pip install -r requirements.txt
  • 接下来我们需要单独安装torch, torchaudio, torchvision这三个库,下面提供两种方法
方法1(便捷但不建议,因为我在测试这种方法过程中发现有问题,对后续配置AI有影响

直接前往 Pytorch官网 选择所需版本然后复制Run this Command栏显示的命令至cmd安装(不建议)

方法2(较慢但稳定,建议)
  • 前往该地址使用Ctrl+F搜索直接下载whl包 点击前往
  • 这个项目需要的是
    torch==1.10.0+cu113
    torchaudio==0.10.0+cu113
    1.10.00.10.0表示是pytorch版本,cu113表示cuda版本11.3
    以此类推,请选择适合自己的版本安装
  • 下面我将以Cuda11.7版本为例
    –示例开始–
  • 我们需要安装以下三个库
  1. torch-1.13.0+cu117-cp310-cp310-win_amd64.whl 其中cp310指python3.10, win-amd64表示windows 64位操作系统
  2. torchaudio-0.13.0+cu117-cp310-cp310-win_amd64.whl
  3. torchvision-0.14.0+cu117-cp310-cp310-win_amd64.whl
  • 下载完成后进入进入下载的whl文件的目录,在所处文件夹内右击空白处选择 在终端中打开 并执行下面命令以安装库
    pip install .\torch-1.13.0+cu117-cp310-cp310-win_amd64.whl
    # 回车运行(安装时间较长)
    pip install .\torchaudio-0.13.0+cu117-cp310-cp310-win_amd64.whl
    # 回车运行
    pip install .\torchvision-0.14.0+cu117-cp310-cp310-win_amd64.whl 
    # 回车运行
  • 务必在出现Successfully installed ...之后再执行下一条命令,第一个torch包安装时间较长
    –示例结束–

安装完torch, torchaudio, torchvision这三个库之后,在cmd控制台运用以下命令检测cuda与torch版本是否匹配

    python
    # 回车运行
    import torch
    # 回车运行
    print(torch.__version__)
    # 回车运行
    print(torch.cuda.is_available())
    # 回车运行
  • 最后一行出现True则成功,出现False则失败,需要重新安装

- FFmpeg

  • 前往 FFmpeg官网 下载。解压至任意位置并在高级系统设置-环境变量中添加Path定位至.\ffmpeg\bin(详细安装方法以及添加Path此处省略,网上随便一查都有)
  • 安装完成后在cmd控制台中输入ffmpeg -version出现类似以下内容则安装成功
ffmpeg version git-2020-08-12-bb59bdb Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10.2.1 (GCC) 20200805
configuration: [此处省略一大堆内容]
libavutil      56. 58.100 / 56. 58.100
libavcodec     58.100.100 / 58.100.100
...

2. 预训练AI

- 下载项目源码

  • 前往 so-vits-svc4.0 下载源代码。
    你也可以根据需要下载以下两个:
    改善了交互的一个分支推荐:34j/so-vits-svc-fork
    支持实时转换的一个客户端:w-okada/voice-changer

  • 解压到任意文件夹

- 下载预训练模型

  • 这部分官方文档写得很详细,我这边直接引用
必须项
  • contentvec :checkpoint_best_legacy_500.pt
  • 放在hubert目录下
# contentvec
http://obs.cstcloud.cn/share/obs/sankagenkeshi/checkpoint_best_legacy_500.pt
# 也可手动下载放在hubert目录
可选项(强烈建议使用)
  • 预训练底模文件: G_0.pth D_0.pth
  • 放在logs/44k目录下
    从svc-develop-team(待定)或任何其他地方获取

虽然底模一般不会引起什么版权问题,但还是请注意一下,比如事先询问作者,又或者作者在模型描述中明确写明了可行的用途

- 准备训练样本

准备的训练数据,建议100+条(越多越好,一般正式训练1000+起步)语音(格式务必为wav,不同的说话人建立不同的文件夹),每条语音控制在4-8秒!(确保语音不要有噪音或尽量降低噪音,一个文件夹内语音必须是一个人说的),可以训练出效果不错的模型。
长音频可以使用辅助音频自动切片软件进行大量切片 audio-slicer

  • 将语音连带文件夹(有多个人就多个文件夹)一起放入.\dataset_raw文件夹里,文件结构类似如下:
dataset_raw
├───speaker0
│   ├───xxx1-xxx1.wav
│   ├───...
│   └───Lxx-0xx8.wav
└───speaker1
    ├───xx2-0xxx2.wav
    ├───...
    └───xxx7-xxx007.wav
  • 此外还需要在.\dataset_raw文件夹内新建并编辑config.json,代码如下:
"n_speakers": 10    //修改数字为说话人的人数
"spk":{
    "speaker0": 0,  //修改speaker0为第一个说话人的名字,需要和文件夹名字一样,后面的: 0, 不需要改
    "speaker1": 1,  //以此类推
    "speaker2": 2,
    //以此类推
}

- 样本预处理

下面的所有步骤若出现报错请多次尝试,若一直报错就是第一部分环境依赖没有装到位,可以根据报错内容重新安装对应的库。(一般如果正确安装了的话出现报错请多次尝试或者关机重启,肯定可以解决报错的。)
1. 重采样
  • so-vits-svc文件夹内运行终端,直接执行:
    python resample.py
  • 成功运行后,在.\dataset\32k文件夹中会有说话人的wav语音。
2. 自动划分训练集,验证集,测试集,自动生成配置文件
  • so-vits-svc文件夹内运行终端,直接执行:
    python preprocess_flist_config.py
  • 出现类似以下内容则处理成功:
PS E:\vs\so-vits-svc> python preprocess_flist_config.py
100%|████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1993.49it/s]
Writing ./filelists/train.txt
100%|████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:00<?, ?it/s]
Writing ./filelists/val.txt
100%|████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
Writing ./filelists/test.txt
100%|████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
Writing configs/config.json
3. 生成hubert和f0
  • so-vits-svc文件夹内运行终端,直接执行:
    python preprocess_hubert_f0.py
  • 出现类似以下内容则处理成功:(我这里演示时只用了20条音频)
PS E:\vs\so-vits-svc-32k> python preprocess_hubert_f0.py
Loading hubert for content...
Loaded hubert.
100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [00:06<00:00,  3.03it/s]
  • 执行完以上步骤后 dataset 目录便是预处理完成的数据,可以删除 dataset_raw 文件夹了
4. 修改配置文件(必须)
  • 打开上面第二步过程中生成的配置文件.\configs\config.json修改第13行代码"batch_size"的数值。这边解释一下"batch_size": 12,数值12要根据自己电脑的显存(任务管理器-GPU- 专用GPU内存)来调整
  • 修改建议
    6G显存 建议修改成2-3
    8G显存 建议修改成4-6
    "batch_size"参数调小可以解决显存不够的问题

3. 开始训练

  • so-vits-svc文件夹内运行终端,直接执行下面命令开始训练
    注意:开始训练前建议重启一下电脑清理内存和显存,并且关闭后台游戏,动态壁纸等等软件,最好只留一个cmd窗口
    python train.py -c configs/config.json -m 44k
  • 出现以下报错就是显存不够了
torch.cuda.OutOfMemoryError: CUDA out of menory. Tried to allocate 16.80 MiB (GPU 0; 8.0 GiB total capacity; 7.11 Gi8 already allocated; 0 bytes free; 7.30 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_cUDA_ALLOC_CONF
# 注意:一定是 0 bytes free < Tried to allocate 16.80 MiB 才是显存不足,不然就是别的问题
  • 这边报错可能会比较多,如果出现报错先尝试重新执行python train.py -c configs/config.json -m 32k,多重试几遍,或者关机重启,一般是会成功的。如果报错一直是同一个报错,那就是对应的那里出问题了(要靠报错找问题所在)
  • 成功执行以后应该是类似如下内容:
2023-04-01 17:02:21,633 44k INFO {'train': {'log_interval': 200, 'eval_interval': 800, 'seed': 1234, 'epochs': 10000, 'learning_rate': 0.0001, 'betas': [0.8, 0.99], 'eps': 1e-09, 'batch_size': 2, 'fp16_run': False, 'lr_decay': 0.999875, 'segment_size': 10240, 'init_lr_ratio': 1, 'warmup_epochs': 0, 'c_mel': 45, 'c_kl': 1.0, 'use_sr': True, 'max_speclen': 512, 'port': '8001', 'keep_ckpts': 3}, 'data': {'training_files': 'filelists/train.txt', 'validation_files': 'filelists/val.txt', 'max_wav_value': 32768.0, 'sampling_rate': 44100, 'filter_length': 2048, 'hop_length': 512, 'win_length': 2048, 'n_mel_channels': 80, 'mel_fmin': 0.0, 'mel_fmax': 22050}, 'model': {'inter_channels': 192, 'hidden_channels': 192, 'filter_channels': 768, 'n_heads': 2, 'n_layers': 6, 'kernel_size': 3, 'p_dropout': 0.1, 'resblock': '1', 'resblock_kernel_sizes': [3, 7, 11], 'resblock_dilation_sizes': [[1, 3, 5], [1, 3, 5], [1, 3, 5]], 'upsample_rates': [8, 8, 2, 2, 2], 'upsample_initial_channel': 512, 'upsample_kernel_sizes': [16, 16, 4, 4, 4], 'n_layers_q': 3, 'use_spectral_norm': False, 'gin_channels': 256, 'ssl_dim': 256, 'n_speakers': 1}, 'spk': {'sanwu': 0}, 'model_dir': './logs\\44k'}
2023-04-01 17:02:21,634 44k WARNING E:\vs\so-vits-svc\so-vits-svc-4.0-sanwu is not a git repository, therefore hash value comparison will be ignored.
2023-04-01 17:02:24,816 44k INFO Loaded checkpoint './logs\44k\G_2400.pth' (iteration 7)
2023-04-01 17:02:25,289 44k INFO Loaded checkpoint './logs\44k\D_2400.pth' (iteration 7)
2023-04-01 17:04:07,531 44k INFO Train Epoch: 7 [27%]
2023-04-01 17:04:07,531 44k INFO Losses: [1.178899884223938, 5.447257995605469, 13.873568534851074, 45.92221450805664, 1.7247810363769531], step: 2400, lr: 9.991253280566489e-05
2023-04-01 17:04:12,999 44k INFO Saving model and optimizer state at iteration 7 to ./logs\44k\G_2400.pth
2023-04-01 17:04:13,783 44k INFO Saving model and optimizer state at iteration 7 to ./logs\44k\D_2400.pth
2023-04-01 17:06:45,604 44k INFO Train Epoch: 7 [79%]
2023-04-01 17:06:45,604 44k INFO Losses: [1.1601612567901611, 4.299866199493408, 13.368327140808105, 34.780784606933594, 1.5297999382019043], step: 2600, lr: 9.991253280566489e-05
2023-04-01 17:07:39,541 44k INFO ====> Epoch: 7, cost 317.91 s
2023-04-01 17:09:00,870 44k INFO Train Epoch: 8 [31%]
2023-04-01 17:09:00,871 44k INFO Losses: [0.7684269547462463, 4.85490608215332, 17.213212966918945, 42.981754302978516, 1.2239456176757812], step: 2800, lr: 9.990004373906418e-05
2023-04-01 17:10:57,125 44k INFO Train Epoch: 8 [83%]
2023-04-01 17:10:57,126 44k INFO Losses: [1.4237611293792725, 3.9369957447052, 13.494928359985352, 34.12102127075195, 1.412590503692627], step: 3000, lr: 9.990004373906418e-05
2023-04-01 17:11:34,132 44k INFO ====> Epoch: 8, cost 234.59 s
2023-04-01 17:13:16,350 44k INFO Train Epoch: 9 [36%]
2023-04-01 17:13:16,350 44k INFO Losses: [0.9615359306335449, 5.3759379386901855, 11.088563919067383, 34.991233825683594, 1.9573057889938354], step: 3200, lr: 9.98875562335968e-05
2023-04-01 17:13:20,401 44k INFO Saving model and optimizer state at iteration 9 to ./logs\44k\G_3200.pth
2023-04-01 17:13:21,223 44k INFO Saving model and optimizer state at iteration 9 to ./logs\44k\D_3200.pth
2023-04-01 17:13:21,813 44k INFO .. Free up space by deleting ckpt ./logs\44k\G_800.pth
2023-04-01 17:13:21,814 44k INFO .. Free up space by deleting ckpt ./logs\44k\D_800.pth
2023-04-01 17:15:17,549 44k INFO Train Epoch: 9 [88%]
2023-04-01 17:15:17,550 44k INFO Losses: [1.2361057996749878, 4.204023838043213, 13.108729362487793, 37.149662017822266, 1.6868081092834473], step: 3400, lr: 9.98875562335968e-05
2023-04-01 17:15:45,216 44k INFO ====> Epoch: 9, cost 251.08 s
  • 出现类似以上的内容就说明是在开始训练了(显存会直接爆满)。停止训练有下面两种方法:
  1. Ctrl+C
  2. 直接右上角叉掉
    在控制台中运行 python train.py -c configs/config.json -m 44k即可继续训练
  • 注意:上述训练过程第一次运行时可能会出现如下报错,不用理会即可(如果你懂pth文件结构可以尝试修复)
2023-04-01 09:58:55,507 44k INFO emb_g.weight is not in the checkpoint
2023-04-01 09:58:55,507 44k INFO pre.weight is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO pre.bias is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO enc_p.proj.weight is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO enc_p.proj.bias is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO enc_p.f0_emb.weight is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO enc_p.enc_.attn_layers.0.emb_rel_k is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.emb_rel_v is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_q.weight is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_q.bias is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_k.weight is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_k.bias is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_v.weight is not in the checkpoint
2023-04-01 09:58:55,510 44k INFO enc_p.enc_.attn_layers.0.conv_v.bias is not in the checkpoint
2023-04-01 09:58:55,510 44k INFO enc_p.enc_.attn_layers.0.conv_o.weight is not in the checkpoint
2023-04-01 09:58:55,510 44k INFO enc_p.enc_.attn_layers.0.conv_o.bias is not in the checkpoint
#此处省略更多
#…………

- 日志及训练次数的查看

  • 日志保存的位置:.\logs\44k\train.log
    阅读举例:
# 示例3
2023-02-08 18:32:24,942 44k INFO [2.252035617828369, 2.5846095085144043, 8.220404624938965, 5   17.75478744506836, 0.9781494140625, 2000, 9.911637167309565e-05]
2023-02-08 18:32:28,889 44k INFO Saving model and optimizer state at iteration 72 to ./logs\44k\G_2000.pth
2023-02-08 18:32:29,661 44k INFO Saving model and optimizer state at iteration 72 to ./logs\44k\D_2000.pth
# 示例1
2023-02-08 18:32:39,907 44k INFO ====> Epoch: 72, cost xxx s
2023-02-08 18:33:00,099 44k INFO ====> Epoch: 73, cost xxx s
2023-02-08 18:33:20,682 44k INFO ====> Epoch: 74, cost xxx s
2023-02-08 18:33:40,887 44k INFO ====> Epoch: 75, cost xxx s
2023-02-08 18:34:01,460 44k INFO ====> Epoch: 76, cost xxx s
2023-02-08 18:34:21,798 44k INFO ====> Epoch: 77, cost xxx s
2023-02-08 18:34:41,866 44k INFO ====> Epoch: 78, cost xxx s
2023-02-08 18:34:54,712 44k INFO Train Epoch: 79 [57%]
# 示例2
2023-02-08 18:34:54,712 44k INFO [2.282658100128174, 2.5492446422576904, 10.027194023132324, 15.401838302612305, 1.598284363746643, 2200, 9.902967736366644e-05]

以下的解释我引用了B站up主inifnite_loop的解释,相关视频 相关专栏

  • 需要关注两个参数:Epoch和global_step
    Epoch表示迭代批次,每一批次可以看作一个迭代分组
    Global_step表示总体迭代次数
  • 两者的关系是global_step = 最多语音说话人的语音数 / batch_size * epoch
    batch_size是配置文件中的参数
  • 示例1: 每一次迭代输出内 ====> Epoch: 74表示第74迭代批次完成
  • 示例2: Global_step每200次输出一次 (配置文件中的参数log_interval
  • 示例3: Global_step每1000次(未改配置文件应该默认是800次)输出一次(配置文件中的参数eval_interval),会保存模型到新的文件

- 保存的训练模型

以上,我们谈论到了每1000次(未改配置文件应该默认是800次)迭代才会保存一次模型样本,那么,这些样本保存在哪里呢?如何处理这些样本呢?下面我将详细讲述。

  • 训练模型保存位置:.\logs\44k
  • 训练一定时间后打开这个路径,你会发现有很多文件:
D_0.pth
D_1000.pth
D_2000.pth
D_3000.pth
D_4000.pth
...
G_0.pth
G_1000.pth
G_2000.pth
G_3000.pth
G_4000.pth
...

4. 推理使用

按上述方法训练得到最后一次的G和D后,该如何使用这些模型呢?下面我将讲述具体的使用操作方法

- 准备干声

  • 准备一首歌的干声,干声可以靠软件提取,我这边推荐的是Ultimate Vocal Remover,该软件开源并且可以在Github上下载到。下载地址
  • 用音频处理软件(如Au,Studio One等)将这个干声分成若干段不超过40秒的片段并且一一保存
  • 你也可以使用 音频自动切片软件 Audio Slicer
  • 将你处理好的干声片段放入.\raw文件夹

- 修改推理代码

  • 打开inference_main.py,修改第25-46行,具体修改内容如下(其实注释很清楚,我照搬了)
# 一定要设置的部分
    parser.add_argument('-m', '--model_path', type=str, default="logs/44k/G_4800.pth", help='模型路径')
    parser.add_argument('-c', '--config_path', type=str, default="configs/config.json", help='配置文件路径')
    parser.add_argument('-cl', '--clip', type=float, default=0, help='音频自动切片,0为不切片,单位为秒/s')
    parser.add_argument('-n', '--clean_names', type=str, nargs='+', default=["vocals (1)","vocals (2)","vocals (3)","vocals (4)","vocals (5)","vocals (6)","vocals (7)","vocals (8)"], help='wav文件名列表,放在raw文件夹下')
    parser.add_argument('-t', '--trans', type=int, nargs='+', default=[0], help='音高调整,支持正负(半音)')
    parser.add_argument('-s', '--spk_list', type=str, nargs='+', default=['Hanser'], help='合成目标说话人名称')

    # 可选项部分
    parser.add_argument('-a', '--auto_predict_f0', action='store_true', default=False,
                        help='语音转换自动预测音高,转换歌声时不要打开这个会严重跑调')
    parser.add_argument('-cm', '--cluster_model_path', type=str, default="logs/44k/kmeans_10000.pt", help='聚类模型路径,如果没有训练聚类则随便填')
    parser.add_argument('-cr', '--cluster_infer_ratio', type=float, default=0, help='聚类方案占比,范围0-1,若没有训练聚类模型则填0即可')
    parser.add_argument('-lg', '--linear_gradient', type=float, default=0, help='两段音频切片的交叉淡入长度,如果自动切片后出现人声不连贯可调整该数值,如果连贯建议采用默认值0,单位为秒/s')

    # 不用动的部分
    parser.add_argument('-sd', '--slice_db', type=int, default=-40, help='默认-40,嘈杂的音频可以-30,干声保留呼吸可以-50')
    parser.add_argument('-d', '--device', type=str, default=None, help='推理设备,None则为自动选择cpu和gpu')
    parser.add_argument('-ns', '--noice_scale', type=float, default=0.4, help='噪音级别,会影响咬字和音质,较为玄学')
    parser.add_argument('-p', '--pad_seconds', type=float, default=0.5, help='推理音频pad秒数,由于未知原因开头结尾会有异响,pad一小段静音段后就不会出现')
    parser.add_argument('-wf', '--wav_format', type=str, default='wav', help='音频输出格式')
    parser.add_argument('-lgr', '--linear_gradient_retain', type=float, default=0.75, help='自动音频切片后,需要舍弃每段切片的头尾。该参数设置交叉长度保留的比例,范围0-1,左开右闭')
  • 支持命令行
# 例
python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n "君の知らない物語-src.wav" -t 0 -s "nen"

必填项部分

  • -m | --model_path:模型路径
  • -c | --config_path:配置文件路径
  • -n | --clean_names:wav 文件名列表,放在 raw 文件夹下
  • -t | --trans:音高调整,支持正负(半音)
  • -s | --spk_list:合成目标说话人名称
  • -cl | --clip:音频强制切片,默认0为自动切片,单位为秒/s

可选项部分:部分具体见下一节文章来源地址https://www.toymoban.com/news/detail-449886.html

  • -lg | --linear_gradient:两段音频切片的交叉淡入长度,如果强制切片后出现人声不连贯可调整该数值,如果连贯建议采用默认值0,单位为秒
  • -fmp | --f0_mean_pooling:是否对F0使用均值滤波器(池化),对部分哑音有改善。注意,启动该选项会导致推理速度下降,默认关闭
  • -a | --auto_predict_f0:语音转换自动预测音高,转换歌声时不要打开这个会严重跑调
  • -cm | --cluster_model_path:聚类模型路径,如果没有训练聚类则随便填
  • -cr | --cluster_infer_ratio:聚类方案占比,范围0-1,若没有训练聚类模型则默认0即可

- 推理生成

  • 修改完成后保存代码,在so-vits-svc文件夹内运行终端,执行下面命令开始推理生成
    python .\inference_main.py
  • 待黑窗口自动关闭后,推理生成完成。生成的音频文件在.\results文件夹下
  • 如果听上去效果不好,就多训练模型。

- 后期处理

  • 将生成的干音和歌曲伴奏(也可以通过Ultimate Vocal Remover提取)导入音频处理软件&宿主软件(如Au,Studio One等)进行混音和母带处理,最终得到成品。

5. 感谢名单

  • 以下是对本文档的撰写有帮助的感谢名单:
    so-vits-svc 官方源代码和帮助文档
    B站up主inifnite_loop 3.0版本相关视频 以及 3.0版本相关专栏
    所有提供训练音频样本的人员

到了这里,关于so-vits-svc4.0 中文详细安装、训练、推理使用教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI孙燕姿爆火背后:语音转换技术so-vits-svc

    AIGC的风最近终于吹到了语音生成领域。上面视频中\\\"孙燕姿\\\"翻唱周杰伦的《七里香》,该歌是AI歌唱,并非孙燕姿本人。背后核心技术来自声音转换,voice convertion,而不是之前我们讲过的声音克隆,voice clone。 语音转换,voice convertion,简称VC。简单来说,就是把一个人的声音

    2024年02月12日
    浏览(52)
  • 基于中文金融知识的 LLaMA 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学

    项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域) :汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自

    2024年02月14日
    浏览(46)
  • 基于VITS 快速微调的本地环境配置、本地训练以及本地推理的教程

    该教程能教会读者如何使用本地服务器使用VITS微调训练自己的想要的角色的声音并且本地推理,注意只能使用linux版本进行训练,但是推理可以在windows上完成。 STEP 0  使用conda配置虚拟环境(个人习惯,也可以直接在本地服务器上嗯配) STEP 1 复制代码库并安装运行环境 记得没

    2023年04月27日
    浏览(56)
  • AI孙燕姿 ?AI东雪莲 !—— 本地部署DDSP-SVC一键包,智能音频切片,本地训练,模型推理,为你喜欢的角色训练AI语音模型小教程

    目录 感谢B站UP羽毛布团 演示视频 稻香——东雪莲 虚拟——东雪莲 反方向的钟——东雪莲 晴天+龙卷风——东雪莲 ZOOD——东雪莲 DDSP-SVC 3.0 (D3SP) 是什么? 下载资源: 解压整合包 准备数据集 智能音频切片  数据集准备 填写训练设置和超参数  开始训练 推理模型 羽毛布団

    2024年02月06日
    浏览(55)
  • Bert-vits2最终版Bert-vits2-2.3云端训练和推理(Colab免费GPU算力平台)

    对于深度学习初学者来说,JupyterNoteBook的脚本运行形式显然更加友好,依托Python语言的跨平台特性,JupyterNoteBook既可以在本地线下环境运行,也可以在线上服务器上运行。GoogleColab作为免费GPU算力平台的执牛耳者,更是让JupyterNoteBook的脚本运行形式如虎添翼。 本次我们利用

    2024年02月04日
    浏览(52)
  • AI数字人:基于VITS模型的中文语音生成训练

            VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)是一种结合变分推理(variational inference)、标准化流(normalizing flows)和对抗训练的高表现力语音合成模型。         VITS模型是韩国科学院在2021年6月提出的,VITS通过隐变量而非频谱串联起来语

    2024年02月11日
    浏览(42)
  • 民谣女神唱流行,基于AI人工智能so-vits库训练自己的音色模型(叶蓓/Python3.10)

    流行天后孙燕姿的音色固然是极好的,但是目前全网都是她的声音复刻,听多了难免会有些审美疲劳,在网络上检索了一圈,还没有发现民谣歌手的音色模型,人就是这样,得不到的永远在骚动,本次我们自己构建训练集,来打造自己的音色模型,让民谣女神来唱流行歌曲,

    2024年02月04日
    浏览(53)
  • [玩转AIGC]LLaMA2训练中文文章撰写神器(数据准备,数据处理,模型训练,模型推理)

    好久没更新这个专栏的文章了,今天抽空写了一篇。————2023.12.28 摘要:文体包括新闻,法律文书,公告,广告等,每种文体的书写风格不一样,如果拥有自己的数据集,想针对特定文体来训练一个内容生成的工具,来帮助自己写点文章,如果没接触过AIGC,可能一开始会

    2024年01月17日
    浏览(55)
  • 本地训练,立等可取,30秒音频素材复刻霉霉讲中文音色基于Bert-VITS2V2.0.2

    之前我们使用Bert-VITS2V2.0.2版本对现有的原神数据集进行了本地训练,但如果克隆对象脱离了原神角色,我们就需要自己构建数据集了,事实上,深度学习模型的性能和泛化能力都依托于所使用的数据集的质量和多样性,本次我们在本地利用Bert-VITS2V2.0.2对霉霉讲中文的音色进

    2024年02月05日
    浏览(37)
  • PaddleSeg的训练与测试推理全流程(超级详细)

    PaddleSeg 自建训练集训练+评估+模型部署: PaddleSeg官网:https://gitee.com/paddlepaddle/PaddleSeg 我之前找到了一个paddleSeg的链接就下载了,结果调试的时候怎么都不对,会有奇奇怪怪的错误,并且非常棘手,解决不了 结果我后来发现 我原来是0.4版本,太旧了,所以出现各种由于不适

    2024年01月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包