Skip to content

基于vits与softvc的歌声音色转换模型

License

Notifications You must be signed in to change notification settings

332plim/so-vits-svc

Repository files navigation

Variational Inference with adversarial learning for end-to-end Singing Voice Conversion based on VITS

Hugging Face Spaces Open in Colab GitHub Repo stars GitHub forks GitHub issues GitHub

  • 💗本项目的目标群体是:深度学习初学者,具备Python和PyTorch的基本操作是使用本项目的前置条件;
  • 💗本项目旨在帮助深度学习初学者,摆脱枯燥的纯理论学习,通过与实践结合,熟练掌握深度学习基本知识;
  • 💗本项目不支持实时变声;(支持需要换掉whisper)
  • 💗本项目不会开发用于其他用途的一键包。(不会指没学会)

sovits_framework

  • 【低 配置】6G显存可训练(显存不足6G可以用云端训练

  • 【无 泄漏】支持多发音人

  • 【捏 音色】创造独有发音人

  • 【带 伴奏】也能进行转换,轻度伴奏

  • 【用 Excel】进行原始调教,纯手工

项目说明:

https://github.com/PlayVoice/so-vits-svc-5.0/releases/tag/bigvgan_release

  • sovits5.0_bigvgan_555.pth模型包括:生成器+判别器=197M,可用作预训练模型
  • 发音人(56个)文件在configs/singers目录中,可进行推理测试,尤其测试音色泄露
  • 发音人22,30,47,51辨识度较高,训练音频样本在configs/singers_sample目录中
Feature From Status Function Remarks
whisper OpenAI 强大的抗噪能力 参数修改
bigvgan NVIDA 抗锯齿与蛇形激活 GPU占用略多,主分支删除;新bigvgan分支训练,共振峰更清晰,提升音质明显
natural speech Microsoft 减少发音错误 -
neural source-filter NII 解决断音问题 参数优化
speaker encoder Google 音色编码与聚类 -
GRL for speaker Ubisoft 防止编码器泄漏音色 原理类似判别器的对抗训练
one shot vits Samsung VITS 一句话克隆 -
SCLN Microsoft 改善克隆 -
PPG perturbation 本项目 提升抗噪性和去音色 -
VAE perturbation 本项目 提升音质 -

💗由于使用了数据扰动,相比其他项目需要更长的训练时间

安装环境

  1. 安装ffmpeg
  • Linux

    apt update && sudo apt install ffmpeg
    
  • Windows

    • 有conda环境运行下面的命令来安装ffmpeg

      conda install ffmpeg
      
    • 没有conda环境从CODEX FFMPEG下载已经编译好的ffmpeg,并且正确配置ffmpeg的环境变量

  1. 安装PyTorch

  2. 安装项目依赖

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
    

    注意:不能额外安装whisper,否则会和代码内置whisper冲突

  3. 下载音色编码器, 把best_model.pth.tar放到speaker_pretrain/里面 (不要解压

  4. 下载whisper-medium模型,把medium.pt放到whisper_pretrain/里面

数据集准备

  1. 人声分离,如果数据集没有BGM直接跳过此步骤(推荐使用UVR中的3_HP-Vocal-UVR模型或者htdemucs_ft模型抠出数据集中的人声)
  2. slicer剪切音频,whisper要求为小于30秒(建议丢弃不足2秒的音频,短音频大多没有音素,有可能会影响训练效果)
  3. 手动筛选经过第1步和第2步处理过的音频,裁剪或者丢弃杂音明显的音频,如果数据集没有BGM直接跳过此步骤
  4. 用Adobe Audition进行响度平衡处理
  5. 按下面文件结构,将数据集放入dataset_raw目录
dataset_raw
├───speaker0
│   ├───000001.wav
│   ├───...
│   └───000xxx.wav
└───speaker1
    ├───000001.wav
    ├───...
    └───000xxx.wav

数据预处理

python svc_preprocessing.py -t 2 --crepe

-t:指定线程数,必须是正整数且不得超过CPU总核心数,一般写2就可以了
--crepe:使用crepe提取f0,如果训练集杂音多可以加上;杂音几乎没有可以不加--crepe,使用dio提取f0

预处理完成后文件夹结构如下面所示

data_svc/
└── waves-16k
│    └── speaker0
│    │      ├── 000001.wav
│    │      └── 000xxx.wav
│    └── speaker1
│           ├── 000001.wav
│           └── 000xxx.wav
└── waves-32k
│    └── speaker0
│    │      ├── 000001.wav
│    │      └── 000xxx.wav
│    └── speaker1
│           ├── 000001.wav
│           └── 000xxx.wav
└── pitch
│    └── speaker0
│    │      ├── 000001.pit.npy
│    │      └── 000xxx.pit.npy
│    └── speaker1
│           ├── 000001.pit.npy
│           └── 000xxx.pit.npy
└── whisper
│    └── speaker0
│    │      ├── 000001.ppg.npy
│    │      └── 000xxx.ppg.npy
│    └── speaker1
│           ├── 000001.ppg.npy
│           └── 000xxx.ppg.npy
└── speaker
│    └── speaker0
│    │      ├── 000001.spk.npy
│    │      └── 000xxx.spk.npy
│    └── speaker1
│           ├── 000001.spk.npy
│           └── 000xxx.spk.npy
└── singer
    ├── speaker0.spk.npy
    └── speaker1.spk.npy

训练

  1. 参数调整
    如果基于预训练模型微调,需要下载预训练模型sovits5.0_bigvgan_555.pth并且放在项目根目录下面
    并且修改configs/base.yaml的参数pretrain: "./sovits5.0_bigvgan_555.pth",并适当调小学习率(建议从5e-5开始尝试)
    batch_size:6G显存推荐设置为6,设置为8可以训练,但是一个step的速度会非常慢

  2. 开始训练

    python svc_trainer.py -c configs/base.yaml -n sovits5.0
    
  3. 恢复训练

    python svc_trainer.py -c configs/base.yaml -n sovits5.0 -p chkpt/sovits5.0/***.pth
    
  4. 训练日志可视化

    tensorboard --logdir logs/
    

sovits5 0_base

sovits_spec

推理

  1. 导出推理模型:文本编码器,Flow网络,Decoder网络;判别器和后验编码器只在训练中使用
    python svc_export.py --config configs/base.yaml --checkpoint_path chkpt/sovits5.0/***.pt
    
  2. 推理
  • 如果不想手动调整f0,只需要最终的推理结果,运行下面的命令即可

    python svc_inference.py --config configs/base.yaml --model sovits5.0.pth --spk ./data_svc/singer/修改成对应的名称.npy --wave test.wav --shift 0
    
  • 如果需要手动调整f0,依据下面的流程操作

    • 使用whisper提取内容编码,生成test.ppg.npy

      python whisper/inference.py -w test.wav -p test.ppg.npy
      
    • 提取csv文本格式F0参数,用Excel打开csv文件,对照Audition或者SonicVisualiser手动修改错误的F0

      python pitch/inference.py -w test.wav -p test.csv
      
    • 最终推理

      python svc_inference.py --config configs/base.yaml --model sovits5.0.pth --spk ./data_svc/singer/修改成对应的名称.npy --wave test.wav --ppg test.ppg.npy --pit test.csv --shift 0
      
  1. 一些注意点
    当指定--ppg后,多次推理同一个音频时,可以避免重复提取音频内容编码;没有指定,也会自动提取

    当指定--pit后,可以加载手工调教的F0参数;没有指定,也会自动提取

    生成文件在当前目录svc_out.wav

    args --config --model --spk --wave --ppg --pit --shift
    name 配置文件 模型文件 音色文件 音频文件 音频内容 音高内容 升降调

捏音色

纯属巧合的取名:average -> ave -> eva,夏娃代表者孕育和繁衍

python svc_eva.py
eva_conf = {
    './configs/singers/singer0022.npy': 0,
    './configs/singers/singer0030.npy': 0,
    './configs/singers/singer0047.npy': 0.5,
    './configs/singers/singer0051.npy': 0.5,
}

生成的音色文件为:eva.spk.npy

💗Flow和Decoder均需要输入音色,您甚至可以给两个模块输入不同的音色参数,捏出更独特的音色。

数据集

Name URL
KiSing http://shijt.site/index.php/2021/05/16/kising-the-first-open-source-mandarin-singing-voice-synthesis-corpus/
PopCS https://github.com/MoonInTheRiver/DiffSinger/blob/master/resources/apply_form.md
opencpop https://wenet.org.cn/opencpop/download/
Multi-Singer https://github.com/Multi-Singer/Multi-Singer.github.io
M4Singer https://github.com/M4Singer/M4Singer/blob/master/apply_form.md
CSD https://zenodo.org/record/4785016#.YxqrTbaOMU4
KSS https://www.kaggle.com/datasets/bryanpark/korean-single-speaker-speech-dataset
JVS MuSic https://sites.google.com/site/shinnosuketakamichi/research-topics/jvs_music
PJS https://sites.google.com/site/shinnosuketakamichi/research-topics/pjs_corpus
JUST Song https://sites.google.com/site/shinnosuketakamichi/publication/jsut-song
MUSDB18 https://sigsep.github.io/datasets/musdb.html#musdb18-compressed-stems
DSD100 https://sigsep.github.io/datasets/dsd100.html
Aishell-3 http://www.aishelltech.com/aishell_3
VCTK https://datashare.ed.ac.uk/handle/10283/2651

代码来源和参考文献

https://github.com/facebookresearch/speech-resynthesis paper

https://github.com/jaywalnut310/vits paper

https://github.com/openai/whisper/ paper

https://github.com/NVIDIA/BigVGAN paper

https://github.com/mindslab-ai/univnet paper

https://github.com/nii-yamagishilab/project-NN-Pytorch-scripts/tree/master/project/01-nsf

https://github.com/brentspell/hifi-gan-bwe

https://github.com/mozilla/TTS

https://github.com/OlaWod/FreeVC paper

SNAC : Speaker-normalized Affine Coupling Layer in Flow-based Architecture for Zero-Shot Multi-Speaker Text-to-Speech

Adapter-Based Extension of Multi-Speaker Text-to-Speech Model for New Speakers

AdaSpeech: Adaptive Text to Speech for Custom Voice

Cross-Speaker Prosody Transfer on Any Text for Expressive Speech Synthesis

Learn to Sing by Listening: Building Controllable Virtual Singer by Unsupervised Learning from Voice Recordings

Adversarial Speaker Disentanglement Using Unannotated External Data for Self-supervised Representation Based Voice Conversion

Speaker normalization (GRL) for self-supervised speech emotion recognition

基于数据扰动防止音色泄露的方法

https://github.com/auspicious3000/contentvec/blob/main/contentvec/data/audio/audio_utils_1.py

https://github.com/revsic/torch-nansy/blob/main/utils/augment/praat.py

https://github.com/revsic/torch-nansy/blob/main/utils/augment/peq.py

https://github.com/biggytruck/SpeechSplit2/blob/main/utils.py

https://github.com/OlaWod/FreeVC/blob/main/preprocess_sr.py

贡献者

交流群

炼丹师公会-SVC群聊二维码

About

基于vits与softvc的歌声音色转换模型

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 97.4%
  • Jupyter Notebook 2.6%