CN_ChiTu 710c679507 | 11 months ago | |
---|---|---|
configs | 11 months ago | |
data | 1 year ago | |
diffusion | 11 months ago | |
doc | 11 months ago | |
encoder | 1 year ago | |
exp | 1 year ago | |
i18n | 11 months ago | |
logger | 1 year ago | |
nsf_hifigan | 1 year ago | |
pretrain | 1 year ago | |
tools | 11 months ago | |
Diffusion_SVC.ipynb | 11 months ago | |
LICENSE | 11 months ago | |
README.md | 11 months ago | |
README_en.md | 11 months ago | |
combo.py | 11 months ago | |
flask_api.py | 11 months ago | |
gui.py | 11 months ago | |
main.py | 11 months ago | |
main_batch.py | 11 months ago | |
preprocess.py | 11 months ago | |
requirements.txt | 11 months ago | |
train.py | 11 months ago | |
train_units_index.py | 11 months ago |
Language: English 简体中文
此仓库是DDSP-SVC仓库的扩散部分的单独存放。可单独训练和推理。
Diffusion-SVC 是DDSP-SVC仓库的扩散部分的单独存放。可单独训练和推理。
相比于比较著名的 Diff-SVC, 本项目的显存占用少得多,训练和推理速度更快,并针对浅扩散和实时用途有专门优化。可以在较强的GPU上实时推理。配合本项目的naive模型进行浅扩散,即使是较弱的GPU也可以实时生成质量优秀的音频。
如果训练数据和输入源的质量都非常高,Diffusion-SVC可能拥有最好的转换效果。
本项目可以很容易的级联在别的声学模型之后进行浅扩散,以改善最终的输出效果或降低性能占用。例如在DDSP-SVC和本项目的naive模型后级联Diffusion-SVC,可进一步减少需要的扩散步数并得到高质量的输出。
除此之外,本项目还可以单独训练浅扩散所需的降噪步数而不训练完整的从高斯噪声开始的降噪过程,这可以提高训练速度并改善质量,更多信息见下文。
免责声明:请确保仅使用合法获得的授权数据训练 Diffusion-SVC 模型,不要将这些模型及其合成的任何音频用于非法目的。 本库作者不对因使用这些模型检查点和音频而造成的任何侵权,诈骗等违法行为负责。
安装PyTorch:我们推荐从 PyTorch 官方网站 下载 PyTorch.
安装依赖
pip install -r requirements.txt
pretrain
文件夹。
tools/tools.py
中的Units_Encoder
类。pretrain/
文件夹。
nsf_hifigan
的压缩文件,而非nsf_hifigan_finetune
。use_speaker_encoder
设置为true
, 并从这里下载预训练声纹模型,该模型来自mozilla/TTS。将所有的训练集数据 (.wav 格式音频切片) 放到 data/train/audio
,也可以是配置文件中指定的文件夹如xxxx/yyyy/audio
。
将所有的验证集数据 (.wav 格式音频切片) 放到 data/val/audio
,也可以是配置文件中指定的文件夹如aaaa/bbbb/audio
。
运行。python draw.py
,程序将帮助你挑选验证集数据(可以调整 draw.py
中的参数修改抽取文件的数量等参数)
注意:说话人id必须从1开始,不能从0开始;如果只有一个说话人则该说话人id必须为1
data
├─ train
│ ├─ audio
│ │ ├─ 1
│ │ │ ├─ aaa.wav
│ │ │ ├─ bbb.wav
│ │ │ └─ ....wav
│ │ ├─ 2
│ │ │ ├─ ccc.wav
│ │ │ ├─ ddd.wav
│ │ │ └─ ....wav
│ │ └─ ...
|
├─ val
| ├─ audio
│ │ ├─ 1
│ │ │ ├─ eee.wav
│ │ │ ├─ fff.wav
│ │ │ └─ ....wav
│ │ ├─ 2
│ │ │ ├─ ggg.wav
│ │ │ ├─ hhh.wav
│ │ │ └─ ....wav
│ │ └─ ...
python preprocess.py -c configs/config.yaml
您可以在预处理之前修改配置文件 configs/config.yaml
请保持所有音频切片的采样率与 yaml 配置文件中的采样率一致!如果不一致,程序可以跑,但训练过程中的重新采样将非常缓慢。(可选:使用Adobe Audition™的响度匹配功能可以一次性完成重采样修改声道和响度匹配。)
长音频切成小段可以加快训练速度,但所有音频切片的时长不应少于 2 秒。如果音频切片太多,则需要较大的内存,配置文件中将 cache_all_data
选项设置为 false 可以解决此问题。
验证集的音频切片总数建议为 10 个左右,不要放太多,不然验证过程会很慢。
如果您的数据集质量不是很高,请在配置文件中将 'f0_extractor' 设为 'crepe'。crepe 算法的抗噪性最好,但代价是会极大增加数据预处理所需的时间。
配置文件中的 ‘n_spk’ 参数将控制是否训练多说话人模型。如果您要训练多说话人模型,为了对说话人进行编号,所有音频文件夹的名称必须是不大于 ‘n_spk’ 的正整数
python train.py -c configs/config.yaml
我们强烈建议使用预训练模型进行微调,这将比直接训练容易和节省的多,并能达到比小数据集更高的上限。
注意,在底模上微调需要使用和底模一样的编码器,如同为ContentVec,对别的编码器(如声纹)也是同理,还要注意模型的网络大小等参数相同。
Units Encoder | 网络大小 | 数据集 | 下载 |
---|---|---|---|
contentvec768l12(推荐) | 512*20 | VCTK m4singer |
HuggingFace |
hubertsoft | 512*20 | VCTK m4singer |
HuggingFace |
whisper-ppg(仅支持sovits) | 512*20 | VCTK m4singer opencpop kiritan |
HuggingFace |
补充一个用contentvec768l12编码的整活底模,数据集为m4singer
/opencpop
/vctk
,不推荐使用,不保证没问题:下载。
所用编码器 | 网络大小 | k_step_max | 数据集 | 浅扩散模型下载 | Naive模型下载 |
---|---|---|---|---|---|
contentvec768l12 | 512*30 | 100 | VCTK m4singer |
HuggingFace | HuggingFace |
contentvec768l12 | 512*20 | 200 | VCTK m4singer |
HuggingFace | HuggingFace |
注意:naive预训练模型也可用于完整扩散模型的前级naive模型。且微调naive模型时建议将配置文件中的decay_step
改小(如10000)。
model_0.pt
的预训练模型, 放到config.yaml
里面 "expdir: exp/*****" 参数指定的模型导出文件夹内, 没有就新建一个, 程序会自动加载该文件夹下的预训练模型。Naive模型是一个轻量级的svc模型,可以作为浅扩散的前级,训练方式与扩散模型一致,示例配置文件在configs/config_naive.yaml
。其所需的预处理和扩散模型是一样的。
python train.py -c configs/config_naive.yaml
推理时使用-nmodel
指向模型文件以使用,此时必须要浅扩散深度-kstep
。
使用combo.py
可以将一个扩散模型和一个naive模型组合为一个combo模型,只需此模型就能实现浅扩散。这两个模型需要使用同样的参数训练(如同样的说话人id),因为推理时他们也使用同样的参数推理。
python combo.py -model <model> -nmodel <nmodel> -exp <exp> -n <name>
使用以上命令将两个模型组合。其中-model
是扩散模型的路径,-nmodel
是naive模型的路径;与模型同目录下的配置文件也会自动读取。-exp
是输出组合模型的目录,-n
是保存的组合模型名。上述命令会在<exp>
下输出组合模型为<name>.ptc
。
组合模型可直接在推理时作为扩散模型被正确加载用于浅扩散,而无需额外输入-nmodel
来加载naive模型。
(示意图见readme开头)
浅扩散过程中,扩散模型只从一定加噪深度开始扩散,而无需从高斯噪声开始。因此,在浅扩散用途下扩散模型也可以只训练一定加噪深度而不用从高斯噪声开始。
配置文件中指定k_step_max
为扩散深度就是进行这样的训练,该值必须小于1000(这是完整扩散的步数)。这样训练的模型不能单独推理,必须在前级模型的输出结果上或输入源上进行浅扩散;扩散的最大深度不能超过k_step_max
。
示例配置文件见configs/config_shallow.yaml
。
推荐将这种只能浅扩散的扩散模型与naive模型组合为组合模型使用。
# 使用tensorboard检查训练状态
tensorboard --logdir=exp
第一次验证后,在 TensorBoard 中可以看到合成后的测试音频。
python main.py -i <input.wav> -model <model_ckpt.pt> -o <output.wav> -k <keychange> -id <speaker_id> -speedup <speedup> -method <method> -kstep <kstep> -nmodel <nmodel>
-model
是模型的路径,-k
是变调, -speedup
为加速倍速,-method
为pndm
,ddim
,unipc
或dpm-solver
, -kstep
为浅扩散步数,-id
为扩散模型的说话人id。
如果-kstep
不为空,则以输入源的 mel 进行浅扩散,若-kstep
为空,则进行完整深度的高斯扩散。
-nmodel
(可选,需要单独训练)是naive模型的路径,用来在起输出的基础上进行k_step深度的浅扩散,其参数需要与主模型匹配。
如果使用了声纹编码,那么可以通过-spkemb
指定一个外部声纹,或者通过-spkembdict
覆盖模型模型的声纹词典。
与RVC和so-vits-svc类似的特征索引。
注意,此为可选功能,无索引也可正常使用,索引会占用大量存储空间,索引时还会大量占用CPU,此功能不推荐使用。
# 训练特征索引,需要先完成预处理
python train_units_index.py -c config.yaml
推理时,使用-lr
参数使用。此参数为检索比率。
推荐使用本仓库自带的GUI进行实时推理,如果需要使用浅扩散请先组合模型。
python gui.py
本项目也可配合rtvc实现实时推理。
注意:目前flask_api为实验性功能,rtvc也未完善,不推荐使用此方式。
pip install rtvc
python rtvc
python flask_api.py
Diffusion-SVC | DDSP-SVC | so-vits-svc | |
---|---|---|---|
ContentVec | √ | √ | √ |
HubertSoft | √ | √ | √ |
Hubert(Base,Large) | √ | √ | × |
CNHubert(Base,Large) | √ | √ | √* |
CNHubertSoft | √ | √ | × |
Wav2Vec2-xlsr-53-espeak-cv-ft | √* | × | × |
DPHubert | × | × | √ |
Whisper-PPG | × | × | √* |
WavLM(Base,Large) | × | × | √* |
可以使用TheMandateOfRock写的笔记Diffusion_SVC.ipynb
; 由于我没有条件测试,所以有关问题请向笔记作者反馈。(我摸了)
No Description
Python Jupyter Notebook Markdown
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》