Upload 190 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .env +49 -0
- .gitattributes +2 -35
- .gitignore +28 -0
- CONTRIBUTING.md +11 -0
- README.md +1 -3
- assets/Synthesizer_inputs.pth +0 -0
- assets/hubert/.gitignore +3 -0
- assets/hubert/hubert_inputs.pth +0 -0
- assets/indices/.gitignore +2 -0
- assets/pretrained/.gitignore +2 -0
- assets/pretrained_v2/.gitignore +2 -0
- assets/rmvpe/.gitignore +3 -0
- assets/rmvpe/rmvpe_inputs.pth +0 -0
- assets/uvr5_weights/.gitignore +2 -0
- assets/weights/.gitignore +2 -0
- configs/config.json +1 -0
- configs/config.py +259 -0
- configs/inuse/.gitignore +4 -0
- configs/inuse/v1/.gitignore +2 -0
- configs/inuse/v2/.gitignore +2 -0
- configs/v1/32k.json +46 -0
- configs/v1/40k.json +46 -0
- configs/v1/48k.json +46 -0
- configs/v2/32k.json +46 -0
- configs/v2/48k.json +46 -0
- docs/cn/Changelog_CN.md +109 -0
- docs/cn/faq.md +108 -0
- docs/en/Changelog_EN.md +105 -0
- docs/en/README.en.md +216 -0
- docs/en/faiss_tips_en.md +102 -0
- docs/en/faq_en.md +119 -0
- docs/en/training_tips_en.md +65 -0
- docs/fr/Changelog_FR.md +102 -0
- docs/fr/README.fr.md +179 -0
- docs/fr/faiss_tips_fr.md +105 -0
- docs/fr/faq_fr.md +169 -0
- docs/fr/training_tips_fr.md +65 -0
- docs/jp/Changelog_JA.md +123 -0
- docs/jp/README.ja.md +258 -0
- docs/jp/faiss_tips_ja.md +101 -0
- docs/jp/faq_ja.md +122 -0
- docs/jp/training_tips_ja.md +64 -0
- docs/kr/Changelog_KO.md +124 -0
- docs/kr/README.ko.han.md +106 -0
- docs/kr/README.ko.md +259 -0
- docs/kr/faiss_tips_ko.md +132 -0
- docs/kr/faq_ko.md +130 -0
- docs/kr/training_tips_ko.md +53 -0
- docs/pt/Changelog_pt.md +105 -0
- docs/pt/README.pt.md +194 -0
.env
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
OPENBLAS_NUM_THREADS = 1
|
2 |
+
no_proxy = localhost, 127.0.0.1, ::1
|
3 |
+
|
4 |
+
# You can change the location of the model, etc. by changing here
|
5 |
+
weight_root = assets/weights
|
6 |
+
weight_uvr5_root = assets/uvr5_weights
|
7 |
+
index_root = logs
|
8 |
+
outside_index_root = assets/indices
|
9 |
+
rmvpe_root = assets/rmvpe
|
10 |
+
|
11 |
+
sha256_hubert_base_pt = f54b40fd2802423a5643779c4861af1e9ee9c1564dc9d32f54f20b5ffba7db96
|
12 |
+
sha256_rmvpe_pt = 6d62215f4306e3ca278246188607209f09af3dc77ed4232efdd069798c4ec193
|
13 |
+
sha256_rmvpe_onnx = 5370e71ac80af8b4b7c793d27efd51fd8bf962de3a7ede0766dac0befa3660fd
|
14 |
+
|
15 |
+
sha256_v1_D32k_pth = 2ab20645829460fdad0d3c44254f1ab53c32cae50c22a66c926ae5aa30abda6f
|
16 |
+
sha256_v1_D40k_pth = 547f66dbbcd9023b9051ed244d12ab043ba8a4e854b154cc28761ac7c002909b
|
17 |
+
sha256_v1_D48k_pth = 8cc013fa60ed9c3f902f5bd99f48c7e3b9352d763d4d3cd6bc241c37b0bfd9ad
|
18 |
+
sha256_v1_G32k_pth = 81817645cde7ed2e2d83f23ef883f33dda564924b497e84d792743912eca4c23
|
19 |
+
sha256_v1_G40k_pth = e428573bda1124b0ae0ae843fd8dcded6027d3993444790b3e9b0100938b2113
|
20 |
+
sha256_v1_G48k_pth = 3862a67ea6313e8ffefc05cee6bee656ef3e089442e9ecf4a6618d60721f3e95
|
21 |
+
sha256_v1_f0D32k_pth = 294db3087236e2c75260d6179056791c9231245daf5d0485545d9e54c4057c77
|
22 |
+
sha256_v1_f0D40k_pth = 7d4f5a441594b470d67579958b2fd4c6b992852ded28ff9e72eda67abcebe423
|
23 |
+
sha256_v1_f0D48k_pth = 1b84c8bf347ad1e539c842e8f2a4c36ecd9e7fb23c16041189e4877e9b07925c
|
24 |
+
sha256_v1_f0G32k_pth = 285f524bf48bb692c76ad7bd0bc654c12bd9e5edeb784dddf7f61a789a608574
|
25 |
+
sha256_v1_f0G40k_pth = 9115654aeef1995f7dd3c6fc4140bebbef0ca9760bed798105a2380a34299831
|
26 |
+
sha256_v1_f0G48k_pth = 78bc9cab27e34bcfc194f93029374d871d8b3e663ddedea32a9709e894cc8fe8
|
27 |
+
|
28 |
+
sha256_v2_D32k_pth = d8043378cc6619083d385f5a045de09b83fb3bf8de45c433ca863b71723ac3ca
|
29 |
+
sha256_v2_D40k_pth = 471378e894e7191f89a94eda8288c5947b16bbe0b10c3f1f17efdb7a1d998242
|
30 |
+
sha256_v2_D48k_pth = db01094a93c09868a278e03dafe8bb781bfcc1a5ba8df168c948bf9168c84d82
|
31 |
+
sha256_v2_G32k_pth = 869b26a47f75168d6126f64ac39e6de5247017a8658cfd68aca600f7323efb9f
|
32 |
+
sha256_v2_G40k_pth = a3843da7fde33db1dab176146c70d6c2df06eafe9457f4e3aa10024e9c6a4b69
|
33 |
+
sha256_v2_G48k_pth = 2e2b1581a436d07a76b10b9d38765f64aa02836dc65c7dee1ce4140c11ea158b
|
34 |
+
sha256_v2_f0D32k_pth = bd7134e7793674c85474d5145d2d982e3c5d8124fc7bb6c20f710ed65808fa8a
|
35 |
+
sha256_v2_f0D40k_pth = 6b6ab091e70801b28e3f41f335f2fc5f3f35c75b39ae2628d419644ec2b0fa09
|
36 |
+
sha256_v2_f0D48k_pth = 2269b73c7a4cf34da09aea99274dabf99b2ddb8a42cbfb065fb3c0aa9a2fc748
|
37 |
+
sha256_v2_f0G32k_pth = 2332611297b8d88c7436de8f17ef5f07a2119353e962cd93cda5806d59a1133d
|
38 |
+
sha256_v2_f0G40k_pth = 3b2c44035e782c4b14ddc0bede9e2f4a724d025cd073f736d4f43708453adfcb
|
39 |
+
sha256_v2_f0G48k_pth = b5d51f589cc3632d4eae36a315b4179397695042edc01d15312e1bddc2b764a4
|
40 |
+
|
41 |
+
sha256_uvr5_HP2-人声vocals+非人声instrumentals_pth = 39796caa5db18d7f9382d8ac997ac967bfd85f7761014bb807d2543cc844ef05
|
42 |
+
sha256_uvr5_HP2_all_vocals_pth = 39796caa5db18d7f9382d8ac997ac967bfd85f7761014bb807d2543cc844ef05
|
43 |
+
sha256_uvr5_HP3_all_vocals_pth = 45e6b65199e781b4a6542002699be9f19cd3d1cb7d1558bc2bfbcd84674dfe28
|
44 |
+
sha256_uvr5_HP5-主旋律人声vocals+其他instrumentals_pth = 5908891829634926119720241e8573d97cbeb8277110a7512bdb0bd7563258ee
|
45 |
+
sha256_uvr5_HP5_only_main_vocal_pth = 5908891829634926119720241e8573d97cbeb8277110a7512bdb0bd7563258ee
|
46 |
+
sha256_uvr5_VR-DeEchoAggressive_pth = 8c8fd1582f9aabc363e47af62ddb88df6cae7e064cae75bbf041a067a5e0aee2
|
47 |
+
sha256_uvr5_VR-DeEchoDeReverb_pth = 01376dd2a571bf3cb9cced680732726d2d732609d09216a610b0d110f133febe
|
48 |
+
sha256_uvr5_VR-DeEchoNormal_pth = 56aba59db3bcdd14a14464e62f3129698ecdea62eee0f003b9360923eb3ac79e
|
49 |
+
sha256_uvr5_vocals_onnx = 233bb5c6aaa365e568659a0a81211746fa881f8f47f82d9e864fce1f7692db80
|
.gitattributes
CHANGED
@@ -1,35 +1,2 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
25 |
-
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
1 |
+
# Auto detect text files and perform LF normalization
|
2 |
+
* text=auto
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.gitignore
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.DS_Store
|
2 |
+
__pycache__
|
3 |
+
/TEMP
|
4 |
+
*.pyd
|
5 |
+
.venv
|
6 |
+
/opt
|
7 |
+
tools/aria2c/
|
8 |
+
tools/flag.txt
|
9 |
+
|
10 |
+
# Imported from huggingface.co/lj1995/VoiceConversionWebUI
|
11 |
+
/pretrained
|
12 |
+
/pretrained_v2
|
13 |
+
/uvr5_weights
|
14 |
+
hubert_base.pt
|
15 |
+
rmvpe.onnx
|
16 |
+
rmvpe.pt
|
17 |
+
|
18 |
+
# Generated by RVC
|
19 |
+
/logs
|
20 |
+
/weights
|
21 |
+
|
22 |
+
# To set a Python version for the project
|
23 |
+
.tool-versions
|
24 |
+
|
25 |
+
/runtime
|
26 |
+
/assets/weights/*
|
27 |
+
ffmpeg.*
|
28 |
+
ffprobe.*
|
CONTRIBUTING.md
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# 贡献规则
|
2 |
+
1. 一般来说,作者`@RVC-Boss`将拒绝所有的算法更改,除非它是为了修复某个代码层面的错误或警告
|
3 |
+
2. 您可以贡献本仓库的其他位置,如翻译和WebUI,但请尽量作最小更改
|
4 |
+
3. 所有更改都需要由`@RVC-Boss`批准,因此您的PR可能会被搁置
|
5 |
+
4. 由此带来的不便请您谅解
|
6 |
+
|
7 |
+
# Contributing Rules
|
8 |
+
1. Generally, the author `@RVC-Boss` will reject all algorithm changes unless what is to fix a code-level error or warning.
|
9 |
+
2. You can contribute to other parts of this repo like translations and WebUI, but please minimize your changes as much as possible.
|
10 |
+
3. All changes need to be approved by `@RVC-Boss`, so your PR may be put on hold.
|
11 |
+
4. Please accept our apologies for any inconvenience caused.
|
README.md
CHANGED
@@ -1,3 +1 @@
|
|
1 |
-
|
2 |
-
license: mit
|
3 |
-
---
|
|
|
1 |
+
RVC
|
|
|
|
assets/Synthesizer_inputs.pth
ADDED
Binary file (122 kB). View file
|
|
assets/hubert/.gitignore
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
3 |
+
!hubert_inputs.pth
|
assets/hubert/hubert_inputs.pth
ADDED
Binary file (169 kB). View file
|
|
assets/indices/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
assets/pretrained/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
assets/pretrained_v2/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
assets/rmvpe/.gitignore
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
3 |
+
!rmvpe_inputs.pth
|
assets/rmvpe/rmvpe_inputs.pth
ADDED
Binary file (33.5 kB). View file
|
|
assets/uvr5_weights/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
assets/weights/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
configs/config.json
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"pth_path": "assets/weights/kikiV1.pth", "index_path": "logs/kikiV1.index", "sg_hostapi": "MME", "sg_wasapi_exclusive": false, "sg_input_device": "VoiceMeeter Output (VB-Audio Vo", "sg_output_device": "VoiceMeeter Input (VB-Audio Voi", "sr_type": "sr_device", "threhold": -60.0, "pitch": 12.0, "rms_mix_rate": 0.5, "index_rate": 0.0, "block_time": 0.15, "crossfade_length": 0.08, "extra_time": 2.0, "n_cpu": 4.0, "use_jit": false, "use_pv": false, "f0method": "fcpe"}
|
configs/config.py
ADDED
@@ -0,0 +1,259 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
import os
|
3 |
+
import sys
|
4 |
+
import json
|
5 |
+
import shutil
|
6 |
+
from multiprocessing import cpu_count
|
7 |
+
|
8 |
+
import torch
|
9 |
+
|
10 |
+
try:
|
11 |
+
import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import
|
12 |
+
|
13 |
+
if torch.xpu.is_available():
|
14 |
+
from infer.modules.ipex import ipex_init
|
15 |
+
|
16 |
+
ipex_init()
|
17 |
+
except Exception: # pylint: disable=broad-exception-caught
|
18 |
+
pass
|
19 |
+
import logging
|
20 |
+
|
21 |
+
logger = logging.getLogger(__name__)
|
22 |
+
|
23 |
+
|
24 |
+
version_config_list = [
|
25 |
+
"v1/32k.json",
|
26 |
+
"v1/40k.json",
|
27 |
+
"v1/48k.json",
|
28 |
+
"v2/48k.json",
|
29 |
+
"v2/32k.json",
|
30 |
+
]
|
31 |
+
|
32 |
+
|
33 |
+
def singleton_variable(func):
|
34 |
+
def wrapper(*args, **kwargs):
|
35 |
+
if not wrapper.instance:
|
36 |
+
wrapper.instance = func(*args, **kwargs)
|
37 |
+
return wrapper.instance
|
38 |
+
|
39 |
+
wrapper.instance = None
|
40 |
+
return wrapper
|
41 |
+
|
42 |
+
|
43 |
+
@singleton_variable
|
44 |
+
class Config:
|
45 |
+
def __init__(self):
|
46 |
+
self.device = "cuda:0"
|
47 |
+
self.is_half = True
|
48 |
+
self.use_jit = False
|
49 |
+
self.n_cpu = 0
|
50 |
+
self.gpu_name = None
|
51 |
+
self.json_config = self.load_config_json()
|
52 |
+
self.gpu_mem = None
|
53 |
+
(
|
54 |
+
self.python_cmd,
|
55 |
+
self.listen_port,
|
56 |
+
self.iscolab,
|
57 |
+
self.noparallel,
|
58 |
+
self.noautoopen,
|
59 |
+
self.dml,
|
60 |
+
self.nocheck,
|
61 |
+
) = self.arg_parse()
|
62 |
+
self.instead = ""
|
63 |
+
self.preprocess_per = 3.7
|
64 |
+
self.x_pad, self.x_query, self.x_center, self.x_max = self.device_config()
|
65 |
+
|
66 |
+
@staticmethod
|
67 |
+
def load_config_json() -> dict:
|
68 |
+
d = {}
|
69 |
+
for config_file in version_config_list:
|
70 |
+
p = f"configs/inuse/{config_file}"
|
71 |
+
if not os.path.exists(p):
|
72 |
+
shutil.copy(f"configs/{config_file}", p)
|
73 |
+
with open(f"configs/inuse/{config_file}", "r") as f:
|
74 |
+
d[config_file] = json.load(f)
|
75 |
+
return d
|
76 |
+
|
77 |
+
@staticmethod
|
78 |
+
def arg_parse() -> tuple:
|
79 |
+
exe = sys.executable or "python"
|
80 |
+
parser = argparse.ArgumentParser()
|
81 |
+
parser.add_argument("--port", type=int, default=7865, help="Listen port")
|
82 |
+
parser.add_argument("--pycmd", type=str, default=exe, help="Python command")
|
83 |
+
parser.add_argument("--colab", action="store_true", help="Launch in colab")
|
84 |
+
parser.add_argument(
|
85 |
+
"--noparallel", action="store_true", help="Disable parallel processing"
|
86 |
+
)
|
87 |
+
parser.add_argument(
|
88 |
+
"--noautoopen",
|
89 |
+
action="store_true",
|
90 |
+
help="Do not open in browser automatically",
|
91 |
+
)
|
92 |
+
parser.add_argument(
|
93 |
+
"--dml",
|
94 |
+
action="store_true",
|
95 |
+
help="torch_dml",
|
96 |
+
)
|
97 |
+
parser.add_argument(
|
98 |
+
"--nocheck", action="store_true", help="Run without checking assets"
|
99 |
+
)
|
100 |
+
cmd_opts = parser.parse_args()
|
101 |
+
|
102 |
+
cmd_opts.port = cmd_opts.port if 0 <= cmd_opts.port <= 65535 else 7865
|
103 |
+
|
104 |
+
return (
|
105 |
+
cmd_opts.pycmd,
|
106 |
+
cmd_opts.port,
|
107 |
+
cmd_opts.colab,
|
108 |
+
cmd_opts.noparallel,
|
109 |
+
cmd_opts.noautoopen,
|
110 |
+
cmd_opts.dml,
|
111 |
+
cmd_opts.nocheck,
|
112 |
+
)
|
113 |
+
|
114 |
+
# has_mps is only available in nightly pytorch (for now) and MasOS 12.3+.
|
115 |
+
# check `getattr` and try it for compatibility
|
116 |
+
@staticmethod
|
117 |
+
def has_mps() -> bool:
|
118 |
+
if not torch.backends.mps.is_available():
|
119 |
+
return False
|
120 |
+
try:
|
121 |
+
torch.zeros(1).to(torch.device("mps"))
|
122 |
+
return True
|
123 |
+
except Exception:
|
124 |
+
return False
|
125 |
+
|
126 |
+
@staticmethod
|
127 |
+
def has_xpu() -> bool:
|
128 |
+
if hasattr(torch, "xpu") and torch.xpu.is_available():
|
129 |
+
return True
|
130 |
+
else:
|
131 |
+
return False
|
132 |
+
|
133 |
+
def use_fp32_config(self):
|
134 |
+
for config_file in version_config_list:
|
135 |
+
self.json_config[config_file]["train"]["fp16_run"] = False
|
136 |
+
with open(f"configs/inuse/{config_file}", "r") as f:
|
137 |
+
strr = f.read().replace("true", "false")
|
138 |
+
with open(f"configs/inuse/{config_file}", "w") as f:
|
139 |
+
f.write(strr)
|
140 |
+
logger.info("overwrite " + config_file)
|
141 |
+
self.preprocess_per = 3.0
|
142 |
+
logger.info("overwrite preprocess_per to %d" % (self.preprocess_per))
|
143 |
+
|
144 |
+
def device_config(self) -> tuple:
|
145 |
+
if torch.cuda.is_available():
|
146 |
+
if self.has_xpu():
|
147 |
+
self.device = self.instead = "xpu:0"
|
148 |
+
self.is_half = True
|
149 |
+
i_device = int(self.device.split(":")[-1])
|
150 |
+
self.gpu_name = torch.cuda.get_device_name(i_device)
|
151 |
+
if (
|
152 |
+
("16" in self.gpu_name and "V100" not in self.gpu_name.upper())
|
153 |
+
or "P40" in self.gpu_name.upper()
|
154 |
+
or "P10" in self.gpu_name.upper()
|
155 |
+
or "1060" in self.gpu_name
|
156 |
+
or "1070" in self.gpu_name
|
157 |
+
or "1080" in self.gpu_name
|
158 |
+
):
|
159 |
+
logger.info("Found GPU %s, force to fp32", self.gpu_name)
|
160 |
+
self.is_half = False
|
161 |
+
self.use_fp32_config()
|
162 |
+
else:
|
163 |
+
logger.info("Found GPU %s", self.gpu_name)
|
164 |
+
self.gpu_mem = int(
|
165 |
+
torch.cuda.get_device_properties(i_device).total_memory
|
166 |
+
/ 1024
|
167 |
+
/ 1024
|
168 |
+
/ 1024
|
169 |
+
+ 0.4
|
170 |
+
)
|
171 |
+
if self.gpu_mem <= 4:
|
172 |
+
self.preprocess_per = 3.0
|
173 |
+
elif self.has_mps():
|
174 |
+
logger.info("No supported Nvidia GPU found")
|
175 |
+
self.device = self.instead = "mps"
|
176 |
+
self.is_half = False
|
177 |
+
self.use_fp32_config()
|
178 |
+
else:
|
179 |
+
logger.info("No supported Nvidia GPU found")
|
180 |
+
self.device = self.instead = "cpu"
|
181 |
+
self.is_half = False
|
182 |
+
self.use_fp32_config()
|
183 |
+
|
184 |
+
if self.n_cpu == 0:
|
185 |
+
self.n_cpu = cpu_count()
|
186 |
+
|
187 |
+
if self.is_half:
|
188 |
+
# 6G显存配置
|
189 |
+
x_pad = 3
|
190 |
+
x_query = 10
|
191 |
+
x_center = 60
|
192 |
+
x_max = 65
|
193 |
+
else:
|
194 |
+
# 5G显存配置
|
195 |
+
x_pad = 1
|
196 |
+
x_query = 6
|
197 |
+
x_center = 38
|
198 |
+
x_max = 41
|
199 |
+
|
200 |
+
if self.gpu_mem is not None and self.gpu_mem <= 4:
|
201 |
+
x_pad = 1
|
202 |
+
x_query = 5
|
203 |
+
x_center = 30
|
204 |
+
x_max = 32
|
205 |
+
if self.dml:
|
206 |
+
logger.info("Use DirectML instead")
|
207 |
+
if (
|
208 |
+
os.path.exists(
|
209 |
+
"runtime\Lib\site-packages\onnxruntime\capi\DirectML.dll"
|
210 |
+
)
|
211 |
+
== False
|
212 |
+
):
|
213 |
+
try:
|
214 |
+
os.rename(
|
215 |
+
"runtime\Lib\site-packages\onnxruntime",
|
216 |
+
"runtime\Lib\site-packages\onnxruntime-cuda",
|
217 |
+
)
|
218 |
+
except:
|
219 |
+
pass
|
220 |
+
try:
|
221 |
+
os.rename(
|
222 |
+
"runtime\Lib\site-packages\onnxruntime-dml",
|
223 |
+
"runtime\Lib\site-packages\onnxruntime",
|
224 |
+
)
|
225 |
+
except:
|
226 |
+
pass
|
227 |
+
# if self.device != "cpu":
|
228 |
+
import torch_directml
|
229 |
+
|
230 |
+
self.device = torch_directml.device(torch_directml.default_device())
|
231 |
+
self.is_half = False
|
232 |
+
else:
|
233 |
+
if self.instead:
|
234 |
+
logger.info(f"Use {self.instead} instead")
|
235 |
+
if (
|
236 |
+
os.path.exists(
|
237 |
+
"runtime\Lib\site-packages\onnxruntime\capi\onnxruntime_providers_cuda.dll"
|
238 |
+
)
|
239 |
+
== False
|
240 |
+
):
|
241 |
+
try:
|
242 |
+
os.rename(
|
243 |
+
"runtime\Lib\site-packages\onnxruntime",
|
244 |
+
"runtime\Lib\site-packages\onnxruntime-dml",
|
245 |
+
)
|
246 |
+
except:
|
247 |
+
pass
|
248 |
+
try:
|
249 |
+
os.rename(
|
250 |
+
"runtime\Lib\site-packages\onnxruntime-cuda",
|
251 |
+
"runtime\Lib\site-packages\onnxruntime",
|
252 |
+
)
|
253 |
+
except:
|
254 |
+
pass
|
255 |
+
logger.info(
|
256 |
+
"Half-precision floating-point: %s, device: %s"
|
257 |
+
% (self.is_half, self.device)
|
258 |
+
)
|
259 |
+
return x_pad, x_query, x_center, x_max
|
configs/inuse/.gitignore
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
3 |
+
!v1
|
4 |
+
!v2
|
configs/inuse/v1/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
configs/inuse/v2/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
configs/v1/32k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 12800,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 32000,
|
21 |
+
"filter_length": 1024,
|
22 |
+
"hop_length": 320,
|
23 |
+
"win_length": 1024,
|
24 |
+
"n_mel_channels": 80,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [10,4,2,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [16,16,4,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
configs/v1/40k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 12800,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 40000,
|
21 |
+
"filter_length": 2048,
|
22 |
+
"hop_length": 400,
|
23 |
+
"win_length": 2048,
|
24 |
+
"n_mel_channels": 125,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [10,10,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [16,16,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
configs/v1/48k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 11520,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 48000,
|
21 |
+
"filter_length": 2048,
|
22 |
+
"hop_length": 480,
|
23 |
+
"win_length": 2048,
|
24 |
+
"n_mel_channels": 128,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [10,6,2,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [16,16,4,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
configs/v2/32k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 12800,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 32000,
|
21 |
+
"filter_length": 1024,
|
22 |
+
"hop_length": 320,
|
23 |
+
"win_length": 1024,
|
24 |
+
"n_mel_channels": 80,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [10,8,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [20,16,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
configs/v2/48k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 17280,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 48000,
|
21 |
+
"filter_length": 2048,
|
22 |
+
"hop_length": 480,
|
23 |
+
"win_length": 2048,
|
24 |
+
"n_mel_channels": 128,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [12,10,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [24,20,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
docs/cn/Changelog_CN.md
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### 20231006更新
|
2 |
+
|
3 |
+
我们制作了一个用于实时变声的界面go-realtime-gui.bat/gui_v1.py(事实上早就存在了),本次更新重点也优化了实时变声的性能。对比0813版:
|
4 |
+
- 1、优优化界面操作:参数热更新(调整参数不需要中止再启动),懒加载模型(已加载过的模型不需要重新加载),增加响度因子参数(响度向输入音频靠近)
|
5 |
+
- 2、优化自带降噪效果与速度
|
6 |
+
- 3、大幅优化推理速度
|
7 |
+
|
8 |
+
注意输入输出设备应该选择同种类型,例如都选MME类型。
|
9 |
+
|
10 |
+
1006版本整体的更新为:
|
11 |
+
- 1、继续提升rmvpe音高提取算法效果,对于男低音有更大的提升
|
12 |
+
- 2、优化推理界面布局
|
13 |
+
|
14 |
+
### 20230813更新
|
15 |
+
1-常规bug修复
|
16 |
+
- 保存频率总轮数最低改为1 总轮数最低改为2
|
17 |
+
- 修复无pretrain模型训练报错
|
18 |
+
- 增加伴奏人声分离完毕清理显存
|
19 |
+
- faiss保存路径绝对路径改为相对路径
|
20 |
+
- 支持路径包含空格(训练集路径+实验名称均支持,不再会报错)
|
21 |
+
- filelist取消强制utf8编码
|
22 |
+
- 解决实时变声中开启索引导致的CPU极大占用问题
|
23 |
+
|
24 |
+
2-重点更新
|
25 |
+
- 训练出当前最强开源人声音高提取模型RMVPE,并用于RVC的训练、离线/实时推理,支持pytorch/onnx/DirectML
|
26 |
+
- 通过pytorch-dml支持A卡和I卡的
|
27 |
+
(1)实时变声(2)推理(3)人声伴奏分离(4)训练暂未支持,会切换至CPU训练;通过onnx_dml支持rmvpe_gpu的推理
|
28 |
+
|
29 |
+
### 20230618更新
|
30 |
+
- v2增加32k和48k两个新预训练模型
|
31 |
+
- 修复非f0模型推理报错
|
32 |
+
- 对于超过一小时的训练集的索引建立环节,自动kmeans缩小特征处理以加速索引训练、加入和查询
|
33 |
+
- 附送一个人声转吉他玩具仓库
|
34 |
+
- 数据处理剔除异常值切片
|
35 |
+
- onnx导出选项卡
|
36 |
+
|
37 |
+
失败的实验:
|
38 |
+
- ~~特征检索增加时序维度:寄,没啥效果~~
|
39 |
+
- ~~特征检索增加PCAR降维可选项:寄,数据大用kmeans缩小数据量,数据小降维操作耗时比省下的匹配耗时还多~~
|
40 |
+
- ~~支持onnx推理(附带仅推理的小压缩包):寄,生成nsf还是需要pytorch~~
|
41 |
+
- ~~训练时在音高、gender、eq、噪声等方面对输入进行随机增强:寄,没啥效果~~
|
42 |
+
- ~~接入小型声码器调研:寄,效果变差~~
|
43 |
+
|
44 |
+
todolist:
|
45 |
+
- ~~训练集音高识别支持crepe:已经被RMVPE取代,不需要~~
|
46 |
+
- ~~多进程harvest推理:已经被RMVPE取代,不需要~~
|
47 |
+
- ~~crepe的精度支持和RVC-config同步:已经被RMVPE取代,不需要。支持这个还要同步torchcrepe的库,麻烦~~
|
48 |
+
- 对接F0编辑器
|
49 |
+
|
50 |
+
|
51 |
+
### 20230528更新
|
52 |
+
- 增加v2的jupyter notebook,韩文changelog,增加一些环境依赖
|
53 |
+
- 增加呼吸、清辅音、齿音保护模式
|
54 |
+
- 支持crepe-full推理
|
55 |
+
- UVR5人声伴奏分离加上3个去延迟模型和MDX-Net去混响模型,增加HP3人声提取模型
|
56 |
+
- 索引名称增加版本和实验名称
|
57 |
+
- 人声伴奏分离、推理批量导出增加音频导出格式选项
|
58 |
+
- 废弃32k模型的训练
|
59 |
+
|
60 |
+
### 20230513更新
|
61 |
+
- 清除一键包内部老版本runtime内残留的lib.infer_pack和uvr5_pack
|
62 |
+
- 修复训练集预处理伪多进程的bug
|
63 |
+
- 增加harvest识别音高可选通过中值滤波削弱哑音现象,可调整中值滤波半径
|
64 |
+
- 导出音频增加后处理重采样
|
65 |
+
- 训练n_cpu进程数从"仅调整f0提取"改为"调整数据预处理和f0提取"
|
66 |
+
- 自动检测logs文件夹下的index路径,提供下拉列表功能
|
67 |
+
- tab页增加"常见问题解答"(也可参考github-rvc-wiki)
|
68 |
+
- 相同路径的输入音频推理增加了音高缓存(用途:使用harvest音高提取,整个pipeline会经历漫长且重复的音高提取过程,如果不使用缓存,实验不同音色、索引、音高中值滤波半径参数的用户在第一次测试后的等待结果会非常痛苦)
|
69 |
+
|
70 |
+
### 20230514更新
|
71 |
+
- 音量包络对齐输入混合(可以缓解“输入静音输出小幅度噪声”的问题。如果输入音频背景底噪大则不建议开启,默认不开启(值为1可视为不开启))
|
72 |
+
- 支持按照指定频率保存提取的小模型(假如你想尝试不同epoch下的推理效果,但是不想保存所有大checkpoint并且每次都要ckpt手工处理提取小模型,这项功能会非常实用)
|
73 |
+
- 通过设置环境变量解决服务端开了系统全局代理导致浏览器连接错误的问题
|
74 |
+
- 支持v2预训练模型(目前只公开了40k版本进行测试,另外2个采样率还没有训练完全)
|
75 |
+
- 推理前限制超过1的过大音量
|
76 |
+
- 微调数据预处理参数
|
77 |
+
|
78 |
+
|
79 |
+
### 20230409更新
|
80 |
+
- 修正训练参数,提升显卡平均利用率,A100最高从25%提升至90%左右,V100:50%->90%左右,2060S:60%->85%左右,P40:25%->95%左右,训练速度显著提升
|
81 |
+
- 修正参数:总batch_size改为每张卡的batch_size
|
82 |
+
- 修正total_epoch:最大限制100解锁至1000;默认10提升至默认20
|
83 |
+
- 修复ckpt提取识别是否带音高错误导致推理异常的问题
|
84 |
+
- 修复分布式训练每个rank都保存一次ckpt���问题
|
85 |
+
- 特征提取进行nan特征过滤
|
86 |
+
- 修复静音输入输出随机辅音or噪声的问题(老版模型需要重做训练集重训)
|
87 |
+
|
88 |
+
### 20230416更新
|
89 |
+
- 新增本地实时变声迷你GUI,双击go-realtime-gui.bat启动
|
90 |
+
- 训练推理均对<50Hz的频段进行滤波过滤
|
91 |
+
- 训练推理音高提取pyworld最低音高从默认80下降至50,50-80hz间的男声低音不会哑
|
92 |
+
- WebUI支持根据系统区域变更语言(现支持en_US,ja_JP,zh_CN,zh_HK,zh_SG,zh_TW,不支持的默认en_US)
|
93 |
+
- 修正部分显卡识别(例如V100-16G识别失败,P4识别失败)
|
94 |
+
|
95 |
+
### 20230428更新
|
96 |
+
- 升级faiss索引设置,速度更快,质量更高
|
97 |
+
- 取消total_npy依赖,后续分享模型不再需要填写total_npy
|
98 |
+
- 解锁16系限制。4G显存GPU给到4G的推理设置。
|
99 |
+
- 修复部分音频格式下UVR5人声伴奏分离的bug
|
100 |
+
- 实时变声迷你gui增加对非40k与不懈怠音高模型的支持
|
101 |
+
|
102 |
+
### 后续计划:
|
103 |
+
功能:
|
104 |
+
- 支持多人训练选项卡(至多4人)
|
105 |
+
|
106 |
+
底模:
|
107 |
+
- 收集呼吸wav加入训练集修正呼吸变声电音的问题
|
108 |
+
- 我们正在训练增加了歌声训练集的底模,未来会公开
|
109 |
+
|
docs/cn/faq.md
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Q1:ffmpeg error/utf8 error.
|
2 |
+
|
3 |
+
大概率不是ffmpeg问题,而是音频路径问题;<br>
|
4 |
+
ffmpeg读取路径带空格、()等特殊符号,可能出现ffmpeg error;训练集音频带中文路径,在写入filelist.txt的时候可能出现utf8 error;<br>
|
5 |
+
|
6 |
+
## Q2:一键训练结束没有索引
|
7 |
+
|
8 |
+
显示"Training is done. The program is closed."则模型训练成功,后续紧邻的报错是假的;<br>
|
9 |
+
|
10 |
+
一键训练结束完成没有added开头的索引文件,可能是因为训练集太大卡住了添加索引的步骤;已通过批处理add索引解决内存add索引对内存需求过大的问题。临时可尝试再次点击"训练索引"按钮。<br>
|
11 |
+
|
12 |
+
## Q3:训练结束推理没看到训练集的音色
|
13 |
+
点刷新音色再看看,如果还没有看看训练有没有报错,控制台和webui的截图,logs/实验名下的log,都可以发给开发者看看。<br>
|
14 |
+
|
15 |
+
## Q4:如何分享模型
|
16 |
+
rvc_root/logs/实验名 下面存储的pth不是用来分享模型用来推理的,而是为了存储实验状态供复现,以及继续训练用的。用来分享的模型应该是weights文件夹下大小为60+MB的pth文件;<br>
|
17 |
+
后续将把weights/exp_name.pth和logs/exp_name/added_xxx.index合并打包成weights/exp_name.zip省去填写index的步骤,那么zip文件用来分享,不要分享pth文件,除非是想换机器继续训练;<br>
|
18 |
+
如果你把logs文件夹下的几百MB的pth文件复制/分享到weights文件夹下强行用于推理,可能会出现f0,tgt_sr等各种key不存在的报错。你需要用ckpt选项卡最下面,手工或自动(本地logs下如果能找到相关信息则会自动)选择是否携带音高、目标音频采样率的选项后进行ckpt小模型提取(输入路径填G开头的那个),提取完在weights文件夹下会出现60+MB的pth文件,刷新音色后可以选择使用。<br>
|
19 |
+
|
20 |
+
## Q5:Connection Error.
|
21 |
+
也许你关闭了控制台(黑色窗口)。<br>
|
22 |
+
|
23 |
+
## Q6:WebUI弹出Expecting value: line 1 column 1 (char 0).
|
24 |
+
请关闭系统局域网代理/全局代理。<br>
|
25 |
+
|
26 |
+
这个不仅是客户端的代理,也包括服务端的代理(例如你使用autodl设置了http_proxy和https_proxy学术加速,使用时也需要unset关掉)<br>
|
27 |
+
|
28 |
+
## Q7:不用WebUI如何通过命令训练推理
|
29 |
+
训练脚本:<br>
|
30 |
+
可先跑通WebUI,消息窗内会显示数据集处理和训练用命令行;<br>
|
31 |
+
|
32 |
+
推理脚本:<br>
|
33 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py<br>
|
34 |
+
|
35 |
+
例子:<br>
|
36 |
+
|
37 |
+
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" harvest "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True<br>
|
38 |
+
|
39 |
+
f0up_key=sys.argv[1]<br>
|
40 |
+
input_path=sys.argv[2]<br>
|
41 |
+
index_path=sys.argv[3]<br>
|
42 |
+
f0method=sys.argv[4]#harvest or pm<br>
|
43 |
+
opt_path=sys.argv[5]<br>
|
44 |
+
model_path=sys.argv[6]<br>
|
45 |
+
index_rate=float(sys.argv[7])<br>
|
46 |
+
device=sys.argv[8]<br>
|
47 |
+
is_half=bool(sys.argv[9])<br>
|
48 |
+
|
49 |
+
## Q8:Cuda error/Cuda out of memory.
|
50 |
+
小概率是cuda配置问题、设备不支持;大概率是显存不够(out of memory);<br>
|
51 |
+
|
52 |
+
训练的话缩小batch size(如果缩小到1还不够只能更换显卡训练),推理的话酌情缩小config.py结尾的x_pad,x_query,x_center,x_max。4G以下显存(例如1060(3G)和各种2G显卡)可以直接放弃,4G显存显卡还有救。<br>
|
53 |
+
|
54 |
+
## Q9:total_epoch调多少比较好
|
55 |
+
|
56 |
+
如果训练集音质差底噪大,20~30足够了,调太高,底模音质无法带高你的低音质训练集<br>
|
57 |
+
如果训练集音质高底噪低时长多,可以调高,200是ok的(训练速度很快,既然你有条件准备高音质训练集,显卡想必条件也不错,肯定不在乎多一些训练时间)<br>
|
58 |
+
|
59 |
+
## Q10:需要多少训练集时长
|
60 |
+
推荐10min至50min<br>
|
61 |
+
保证音质高底噪低的情况下,如果有个人特色的音色统一,则多多益善<br>
|
62 |
+
高水平的训练集(精简+音色有特色),5min至10min也是ok的,仓库作者本人就经常这么玩<br>
|
63 |
+
也有人拿1min至2min的数据来训练并且训练成功的,但是成功经验是其他人不可复现的,不太具备参考价值。这要求训练集音色特色非常明显(比如说高频气声较明显的萝莉少女音),且音质高;<br>
|
64 |
+
1min以下时长数据目前没见有人尝试(成功)过。不建议进行这种鬼畜行为。<br>
|
65 |
+
|
66 |
+
## Q11:index rate干嘛用的,怎么调(科普)
|
67 |
+
如果底模和推理源的音质高于训练集的音质,他们可以带高推理结果的音质,但代价可能是音色往底模/推理源的音色靠,这种现象叫做"音色泄露";<br>
|
68 |
+
index rate用来削减/解决音色泄露问题。调到1,则理论上不存在推理源的音色泄露问题,但音质更倾向于训练集。如果训练集音质比推理源低,则index rate调高可能降低音质。调到0,则不具备利用检索混合来保护训练集音色的效果;<br>
|
69 |
+
如果训练集优质时长多,可调高total_epoch,此时模型本身不太会引用推理源和底模的音色,很少存在"音色泄露"问题,此时index_rate不重要,你甚至可以不建立/分享index索引文件。<br>
|
70 |
+
|
71 |
+
## Q11:推理怎么选gpu
|
72 |
+
config.py文件里device cuda:后面选择卡号;<br>
|
73 |
+
卡号和显卡的映射关系,在训练选项卡的显卡信息栏里能看到。<br>
|
74 |
+
|
75 |
+
## Q12:如何推理训练中间保存的pth
|
76 |
+
通过ckpt选项卡最下面提取小模型。<br>
|
77 |
+
|
78 |
+
|
79 |
+
## Q13:如何中断和继续训练
|
80 |
+
现阶段只能关闭WebUI控制台双击go-web.bat重启程序。网页参数也要刷新重新填写;<br>
|
81 |
+
继续训练:相同网页参数点训练模型,就会接着上次的checkpoint继续训练。<br>
|
82 |
+
|
83 |
+
## Q14:训练时出现文件页面/内存error
|
84 |
+
进程开太多了,内存炸了。你可能可以通过如下方式解决<br>
|
85 |
+
1、"提取音高和处理数据使用的CPU进程数" 酌情拉低;<br>
|
86 |
+
2、训练集音频手工切一下,不要太长。<br>
|
87 |
+
|
88 |
+
|
89 |
+
## Q15:如何中途加数据训练
|
90 |
+
1、所有数据新建一个实验名;<br>
|
91 |
+
2、拷贝上一次的最新的那个G和D文件(或者你想基于哪个中间ckpt训练,也可以拷贝中间的)到新实验名;下<br>
|
92 |
+
3、一键训练新实验名,他会继续上一次的最新进度训练。<br>
|
93 |
+
|
94 |
+
## Q16: error about llvmlite.dll
|
95 |
+
|
96 |
+
OSError: Could not load shared object file: llvmlite.dll
|
97 |
+
|
98 |
+
FileNotFoundError: Could not find module lib\site-packages\llvmlite\binding\llvmlite.dll (or one of its dependencies). Try using the full path with constructor syntax.
|
99 |
+
|
100 |
+
win平台会报这个错,装上https://aka.ms/vs/17/release/vc_redist.x64.exe这个再重启WebUI就好了。
|
101 |
+
|
102 |
+
## Q17: RuntimeError: The expanded size of the tensor (17280) must match the existing size (0) at non-singleton dimension 1. Target sizes: [1, 17280]. Tensor sizes: [0]
|
103 |
+
|
104 |
+
wavs16k文件夹下,找到文件大小显著比其他都小的一些音频文件,删掉,点击训练模型,就不会报错了,不过由于一键流程中断了你训练完模型还要点训练索引。
|
105 |
+
|
106 |
+
## Q18: RuntimeError: The size of tensor a (24) must match the size of tensor b (16) at non-singleton dimension 2
|
107 |
+
|
108 |
+
不要中途变更采样率继续训练。如果一定要变更,应更换实验名从头训练。当然你也可以把上次提取的音高和特征(0/1/2/2b folders)拷贝过去加速训练流程。
|
docs/en/Changelog_EN.md
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### 2023-10-06
|
2 |
+
- We have created a GUI for real-time voice change: go-realtime-gui.bat/gui_v1.py (Note that you should choose the same type of input and output device, e.g. MME and MME).
|
3 |
+
- We trained a better pitch extract RMVPE model.
|
4 |
+
- Optimize inference GUI layout.
|
5 |
+
|
6 |
+
### 2023-08-13
|
7 |
+
1-Regular bug fix
|
8 |
+
- Change the minimum total epoch number to 1, and change the minimum total epoch number to 2
|
9 |
+
- Fix training errors of not using pre-train models
|
10 |
+
- After accompaniment vocals separation, clear graphics memory
|
11 |
+
- Change faiss save path absolute path to relative path
|
12 |
+
- Support path containing spaces (both training set path and experiment name are supported, and errors will no longer be reported)
|
13 |
+
- Filelist cancels mandatory utf8 encoding
|
14 |
+
- Solve the CPU consumption problem caused by faiss searching during real-time voice changes
|
15 |
+
|
16 |
+
2-Key updates
|
17 |
+
- Train the current strongest open-source vocal pitch extraction model RMVPE, and use it for RVC training, offline/real-time inference, supporting PyTorch/Onnx/DirectML
|
18 |
+
- Support for AMD and Intel graphics cards through Pytorch_DML
|
19 |
+
|
20 |
+
(1) Real time voice change (2) Inference (3) Separation of vocal accompaniment (4) Training not currently supported, will switch to CPU training; supports RMVPE inference of gpu by Onnx_Dml
|
21 |
+
|
22 |
+
|
23 |
+
### 2023-06-18
|
24 |
+
- New pretrained v2 models: 32k and 48k
|
25 |
+
- Fix non-f0 model inference errors
|
26 |
+
- For training-set exceeding 1 hour, do automatic minibatch-kmeans to reduce feature shape, so that index training, adding, and searching will be much faster.
|
27 |
+
- Provide a toy vocal2guitar huggingface space
|
28 |
+
- Auto delete outlier short cut training-set audios
|
29 |
+
- Onnx export tab
|
30 |
+
|
31 |
+
Failed experiments:
|
32 |
+
- ~~Feature retrieval: add temporal feature retrieval: not effective~~
|
33 |
+
- ~~Feature retrieval: add PCAR dimensionality reduction: searching is even slower~~
|
34 |
+
- ~~Random data augmentation when training: not effective~~
|
35 |
+
|
36 |
+
todolist:
|
37 |
+
- ~~Vocos-RVC (tiny vocoder): not effective~~
|
38 |
+
- ~~Crepe support for training:replaced by RMVPE~~
|
39 |
+
- ~~Half precision crepe inference:replaced by RMVPE. And hard to achive.~~
|
40 |
+
- F0 editor support
|
41 |
+
|
42 |
+
### 2023-05-28
|
43 |
+
- Add v2 jupyter notebook, korean changelog, fix some environment requirments
|
44 |
+
- Add voiceless consonant and breath protection mode
|
45 |
+
- Support crepe-full pitch detect
|
46 |
+
- UVR5 vocal separation: support dereverb models and de-echo models
|
47 |
+
- Add experiment name and version on the name of index
|
48 |
+
- Support users to manually select export format of output audios when batch voice conversion processing and UVR5 vocal separation
|
49 |
+
- v1 32k model training is no more supported
|
50 |
+
|
51 |
+
### 2023-05-13
|
52 |
+
- Clear the redundant codes in the old version of runtime in the one-click-package: lib.infer_pack and uvr5_pack
|
53 |
+
- Fix pseudo multiprocessing bug in training set preprocessing
|
54 |
+
- Adding median filtering radius adjustment for harvest pitch recognize algorithm
|
55 |
+
- Support post processing resampling for exporting audio
|
56 |
+
- Multi processing "n_cpu" setting for training is changed from "f0 extraction" to "data preprocessing and f0 extraction"
|
57 |
+
- Automatically detect the index paths under the logs folder and provide a drop-down list function
|
58 |
+
- Add "Frequently Asked Questions and Answers" on the tab page (you can also refer to github RVC wiki)
|
59 |
+
- When inference, harvest pitch is cached when using same input audio path (purpose: using harvest pitch extraction, the entire pipeline will go through a long and repetitive pitch extraction process. If caching is not used, users who experiment with different timbre, index, and pitch median filtering radius settings will experience a very painful waiting process after the first inference)
|
60 |
+
|
61 |
+
### 2023-05-14
|
62 |
+
- Use volume envelope of input to mix or replace the volume envelope of output (can alleviate the problem of "input muting and output small amplitude noise". If the input audio background noise is high, it is not recommended to turn it on, and it is not turned on by default (1 can be considered as not turned on)
|
63 |
+
- Support saving extracted small models at a specified frequency (if you want to see the performance under different epochs, but do not want to save all large checkpoints and manually extract small models by ckpt-processing every time, this feature will be very practical)
|
64 |
+
- Resolve the issue of "connection errors" caused by the server's global proxy by setting environment variables
|
65 |
+
- Supports pre-trained v2 models (currently only 40k versions are publicly available for testing, and the other two sampling rates have not been fully trained yet)
|
66 |
+
- Limit excessive volume exceeding 1 before inference
|
67 |
+
- Slightly adjusted the settings of training-set preprocessing
|
68 |
+
|
69 |
+
|
70 |
+
#######################
|
71 |
+
|
72 |
+
History changelogs:
|
73 |
+
|
74 |
+
### 2023-04-09
|
75 |
+
- Fixed training parameters to improve GPU utilization rate: A100 increased from 25% to around 90%, V100: 50% to around 90%, 2060S: 60% to around 85%, P40: 25% to around 95%; significantly improved training speed
|
76 |
+
- Changed parameter: total batch_size is now per GPU batch_size
|
77 |
+
- Changed total_epoch: maximum limit increased from 100 to 1000; default increased from 10 to 20
|
78 |
+
- Fixed issue of ckpt extraction recognizing pitch incorrectly, causing abnormal inference
|
79 |
+
- Fixed issue of distributed training saving ckpt for each rank
|
80 |
+
- Applied nan feature filtering for feature extraction
|
81 |
+
- Fixed issue with silent input/output producing random consonants or noise (old models need to retrain with a new dataset)
|
82 |
+
|
83 |
+
### 2023-04-16 Update
|
84 |
+
- Added local real-time voice changing mini-GUI, start by double-clicking go-realtime-gui.bat
|
85 |
+
- Applied filtering for frequency bands below 50Hz during training and inference
|
86 |
+
- Lowered the minimum pitch extraction of pyworld from the default 80 to 50 for training and inference, allowing male low-pitched voices between 50-80Hz not to be muted
|
87 |
+
- WebUI supports changing languages according to system locale (currently supporting en_US, ja_JP, zh_CN, zh_HK, zh_SG, zh_TW; defaults to en_US if not supported)
|
88 |
+
- Fixed recognition of some GPUs (e.g., V100-16G recognition failure, P4 recognition failure)
|
89 |
+
|
90 |
+
### 2023-04-28 Update
|
91 |
+
- Upgraded faiss index settings for faster speed and higher quality
|
92 |
+
- Removed dependency on total_npy; future model sharing will not require total_npy input
|
93 |
+
- Unlocked restrictions for the 16-series GPUs, providing 4GB inference settings for 4GB VRAM GPUs
|
94 |
+
- Fixed bug in UVR5 vocal accompaniment separation for certain audio formats
|
95 |
+
- Real-time voice changing mini-GUI now supports non-40k and non-lazy pitch models
|
96 |
+
|
97 |
+
### Future Plans:
|
98 |
+
Features:
|
99 |
+
- Add option: extract small models for each epoch save
|
100 |
+
- Add option: export additional mp3 to the specified path during inference
|
101 |
+
- Support multi-person training tab (up to 4 people)
|
102 |
+
|
103 |
+
Base model:
|
104 |
+
- Collect breathing wav files to add to the training dataset to fix the issue of distorted breath sounds
|
105 |
+
- We are currently training a base model with an extended singing dataset, which will be released in the future
|
docs/en/README.en.md
ADDED
@@ -0,0 +1,216 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
<h1>Retrieval-based-Voice-Conversion-WebUI</h1>
|
4 |
+
An easy-to-use Voice Conversion framework based on VITS.<br><br>
|
5 |
+
|
6 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange
|
7 |
+
)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)
|
8 |
+
|
9 |
+
<img src="https://counter.seku.su/cmoe?name=rvc&theme=r34" /><br>
|
10 |
+
|
11 |
+
[![RVC v1](https://img.shields.io/badge/RVCv1-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v1.ipynb)
|
12 |
+
[![RVC v2](https://img.shields.io/badge/RVCv2-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v2.ipynb)
|
13 |
+
[![Licence](https://img.shields.io/github/license/RVC-Project/Retrieval-based-Voice-Conversion-WebUI?style=for-the-badge)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
14 |
+
[![Huggingface](https://img.shields.io/badge/🤗%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
15 |
+
|
16 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
17 |
+
|
18 |
+
[**Changelog**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/docs/Changelog_EN.md) | [**FAQ (Frequently Asked Questions)**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/wiki/FAQ-(Frequently-Asked-Questions))
|
19 |
+
|
20 |
+
[**English**](../en/README.en.md) | [**中文简体**](../../README.md) | [**日本語**](../jp/README.ja.md) | [**한국어**](../kr/README.ko.md) ([**韓國語**](../kr/README.ko.han.md)) | [**Français**](../fr/README.fr.md) | [**Türkçe**](../tr/README.tr.md) | [**Português**](../pt/README.pt.md)
|
21 |
+
|
22 |
+
</div>
|
23 |
+
|
24 |
+
> Check out our [Demo Video](https://www.bilibili.com/video/BV1pm4y1z7Gm/) here!
|
25 |
+
|
26 |
+
<table>
|
27 |
+
<tr>
|
28 |
+
<td align="center">Training and inference Webui</td>
|
29 |
+
<td align="center">Real-time voice changing GUI</td>
|
30 |
+
</tr>
|
31 |
+
<tr>
|
32 |
+
<td align="center"><img src="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/assets/129054828/092e5c12-0d49-4168-a590-0b0ef6a4f630"></td>
|
33 |
+
<td align="center"><img src="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/assets/129054828/730b4114-8805-44a1-ab1a-04668f3c30a6"></td>
|
34 |
+
</tr>
|
35 |
+
<tr>
|
36 |
+
<td align="center">go-web.bat</td>
|
37 |
+
<td align="center">go-realtime-gui.bat</td>
|
38 |
+
</tr>
|
39 |
+
<tr>
|
40 |
+
<td align="center">You can freely choose the action you want to perform.</td>
|
41 |
+
<td align="center">We have achieved an end-to-end latency of 170ms. With the use of ASIO input and output devices, we have managed to achieve an end-to-end latency of 90ms, but it is highly dependent on hardware driver support.</td>
|
42 |
+
</tr>
|
43 |
+
</table>
|
44 |
+
|
45 |
+
> The dataset for the pre-training model uses nearly 50 hours of high quality audio from the VCTK open source dataset.
|
46 |
+
|
47 |
+
> High quality licensed song datasets will be added to the training-set often for your use, without having to worry about copyright infringement.
|
48 |
+
|
49 |
+
> Please look forward to the pretrained base model of RVCv3, which has larger parameters, more training data, better results, unchanged inference speed, and requires less training data for training.
|
50 |
+
|
51 |
+
## Features:
|
52 |
+
+ Reduce tone leakage by replacing the source feature to training-set feature using top1 retrieval;
|
53 |
+
+ Easy + fast training, even on poor graphics cards;
|
54 |
+
+ Training with a small amounts of data (>=10min low noise speech recommended);
|
55 |
+
+ Model fusion to change timbres (using ckpt processing tab->ckpt merge);
|
56 |
+
+ Easy-to-use WebUI;
|
57 |
+
+ UVR5 model to quickly separate vocals and instruments;
|
58 |
+
+ High-pitch Voice Extraction Algorithm [InterSpeech2023-RMVPE](#Credits) to prevent a muted sound problem. Provides the best results (significantly) and is faster with lower resource consumption than Crepe_full;
|
59 |
+
+ AMD/Intel graphics cards acceleration supported;
|
60 |
+
+ Intel ARC graphics cards acceleration with IPEX supported.
|
61 |
+
|
62 |
+
## Preparing the environment
|
63 |
+
The following commands need to be executed with Python 3.8 or higher.
|
64 |
+
|
65 |
+
(Windows/Linux)
|
66 |
+
First install the main dependencies through pip:
|
67 |
+
```bash
|
68 |
+
# Install PyTorch-related core dependencies, skip if installed
|
69 |
+
# Reference: https://pytorch.org/get-started/locally/
|
70 |
+
pip install torch torchvision torchaudio
|
71 |
+
|
72 |
+
#For Windows + Nvidia Ampere Architecture(RTX30xx), you need to specify the cuda version corresponding to pytorch according to the experience of https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/issues/21
|
73 |
+
#pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
74 |
+
|
75 |
+
#For Linux + AMD Cards, you need to use the following pytorch versions:
|
76 |
+
#pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2
|
77 |
+
```
|
78 |
+
|
79 |
+
Then you can use poetry to install the other dependencies:
|
80 |
+
```bash
|
81 |
+
# Install the Poetry dependency management tool, skip if installed
|
82 |
+
# Reference: https://python-poetry.org/docs/#installation
|
83 |
+
curl -sSL https://install.python-poetry.org | python3 -
|
84 |
+
|
85 |
+
# Install the project dependencies
|
86 |
+
poetry install
|
87 |
+
```
|
88 |
+
|
89 |
+
You can also use pip to install them:
|
90 |
+
```bash
|
91 |
+
|
92 |
+
for Nvidia graphics cards
|
93 |
+
pip install -r requirements.txt
|
94 |
+
|
95 |
+
for AMD/Intel graphics cards on Windows (DirectML):
|
96 |
+
pip install -r requirements-dml.txt
|
97 |
+
|
98 |
+
for Intel ARC graphics cards on Linux / WSL using Python 3.10:
|
99 |
+
pip install -r requirements-ipex.txt
|
100 |
+
|
101 |
+
for AMD graphics cards on Linux (ROCm):
|
102 |
+
pip install -r requirements-amd.txt
|
103 |
+
```
|
104 |
+
|
105 |
+
------
|
106 |
+
Mac users can install dependencies via `run.sh`:
|
107 |
+
```bash
|
108 |
+
sh ./run.sh
|
109 |
+
```
|
110 |
+
|
111 |
+
## Preparation of other Pre-models
|
112 |
+
RVC requires other pre-models to infer and train.
|
113 |
+
|
114 |
+
```bash
|
115 |
+
#Download all needed models from https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/
|
116 |
+
python tools/download_models.py
|
117 |
+
```
|
118 |
+
|
119 |
+
Or just download them by yourself from our [Huggingface space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/).
|
120 |
+
|
121 |
+
Here's a list of Pre-models and other files that RVC needs:
|
122 |
+
```bash
|
123 |
+
./assets/hubert/hubert_base.pt
|
124 |
+
|
125 |
+
./assets/pretrained
|
126 |
+
|
127 |
+
./assets/uvr5_weights
|
128 |
+
|
129 |
+
Additional downloads are required if you want to test the v2 version of the model.
|
130 |
+
|
131 |
+
./assets/pretrained_v2
|
132 |
+
|
133 |
+
If you want to test the v2 version model (the v2 version model has changed the input from the 256 dimensional feature of 9-layer Hubert+final_proj to the 768 dimensional feature of 12-layer Hubert, and has added 3 period discriminators), you will need to download additional features
|
134 |
+
|
135 |
+
./assets/pretrained_v2
|
136 |
+
|
137 |
+
If you want to use the latest SOTA RMVPE vocal pitch extraction algorithm, you need to download the RMVPE weights and place them in the RVC root directory
|
138 |
+
|
139 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt
|
140 |
+
|
141 |
+
For AMD/Intel graphics cards users you need download:
|
142 |
+
|
143 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx
|
144 |
+
|
145 |
+
```
|
146 |
+
|
147 |
+
### 2. Install FFmpeg
|
148 |
+
If you have FFmpeg and FFprobe installed on your computer, you can skip this step.
|
149 |
+
|
150 |
+
#### For Ubuntu/Debian users
|
151 |
+
```bash
|
152 |
+
sudo apt install ffmpeg
|
153 |
+
```
|
154 |
+
#### For MacOS users
|
155 |
+
```bash
|
156 |
+
brew install ffmpeg
|
157 |
+
```
|
158 |
+
#### For Windwos users
|
159 |
+
Download these files and place them in the root folder:
|
160 |
+
- [ffmpeg.exe](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffmpeg.exe)
|
161 |
+
|
162 |
+
- [ffprobe.exe](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffprobe.exe)
|
163 |
+
|
164 |
+
## ROCm Support for AMD graphic cards (Linux only)
|
165 |
+
To use ROCm on Linux install all required drivers as described [here](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html).
|
166 |
+
|
167 |
+
On Arch use pacman to install the driver:
|
168 |
+
````
|
169 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
170 |
+
````
|
171 |
+
|
172 |
+
You might also need to set these environment variables (e.g. on a RX6700XT):
|
173 |
+
````
|
174 |
+
export ROCM_PATH=/opt/rocm
|
175 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
176 |
+
````
|
177 |
+
Make sure your user is part of the `render` and `video` group:
|
178 |
+
````
|
179 |
+
sudo usermod -aG render $USERNAME
|
180 |
+
sudo usermod -aG video $USERNAME
|
181 |
+
````
|
182 |
+
|
183 |
+
## Get started
|
184 |
+
### start up directly
|
185 |
+
Use the following command to start WebUI:
|
186 |
+
```bash
|
187 |
+
python infer-web.py
|
188 |
+
```
|
189 |
+
### Use the integration package
|
190 |
+
Download and extract file `RVC-beta.7z`, then follow the steps below according to your system:
|
191 |
+
#### For Windows users
|
192 |
+
双击`go-web.bat`
|
193 |
+
#### For MacOS users
|
194 |
+
```bash
|
195 |
+
sh ./run.sh
|
196 |
+
```
|
197 |
+
### For Intel IPEX users (Linux Only)
|
198 |
+
```bash
|
199 |
+
source /opt/intel/oneapi/setvars.sh
|
200 |
+
```
|
201 |
+
## Credits
|
202 |
+
+ [ContentVec](https://github.com/auspicious3000/contentvec/)
|
203 |
+
+ [VITS](https://github.com/jaywalnut310/vits)
|
204 |
+
+ [HIFIGAN](https://github.com/jik876/hifi-gan)
|
205 |
+
+ [Gradio](https://github.com/gradio-app/gradio)
|
206 |
+
+ [FFmpeg](https://github.com/FFmpeg/FFmpeg)
|
207 |
+
+ [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
208 |
+
+ [audio-slicer](https://github.com/openvpi/audio-slicer)
|
209 |
+
+ [Vocal pitch extraction:RMVPE](https://github.com/Dream-High/RMVPE)
|
210 |
+
+ The pretrained model is trained and tested by [yxlllc](https://github.com/yxlllc/RMVPE) and [RVC-Boss](https://github.com/RVC-Boss).
|
211 |
+
|
212 |
+
## Thanks to all contributors for their efforts
|
213 |
+
<a href="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors" target="_blank">
|
214 |
+
<img src="https://contrib.rocks/image?repo=RVC-Project/Retrieval-based-Voice-Conversion-WebUI" />
|
215 |
+
</a>
|
216 |
+
|
docs/en/faiss_tips_en.md
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
faiss tuning TIPS
|
2 |
+
==================
|
3 |
+
# about faiss
|
4 |
+
faiss is a library of neighborhood searches for dense vectors, developed by facebook research, which efficiently implements many approximate neighborhood search methods.
|
5 |
+
Approximate Neighbor Search finds similar vectors quickly while sacrificing some accuracy.
|
6 |
+
|
7 |
+
## faiss in RVC
|
8 |
+
In RVC, for the embedding of features converted by HuBERT, we search for embeddings similar to the embedding generated from the training data and mix them to achieve a conversion that is closer to the original speech. However, since this search takes time if performed naively, high-speed conversion is realized by using approximate neighborhood search.
|
9 |
+
|
10 |
+
# implementation overview
|
11 |
+
In '/logs/your-experiment/3_feature256' where the model is located, features extracted by HuBERT from each voice data are located.
|
12 |
+
From here we read the npy files in order sorted by filename and concatenate the vectors to create big_npy. (This vector has shape [N, 256].)
|
13 |
+
After saving big_npy as /logs/your-experiment/total_fea.npy, train it with faiss.
|
14 |
+
|
15 |
+
In this article, I will explain the meaning of these parameters.
|
16 |
+
|
17 |
+
# Explanation of the method
|
18 |
+
## index factory
|
19 |
+
An index factory is a unique faiss notation that expresses a pipeline that connects multiple approximate neighborhood search methods as a string.
|
20 |
+
This allows you to try various approximate neighborhood search methods simply by changing the index factory string.
|
21 |
+
In RVC it is used like this:
|
22 |
+
|
23 |
+
```python
|
24 |
+
index = faiss.index_factory(256, "IVF%s,Flat" % n_ivf)
|
25 |
+
```
|
26 |
+
Among the arguments of index_factory, the first is the number of dimensions of the vector, the second is the index factory string, and the third is the distance to use.
|
27 |
+
|
28 |
+
For more detailed notation
|
29 |
+
https://github.com/facebookresearch/faiss/wiki/The-index-factory
|
30 |
+
|
31 |
+
## index for distance
|
32 |
+
There are two typical indexes used as similarity of embedding as follows.
|
33 |
+
|
34 |
+
- Euclidean distance (METRIC_L2)
|
35 |
+
- inner product (METRIC_INNER_PRODUCT)
|
36 |
+
|
37 |
+
Euclidean distance takes the squared difference in each dimension, sums the differences in all dimensions, and then takes the square root. This is the same as the distance in 2D and 3D that we use on a daily basis.
|
38 |
+
The inner product is not used as an index of similarity as it is, and the cosine similarity that takes the inner product after being normalized by the L2 norm is generally used.
|
39 |
+
|
40 |
+
Which is better depends on the case, but cosine similarity is often used in embedding obtained by word2vec and similar image retrieval models learned by ArcFace. If you want to do l2 normalization on vector X with numpy, you can do it with the following code with eps small enough to avoid 0 division.
|
41 |
+
|
42 |
+
```python
|
43 |
+
X_normed = X / np.maximum(eps, np.linalg.norm(X, ord=2, axis=-1, keepdims=True))
|
44 |
+
```
|
45 |
+
|
46 |
+
Also, for the index factory, you can change the distance index used for calculation by choosing the value to pass as the third argument.
|
47 |
+
|
48 |
+
```python
|
49 |
+
index = faiss.index_factory(dimention, text, faiss.METRIC_INNER_PRODUCT)
|
50 |
+
```
|
51 |
+
|
52 |
+
## IVF
|
53 |
+
IVF (Inverted file indexes) is an algorithm similar to the inverted index in full-text search.
|
54 |
+
During learning, the search target is clustered with kmeans, and Voronoi partitioning is performed using the cluster center. Each data point is assigned a cluster, so we create a dictionary that looks up the data points from the clusters.
|
55 |
+
|
56 |
+
For example, if clusters are assigned as follows
|
57 |
+
|index|Cluster|
|
58 |
+
|-----|-------|
|
59 |
+
|1|A|
|
60 |
+
|2|B|
|
61 |
+
|3|A|
|
62 |
+
|4|C|
|
63 |
+
|5|B|
|
64 |
+
|
65 |
+
The resulting inverted index looks like this:
|
66 |
+
|
67 |
+
|cluster|index|
|
68 |
+
|-------|-----|
|
69 |
+
|A|1, 3|
|
70 |
+
|B|2, 5|
|
71 |
+
|C|4|
|
72 |
+
|
73 |
+
When searching, we first search n_probe clusters from the clusters, and then calculate the distances for the data points belonging to each cluster.
|
74 |
+
|
75 |
+
# recommend parameter
|
76 |
+
There are official guidelines on how to choose an index, so I will explain accordingly.
|
77 |
+
https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index
|
78 |
+
|
79 |
+
For datasets below 1M, 4bit-PQ is the most efficient method available in faiss as of April 2023.
|
80 |
+
Combining this with IVF, narrowing down the candidates with 4bit-PQ, and finally recalculating the distance with an accurate index can be described by using the following index factory.
|
81 |
+
|
82 |
+
```python
|
83 |
+
index = faiss.index_factory(256, "IVF1024,PQ128x4fs,RFlat")
|
84 |
+
```
|
85 |
+
|
86 |
+
## Recommended parameters for IVF
|
87 |
+
Consider the case of too many IVFs. For example, if coarse quantization by IVF is performed for the number of data, this is the same as a naive exhaustive search and is inefficient.
|
88 |
+
For 1M or less, IVF values are recommended between 4*sqrt(N) ~ 16*sqrt(N) for N number of data points.
|
89 |
+
|
90 |
+
Since the calculation time increases in proportion to the number of n_probes, please consult with the accuracy and choose appropriately. Personally, I don't think RVC needs that much accuracy, so n_probe = 1 is fine.
|
91 |
+
|
92 |
+
## FastScan
|
93 |
+
FastScan is a method that enables high-speed approximation of distances by Cartesian product quantization by performing them in registers.
|
94 |
+
Cartesian product quantization performs clustering independently for each d dimension (usually d = 2) during learning, calculates the distance between clusters in advance, and creates a lookup table. At the time of prediction, the distance of each dimension can be calculated in O(1) by looking at the lookup table.
|
95 |
+
So the number you specify after PQ usually specifies half the dimension of the vector.
|
96 |
+
|
97 |
+
For a more detailed description of FastScan, please refer to the official documentation.
|
98 |
+
https://github.com/facebookresearch/faiss/wiki/Fast-accumulation-of-PQ-and-AQ-codes-(FastScan)
|
99 |
+
|
100 |
+
## RFlat
|
101 |
+
RFlat is an instruction to recalculate the rough distance calculated by FastScan with the exact distance specified by the third argument of index factory.
|
102 |
+
When getting k neighbors, k*k_factor points are recalculated.
|
docs/en/faq_en.md
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Q1:ffmpeg error/utf8 error.
|
2 |
+
It is most likely not a FFmpeg issue, but rather an audio path issue;
|
3 |
+
|
4 |
+
FFmpeg may encounter an error when reading paths containing special characters like spaces and (), which may cause an FFmpeg error; and when the training set's audio contains Chinese paths, writing it into filelist.txt may cause a utf8 error.<br>
|
5 |
+
|
6 |
+
## Q2:Cannot find index file after "One-click Training".
|
7 |
+
If it displays "Training is done. The program is closed," then the model has been trained successfully, and the subsequent errors are fake;
|
8 |
+
|
9 |
+
The lack of an 'added' index file after One-click training may be due to the training set being too large, causing the addition of the index to get stuck; this has been resolved by using batch processing to add the index, which solves the problem of memory overload when adding the index. As a temporary solution, try clicking the "Train Index" button again.<br>
|
10 |
+
|
11 |
+
## Q3:Cannot find the model in “Inferencing timbre” after training
|
12 |
+
Click “Refresh timbre list” and check again; if still not visible, check if there are any errors during training and send screenshots of the console, web UI, and logs/experiment_name/*.log to the developers for further analysis.<br>
|
13 |
+
|
14 |
+
## Q4:How to share a model/How to use others' models?
|
15 |
+
The pth files stored in rvc_root/logs/experiment_name are not meant for sharing or inference, but for storing the experiment checkpoits for reproducibility and further training. The model to be shared should be the 60+MB pth file in the weights folder;
|
16 |
+
|
17 |
+
In the future, weights/exp_name.pth and logs/exp_name/added_xxx.index will be merged into a single weights/exp_name.zip file to eliminate the need for manual index input; so share the zip file, not the pth file, unless you want to continue training on a different machine;
|
18 |
+
|
19 |
+
Copying/sharing the several hundred MB pth files from the logs folder to the weights folder for forced inference may result in errors such as missing f0, tgt_sr, or other keys. You need to use the ckpt tab at the bottom to manually or automatically (if the information is found in the logs/exp_name), select whether to include pitch infomation and target audio sampling rate options and then extract the smaller model. After extraction, there will be a 60+ MB pth file in the weights folder, and you can refresh the voices to use it.<br>
|
20 |
+
|
21 |
+
## Q5:Connection Error.
|
22 |
+
You may have closed the console (black command line window).<br>
|
23 |
+
|
24 |
+
## Q6:WebUI popup 'Expecting value: line 1 column 1 (char 0)'.
|
25 |
+
Please disable system LAN proxy/global proxy and then refresh.<br>
|
26 |
+
|
27 |
+
## Q7:How to train and infer without the WebUI?
|
28 |
+
Training script:<br>
|
29 |
+
You can run training in WebUI first, and the command-line versions of dataset preprocessing and training will be displayed in the message window.<br>
|
30 |
+
|
31 |
+
Inference script:<br>
|
32 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py<br>
|
33 |
+
|
34 |
+
|
35 |
+
e.g.<br>
|
36 |
+
|
37 |
+
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" harvest "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True<br>
|
38 |
+
|
39 |
+
|
40 |
+
f0up_key=sys.argv[1]<br>
|
41 |
+
input_path=sys.argv[2]<br>
|
42 |
+
index_path=sys.argv[3]<br>
|
43 |
+
f0method=sys.argv[4]#harvest or pm<br>
|
44 |
+
opt_path=sys.argv[5]<br>
|
45 |
+
model_path=sys.argv[6]<br>
|
46 |
+
index_rate=float(sys.argv[7])<br>
|
47 |
+
device=sys.argv[8]<br>
|
48 |
+
is_half=bool(sys.argv[9])<br>
|
49 |
+
|
50 |
+
## Q8:Cuda error/Cuda out of memory.
|
51 |
+
There is a small chance that there is a problem with the CUDA configuration or the device is not supported; more likely, there is not enough memory (out of memory).<br>
|
52 |
+
|
53 |
+
For training, reduce the batch size (if reducing to 1 is still not enough, you may need to change the graphics card); for inference, adjust the x_pad, x_query, x_center, and x_max settings in the config.py file as needed. 4G or lower memory cards (e.g. 1060(3G) and various 2G cards) can be abandoned, while 4G memory cards still have a chance.<br>
|
54 |
+
|
55 |
+
## Q9:How many total_epoch are optimal?
|
56 |
+
If the training dataset's audio quality is poor and the noise floor is high, 20-30 epochs are sufficient. Setting it too high won't improve the audio quality of your low-quality training set.<br>
|
57 |
+
|
58 |
+
If the training set audio quality is high, the noise floor is low, and there is sufficient duration, you can increase it. 200 is acceptable (since training is fast, and if you're able to prepare a high-quality training set, your GPU likely can handle a longer training duration without issue).<br>
|
59 |
+
|
60 |
+
## Q10:How much training set duration is needed?
|
61 |
+
|
62 |
+
A dataset of around 10min to 50min is recommended.<br>
|
63 |
+
|
64 |
+
With guaranteed high sound quality and low bottom noise, more can be added if the dataset's timbre is uniform.<br>
|
65 |
+
|
66 |
+
For a high-level training set (lean + distinctive tone), 5min to 10min is fine.<br>
|
67 |
+
|
68 |
+
There are some people who have trained successfully with 1min to 2min data, but the success is not reproducible by others and is not very informative. <br>This requires that the training set has a very distinctive timbre (e.g. a high-frequency airy anime girl sound) and the quality of the audio is high;
|
69 |
+
Data of less than 1min duration has not been successfully attempted so far. This is not recommended.<br>
|
70 |
+
|
71 |
+
|
72 |
+
## Q11:What is the index rate for and how to adjust it?
|
73 |
+
If the tone quality of the pre-trained model and inference source is higher than that of the training set, they can bring up the tone quality of the inference result, but at the cost of a possible tone bias towards the tone of the underlying model/inference source rather than the tone of the training set, which is generally referred to as "tone leakage".<br>
|
74 |
+
|
75 |
+
The index rate is used to reduce/resolve the timbre leakage problem. If the index rate is set to 1, theoretically there is no timbre leakage from the inference source and the timbre quality is more biased towards the training set. If the training set has a lower sound quality than the inference source, then a higher index rate may reduce the sound quality. Turning it down to 0 does not have the effect of using retrieval blending to protect the training set tones.<br>
|
76 |
+
|
77 |
+
If the training set has good audio quality and long duration, turn up the total_epoch, when the model itself is less likely to refer to the inferred source and the pretrained underlying model, and there is little "tone leakage", the index_rate is not important and you can even not create/share the index file.<br>
|
78 |
+
|
79 |
+
## Q12:How to choose the gpu when inferring?
|
80 |
+
In the config.py file, select the card number after "device cuda:".<br>
|
81 |
+
|
82 |
+
The mapping between card number and graphics card can be seen in the graphics card information section of the training tab.<br>
|
83 |
+
|
84 |
+
## Q13:How to use the model saved in the middle of training?
|
85 |
+
Save via model extraction at the bottom of the ckpt processing tab.
|
86 |
+
|
87 |
+
## Q14:File/memory error(when training)?
|
88 |
+
Too many processes and your memory is not enough. You may fix it by:
|
89 |
+
|
90 |
+
1、decrease the input in field "Threads of CPU".
|
91 |
+
|
92 |
+
2、pre-cut trainset to shorter audio files.
|
93 |
+
|
94 |
+
## Q15: How to continue training using more data
|
95 |
+
|
96 |
+
step1: put all wav data to path2.
|
97 |
+
|
98 |
+
step2: exp_name2+path2 -> process dataset and extract feature.
|
99 |
+
|
100 |
+
step3: copy the latest G and D file of exp_name1 (your previous experiment) into exp_name2 folder.
|
101 |
+
|
102 |
+
step4: click "train the model", and it will continue training from the beginning of your previous exp model epoch.
|
103 |
+
|
104 |
+
## Q16: error about llvmlite.dll
|
105 |
+
|
106 |
+
OSError: Could not load shared object file: llvmlite.dll
|
107 |
+
|
108 |
+
FileNotFoundError: Could not find module lib\site-packages\llvmlite\binding\llvmlite.dll (or one of its dependencies). Try using the full path with constructor syntax.
|
109 |
+
|
110 |
+
The issue will happen in windows, install https://aka.ms/vs/17/release/vc_redist.x64.exe and it will be fixed.
|
111 |
+
|
112 |
+
## Q17: RuntimeError: The expanded size of the tensor (17280) must match the existing size (0) at non-singleton dimension 1. Target sizes: [1, 17280]. Tensor sizes: [0]
|
113 |
+
|
114 |
+
Delete the wav files whose size is significantly smaller than others, and that won't happen again. Than click "train the model"and "train the index".
|
115 |
+
|
116 |
+
## Q18: RuntimeError: The size of tensor a (24) must match the size of tensor b (16) at non-singleton dimension 2
|
117 |
+
|
118 |
+
Do not change the sampling rate and then continue training. If it is necessary to change, the exp name should be changed and the model will be trained from scratch. You can also copy the pitch and features (0/1/2/2b folders) extracted last time to accelerate the training process.
|
119 |
+
|
docs/en/training_tips_en.md
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Instructions and tips for RVC training
|
2 |
+
======================================
|
3 |
+
This TIPS explains how data training is done.
|
4 |
+
|
5 |
+
# Training flow
|
6 |
+
I will explain along the steps in the training tab of the GUI.
|
7 |
+
|
8 |
+
## step1
|
9 |
+
Set the experiment name here.
|
10 |
+
|
11 |
+
You can also set here whether the model should take pitch into account.
|
12 |
+
If the model doesn't consider pitch, the model will be lighter, but not suitable for singing.
|
13 |
+
|
14 |
+
Data for each experiment is placed in `/logs/your-experiment-name/`.
|
15 |
+
|
16 |
+
## step2a
|
17 |
+
Loads and preprocesses audio.
|
18 |
+
|
19 |
+
### load audio
|
20 |
+
If you specify a folder with audio, the audio files in that folder will be read automatically.
|
21 |
+
For example, if you specify `C:Users\hoge\voices`, `C:Users\hoge\voices\voice.mp3` will be loaded, but `C:Users\hoge\voices\dir\voice.mp3` will Not loaded.
|
22 |
+
|
23 |
+
Since ffmpeg is used internally for reading audio, if the extension is supported by ffmpeg, it will be read automatically.
|
24 |
+
After converting to int16 with ffmpeg, convert to float32 and normalize between -1 to 1.
|
25 |
+
|
26 |
+
### denoising
|
27 |
+
The audio is smoothed by scipy's filtfilt.
|
28 |
+
|
29 |
+
### Audio Split
|
30 |
+
First, the input audio is divided by detecting parts of silence that last longer than a certain period (max_sil_kept=5 seconds?). After splitting the audio on silence, split the audio every 4 seconds with an overlap of 0.3 seconds. For audio separated within 4 seconds, after normalizing the volume, convert the wav file to `/logs/your-experiment-name/0_gt_wavs` and then convert it to 16k sampling rate to `/logs/your-experiment-name/1_16k_wavs ` as a wav file.
|
31 |
+
|
32 |
+
## step2b
|
33 |
+
### Extract pitch
|
34 |
+
Extract pitch information from wav files. Extract the pitch information (=f0) using the method built into parselmouth or pyworld and save it in `/logs/your-experiment-name/2a_f0`. Then logarithmically convert the pitch information to an integer between 1 and 255 and save it in `/logs/your-experiment-name/2b-f0nsf`.
|
35 |
+
|
36 |
+
### Extract feature_print
|
37 |
+
Convert the wav file to embedding in advance using HuBERT. Read the wav file saved in `/logs/your-experiment-name/1_16k_wavs`, convert the wav file to 256-dimensional features with HuBERT, and save in npy format in `/logs/your-experiment-name/3_feature256`.
|
38 |
+
|
39 |
+
## step3
|
40 |
+
train the model.
|
41 |
+
### Glossary for Beginners
|
42 |
+
In deep learning, the data set is divided and the learning proceeds little by little. In one model update (step), batch_size data are retrieved and predictions and error corrections are performed. Doing this once for a dataset counts as one epoch.
|
43 |
+
|
44 |
+
Therefore, the learning time is the learning time per step x (the number of data in the dataset / batch size) x the number of epochs. In general, the larger the batch size, the more stable the learning becomes (learning time per step ÷ batch size) becomes smaller, but it uses more GPU memory. GPU RAM can be checked with the nvidia-smi command. Learning can be done in a short time by increasing the batch size as much as possible according to the machine of the execution environment.
|
45 |
+
|
46 |
+
### Specify pretrained model
|
47 |
+
RVC starts training the model from pretrained weights instead of from 0, so it can be trained with a small dataset.
|
48 |
+
|
49 |
+
By default
|
50 |
+
|
51 |
+
- If you consider pitch, it loads `rvc-location/pretrained/f0G40k.pth` and `rvc-location/pretrained/f0D40k.pth`.
|
52 |
+
- If you don't consider pitch, it loads `rvc-location/pretrained/G40k.pth` and `rvc-location/pretrained/D40k.pth`.
|
53 |
+
|
54 |
+
When learning, model parameters are saved in `logs/your-experiment-name/G_{}.pth` and `logs/your-experiment-name/D_{}.pth` for each save_every_epoch, but by specifying this path, you can start learning. You can restart or start training from model weights learned in a different experiment.
|
55 |
+
|
56 |
+
### learning index
|
57 |
+
RVC saves the HuBERT feature values used during training, and during inference, searches for feature values that are similar to the feature values used during learning to perform inference. In order to perform this search at high speed, the index is learned in advance.
|
58 |
+
For index learning, we use the approximate neighborhood search library faiss. Read the feature value of `logs/your-experiment-name/3_feature256` and use it to learn the index, and save it as `logs/your-experiment-name/add_XXX.index`.
|
59 |
+
|
60 |
+
(From the 20230428update version, it is read from the index, and saving / specifying is no longer necessary.)
|
61 |
+
|
62 |
+
### Button description
|
63 |
+
- Train model: After executing step2b, press this button to train the model.
|
64 |
+
- Train feature index: After training the model, perform index learning.
|
65 |
+
- One-click training: step2b, model training and feature index training all at once.
|
docs/fr/Changelog_FR.md
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### 2023-08-13
|
2 |
+
1-Corrections régulières de bugs
|
3 |
+
- Modification du nombre total d'époques minimum à 1 et changement du nombre total d'époques minimum à 2
|
4 |
+
- Correction des erreurs d'entraînement sans utiliser de modèles pré-entraînés
|
5 |
+
- Après la séparation des voix d'accompagnement, libération de la mémoire graphique
|
6 |
+
- Changement du chemin absolu d'enregistrement de faiss en chemin relatif
|
7 |
+
- Prise en charge des chemins contenant des espaces (le chemin du jeu de données d'entraînement et le nom de l'expérience sont pris en charge, et aucune erreur ne sera signalée)
|
8 |
+
- La liste de fichiers annule l'encodage utf8 obligatoire
|
9 |
+
- Résolution du problème de consommation de CPU causé par la recherche faiss lors des changements de voix en temps réel
|
10 |
+
|
11 |
+
2-Mises à jour clés
|
12 |
+
- Entraînement du modèle d'extraction de hauteur vocale open-source le plus puissant actuel, RMVPE, et utilisation pour l'entraînement, l'inférence hors ligne/en temps réel de RVC, supportant PyTorch/Onnx/DirectML
|
13 |
+
- Prise en charge des cartes graphiques AMD et Intel via Pytorch_DML
|
14 |
+
|
15 |
+
(1) Changement de voix en temps réel (2) Inférence (3) Séparation de l'accompagnement vocal (4) L'entraînement n'est pas actuellement pris en charge, passera à l'entraînement CPU; prend en charge l'inférence RMVPE de la GPU par Onnx_Dml
|
16 |
+
|
17 |
+
### 2023-06-18
|
18 |
+
- Nouveaux modèles pré-entraînés v2 : 32k et 48k
|
19 |
+
- Correction des erreurs d'inférence du modèle non-f0
|
20 |
+
- Pour un jeu de données d'entraînement dépassant 1 heure, réalisation automatique de minibatch-kmeans pour réduire la forme des caractéristiques, afin que l'entraînement, l'ajout et la recherche d'index soient beaucoup plus rapides.
|
21 |
+
- Fourniture d'un espace huggingface vocal2guitar jouet
|
22 |
+
- Suppression automatique des audios de jeu de données d'entraînement court-circuitant les valeurs aberrantes
|
23 |
+
- Onglet d'exportation Onnx
|
24 |
+
|
25 |
+
Expériences échouées:
|
26 |
+
- ~~Récupération de caractéristiques : ajout de la récupération de caractéristiques temporelles : non efficace~~
|
27 |
+
- ~~Récupération de caractéristiques : ajout de la réduction de dimensionnalité PCAR : la recherche est encore plus lente~~
|
28 |
+
- ~~Augmentation aléatoire des données lors de l'entraînement : non efficace~~
|
29 |
+
|
30 |
+
Liste de tâches:
|
31 |
+
- ~~Vocos-RVC (vocodeur minuscule) : non efficace~~
|
32 |
+
- ~~Support de Crepe pour l'entraînement : remplacé par RMVPE~~
|
33 |
+
- ~~Inférence de précision à moitié crepe : remplacée par RMVPE. Et difficile à réaliser.~~
|
34 |
+
- Support de l'éditeur F0
|
35 |
+
|
36 |
+
### 2023-05-28
|
37 |
+
- Ajout d'un cahier v2, changelog coréen, correction de certaines exigences environnementales
|
38 |
+
- Ajout d'un mode de protection des consonnes muettes et de la respiration
|
39 |
+
- Support de la détection de hauteur crepe-full
|
40 |
+
- Séparation vocale UVR5 : support des modèles de déréverbération et de désécho
|
41 |
+
- Ajout du nom de l'expérience et de la version sur le nom de l'index
|
42 |
+
- Support pour les utilisateurs de sélectionner manuellement le format d'exportation des audios de sortie lors du traitement de conversion vocale en lots et de la séparation vocale UVR5
|
43 |
+
- L'entraînement du modèle v1 32k n'est plus pris en charge
|
44 |
+
|
45 |
+
### 2023-05-13
|
46 |
+
- Nettoyage des codes redondants de l'ancienne version du runtime dans le package en un clic : lib.infer_pack et uvr5_pack
|
47 |
+
- Correction du bug de multiprocessus pseudo dans la préparation du jeu de données d'entraînement
|
48 |
+
- Ajout de l'ajustement du rayon de filtrage médian pour l'algorithme de reconnaissance de hauteur de récolte
|
49 |
+
- Prise en charge du rééchantillonnage post-traitement pour l'exportation audio
|
50 |
+
- Réglage de multi-traitement "n_cpu" pour l'entraînement est passé de "extraction f0" à "prétraitement des données et extraction f0"
|
51 |
+
- Détection automatique des chemins d'index sous le dossier de logs et fourniture d'une fonction de liste déroulante
|
52 |
+
- Ajout de "Questions fréquemment posées et réponses" sur la page d'onglet (vous pouvez également consulter le wiki github RVC)
|
53 |
+
- Lors de l'inférence, la hauteur de la récolte est mise en cache lors de l'utilisation du même chemin d'accès audio d'entrée (objectif : en utilisant l'extraction de
|
54 |
+
|
55 |
+
la hauteur de la récolte, l'ensemble du pipeline passera par un long processus d'extraction de la hauteur répétitif. Si la mise en cache n'est pas utilisée, les utilisateurs qui expérimentent différents timbres, index, et réglages de rayon de filtrage médian de hauteur connaîtront un processus d'attente très douloureux après la première inférence)
|
56 |
+
|
57 |
+
### 2023-05-14
|
58 |
+
- Utilisation de l'enveloppe de volume de l'entrée pour mixer ou remplacer l'enveloppe de volume de la sortie (peut atténuer le problème du "muet en entrée et bruit de faible amplitude en sortie". Si le bruit de fond de l'audio d'entrée est élevé, il n'est pas recommandé de l'activer, et il n'est pas activé par défaut (1 peut être considéré comme n'étant pas activé)
|
59 |
+
- Prise en charge de la sauvegarde des modèles extraits à une fréquence spécifiée (si vous voulez voir les performances sous différentes époques, mais que vous ne voulez pas sauvegarder tous les grands points de contrôle et extraire manuellement les petits modèles par ckpt-processing à chaque fois, cette fonctionnalité sera très pratique)
|
60 |
+
- Résolution du problème des "erreurs de connexion" causées par le proxy global du serveur en définissant des variables d'environnement
|
61 |
+
- Prise en charge des modèles pré-entraînés v2 (actuellement, seule la version 40k est disponible au public pour les tests, et les deux autres taux d'échantillonnage n'ont pas encore été entièrement entraînés)
|
62 |
+
- Limite le volume excessif dépassant 1 avant l'inférence
|
63 |
+
- Réglages légèrement ajustés de la préparation du jeu de données d'entraînement
|
64 |
+
|
65 |
+
#######################
|
66 |
+
|
67 |
+
Historique des changelogs:
|
68 |
+
|
69 |
+
### 2023-04-09
|
70 |
+
- Correction des paramètres d'entraînement pour améliorer le taux d'utilisation du GPU : A100 est passé de 25% à environ 90%, V100 : de 50% à environ 90%, 2060S : de 60% à environ 85%, P40 : de 25% à environ 95% ; amélioration significative de la vitesse d'entraînement
|
71 |
+
- Changement de paramètre : la taille de batch_size totale est maintenant la taille de batch_size par GPU
|
72 |
+
- Changement de total_epoch : la limite maximale est passée de 100 à 1000 ; la valeur par défaut est passée de 10 à 20
|
73 |
+
- Correction du problème d'extraction de ckpt reconnaissant la hauteur de manière incorrecte, causant une inférence anormale
|
74 |
+
- Correction du problème d'entraînement distribué sauvegardant ckpt pour chaque rang
|
75 |
+
- Application du filtrage des caractéristiques nan pour l'extraction des caractéristiques
|
76 |
+
- Correction du problème d'entrée/sortie silencieuse produisant des consonnes aléatoires ou du bruit (les anciens modèles doivent être réentraînés avec un nouveau jeu de données)
|
77 |
+
|
78 |
+
### 2023-04-16 Mise à jour
|
79 |
+
- Ajout d'une mini-interface graphique pour le changement de voix en temps réel, démarrage par double-clic sur go-realtime-gui.bat
|
80 |
+
- Application d'un filtrage pour les bandes de fréquences inférieures à 50Hz pendant l'entraînement et l'inférence
|
81 |
+
- Abaissement de l'extraction de hauteur minimale de pyworld du défaut 80 à 50 pour l'entraînement et l'inférence, permettant aux voix masculines graves entre 50-80Hz de ne pas être mises en sourdine
|
82 |
+
- WebUI prend en charge le changement de langue en fonction des paramètres régionaux du système (prise en charge actuelle de en_US, ja_JP, zh_CN, zh_HK, zh_SG, zh_TW ; défaut à en_US si non pris en charge)
|
83 |
+
- Correction de la reconnaissance de certains GPU (par exemple, échec de reconnaissance V100-16G, échec de reconnaissance P4)
|
84 |
+
|
85 |
+
### 2023-04-28 Mise à jour
|
86 |
+
- Mise à niveau des paramètres d'index de faiss pour une vitesse plus rapide et une meilleure qualité
|
87 |
+
- Suppression de la dépendance à total_npy ; le partage futur de modèles ne nécessitera pas d'entrée total
|
88 |
+
|
89 |
+
_npy
|
90 |
+
- Levée des restrictions pour les GPU de la série 16, fournissant des paramètres d'inférence de 4 Go pour les GPU VRAM de 4 Go
|
91 |
+
- Correction d'un bug dans la séparation vocale d'accompagnement UVR5 pour certains formats audio
|
92 |
+
- La mini-interface de changement de voix en temps réel prend maintenant en charge les modèles de hauteur non-40k et non-lazy
|
93 |
+
|
94 |
+
### Plans futurs :
|
95 |
+
Fonctionnalités :
|
96 |
+
- Ajouter une option : extraire de petits modèles pour chaque sauvegarde d'époque
|
97 |
+
- Ajouter une option : exporter un mp3 supplémentaire vers le chemin spécifié pendant l'inférence
|
98 |
+
- Prise en charge de l'onglet d'entraînement multi-personnes (jusqu'à 4 personnes)
|
99 |
+
|
100 |
+
Modèle de base :
|
101 |
+
- Collecter des fichiers wav de respiration pour les ajouter au jeu de données d'entraînement pour résoudre le problème des sons de respiration déformés
|
102 |
+
- Nous entraînons actuellement un modèle de base avec un jeu de données de chant étendu, qui sera publié à l'avenir
|
docs/fr/README.fr.md
ADDED
@@ -0,0 +1,179 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
<h1>Retrieval-based-Voice-Conversion-WebUI</h1>
|
4 |
+
Un framework simple et facile à utiliser pour la conversion vocale (modificateur de voix) basé sur VITS<br><br>
|
5 |
+
|
6 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange
|
7 |
+
)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)
|
8 |
+
|
9 |
+
<img src="https://counter.seku.su/cmoe?name=rvc&theme=r34" /><br>
|
10 |
+
|
11 |
+
[![RVC v1](https://img.shields.io/badge/RVCv1-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v1.ipynb)
|
12 |
+
[![RVC v2](https://img.shields.io/badge/RVCv2-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v2.ipynb)
|
13 |
+
[![Licence](https://img.shields.io/badge/LICENSE-MIT-green.svg?style=for-the-badge)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
14 |
+
[![Huggingface](https://img.shields.io/badge/🤗%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
15 |
+
|
16 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
17 |
+
|
18 |
+
[**Journal de mise à jour**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/docs/Changelog_CN.md) | [**FAQ**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E7%AD%94) | [**AutoDL·Formation d'un chanteur AI pour 5 centimes**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/wiki/Autodl%E8%AE%AD%E7%BB%83RVC%C2%B7AI%E6%AD%8C%E6%89%8B%E6%95%99%E7%A8%8B) | [**Enregistrement des expériences comparatives**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%AF%B9%E7%85%A7%E5%AE%9E%E9%AA%8C%C2%B7%E5%AE%9E%E9%AA%8C%E8%AE%B0%E5%BD%95) | [**Démonstration en ligne**](https://huggingface.co/spaces/Ricecake123/RVC-demo)
|
19 |
+
|
20 |
+
</div>
|
21 |
+
|
22 |
+
------
|
23 |
+
|
24 |
+
[**English**](../en/README.en.md) | [ **中文简体**](../../README.md) | [**日本語**](../jp/README.ja.md) | [**한국어**](../kr/README.ko.md) ([**韓國語**](../kr/README.ko.han.md)) | [**Français**](../fr/README.fr.md) | [**Turc**](../tr/README.tr.md) | [**Português**](../pt/README.pt.md)
|
25 |
+
|
26 |
+
Cliquez ici pour voir notre [vidéo de démonstration](https://www.bilibili.com/video/BV1pm4y1z7Gm/) !
|
27 |
+
|
28 |
+
> Conversion vocale en temps réel avec RVC : [w-okada/voice-changer](https://github.com/w-okada/voice-changer)
|
29 |
+
|
30 |
+
> Le modèle de base est formé avec près de 50 heures de données VCTK de haute qualité et open source. Aucun souci concernant les droits d'auteur, n'hésitez pas à l'utiliser.
|
31 |
+
|
32 |
+
> Attendez-vous au modèle de base RVCv3 : plus de paramètres, plus de données, de meilleurs résultats, une vitesse d'inférence presque identique, et nécessite moins de données pour la formation.
|
33 |
+
|
34 |
+
## Introduction
|
35 |
+
Ce dépôt a les caractéristiques suivantes :
|
36 |
+
+ Utilise le top1 pour remplacer les caractéristiques de la source d'entrée par les caractéristiques de l'ensemble d'entraînement pour éliminer les fuites de timbre vocal.
|
37 |
+
+ Peut être formé rapidement même sur une carte graphique relativement moins performante.
|
38 |
+
+ Obtient de bons résultats même avec peu de données pour la formation (il est recommandé de collecter au moins 10 minutes de données vocales avec un faible bruit de fond).
|
39 |
+
+ Peut changer le timbre vocal en fusionnant des modèles (avec l'aide de l'onglet ckpt-merge).
|
40 |
+
+ Interface web simple et facile à utiliser.
|
41 |
+
+ Peut appeler le modèle UVR5 pour séparer rapidement la voix et l'accompagnement.
|
42 |
+
+ Utilise l'algorithme de pitch vocal le plus avancé [InterSpeech2023-RMVPE](#projets-référencés) pour éliminer les problèmes de voix muette. Meilleurs résultats, plus rapide que crepe_full, et moins gourmand en ressources.
|
43 |
+
+ Support d'accélération pour les cartes AMD et Intel.
|
44 |
+
|
45 |
+
## Configuration de l'environnement
|
46 |
+
Exécutez les commandes suivantes dans un environnement Python de version 3.8 ou supérieure.
|
47 |
+
|
48 |
+
(Windows/Linux)
|
49 |
+
Installez d'abord les dépendances principales via pip :
|
50 |
+
```bash
|
51 |
+
# Installez Pytorch et ses dépendances essentielles, sautez si déjà installé.
|
52 |
+
# Voir : https://pytorch.org/get-started/locally/
|
53 |
+
pip install torch torchvision torchaudio
|
54 |
+
|
55 |
+
# Pour les utilisateurs de Windows avec une architecture Nvidia Ampere (RTX30xx), en se basant sur l'expérience #21, spécifiez la version CUDA correspondante pour Pytorch.
|
56 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
57 |
+
|
58 |
+
# Pour Linux + carte AMD, utilisez cette version de Pytorch:
|
59 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2
|
60 |
+
```
|
61 |
+
|
62 |
+
Vous pouvez utiliser poetry pour installer les dépendances :
|
63 |
+
```bash
|
64 |
+
# Installez l'outil de gestion des dépendances Poetry, sautez si déjà installé.
|
65 |
+
# Voir : https://python-poetry.org/docs/#installation
|
66 |
+
curl -sSL https://install.python-poetry.org | python3 -
|
67 |
+
|
68 |
+
# Installez les dépendances avec poetry.
|
69 |
+
poetry install
|
70 |
+
```
|
71 |
+
|
72 |
+
Ou vous pouvez utiliser pip pour installer les dépendances :
|
73 |
+
```bash
|
74 |
+
# Cartes Nvidia :
|
75 |
+
pip install -r requirements.txt
|
76 |
+
|
77 |
+
# Cartes AMD/Intel :
|
78 |
+
pip install -r requirements-dml.txt
|
79 |
+
|
80 |
+
# Cartes Intel avec IPEX
|
81 |
+
pip install -r requirements-ipex.txt
|
82 |
+
|
83 |
+
# Cartes AMD sur Linux (ROCm)
|
84 |
+
pip install -r requirements-amd.txt
|
85 |
+
```
|
86 |
+
|
87 |
+
------
|
88 |
+
Les utilisateurs de Mac peuvent exécuter `run.sh` pour installer les dépendances :
|
89 |
+
```bash
|
90 |
+
sh ./run.sh
|
91 |
+
```
|
92 |
+
|
93 |
+
## Préparation d'autres modèles pré-entraînés
|
94 |
+
RVC nécessite d'autres modèles pré-entraînés pour l'inférence et la formation.
|
95 |
+
|
96 |
+
```bash
|
97 |
+
#Télécharger tous les modèles depuis https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/
|
98 |
+
python tools/download_models.py
|
99 |
+
```
|
100 |
+
|
101 |
+
Ou vous pouvez télécharger ces modèles depuis notre [espace Hugging Face](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/).
|
102 |
+
|
103 |
+
Voici une liste des modèles et autres fichiers requis par RVC :
|
104 |
+
```bash
|
105 |
+
./assets/hubert/hubert_base.pt
|
106 |
+
|
107 |
+
./assets/pretrained
|
108 |
+
|
109 |
+
./assets/uvr5_weights
|
110 |
+
|
111 |
+
# Pour tester la version v2 du modèle, téléchargez également :
|
112 |
+
|
113 |
+
./assets/pretrained_v2
|
114 |
+
|
115 |
+
# Si vous utilisez Windows, vous pourriez avoir besoin de ces fichiers pour ffmpeg et ffprobe, sautez cette étape si vous avez déjà installé ffmpeg et ffprobe. Les utilisateurs d'ubuntu/debian peuvent installer ces deux bibliothèques avec apt install ffmpeg. Les utilisateurs de Mac peuvent les installer avec brew install ffmpeg (prérequis : avoir installé brew).
|
116 |
+
|
117 |
+
# ./ffmpeg
|
118 |
+
|
119 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffmpeg.exe
|
120 |
+
|
121 |
+
# ./ffprobe
|
122 |
+
|
123 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffprobe.exe
|
124 |
+
|
125 |
+
# Si vous souhaitez utiliser le dernier algorithme RMVPE de pitch vocal, téléchargez les paramètres du modèle de pitch et placez-les dans le répertoire racine de RVC.
|
126 |
+
|
127 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt
|
128 |
+
|
129 |
+
# Les utilisateurs de cartes AMD/Intel nécessitant l'environnement DML doivent télécharger :
|
130 |
+
|
131 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx
|
132 |
+
|
133 |
+
```
|
134 |
+
Pour les utilisateurs d'Intel ARC avec IPEX, exécutez d'abord `source /opt/intel/oneapi/setvars.sh`.
|
135 |
+
Ensuite, exécutez la commande suivante pour démarrer WebUI :
|
136 |
+
```bash
|
137 |
+
python infer-web.py
|
138 |
+
```
|
139 |
+
|
140 |
+
Si vous utilisez Windows ou macOS, vous pouvez télécharger et extraire `RVC-beta.7z`. Les utilisateurs de Windows peuvent exécuter `go-web.bat` pour démarrer WebUI, tandis que les utilisateurs de macOS peuvent exécuter `sh ./run.sh`.
|
141 |
+
|
142 |
+
## Compatibilité ROCm pour les cartes AMD (seulement Linux)
|
143 |
+
Installez tous les pilotes décrits [ici](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html).
|
144 |
+
|
145 |
+
Sur Arch utilisez pacman pour installer le pilote:
|
146 |
+
````
|
147 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
148 |
+
````
|
149 |
+
|
150 |
+
Vous devrez peut-être créer ces variables d'environnement (par exemple avec RX6700XT):
|
151 |
+
````
|
152 |
+
export ROCM_PATH=/opt/rocm
|
153 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
154 |
+
````
|
155 |
+
Assurez-vous que votre utilisateur est dans les groupes `render` et `video`:
|
156 |
+
````
|
157 |
+
sudo usermod -aG render $USERNAME
|
158 |
+
sudo usermod -aG video $USERNAME
|
159 |
+
````
|
160 |
+
Enfin vous pouvez exécuter WebUI:
|
161 |
+
```bash
|
162 |
+
python infer-web.py
|
163 |
+
```
|
164 |
+
|
165 |
+
## Crédits
|
166 |
+
+ [ContentVec](https://github.com/auspicious3000/contentvec/)
|
167 |
+
+ [VITS](https://github.com/jaywalnut310/vits)
|
168 |
+
+ [HIFIGAN](https://github.com/jik876/hifi-gan)
|
169 |
+
+ [Gradio](https://github.com/gradio-app/gradio)
|
170 |
+
+ [FFmpeg](https://github.com/FFmpeg/FFmpeg)
|
171 |
+
+ [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
172 |
+
+ [audio-slicer](https://github.com/openvpi/audio-slicer)
|
173 |
+
+ [Extraction de la hauteur vocale : RMVPE](https://github.com/Dream-High/RMVPE)
|
174 |
+
+ Le modèle pré-entraîné a été formé et testé par [yxlllc](https://github.com/yxlllc/RMVPE) et [RVC-Boss](https://github.com/RVC-Boss).
|
175 |
+
|
176 |
+
## Remerciements à tous les contributeurs pour leurs efforts
|
177 |
+
<a href="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors" target="_blank">
|
178 |
+
<img src="https://contrib.rocks/image?repo=RVC-Project/Retrieval-based-Voice-Conversion-WebUI" />
|
179 |
+
</a>
|
docs/fr/faiss_tips_fr.md
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Conseils de réglage pour faiss
|
2 |
+
==================
|
3 |
+
# À propos de faiss
|
4 |
+
faiss est une bibliothèque de recherches de voisins pour les vecteurs denses, développée par Facebook Research, qui implémente efficacement de nombreuses méthodes de recherche de voisins approximatifs.
|
5 |
+
La recherche de voisins approximatifs trouve rapidement des vecteurs similaires tout en sacrifiant une certaine précision.
|
6 |
+
|
7 |
+
## faiss dans RVC
|
8 |
+
Dans RVC, pour l'incorporation des caractéristiques converties par HuBERT, nous recherchons des incorporations similaires à l'incorporation générée à partir des données d'entraînement et les mixons pour obtenir une conversion plus proche de la parole originale. Cependant, cette recherche serait longue si elle était effectuée de manière naïve, donc une conversion à haute vitesse est réalisée en utilisant une recherche de voisinage approximatif.
|
9 |
+
|
10 |
+
# Vue d'ensemble de la mise en œuvre
|
11 |
+
Dans '/logs/votre-expérience/3_feature256' où le modèle est situé, les caractéristiques extraites par HuBERT de chaque donnée vocale sont situées.
|
12 |
+
À partir de là, nous lisons les fichiers npy dans un ordre trié par nom de fichier et concaténons les vecteurs pour créer big_npy. (Ce vecteur a la forme [N, 256].)
|
13 |
+
Après avoir sauvegardé big_npy comme /logs/votre-expérience/total_fea.npy, nous l'entraînons avec faiss.
|
14 |
+
|
15 |
+
Dans cet article, j'expliquerai la signification de ces paramètres.
|
16 |
+
|
17 |
+
# Explication de la méthode
|
18 |
+
## Usine d'index
|
19 |
+
Une usine d'index est une notation unique de faiss qui exprime un pipeline qui relie plusieurs méthodes de recherche de voisinage approximatif sous forme de chaîne.
|
20 |
+
Cela vous permet d'essayer diverses méthodes de recherche de voisinage approximatif simplement en changeant la chaîne de l'usine d'index.
|
21 |
+
Dans RVC, elle est utilisée comme ceci :
|
22 |
+
|
23 |
+
```python
|
24 |
+
index = faiss.index_factory(256, "IVF%s,Flat" % n_ivf)
|
25 |
+
```
|
26 |
+
|
27 |
+
Parmi les arguments de index_factory, le premier est le nombre de dimensions du vecteur, le second est la chaîne de l'usine d'index, et le troisième est la distance à utiliser.
|
28 |
+
|
29 |
+
Pour une notation plus détaillée :
|
30 |
+
https://github.com/facebookresearch/faiss/wiki/The-index-factory
|
31 |
+
|
32 |
+
## Index pour la distance
|
33 |
+
Il existe deux index typiques utilisés comme similarité de l'incorporation comme suit :
|
34 |
+
|
35 |
+
- Distance euclidienne (METRIC_L2)
|
36 |
+
- Produit intérieur (METRIC_INNER_PRODUCT)
|
37 |
+
|
38 |
+
La distance euclidienne prend la différence au carré dans chaque dimension, somme les différences dans toutes les dimensions, puis prend la racine carrée. C'est la même chose que la distance en 2D et 3D que nous utilisons au quotidien.
|
39 |
+
Le produit intérieur n'est pas utilisé comme index de similarité tel quel, et la similarité cosinus qui prend le produit intérieur après avoir été normalisé par la norme L2 est généralement utilisée.
|
40 |
+
|
41 |
+
Lequel est le mieux dépend du cas, mais la similarité cosinus est souvent utilisée dans l'incorporation obtenue par word2vec et des modèles de récupération d'images similaires appris par ArcFace. Si vous voulez faire une normalisation l2 sur le vecteur X avec numpy, vous pouvez le faire avec le code suivant avec eps suffisamment petit pour éviter une division par 0.
|
42 |
+
|
43 |
+
```python
|
44 |
+
X_normed = X / np.maximum(eps, np.linalg.norm(X, ord=2, axis=-1, keepdims=True))
|
45 |
+
```
|
46 |
+
|
47 |
+
De plus, pour l'usine d'index, vous pouvez changer l'index de distance utilisé pour le calcul en choisissant la valeur à passer comme troisième argument.
|
48 |
+
|
49 |
+
```python
|
50 |
+
index = faiss.index_factory(dimention, texte, faiss.METRIC_INNER_PRODUCT)
|
51 |
+
```
|
52 |
+
|
53 |
+
## IVF
|
54 |
+
IVF (Inverted file indexes) est un algorithme similaire à l'index inversé dans la recherche en texte intégral.
|
55 |
+
Lors de l'apprentissage, la cible de recherche est regroupée avec kmeans, et une partition de Voronoi est effectuée en utilisant le centre du cluster. Chaque point de données est attribué à un cluster, nous créons donc un dictionnaire qui permet de rechercher les points de données à partir des clusters.
|
56 |
+
|
57 |
+
Par exemple, si des clusters sont attribués comme suit :
|
58 |
+
|index|Cluster|
|
59 |
+
|-----|-------|
|
60 |
+
|1|A|
|
61 |
+
|2|B|
|
62 |
+
|3|A|
|
63 |
+
|4|C|
|
64 |
+
|5|B|
|
65 |
+
|
66 |
+
L'index inversé résultant ressemble à ceci :
|
67 |
+
|
68 |
+
|cluster|index|
|
69 |
+
|-------|-----|
|
70 |
+
|A|1, 3|
|
71 |
+
|B|2, 5|
|
72 |
+
|C|4|
|
73 |
+
|
74 |
+
Lors de la recherche, nous recherchons d'abord n_probe clusters parmi les clusters, puis nous calculons les distances pour les points de données appartenant à chaque cluster.
|
75 |
+
|
76 |
+
# Recommandation de paramètre
|
77 |
+
Il existe des directives officielles sur la façon de choisir un index, je vais donc expliquer en conséquence.
|
78 |
+
https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index
|
79 |
+
|
80 |
+
Pour les ensembles de données inférieurs à 1M, 4bit-PQ est la méthode la plus efficace disponible dans faiss en avril 2023.
|
81 |
+
En combinant cela avec IVF, en réduisant les candidats avec 4bit-PQ, et enfin en recalculant la distance avec un index précis, on peut le décrire en utilisant l'usine d'index suivante.
|
82 |
+
|
83 |
+
```python
|
84 |
+
index = faiss.index_factory(256, "IVF1024,PQ128x4fs,RFlat")
|
85 |
+
```
|
86 |
+
|
87 |
+
## Paramètres recommandés pour IVF
|
88 |
+
Considérez le cas de trop d'IVF. Par exemple, si une quantification grossière par IVF est effectuée pour le nombre de données, cela revient à une recherche exhaustive naïve et est inefficace.
|
89 |
+
Pour 1M ou moins, les valeurs IVF sont recommandées entre 4*sqrt(N) ~ 16*sqrt(N) pour N nombre de points de données.
|
90 |
+
|
91 |
+
Comme le temps de calcul augmente proportionnellement au nombre de n_probes, veuillez consulter la précision et choisir de manière appropriée. Personnellement, je ne pense pas que RVC ait besoin de tant de précision, donc n_probe = 1 est bien.
|
92 |
+
|
93 |
+
## FastScan
|
94 |
+
FastScan est une méthode qui permet d'approximer rapidement les distances par quantification de produit cartésien en les effectuant dans les registres.
|
95 |
+
La quantification du produit cartésien effectue un regroupement indépendamment
|
96 |
+
|
97 |
+
pour chaque dimension d (généralement d = 2) pendant l'apprentissage, calcule la distance entre les clusters à l'avance, et crée une table de recherche. Au moment de la prédiction, la distance de chaque dimension peut être calculée en O(1) en consultant la table de recherche.
|
98 |
+
Le nombre que vous spécifiez après PQ spécifie généralement la moitié de la dimension du vecteur.
|
99 |
+
|
100 |
+
Pour une description plus détaillée de FastScan, veuillez consulter la documentation officielle.
|
101 |
+
https://github.com/facebookresearch/faiss/wiki/Fast-accumulation-of-PQ-and-AQ-codes-(FastScan)
|
102 |
+
|
103 |
+
## RFlat
|
104 |
+
RFlat est une instruction pour recalculer la distance approximative calculée par FastScan avec la distance exacte spécifiée par le troisième argument de l'usine d'index.
|
105 |
+
Lors de l'obtention de k voisins, k*k_factor points sont recalculés.
|
docs/fr/faq_fr.md
ADDED
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Q1: Erreur ffmpeg/erreur utf8.
|
2 |
+
Il s'agit très probablement non pas d'un problème lié à FFmpeg, mais d'un problème lié au chemin de l'audio ;
|
3 |
+
|
4 |
+
FFmpeg peut rencontrer une erreur lors de la lecture de chemins contenant des caractères spéciaux tels que des espaces et (), ce qui peut provoquer une erreur FFmpeg ; et lorsque l'audio du jeu d'entraînement contient des chemins en chinois, l'écrire dans filelist.txt peut provoquer une erreur utf8.<br>
|
5 |
+
|
6 |
+
## Q2: Impossible de trouver le fichier index après "Entraînement en un clic".
|
7 |
+
Si l'affichage indique "L'entraînement est terminé. Le programme est fermé", alors le modèle a été formé avec succès, et les erreurs subséquentes sont fausses ;
|
8 |
+
|
9 |
+
L'absence d'un fichier index 'ajouté' après un entraînement en un clic peut être due au fait que le jeu d'entraînement est trop grand, ce qui bloque l'ajout de l'index ; cela a été résolu en utilisant un traitement par lots pour ajouter l'index, ce qui résout le problème de surcharge de mémoire lors de l'ajout de l'index. Comme solution temporaire, essayez de cliquer à nouveau sur le bouton "Entraîner l'index".<br>
|
10 |
+
|
11 |
+
## Q3: Impossible de trouver le modèle dans “Inférence du timbre” après l'entraînement
|
12 |
+
Cliquez sur “Actualiser la liste des timbres” et vérifiez à nouveau ; si vous ne le voyez toujours pas, vérifiez s'il y a des erreurs pendant l'entraînement et envoyez des captures d'écran de la console, de l'interface utilisateur web, et des logs/nom_de_l'expérience/*.log aux développeurs pour une analyse plus approfondie.<br>
|
13 |
+
|
14 |
+
## Q4: Comment partager un modèle/Comment utiliser les modèles d'autres personnes ?
|
15 |
+
Les fichiers pth stockés dans rvc_root/logs/nom_de_l'expérience ne sont pas destinés à être partagés ou inférés, mais à stocker les points de contrôle de l'expérience pour la reproductibilité et l'entraînement ultérieur. Le modèle à partager doit être le fichier pth de 60+MB dans le dossier des poids ;
|
16 |
+
|
17 |
+
À l'avenir, les poids/nom_de_l'expérience.pth et les logs/nom_de_l'expérience/ajouté_xxx.index seront fusionnés en un seul fichier poids/nom_de_l'expérience.zip pour éliminer le besoin d'une entrée d'index manuelle ; partagez donc le fichier zip, et non le fichier pth, sauf si vous souhaitez continuer l'entraînement sur une machine différente ;
|
18 |
+
|
19 |
+
Copier/partager les fichiers pth de plusieurs centaines de Mo du dossier des logs au dossier des poids pour une inférence forcée peut entraîner des erreurs telles que des f0, tgt_sr, ou d'autres clés manquantes. Vous devez utiliser l'onglet ckpt en bas pour sélectionner manuellement ou automatiquement (si l'information se trouve dans les logs/nom_de_l'expérience), si vous souhaitez inclure les informations sur la hauteur et les options de taux d'échantillonnage audio cible, puis extraire le modèle plus petit. Après extraction, il y aura un fichier pth de 60+ MB dans le dossier des poids, et vous pouvez actualiser les voix pour l'utiliser.<br>
|
20 |
+
|
21 |
+
## Q5: Erreur de connexion.
|
22 |
+
Il se peut que vous ayez fermé la console (fenêtre de ligne de commande noire).<br>
|
23 |
+
|
24 |
+
## Q6: WebUI affiche 'Expecting value: line 1 column 1 (char 0)'.
|
25 |
+
Veuillez désactiver le proxy système LAN/proxy global puis rafraîchir.<br>
|
26 |
+
|
27 |
+
## Q7: Comment s'entraîner et déduire sans le WebUI ?
|
28 |
+
Script d'entraînement :<br>
|
29 |
+
Vous pouvez d'abord lancer l'entraînement dans WebUI, et les versions en ligne de commande de la préparation du jeu de données et de l'entraînement seront affichées dans la fenêtre de message.<br>
|
30 |
+
|
31 |
+
Script d'inférence :<br>
|
32 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py<br>
|
33 |
+
|
34 |
+
Par exemple :<br>
|
35 |
+
|
36 |
+
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" récolte "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True<br>
|
37 |
+
|
38 |
+
f0up_key=sys.argv[1]<br>
|
39 |
+
input_path=sys.argv[2]<br>
|
40 |
+
index_path=sys.argv[3]<br>
|
41 |
+
f0method=sys.argv[4]#récolte ou pm<br>
|
42 |
+
opt_path=sys.argv[5]<br>
|
43 |
+
model_path=sys.argv[6]<br>
|
44 |
+
index_rate=float(sys.argv[7])<br>
|
45 |
+
device=sys.argv[8]<br>
|
46 |
+
is_half=bool(sys.argv[9])<br>
|
47 |
+
|
48 |
+
### Explication des arguments :
|
49 |
+
|
50 |
+
1. **Numéro de voix cible** : `0` (dans cet exemple)
|
51 |
+
2. **Chemin du fichier audio d'entrée** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\vocal.wav"`
|
52 |
+
3. **Chemin du fichier index** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\logs\Hagrid.index"`
|
53 |
+
4. **Méthode pour l'extraction du pitch (F0)** : `harvest` (dans cet exemple)
|
54 |
+
5. **Chemin de sortie pour le fichier audio traité** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\test.wav"`
|
55 |
+
6. **Chemin du modèle** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\weights\HagridFR.pth"`
|
56 |
+
7. **Taux d'index** : `0.6` (dans cet exemple)
|
57 |
+
8. **Périphérique pour l'exécution (GPU/CPU)** : `cuda:0` pour une carte NVIDIA, par exemple.
|
58 |
+
9. **Protection des droits d'auteur (True/False)**.
|
59 |
+
|
60 |
+
<!-- Pour myinfer nouveau models :
|
61 |
+
|
62 |
+
runtime\python.exe myinfer.py 0 "C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\vocal.wav" "C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\logs\Hagrid.index" harvest "C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\test.wav" "C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\weights\HagridFR.pth" 0.6 cuda:0 True 5 44100 44100 1.0 1.0 True
|
63 |
+
|
64 |
+
|
65 |
+
f0up_key=sys.argv[1]
|
66 |
+
input_path = sys.argv[2]
|
67 |
+
index_path = sys.argv[3]
|
68 |
+
f0method = sys.argv[4]
|
69 |
+
opt_path = sys.argv[5]
|
70 |
+
model_path = sys.argv[6]
|
71 |
+
index_rate = float(sys.argv[7])
|
72 |
+
device = sys.argv[8]
|
73 |
+
is_half = bool(sys.argv[9])
|
74 |
+
filter_radius = int(sys.argv[10])
|
75 |
+
tgt_sr = int(sys.argv[11])
|
76 |
+
resample_sr = int(sys.argv[12])
|
77 |
+
rms_mix_rate = float(sys.argv[13])
|
78 |
+
version = sys.argv[14]
|
79 |
+
protect = sys.argv[15].lower() == 'false' # change for true if needed
|
80 |
+
|
81 |
+
### Explication des arguments :
|
82 |
+
|
83 |
+
1. **Numéro de voix cible** : `0` (dans cet exemple)
|
84 |
+
2. **Chemin du fichier audio d'entrée** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\vocal.wav"`
|
85 |
+
3. **Chemin du fichier index** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\logs\Hagrid.index"`
|
86 |
+
4. **Méthode pour l'extraction du pitch (F0)** : `harvest` (dans cet exemple)
|
87 |
+
5. **Chemin de sortie pour le fichier audio traité** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\test.wav"`
|
88 |
+
6. **Chemin du modèle** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\weights\HagridFR.pth"`
|
89 |
+
7. **Taux d'index** : `0.6` (dans cet exemple)
|
90 |
+
8. **Périphérique pour l'exécution (GPU/CPU)** : `cuda:0` pour une carte NVIDIA, par exemple.
|
91 |
+
9. **Protection des droits d'auteur (True/False)**.
|
92 |
+
10. **Rayon du filtre** : `5` (dans cet exemple)
|
93 |
+
11. **Taux d'échantillonnage cible** : `44100` (dans cet exemple)
|
94 |
+
12. **Taux d'échantillonnage pour le rééchantillonnage** : `44100` (dans cet exemple)
|
95 |
+
13. **Taux de mixage RMS** : `1.0` (dans cet exemple)
|
96 |
+
14. **Version** : `1.0` (dans cet exemple)
|
97 |
+
15. **Protection** : `True` (dans cet exemple)
|
98 |
+
|
99 |
+
Assurez-vous de remplacer les chemins par ceux correspondant à votre configuration et d'ajuster les autres paramètres selon vos besoins.
|
100 |
+
-->
|
101 |
+
|
102 |
+
## Q8: Erreur Cuda/Mémoire Cuda épuisée.
|
103 |
+
Il y a une faible chance qu'il y ait un problème avec la configuration CUDA ou que le dispositif ne soit pas pris en charge ; plus probablement, il n'y a pas assez de mémoire (manque de mémoire).<br>
|
104 |
+
|
105 |
+
Pour l'entraînement, réduisez la taille du lot (si la réduction à 1 n'est toujours pas suffisante, vous devrez peut-être changer la carte graphique) ; pour l'inférence, ajustez les paramètres x_pad, x_query, x_center, et x_max dans le fichier config.py selon les besoins. Les cartes mémoire de 4 Go ou moins (par exemple 1060(3G) et diverses cartes de 2 Go) peuvent être abandonnées, tandis que les cartes mémoire de 4 Go ont encore une chance.<br>
|
106 |
+
|
107 |
+
## Q9: Combien de total_epoch sont optimaux ?
|
108 |
+
Si la qualité audio du jeu d'entraînement est médiocre et que le niveau de bruit est élevé, 20-30 époques sont suffisantes. Le fixer trop haut n'améliorera pas la qualité audio de votre jeu d'entraînement de faible qualité.<br>
|
109 |
+
|
110 |
+
Si la qualité audio du jeu d'entraînement est élevée, le niveau de bruit est faible, et la durée est suffisante, vous pouvez l'augmenter. 200 est acceptable (puisque l'entraînement est rapide, et si vous êtes capable de préparer un jeu d'entraînement de haute qualité, votre GPU peut probablement gérer une durée d'entraînement plus longue sans problème).<br>
|
111 |
+
|
112 |
+
## Q10: Quelle durée de jeu d'entraînement est nécessaire ?
|
113 |
+
Un jeu d'environ 10 min à 50 min est recommandé.<br>
|
114 |
+
|
115 |
+
Avec une garantie de haute qualité sonore et de faible bruit de fond, plus peut être ajouté si le timbre du jeu est uniforme.<br>
|
116 |
+
|
117 |
+
Pour un jeu d'entraînement de haut niveau (ton maigre + ton distinctif), 5 min à 10 min sont suffisantes.<br>
|
118 |
+
|
119 |
+
Il y a des personnes qui ont réussi à s'entraîner avec des données de 1 min à 2 min, mais le succès n'est pas reproductible par d'autres et n'est pas très informatif. <br>Cela nécessite que le jeu d'entraînement ait un timbre très distinctif (par exemple, un son de fille d'anime aérien à haute fréquence) et que la qualité de l'audio soit élevée ;
|
120 |
+
Aucune tentative réussie n'a été faite jusqu'à présent avec des données de moins de 1 min. Cela n'est pas recommandé.<br>
|
121 |
+
|
122 |
+
## Q11: À quoi sert le taux d'index et comment l'ajuster ?
|
123 |
+
Si la qualité tonale du modèle pré-entraîné et de la source d'inférence est supérieure à celle du jeu d'entraînement, ils peuvent améliorer la qualité tonale du résultat d'inférence, mais au prix d'un possible biais tonal vers le ton du modèle sous-jacent/source d'inférence plutôt que le ton du jeu d'entraînement, ce qui est généralement appelé "fuite de ton".<br>
|
124 |
+
|
125 |
+
Le taux d'index est utilisé pour réduire/résoudre le problème de la fuite de timbre. Si le taux d'index est fixé à 1, théoriquement il n'y a pas de fuite de timbre de la source d'inférence et la qualité du timbre est plus biaisée vers le jeu d'entraînement. Si le jeu d'entraînement a une qualité sonore inférieure à celle de la source d'inférence, alors un taux d'index plus élevé peut réduire la qualité sonore. Le réduire à 0 n'a pas l'effet d'utiliser le mélange de récupération pour protéger les tons du jeu d'entraînement.<br>
|
126 |
+
|
127 |
+
Si le jeu d'entraînement a une bonne qualité audio et une longue durée, augmentez le total_epoch, lorsque le modèle lui-même est moins susceptible de se référer à la source déduite et au modèle sous-jacent pré-entraîné, et qu'il y a peu de "fuite de ton", le taux d'index n'est pas important et vous pouvez même ne pas créer/partager le fichier index.<br>
|
128 |
+
|
129 |
+
## Q12: Comment choisir le gpu lors de l'inférence ?
|
130 |
+
Dans le fichier config.py, sélectionnez le numéro de carte après "device cuda:".<br>
|
131 |
+
|
132 |
+
La correspondance entre le numéro de carte et la carte graphique peut être vue dans la section d'information de la carte graphique de l'onglet d'entraînement.<br>
|
133 |
+
|
134 |
+
## Q13: Comment utiliser le modèle sauvegardé au milieu de l'entraînement ?
|
135 |
+
Sauvegardez via l'extraction de modèle en bas de l'onglet de traitement ckpt.
|
136 |
+
|
137 |
+
## Q14: Erreur de fichier/erreur de mémoire (lors de l'entraînement) ?
|
138 |
+
Il y a trop de processus et votre mémoire n'est pas suffisante. Vous pouvez le corriger en :
|
139 |
+
|
140 |
+
1. Diminuer l'entrée dans le champ "Threads of CPU".
|
141 |
+
|
142 |
+
2. Pré-découper le jeu d'entraînement en fichiers audio plus courts.
|
143 |
+
|
144 |
+
## Q15: Comment poursuivre l'entraînement avec plus de données
|
145 |
+
|
146 |
+
étape 1 : mettre toutes les données wav dans path2.
|
147 |
+
|
148 |
+
étape 2 : exp_name2+path2 -> traiter le jeu de données et extraire la caractéristique.
|
149 |
+
|
150 |
+
étape 3 : copier les derniers fichiers G et D de exp_name1 (votre expérience précédente) dans le dossier exp_name2.
|
151 |
+
|
152 |
+
étape 4 : cliquez sur "entraîner le modèle", et il continuera l'entraînement depuis le début de votre époque de modèle exp précédente.
|
153 |
+
|
154 |
+
## Q16: erreur à propos de llvmlite.dll
|
155 |
+
|
156 |
+
OSError: Impossible de charger le fichier objet partagé : llvmlite.dll
|
157 |
+
|
158 |
+
FileNotFoundError: Impossible de trouver le module lib\site-packages\llvmlite\binding\llvmlite.dll (ou l'une de ses dépendances). Essayez d'utiliser la syntaxe complète du constructeur.
|
159 |
+
|
160 |
+
Le problème se produira sous Windows, installez https://aka.ms/vs/17/release/vc_redist.x64.exe et il sera corrigé.
|
161 |
+
|
162 |
+
## Q17: RuntimeError: La taille étendue du tensor (17280) doit correspondre à la taille existante (0) à la dimension non-singleton 1. Tailles cibles : [1, 17280]. Tailles des tensors : [0]
|
163 |
+
|
164 |
+
Supprimez les fichiers wav dont la taille est nettement inférieure à celle des autres, et cela ne se reproduira plus. Ensuite, cliquez sur "entraîner le modèle" et "entraîner l'index".
|
165 |
+
|
166 |
+
## Q18: RuntimeError: La taille du tensor a (24) doit correspondre à la taille du tensor b (16) à la dimension non-singleton 2
|
167 |
+
|
168 |
+
Ne changez pas le taux d'échantillonnage puis continuez l'entraînement. S'il est nécessaire de changer, le nom de l'expérience doit être modifié et le modèle sera formé à partir de zéro. Vous pouvez également copier les hauteurs et caractéristiques (dossiers 0/1/2/2b) extraites la dernière fois pour accélérer le processus d'entraînement.
|
169 |
+
|
docs/fr/training_tips_fr.md
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Instructions et conseils pour la formation RVC
|
2 |
+
======================================
|
3 |
+
Ces conseils expliquent comment se déroule la formation des données.
|
4 |
+
|
5 |
+
# Flux de formation
|
6 |
+
Je vais expliquer selon les étapes de l'onglet de formation de l'interface graphique.
|
7 |
+
|
8 |
+
## étape 1
|
9 |
+
Définissez ici le nom de l'expérience.
|
10 |
+
|
11 |
+
Vous pouvez également définir ici si le modèle doit prendre en compte le pitch.
|
12 |
+
Si le modèle ne considère pas le pitch, le modèle sera plus léger, mais pas adapté au chant.
|
13 |
+
|
14 |
+
Les données de chaque expérience sont placées dans `/logs/nom-de-votre-experience/`.
|
15 |
+
|
16 |
+
## étape 2a
|
17 |
+
Charge et pré-traite l'audio.
|
18 |
+
|
19 |
+
### charger l'audio
|
20 |
+
Si vous spécifiez un dossier avec de l'audio, les fichiers audio de ce dossier seront lus automatiquement.
|
21 |
+
Par exemple, si vous spécifiez `C:Users\hoge\voices`, `C:Users\hoge\voices\voice.mp3` sera chargé, mais `C:Users\hoge\voices\dir\voice.mp3` ne sera pas chargé.
|
22 |
+
|
23 |
+
Comme ffmpeg est utilisé en interne pour lire l'audio, si l'extension est prise en charge par ffmpeg, elle sera lue automatiquement.
|
24 |
+
Après la conversion en int16 avec ffmpeg, convertir en float32 et normaliser entre -1 et 1.
|
25 |
+
|
26 |
+
### débruitage
|
27 |
+
L'audio est lissé par filtfilt de scipy.
|
28 |
+
|
29 |
+
### Séparation audio
|
30 |
+
Tout d'abord, l'audio d'entrée est divisé en détectant des parties de silence qui durent plus d'une certaine période (max_sil_kept = 5 secondes ?). Après avoir séparé l'audio sur le silence, séparez l'audio toutes les 4 secondes avec un chevauchement de 0,3 seconde. Pour l'audio séparé en 4 secondes, après normalisation du volume, convertir le fichier wav en `/logs/nom-de-votre-experience/0_gt_wavs` puis le convertir à un taux d'échantillonnage de 16k dans `/logs/nom-de-votre-experience/1_16k_wavs` sous forme de fichier wav.
|
31 |
+
|
32 |
+
## étape 2b
|
33 |
+
### Extraire le pitch
|
34 |
+
Extrait les informations de pitch des fichiers wav. Extraire les informations de pitch (=f0) en utilisant la méthode intégrée dans parselmouth ou pyworld et les sauvegarder dans `/logs/nom-de-votre-experience/2a_f0`. Convertissez ensuite logarithmiquement les informations de pitch en un entier entre 1 et 255 et sauvegardez-le dans `/logs/nom-de-votre-experience/2b-f0nsf`.
|
35 |
+
|
36 |
+
### Extraire l'empreinte de caractéristique
|
37 |
+
Convertissez le fichier wav en incorporation à l'avance en utilisant HuBERT. Lisez le fichier wav sauvegardé dans `/logs/nom-de-votre-experience/1_16k_wavs`, convertissez le fichier wav en caractéristiques de dimension 256 avec HuBERT, et sauvegardez au format npy dans `/logs/nom-de-votre-experience/3_feature256`.
|
38 |
+
|
39 |
+
## étape 3
|
40 |
+
former le modèle.
|
41 |
+
### Glossaire pour les débutants
|
42 |
+
Dans l'apprentissage profond, l'ensemble de données est divisé et l'apprentissage progresse petit à petit. Dans une mise à jour de modèle (étape), les données de batch_size sont récupérées et des prédictions et corrections d'erreur sont effectuées. Faire cela une fois pour un ensemble de données compte comme une époque.
|
43 |
+
|
44 |
+
Par conséquent, le temps d'apprentissage est le temps d'apprentissage par étape x (le nombre de données dans l'ensemble de données / taille du lot) x le nombre d'époques. En général, plus la taille du lot est grande, plus l'apprentissage devient stable (temps d'apprentissage par étape ÷ taille du lot) devient plus petit, mais il utilise plus de mémoire GPU. La RAM GPU peut être vérifiée avec la commande nvidia-smi. L'apprentissage peut être effectué en peu de temps en augmentant la taille du lot autant que possible selon la machine de l'environnement d'exécution.
|
45 |
+
|
46 |
+
### Spécifier le modèle pré-entraîné
|
47 |
+
RVC commence à former le modèle à partir de poids pré-entraînés plutôt que de zéro, il peut donc être formé avec un petit ensemble de données.
|
48 |
+
|
49 |
+
Par défaut :
|
50 |
+
|
51 |
+
- Si vous considérez le pitch, il charge `rvc-location/pretrained/f0G40k.pth` et `rvc-location/pretrained/f0D40k.pth`.
|
52 |
+
- Si vous ne considérez pas le pitch, il charge `rvc-location/pretrained/f0G40k.pth` et `rvc-location/pretrained/f0D40k.pth`.
|
53 |
+
|
54 |
+
Lors de l'apprentissage, les paramètres du modèle sont sauvegardés dans `logs/nom-de-votre-experience/G_{}.pth` et `logs/nom-de-votre-experience/D_{}.pth` pour chaque save_every_epoch, mais en spécifiant ce chemin, vous pouvez démarrer l'apprentissage. Vous pouvez redémarrer ou commencer à former à partir de poids de modèle appris lors d'une expérience différente.
|
55 |
+
|
56 |
+
### Index d'apprentissage
|
57 |
+
RVC sauvegarde les valeurs de caractéristique HuBERT utilisées lors de la formation, et pendant l'inférence, recherche les valeurs de caractéristique qui sont similaires aux valeurs de caractéristique utilisées lors de l'apprentissage pour effectuer l'inférence. Afin d'effectuer cette recherche à haute vitesse, l'index est appris à l'avance.
|
58 |
+
Pour l'apprentissage d'index, nous utilisons la bibliothèque de recherche de voisinage approximatif faiss. Lisez la valeur de caractéristique de `logs/nom-de-votre-experience/3_feature256` et utilisez-la pour apprendre l'index, et sauvegardez-la sous `logs/nom-de-votre-experience/add_XXX.index`.
|
59 |
+
|
60 |
+
(À partir de la version de mise à jour 20230428, elle est lue à partir de l'index, et la sauvegarde / spécification n'est plus nécessaire.)
|
61 |
+
|
62 |
+
### Description du bouton
|
63 |
+
- Former le modèle : après avoir exécuté l'étape 2b, appuyez sur ce bouton pour former le modèle.
|
64 |
+
- Former l'index de caractéristique : après avoir formé le modèle, effectuez un apprentissage d'index.
|
65 |
+
- Formation en un clic : étape 2b, formation du modèle et formation de l'index de caractéristique tout d'un coup.```
|
docs/jp/Changelog_JA.md
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### 2023 年 10 月 6 日更新
|
2 |
+
|
3 |
+
リアルタイム声変換のためのインターフェース go-realtime-gui.bat/gui_v1.py を作成しました(実際には既に存在していました)。今回のアップデートでは、リアルタイム声変換のパフォーマンスを重点的に最適化しました。0813 版との比較:
|
4 |
+
|
5 |
+
- 1. インターフェース操作の最適化:パラメータのホット更新(パラメータ調整時に中断して再起動する必要がない)、レイジーロードモデル(既にロードされたモデルは再ロードする必要がない)、音量因子パラメータ追加(音量を入力オーディオに近づける)
|
6 |
+
- 2. 内蔵ノイズリダクション効果と速度の最適化
|
7 |
+
- 3. 推論速度の大幅な最適化
|
8 |
+
|
9 |
+
入出力デバイスは同じタイプを選択する必要があります。例えば、両方とも MME タイプを選択します。
|
10 |
+
|
11 |
+
1006 バージョンの全体的な更新は:
|
12 |
+
|
13 |
+
- 1. rmvpe 音声ピッチ抽出アルゴリズムの効果をさらに向上、特に男性の低音部分で大きな改善
|
14 |
+
- 2. 推論インターフェースレイアウトの最適化
|
15 |
+
|
16 |
+
### 2023 年 8 月 13 日更新
|
17 |
+
|
18 |
+
1-通常のバグ修正
|
19 |
+
|
20 |
+
- 保存頻度と総ラウンド数の最小値を 1 に変更。総ラウンド数の最小値を 2 に変更
|
21 |
+
- pretrain モデルなしでのトレーニングエラーを修正
|
22 |
+
- 伴奏とボーカルの分離完了後の VRAM クリア
|
23 |
+
- faiss 保存パスを絶対パスから相対パスに変更
|
24 |
+
- パスに空白が含まれる場合のサポート(トレーニングセットのパス+実験名がサポートされ、エラーにならない)
|
25 |
+
- filelist の強制的な utf8 エンコーディングをキャンセル
|
26 |
+
- リアルタイム声変換中にインデックスを有効にすることによる CPU の大幅な使用問題を解決
|
27 |
+
|
28 |
+
2-重要なアップデート
|
29 |
+
|
30 |
+
- 現在最も強力なオープンソースの人間の声のピッチ抽出モデル RMVPE をトレーニングし、RVC のトレーニング、オフライン/リアルタイム推論に使用。pytorch/onnx/DirectML をサポート
|
31 |
+
- pytorch-dml を通じて A カードと I カードのサポート
|
32 |
+
(1)リアルタイム声変換(2)推論(3)ボーカルと伴奏の分離(4)トレーニングはまだサポートされておらず、CPU でのトレーニングに切り替わります。onnx_dml を通じて rmvpe_gpu の推論をサポート
|
33 |
+
|
34 |
+
### 2023 年 6 月 18 日更新
|
35 |
+
|
36 |
+
- v2 に 32k と 48k の 2 つの新しい事前トレーニングモデルを追加
|
37 |
+
- 非 f0 モデルの推論エラーを修正
|
38 |
+
- 1 時間を超えるトレーニングセットのインデックス構築フェーズでは、自動的に kmeans で特徴を縮小し、インデックスのトレーニングを加速し、検索に追加
|
39 |
+
- 人間の声をギターに変換するおもちゃのリポジトリを添付
|
40 |
+
- データ処理で異常値スライスを除外
|
41 |
+
- onnx エクスポートオプションタブ
|
42 |
+
|
43 |
+
失敗した実験:
|
44 |
+
|
45 |
+
- ~~特徴検索に時間次元を追加:ダメ、効果がない~~
|
46 |
+
- ~~特徴検索に PCAR 次元削減オプションを追加:ダメ、大きなデータは kmeans でデータ量を減らし、小さいデータは次元削減の時間が節約するマッチングの時間よりも長い~~
|
47 |
+
- ~~onnx 推論のサポート(推論のみの小さな圧縮パッケージ付き):ダメ、nsf の生成には pytorch が必要~~
|
48 |
+
- ~~トレーニング中に音声、ジェンダー、eq、ノイズなどで入力をランダムに増強:ダメ、効果がない~~
|
49 |
+
- ~~小型声码器の接続調査:ダメ、効果が悪化~~
|
50 |
+
|
51 |
+
todolist:
|
52 |
+
|
53 |
+
- ~~トレーニングセットの音声ピッチ認識に crepe をサポート:既に RMVPE に置き換えられているため不要~~
|
54 |
+
- ~~多プロセス harvest 推論:既に RMVPE に置き換えられているため不要~~
|
55 |
+
- ~~crepe の精度サポートと RVC-config の同期:既に RMVPE に置き換えられているため不要。これをサポートするには torchcrepe ライブラリも同期する必要があり、面倒~~
|
56 |
+
- F0 エディタとの連携
|
57 |
+
|
58 |
+
### 2023 年 5 月 28 日更新
|
59 |
+
|
60 |
+
- v2 の jupyter notebook を追加、韓国語の changelog を追加、いくつかの環境依存関係を追加
|
61 |
+
- 呼吸、清辅音、歯音の保護モードを追加
|
62 |
+
- crepe-full 推論をサポート
|
63 |
+
- UVR5 人間の声と伴奏の分離に 3 つの遅延除去モデルと MDX-Net の混响除去モデルを追加、HP3 人声抽出モデルを追加
|
64 |
+
- インデックス名にバージョンと実験名を追加
|
65 |
+
- 人間の声と伴奏の分離、推論のバッチエクスポートにオーディオエクスポートフォーマットオプションを追加
|
66 |
+
- 32k モデルのトレーニングを廃止
|
67 |
+
|
68 |
+
### 2023 年 5 月 13 日更新
|
69 |
+
|
70 |
+
- ワンクリックパッケージ内の古いバージョンの runtime 内の lib.infer_pack と uvr5_pack の残骸をクリア
|
71 |
+
- トレーニングセットの事前処理の擬似マルチプロセスバグを修正
|
72 |
+
- harvest による音声ピッチ認識で無声音現象を弱めるために中間値フィルターを追加、中間値フィルターの半径を調整可能
|
73 |
+
- 音声エクスポートにポストプロセスリサンプリングを追加
|
74 |
+
- トレーニング時の n_cpu プロセス数を「F0 抽出のみ調整」から「データ事前処理と F0 抽出の調整」に変更
|
75 |
+
- logs フォルダ下の index パスを自動検出し、ドロップダウンリスト機能を提供
|
76 |
+
- タブページに「よくある質問」を追加(または github-rvc-wiki を参照)
|
77 |
+
- 同じパスの入力音声推論に音声ピッチキャッシュを追加(用途:harvest 音声ピッチ抽出を使用すると、全体のパイプラインが長く繰り返される音声ピッチ抽出プロセスを経験し、キャッシュを使用しない場合、異なる音色、インデックス、音声ピッチ中間値フィルター半径パラメーターをテストするユーザーは、最初のテスト後の待機結果が非常に苦痛になります)
|
78 |
+
|
79 |
+
### 2023 年 5 月 14 日更新
|
80 |
+
|
81 |
+
- 音量エンベロープのアライメント入力ミックス(「入力が無音で出力がわずかなノイズ」の問題を緩和することができます。入力音声の背景ノイズが大きい場合は、オンにしないことをお勧めします。デフォルトではオフ(1 として扱われる))
|
82 |
+
- 指定された頻度で抽出された小型モデルを保存する機能をサポート(異なるエポックでの推論効果を試したいが、すべての大きなチェックポイントを保存して手動で小型モデルを抽出するのが面倒な場合、この機能は非常に便利です)
|
83 |
+
- システム全体のプロキシが開かれている場合にブラウザの接続エラーが発生する問題を環境変数の設定で解決
|
84 |
+
- v2 事前訓練モデルをサポート(現在、テストのために 40k バージョンのみが公開されており、他の 2 つのサンプリングレートはまだ完全に訓練されていません)
|
85 |
+
- 推論前に 1 を超える過大な音量を制限
|
86 |
+
- データ事前処理パラメーターを微調整
|
87 |
+
|
88 |
+
### 2023 年 4 月 9 日更新
|
89 |
+
|
90 |
+
- トレーニングパラメーターを修正し、GPU の平均利用率を向上させる。A100 は最高 25%から約 90%に、V100 は 50%から約 90%に、2060S は 60%から約 85%に、P40 は 25%から約 95%に向上し、トレーニング速度が大幅に向上
|
91 |
+
- パラメーターを修正:全体の batch_size を各カードの batch_size に変更
|
92 |
+
- total_epoch を修正:最大制限 100 から 1000 に解除; デフォルト 10 からデフォルト 20 に引き上げ
|
93 |
+
- ckpt 抽出時に音声ピッチの有無を誤って認識し、推論が異常になる問題を修正
|
94 |
+
- 分散トレーニングで各ランクが ckpt を 1 回ずつ保存する問題を修正
|
95 |
+
- 特徴抽出で nan 特徴をフィルタリング
|
96 |
+
- 入力が無音で出力がランダムな子音またはノイズになる問題を修正(旧バージョンのモデルはトレーニングセットを作り直して再トレーニングする必要があります)
|
97 |
+
|
98 |
+
### 2023 年 4 月 16 日更新
|
99 |
+
|
100 |
+
- ローカルリアルタイム音声変換ミニ GUI を新設、go-realtime-gui.bat をダブルクリックで起動
|
101 |
+
- トレーニングと推論で 50Hz 以下の周波数帯をフィルタリング
|
102 |
+
- トレーニングと推論の音声ピッチ抽出 pyworld の最低音声ピッチをデフォルトの 80 から 50 に下げ、50-80hz の男性低音声が無声にならないように
|
103 |
+
- WebUI がシステムの地域に基づいて言語を変更する機能をサポート(現在サポートされているのは en_US、ja_JP、zh_CN、zh_HK、zh_SG、zh_TW、サポートされていない場合はデフォルトで en_US になります)
|
104 |
+
- 一部のグラフィックカードの認識を修正(例えば V100-16G の認識失敗、P4 の認識失敗)
|
105 |
+
|
106 |
+
### 2023 年 4 月 28 日更新
|
107 |
+
|
108 |
+
- faiss インデックス設定をアップグレードし、速度が速く、品質が高くなりました
|
109 |
+
- total_npy 依存をキャンセルし、今後のモデル共有では total_npy の記入は不要
|
110 |
+
- 16 シリーズの制限を解除。4G メモリ GPU に 4G の推論設定を提供
|
111 |
+
- 一部のオーディオ形式で UVR5 の人声伴奏分離のバグを修正
|
112 |
+
- リアルタイム音声変換ミニ gui に 40k 以外のモデルと妥協のない音声ピッチモデルのサポートを追加
|
113 |
+
|
114 |
+
### 今後の計画:
|
115 |
+
|
116 |
+
機能:
|
117 |
+
|
118 |
+
- 複数人のトレーニングタブのサポート(最大 4 人)
|
119 |
+
|
120 |
+
底層モデル:
|
121 |
+
|
122 |
+
- 呼吸 wav をトレーニングセットに追加し、呼吸が音声変換の電子音の問題を修正
|
123 |
+
- 歌声トレーニングセットを追加した底層モデルをトレーニングしており、将来的には公開する予定です
|
docs/jp/README.ja.md
ADDED
@@ -0,0 +1,258 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
<h1>Retrieval-based-Voice-Conversion-WebUI</h1>
|
4 |
+
VITSに基づく使いやすい音声変換(voice changer)framework<br><br>
|
5 |
+
|
6 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)
|
7 |
+
|
8 |
+
<img src="https://counter.seku.su/cmoe?name=rvc&theme=r34" /><br>
|
9 |
+
|
10 |
+
[![RVC v1](https://img.shields.io/badge/RVCv1-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v1.ipynb)
|
11 |
+
[![RVC v2](https://img.shields.io/badge/RVCv2-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v2.ipynb)
|
12 |
+
[![Licence](https://img.shields.io/badge/LICENSE-MIT-green.svg?style=for-the-badge)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
13 |
+
[![Huggingface](https://img.shields.io/badge/🤗%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
14 |
+
|
15 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
16 |
+
|
17 |
+
[**更新日誌**](./Changelog_JA.md) | [**よくある質問**](./faq_ja.md) | [**AutoDL·5 円で AI 歌手をトレーニング**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/wiki/Autodl%E8%AE%AD%E7%BB%83RVC%C2%B7AI%E6%AD%8C%E6%89%8B%E6%95%99%E7%A8%8B) | [**対照実験記録**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%AF%B9%E7%85%A7%E5%AE%9E%E9%AA%8C%C2%B7%E5%AE%9E%E9%AA%8C%E8%AE%B0%E5%BD%95) | [**オンラインデモ**](https://modelscope.cn/studios/FlowerCry/RVCv2demo)
|
18 |
+
|
19 |
+
[**English**](../en/README.en.md) | [**中文简体**](../../README.md) | [**日本語**](../jp/README.ja.md) | [**한국어**](../kr/README.ko.md) ([**韓國語**](../kr/README.ko.han.md)) | [**Français**](../fr/README.fr.md) | [**Türkçe**](../tr/README.tr.md) | [**Português**](../pt/README.pt.md)
|
20 |
+
|
21 |
+
</div>
|
22 |
+
|
23 |
+
> デモ動画は[こちら](https://www.bilibili.com/video/BV1pm4y1z7Gm/)でご覧ください。
|
24 |
+
|
25 |
+
> RVC によるリアルタイム音声変換: [w-okada/voice-changer](https://github.com/w-okada/voice-changer)
|
26 |
+
|
27 |
+
> 著作権侵害を心配することなく使用できるように、基底モデルは約 50 時間の高品質なオープンソースデータセットで訓練されています。
|
28 |
+
|
29 |
+
> RVCv3 の基底モデルルをご期待ください。より大きなパラメータ、より大きなデータ、より良い効果を提供し、基本的に同様の推論速度を維持しながら、トレーニングに必要なデータ量はより少なくなります。
|
30 |
+
|
31 |
+
<table>
|
32 |
+
<tr>
|
33 |
+
<td align="center">トレーニングと推論インターフェース</td>
|
34 |
+
<td align="center">リアルタイム音声変換インターフェース</td>
|
35 |
+
</tr>
|
36 |
+
<tr>
|
37 |
+
<td align="center"><img src="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/assets/129054828/092e5c12-0d49-4168-a590-0b0ef6a4f630"></td>
|
38 |
+
<td align="center"><img src="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/assets/129054828/730b4114-8805-44a1-ab1a-04668f3c30a6"></td>
|
39 |
+
</tr>
|
40 |
+
<tr>
|
41 |
+
<td align="center">go-web.bat</td>
|
42 |
+
<td align="center">go-realtime-gui.bat</td>
|
43 |
+
</tr>
|
44 |
+
<tr>
|
45 |
+
<td align="center">実行したい操作を自由に選択できます。</td>
|
46 |
+
<td align="center">既に端から端までの170msの遅延を実現しました。ASIO入出力デバイスを使用すれば、端から端までの90msの遅延を達成できますが、ハードウェアドライバーのサポートに非常に依存しています。</td>
|
47 |
+
</tr>
|
48 |
+
</table>
|
49 |
+
|
50 |
+
## はじめに
|
51 |
+
|
52 |
+
本リポジトリには下記の特徴があります。
|
53 |
+
|
54 |
+
- Top1 検索を用いることで、生の特徴量を訓練用データセット特徴量に変換し、トーンリーケージを削減します。
|
55 |
+
- 比較的貧弱な GPU でも、高速かつ簡単に訓練できます。
|
56 |
+
- 少量のデータセットからでも、比較的良い結果を得ることができます。(10 分以上のノイズの少ない音声を推奨します。)
|
57 |
+
- モデルを融合することで、音声を混ぜることができます。(ckpt processing タブの、ckpt merge を使用します。)
|
58 |
+
- 使いやすい WebUI。
|
59 |
+
- UVR5 Model も含んでいるため、人の声と BGM を素早く分離できます。
|
60 |
+
- 最先端の[人間の声のピッチ抽出アルゴリズム InterSpeech2023-RMVPE](#参照プロジェクト)を使用して無声音問題を解決します。効果は最高(著しく)で、crepe_full よりも速く、リソース使用が少ないです。
|
61 |
+
- A カードと I カードの加速サポート
|
62 |
+
|
63 |
+
私たちの[デモビデオ](https://www.bilibili.com/video/BV1pm4y1z7Gm/)をチェックしてください!
|
64 |
+
|
65 |
+
## 環境構築
|
66 |
+
|
67 |
+
下記のコマンドは、Python3.8 以上の環境で実行する必要があります:
|
68 |
+
|
69 |
+
### Windows/Linux/MacOS などのプラットフォーム共通方法
|
70 |
+
|
71 |
+
以下の方法のいずれかを選択してください。
|
72 |
+
|
73 |
+
#### 1. pip を通じた依存関係のインストール
|
74 |
+
|
75 |
+
1. Pytorch 及びその主要な依存関係のインストール、すでにインストールされている場合はスキップ。参照:https://pytorch.org/get-started/locally/
|
76 |
+
|
77 |
+
```bash
|
78 |
+
pip install torch torchvision torchaudio
|
79 |
+
```
|
80 |
+
|
81 |
+
2. win システム + Nvidia Ampere アーキテクチャ(RTX30xx)の場合、#21 の経験に基づいて pytorch に対応する cuda バージョンを指定
|
82 |
+
|
83 |
+
```bash
|
84 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
85 |
+
```
|
86 |
+
|
87 |
+
3. 自分のグラフィックカードに合わせた依存関係のインストール
|
88 |
+
|
89 |
+
- N カード
|
90 |
+
|
91 |
+
```bash
|
92 |
+
pip install -r requirements.txt
|
93 |
+
```
|
94 |
+
|
95 |
+
- A カード/I カード
|
96 |
+
|
97 |
+
```bash
|
98 |
+
pip install -r requirements-dml.txt
|
99 |
+
```
|
100 |
+
|
101 |
+
- A カード ROCM(Linux)
|
102 |
+
|
103 |
+
```bash
|
104 |
+
pip install -r requirements-amd.txt
|
105 |
+
```
|
106 |
+
|
107 |
+
- I カード IPEX(Linux)
|
108 |
+
|
109 |
+
```bash
|
110 |
+
pip install -r requirements-ipex.txt
|
111 |
+
```
|
112 |
+
|
113 |
+
#### 2. poetry を通じた依存関係のインストール
|
114 |
+
|
115 |
+
Poetry 依存関係管理ツールのインストール、すでにインストールされている場合はスキップ。参照:https://python-poetry.org/docs/#installation
|
116 |
+
|
117 |
+
```bash
|
118 |
+
curl -sSL https://install.python-poetry.org | python3 -
|
119 |
+
```
|
120 |
+
|
121 |
+
poetry を使って依存関係をインストール
|
122 |
+
|
123 |
+
```bash
|
124 |
+
poetry install
|
125 |
+
```
|
126 |
+
|
127 |
+
### MacOS
|
128 |
+
|
129 |
+
`run.sh`を使って依存関係をインストールできます
|
130 |
+
|
131 |
+
```bash
|
132 |
+
sh ./run.sh
|
133 |
+
```
|
134 |
+
|
135 |
+
## その他の事前訓練されたモデルの準備
|
136 |
+
|
137 |
+
RVC は推論とトレーニングのために他のいくつかの事前訓練されたモデルが必要です。
|
138 |
+
|
139 |
+
これらのモデルは私たちの[Hugging Face space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)でダウンロードできます。
|
140 |
+
|
141 |
+
### 1. assets のダウンロード
|
142 |
+
|
143 |
+
以下は、RVC に必要なすべての事前学習モデルとその他のファイルのリストです。`tools`フォルダーにこれらをダウンロードするスクリプトがあります。
|
144 |
+
|
145 |
+
- ./assets/hubert/hubert_base.pt
|
146 |
+
|
147 |
+
- ./assets/pretrained
|
148 |
+
|
149 |
+
- ./assets/uvr5_weights
|
150 |
+
|
151 |
+
v2 バージョンのモデルを使用する場合、追加で以下をダウンロードする必要があります。
|
152 |
+
|
153 |
+
- ./assets/pretrained_v2
|
154 |
+
|
155 |
+
### 2. ffmpeg のインストール
|
156 |
+
|
157 |
+
ffmpeg と ffprobe が既にインストールされている場合はスキップします。
|
158 |
+
|
159 |
+
#### Ubuntu/Debian ユーザー
|
160 |
+
|
161 |
+
```bash
|
162 |
+
sudo apt install ffmpeg
|
163 |
+
```
|
164 |
+
|
165 |
+
#### MacOS ユーザー
|
166 |
+
|
167 |
+
```bash
|
168 |
+
brew install ffmpeg
|
169 |
+
```
|
170 |
+
|
171 |
+
#### Windows ユーザー
|
172 |
+
|
173 |
+
ダウンロード後、ルートディレクトリに配置してください。
|
174 |
+
|
175 |
+
- [ffmpeg.exe をダウンロード](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffmpeg.exe)
|
176 |
+
|
177 |
+
- [ffprobe.exe をダウンロード](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffprobe.exe)
|
178 |
+
|
179 |
+
### 3. RMVPE 人間の声のピッチ抽出アルゴリズムに必要なファイルのダウンロード
|
180 |
+
|
181 |
+
最新の RMVPE 人間の声のピッチ抽出アルゴリズムを使用する場合、ピッチ抽出モデルのパラメータをダウンロードして RVC のルートディレクトリに配置する必要があります。
|
182 |
+
|
183 |
+
- [rmvpe.pt をダウンロード](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt)
|
184 |
+
|
185 |
+
#### dml 環境の RMVPE をダウンロード(オプション、A カード/I カードユーザー)
|
186 |
+
|
187 |
+
- [rmvpe.onnx をダウンロード](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx)
|
188 |
+
|
189 |
+
### 4. AMD グラフィックカード Rocm(オプション、Linux のみ)
|
190 |
+
|
191 |
+
Linux システムで AMD の Rocm 技術をベースに RVC を実行したい場合、[こちら](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html)で必要なドライバーを先にインストールしてください。
|
192 |
+
|
193 |
+
Arch Linux を使用している場合、pacman を使用して必要なドライバーをインストールできます。
|
194 |
+
|
195 |
+
```
|
196 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
197 |
+
```
|
198 |
+
|
199 |
+
一部のモデルのグラフィックカード(例:RX6700XT)の場合、以下のような環境変数を追加で設定する必要があるかもしれません。
|
200 |
+
|
201 |
+
```
|
202 |
+
export ROCM_PATH=/opt/rocm
|
203 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
204 |
+
```
|
205 |
+
|
206 |
+
同時に、現在のユーザーが`render`および`video`ユーザーグループに属していることを確認してください。
|
207 |
+
|
208 |
+
```
|
209 |
+
sudo usermod -aG render $USERNAME
|
210 |
+
sudo usermod -aG video $USERNAME
|
211 |
+
```
|
212 |
+
|
213 |
+
## 使用開始
|
214 |
+
|
215 |
+
### 直接起動
|
216 |
+
|
217 |
+
以下のコマンドで WebUI を起動します
|
218 |
+
```bash
|
219 |
+
python infer-web.py
|
220 |
+
```
|
221 |
+
|
222 |
+
### 統合パッケージの使用
|
223 |
+
|
224 |
+
`RVC-beta.7z`をダウンロードして解凍
|
225 |
+
|
226 |
+
#### Windows ユーザー
|
227 |
+
|
228 |
+
`go-web.bat`をダブルクリック
|
229 |
+
|
230 |
+
#### MacOS ユーザー
|
231 |
+
|
232 |
+
```bash
|
233 |
+
sh ./run.sh
|
234 |
+
```
|
235 |
+
|
236 |
+
### IPEX 技術が必要な I カードユーザー向け(Linux のみ)
|
237 |
+
|
238 |
+
```bash
|
239 |
+
source /opt/intel/oneapi/setvars.sh
|
240 |
+
```
|
241 |
+
|
242 |
+
## 参考プロジェクト
|
243 |
+
|
244 |
+
- [ContentVec](https://github.com/auspicious3000/contentvec/)
|
245 |
+
- [VITS](https://github.com/jaywalnut310/vits)
|
246 |
+
- [HIFIGAN](https://github.com/jik876/hifi-gan)
|
247 |
+
- [Gradio](https://github.com/gradio-app/gradio)
|
248 |
+
- [FFmpeg](https://github.com/FFmpeg/FFmpeg)
|
249 |
+
- [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
250 |
+
- [audio-slicer](https://github.com/openvpi/audio-slicer)
|
251 |
+
- [Vocal pitch extraction:RMVPE](https://github.com/Dream-High/RMVPE)
|
252 |
+
- 事前訓練されたモデルは[yxlllc](https://github.com/yxlllc/RMVPE)と[RVC-Boss](https://github.com/RVC-Boss)によって訓練され、テストされました。
|
253 |
+
|
254 |
+
## すべての貢献者の努力に感謝します
|
255 |
+
|
256 |
+
<a href="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors" target="_blank">
|
257 |
+
<img src="https://contrib.rocks/image?repo=RVC-Project/Retrieval-based-Voice-Conversion-WebUI" />
|
258 |
+
</a>
|
docs/jp/faiss_tips_ja.md
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
faiss tuning TIPS
|
2 |
+
==================
|
3 |
+
# about faiss
|
4 |
+
faissはfacebook researchの開発する、密なベクトルに対する近傍探索をまとめたライブラリで、多くの近似近傍探索の手法を効率的に実装しています。
|
5 |
+
近似近傍探索はある程度精度を犠牲にしながら高速に類似するベクトルを探します。
|
6 |
+
|
7 |
+
## faiss in RVC
|
8 |
+
RVCではHuBERTで変換した特徴量のEmbeddingに対し、学習データから生成されたEmbeddingと類似するものを検索し、混ぜることでより元の音声に近い変換を実現しています。ただ、この検索は愚直に行うと時間がかかるため、近似近傍探索を用いることで高速な変換を実現しています。
|
9 |
+
|
10 |
+
# 実装のoverview
|
11 |
+
モデルが配置されている '/logs/your-experiment/3_feature256'には各音声データからHuBERTで抽出された特徴量が配置されています。
|
12 |
+
ここからnpyファイルをファイル名でソートした順番で読み込み、ベクトルを連結してbig_npyを作成しfaissを学習させます。(このベクトルのshapeは[N, 256]です。)
|
13 |
+
|
14 |
+
本Tipsではまずこれらのパラメータの意味を解説します。
|
15 |
+
|
16 |
+
# 手法の解説
|
17 |
+
## index factory
|
18 |
+
index factoryは複数の近似近傍探索の手法を繋げるパイプラインをstringで表記するfaiss独自の記法です。
|
19 |
+
これにより、index factoryの文字列を変更するだけで様々な近似近傍探索の手法を試せます。
|
20 |
+
RVCでは以下のように使われています。
|
21 |
+
|
22 |
+
```python
|
23 |
+
index = faiss.index_factory(256, "IVF%s,Flat" % n_ivf)
|
24 |
+
```
|
25 |
+
index_factoryの引数のうち、1つ目はベクトルの次元数、2つ目はindex factoryの文字列で、3つ目には用いる距離を指定することができます。
|
26 |
+
|
27 |
+
より詳細な記法については
|
28 |
+
https://github.com/facebookresearch/faiss/wiki/The-index-factory
|
29 |
+
|
30 |
+
## 距離指標
|
31 |
+
embeddingの類似度として用いられる代表的な指標として以下の二つがあります。
|
32 |
+
|
33 |
+
- ユークリッド距離(METRIC_L2)
|
34 |
+
- 内積(METRIC_INNER_PRODUCT)
|
35 |
+
|
36 |
+
ユークリッド距離では各次元において二乗の差をとり、全次元の差を足してから平方根をとります。これは日常的に用いる2次元、3次元での距離と同じです。
|
37 |
+
内積はこのままでは類似度の指標として用いず、一般的にはL2ノルムで正規化してから内積をとるコサイン類似度を用います。
|
38 |
+
|
39 |
+
どちらがよいかは場合によりますが、word2vec等で得られるembeddingやArcFace等で学習した類似画像検索のモデルではコサイン類似度が用いられることが多いです。ベクトルXに対してl2正規化をnumpyで行う場合は、0 divisionを避けるために十分に小さな値をepsとして以下のコードで可能です。
|
40 |
+
|
41 |
+
```python
|
42 |
+
X_normed = X / np.maximum(eps, np.linalg.norm(X, ord=2, axis=-1, keepdims=True))
|
43 |
+
```
|
44 |
+
|
45 |
+
また、index factoryには第3引数に渡す値を選ぶことで計算に用いる距離指標を変更できます。
|
46 |
+
|
47 |
+
```python
|
48 |
+
index = faiss.index_factory(dimention, text, faiss.METRIC_INNER_PRODUCT)
|
49 |
+
```
|
50 |
+
|
51 |
+
## IVF
|
52 |
+
IVF(Inverted file indexes)は全文検索における転置インデックスと似たようなアルゴリズムです。
|
53 |
+
学習時には検索対象に対してkmeansでクラスタリングを行い、クラスタ中心を用いてボロノイ分割を行います。各データ点には一つずつクラスタが割り当てられるので、クラスタからデータ点を逆引きする辞書を作成します。
|
54 |
+
|
55 |
+
例えば以下のようにクラスタが割り当てられた場合
|
56 |
+
|index|クラスタ|
|
57 |
+
|-----|-------|
|
58 |
+
|1|A|
|
59 |
+
|2|B|
|
60 |
+
|3|A|
|
61 |
+
|4|C|
|
62 |
+
|5|B|
|
63 |
+
|
64 |
+
作成される転置インデックスは以下のようになります。
|
65 |
+
|
66 |
+
|クラスタ|index|
|
67 |
+
|-------|-----|
|
68 |
+
|A|1, 3|
|
69 |
+
|B|2, 5|
|
70 |
+
|C|4|
|
71 |
+
|
72 |
+
検索時にはまずクラスタからn_probe個のクラスタを検索し、次にそれぞれのクラスタに属するデータ点について距離を計算します。
|
73 |
+
|
74 |
+
# 推奨されるパラメータ
|
75 |
+
indexの選び方については公式にガイドラインがあるので、それに準じて説明します。
|
76 |
+
https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index
|
77 |
+
|
78 |
+
1M以下のデータセットにおいては4bit-PQが2023年4月時点ではfaissで利用できる最も効率的な手法です。
|
79 |
+
これをIVFと組み合わせ、4bit-PQで候補を絞り、最後に正確な指標で距離を再計算するには以下のindex factoryを用いることで記載できます。
|
80 |
+
|
81 |
+
```python
|
82 |
+
index = faiss.index_factory(256, "IVF1024,PQ128x4fs,RFlat")
|
83 |
+
```
|
84 |
+
|
85 |
+
## IVFの推奨パラメータ
|
86 |
+
IVFの数が多すぎる場合、たとえばデータ数の数だけIVFによる粗量子化を行うと、これは愚直な全探索と同じになり効率が悪いです。
|
87 |
+
1M以下の場合ではIVFの値はデータ点の数Nに対して4*sqrt(N) ~ 16*sqrt(N)に推奨しています。
|
88 |
+
|
89 |
+
n_probeはn_probeの数に比例して計算時間が増えるので、精度と相談して適切に選んでください。個人的にはRVCにおいてそこまで精度は必要ないと思うのでn_probe = 1で良いと思います。
|
90 |
+
|
91 |
+
## FastScan
|
92 |
+
FastScanは直積量子化で大まかに距離を近似するのを、レジスタ内で行うことにより高速に行うようにした手法です。
|
93 |
+
直積量子化は学習時にd次元ごと(通常はd=2)に独立してクラスタリングを行い、クラスタ同士の距離を事前計算してlookup tableを作成します。予測時はlookup tableを見ることで各次元の距離をO(1)で計算できます。
|
94 |
+
そのため、PQの次に指定する数字は通常ベクトルの半分の次元を指定します。
|
95 |
+
|
96 |
+
FastScanに関するより詳細な説明は公式のドキュメントを参照してください。
|
97 |
+
https://github.com/facebookresearch/faiss/wiki/Fast-accumulation-of-PQ-and-AQ-codes-(FastScan)
|
98 |
+
|
99 |
+
## RFlat
|
100 |
+
RFlatはFastScanで計算した大まかな距離を、index factoryの第三引数で指定した正確な距離で再計算する指示です。
|
101 |
+
k個の近傍を取得する際は、k*k_factor個の点について再計算が行われます。
|
docs/jp/faq_ja.md
ADDED
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Q1: ffmpeg error/utf8 error
|
2 |
+
|
3 |
+
大体の場合、ffmpeg の問題ではなく、音声パスの問題です。<br>
|
4 |
+
ffmpeg は空白や()などの特殊文字を含むパスを読み込む際に ffmpeg error が発生する可能性があります。トレーニングセットの音声が中国語のパスを含む場合、filelist.txt に書き込む際に utf8 error が発生する可能性があります。<br>
|
5 |
+
|
6 |
+
## Q2: ワンクリックトレーニングが終わってもインデックスがない
|
7 |
+
|
8 |
+
"Training is done. The program is closed."と表示された場合、モデルトレーニングは成功しています。その直後のエラーは誤りです。<br>
|
9 |
+
|
10 |
+
ワンクリックトレーニングが終了しても added で始まるインデックスファイルがない場合、トレーニングセットが大きすぎてインデックス追加のステップが停止している可能性があります。バッチ処理 add インデックスでメモリの要求が高すぎる問題を解決しました。一時的に「トレーニングインデックス」ボタンをもう一度クリックしてみてください。<br>
|
11 |
+
|
12 |
+
## Q3: トレーニングが終了してもトレーニングセットの音色が見えない
|
13 |
+
|
14 |
+
音色をリフレッシュしてもう一度確認してください。それでも見えない場合は、トレーニングにエラーがなかったか、コンソールと WebUI のスクリーンショット、logs/実験名の下のログを開発者に送って確認してみてください。<br>
|
15 |
+
|
16 |
+
## Q4: モデルをどのように共有するか
|
17 |
+
|
18 |
+
rvc_root/logs/実験名の下に保存されている pth は、推論に使用するために共有するためのものではなく、実験の状態を保存して再現およびトレーニングを続けるためのものです。共有するためのモデルは、weights フォルダの下にある 60MB 以上の pth ファイルです。<br>
|
19 |
+
今後、weights/exp_name.pth と logs/exp_name/added_xxx.index を組み合わせて weights/exp_name.zip にパッケージ化し、インデックスの記入ステップを省略します。その場合、zip ファイルを共有し、pth ファイルは共有しないでください。別のマシンでトレーニングを続ける場合を除きます。<br>
|
20 |
+
logs フォルダの数百 MB の pth ファイルを weights フォルダにコピー/共有して推論に強制的に使用すると、f0、tgt_sr などのさまざまなキーが存在しないというエラーが発生する可能性があります。ckpt タブの一番下で、音高、目標オーディオサンプリングレートを手動または自動(ローカルの logs に関連情報が見つかる場合は自動的に)で選択してから、ckpt の小型モデルを抽出する必要があります(入力パスに G で始まるものを記入)。抽出が完了すると、weights フォルダに 60MB 以上の pth ファイルが表示され、音色をリフレッシュした後に使用できます。<br>
|
21 |
+
|
22 |
+
## Q5: Connection Error
|
23 |
+
|
24 |
+
コンソール(黒いウィンドウ)を閉じた可能性があります。<br>
|
25 |
+
|
26 |
+
## Q6: WebUI が Expecting value: line 1 column 1 (char 0)と表示する
|
27 |
+
|
28 |
+
システムのローカルネットワークプロキシ/グローバルプロキシを閉じてください。<br>
|
29 |
+
|
30 |
+
これはクライアントのプロキシだけでなく、サーバー側のプロキシも含まれます(例えば autodl で http_proxy と https_proxy を設定して学術的な加速を行っている場合、使用する際には unset でオフにする必要があります)。<br>
|
31 |
+
|
32 |
+
## Q7: WebUI を使わずにコマンドでトレーニングや推論を行うには
|
33 |
+
|
34 |
+
トレーニングスクリプト:<br>
|
35 |
+
まず WebUI を実行し、メッセージウィンドウにデータセット処理とトレーニング用のコマンドラインが表示されます。<br>
|
36 |
+
|
37 |
+
推論スクリプト:<br>
|
38 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py<br>
|
39 |
+
|
40 |
+
例:<br>
|
41 |
+
|
42 |
+
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" harvest "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True<br>
|
43 |
+
|
44 |
+
f0up_key=sys.argv[1]<br>
|
45 |
+
input_path=sys.argv[2]<br>
|
46 |
+
index_path=sys.argv[3]<br>
|
47 |
+
f0method=sys.argv[4]#harvest or pm<br>
|
48 |
+
opt_path=sys.argv[5]<br>
|
49 |
+
model_path=sys.argv[6]<br>
|
50 |
+
index_rate=float(sys.argv[7])<br>
|
51 |
+
device=sys.argv[8]<br>
|
52 |
+
is_half=bool(sys.argv[9])<br>
|
53 |
+
|
54 |
+
## Q8: Cuda error/Cuda out of memory
|
55 |
+
|
56 |
+
まれに cuda の設定問題やデバイスがサポートされていない可能性がありますが、大半はメモリ不足(out of memory)が原因です。<br>
|
57 |
+
|
58 |
+
トレーニングの場合は batch size を小さくします(1 にしても足りない場合はグラフィックカードを変更するしかありません)。推論の場合は、config.py の末尾にある x_pad、x_query、x_center、x_max を適宜小さくします。4GB 以下のメモリ(例えば 1060(3G)や各種 2GB のグラフィックカード)は諦めることをお勧めしますが、4GB のメモリのグラフィックカードはまだ救いがあります。<br>
|
59 |
+
|
60 |
+
## Q9: total_epoch はどのくらいに設定するのが良いですか
|
61 |
+
|
62 |
+
トレーニングセットの音質が悪く、ノイズが多い場合は、20〜30 で十分です。高すぎると、ベースモデルの音質が低音質のトレーニングセットを高めることができません。<br>
|
63 |
+
トレーニングセットの音質が高く、ノイズが少なく、長い場合は、高く設定できます。200 は問題ありません(トレーニング速度が速いので、高音質のトレーニングセットを準備できる条件がある場合、グラフィックカードも条件が良いはずなので、少しトレーニング時間が長くなることを気にすることはありません)。<br>
|
64 |
+
|
65 |
+
## Q10: トレーニングセットはどれくらいの長さが必要ですか
|
66 |
+
|
67 |
+
10 分から 50 分を推奨します。
|
68 |
+
音質が良く、バックグラウンドノイズが低い場合、個人的な特徴のある音色であれば、多ければ多いほど良いです。
|
69 |
+
高品質のトレーニングセット(精巧に準備された + 特徴的な音色)であれば、5 分から 10 分でも大丈夫です。リポジトリの作者もよくこの方法で遊びます。
|
70 |
+
1 分から 2 分のデータでトレーニングに成功した人もいますが、その成功体験は他人には再現できないため、あまり参考になりません。トレーニングセットの音色が非常に特徴的である必要があります(例:高い周波数の透明な声や少女の声など)、そして音質が良い必要があります。
|
71 |
+
1 分未満のデータでトレーニングを試みた(成功した)ケースはまだ見たことがありません。このような試みはお勧めしません。
|
72 |
+
|
73 |
+
## Q11: index rate は何に使うもので、どのように調整するのか(啓蒙)
|
74 |
+
|
75 |
+
もしベースモデルや推論ソースの音質がトレーニングセットよりも高い場合、推論結果の音質を向上させることができますが、音色がベースモデル/推論ソースの音色に近づくことがあります。これを「音色漏れ」と言います。
|
76 |
+
index rate は音色漏れの問題を減少させたり解決するために使用されます。1 に設定すると、理論的には推論ソースの音色漏れの問題は存在しませんが、音質はトレーニングセットに近づきます。トレーニングセットの音質が推論ソースよりも低い場合、index rate を高くすると音質が低下する可能性があります。0 に設定すると、検索ミックスを利用してトレーニングセットの音色を保護する効果はありません。
|
77 |
+
トレーニングセットが高品質で長い場合、total_epoch を高く設定することができ、この場合、モデル自体は推論ソースやベースモデルの音色をあまり参照しないため、「音色漏れ」の問題はほとんど発生しません。この時、index rate は重要ではなく、インデックスファイルを作成したり共有したりする必要もありません。
|
78 |
+
|
79 |
+
## Q11: 推論時に GPU をどのように選択するか
|
80 |
+
|
81 |
+
config.py ファイルの device cuda:の後にカード番号を選択します。
|
82 |
+
カード番号とグラフィックカードのマッピング関係は、トレーニングタブのグラフィックカード情報欄で確認できます。
|
83 |
+
|
84 |
+
## Q12: トレーニング中に保存された pth ファイルをどのように推論するか
|
85 |
+
|
86 |
+
ckpt タブの一番下で小型モデルを抽出します。
|
87 |
+
|
88 |
+
## Q13: トレーニングをどのように中断し、続行するか
|
89 |
+
|
90 |
+
現在の段階では、WebUI コンソールを閉じて go-web.bat をダブルクリックしてプログラムを再起動するしかありません。ウェブページのパラメータもリフレッシュして再度入力する必要があります。
|
91 |
+
トレーニングを続けるには:同じウェブページのパラメータでトレーニングモデルをクリックすると、前回のチェックポイントからトレーニングを続けます。
|
92 |
+
|
93 |
+
## Q14: トレーニング中にファイルページ/メモリエラーが発生した場合の対処法
|
94 |
+
|
95 |
+
プロセスが多すぎてメモリがオーバーフローしました。以下の方法で解決できるかもしれません。
|
96 |
+
|
97 |
+
1. 「音高抽出とデータ処理に使用する CPU プロセス数」を適宜下げます。
|
98 |
+
2. トレーニングセットのオーディオを手動でカットして、あまり長くならないようにします。
|
99 |
+
|
100 |
+
## Q15: 途中でデータを追加してトレーニングする方法
|
101 |
+
|
102 |
+
1. 全データに新しい実験名を作成します。
|
103 |
+
2. 前回の最新の G と D ファイル(あるいはどの中間 ckpt を基にトレーニングしたい場合は、その中間のものをコピーすることもできます)を新しい実験名にコピーします。
|
104 |
+
3. 新しい実験名でワンクリックトレーニングを開始すると、前回の最新の進捗からトレーニングを続けます。
|
105 |
+
|
106 |
+
## Q16: llvmlite.dll に関するエラー
|
107 |
+
|
108 |
+
```bash
|
109 |
+
OSError: Could not load shared object file: llvmlite.dll
|
110 |
+
|
111 |
+
FileNotFoundError: Could not find module lib\site-packages\llvmlite\binding\llvmlite.dll (or one of its dependencies). Try using the full path with constructor syntax.
|
112 |
+
```
|
113 |
+
|
114 |
+
Windows プラットフォームではこのエラーが発生しますが、https://aka.ms/vs/17/release/vc_redist.x64.exeをインストールしてWebUIを再起動すれば解決します。
|
115 |
+
|
116 |
+
## Q17: RuntimeError: テンソルの拡張サイズ(17280)は、非シングルトン次元 1 での既存サイズ(0)と一致する必要があります。 ターゲットサイズ:[1, 17280]。 テンソルサイズ:[0]
|
117 |
+
|
118 |
+
wavs16k フォルダーの下で、他のファイルよりも明らかに小さいいくつかのオーディオファイルを見つけて削除し、トレーニングモデルをクリックすればエラーは発生しませんが、ワンクリックプロセスが中断されたため、モデルのトレーニングが完了したらインデックスのトレーニングをクリックする必要があります。
|
119 |
+
|
120 |
+
## Q18: RuntimeError: テンソル a のサイズ(24)は、非シングルトン次元 2 でテンソル b(16)のサイズと一致する必要があります
|
121 |
+
|
122 |
+
トレーニング中にサンプリングレートを変更してはいけません。変更する必要がある場合は、実験名を変更して最初からトレーニングする必要があります。もちろん、前回抽出した音高と特徴(0/1/2/2b フォルダ)をコピーしてトレーニングプロセスを加速することもできます。
|
docs/jp/training_tips_ja.md
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
RVCの訓練における説明、およびTIPS
|
2 |
+
===============================
|
3 |
+
本TIPSではどのようにデータの訓練が行われているかを説明します。
|
4 |
+
|
5 |
+
# 訓練の流れ
|
6 |
+
GUIの訓練タブのstepに沿って説明します。
|
7 |
+
|
8 |
+
## step1
|
9 |
+
実験名の設定を行います。
|
10 |
+
|
11 |
+
また、モデルに音高ガイド(ピッチ)を考慮させるかもここで設定できます。考慮させない場合はモデルは軽量になりますが、歌唱には向かなくなります。
|
12 |
+
|
13 |
+
各実験のデータは`/logs/実験名/`に配置されます。
|
14 |
+
|
15 |
+
## step2a
|
16 |
+
音声の読み込みと前処理を行います。
|
17 |
+
|
18 |
+
### load audio
|
19 |
+
音声のあるフォルダを指定すると、そのフォルダ内にある音声ファイルを自動で読み込みます。
|
20 |
+
例えば`C:Users\hoge\voices`を指定した場合、`C:Users\hoge\voices\voice.mp3`は読み込まれますが、`C:Users\hoge\voices\dir\voice.mp3`は読み込まれません。
|
21 |
+
|
22 |
+
音声の読み込みには内部でffmpegを利用しているので、ffmpegで対応している拡張子であれば自動的に読み込まれます。
|
23 |
+
ffmpegでint16に変換した後、float32に変換し、-1 ~ 1の間に正規化されます。
|
24 |
+
|
25 |
+
### denoising
|
26 |
+
音声についてscipyのfiltfiltによる平滑化を行います。
|
27 |
+
|
28 |
+
### 音声の分割
|
29 |
+
入力した音声はまず、一定期間(max_sil_kept=5秒?)より長く無音が続く部分を検知して音声を分割します。無音で音声を分割した後は、0.3秒のoverlapを含む4秒ごとに音声を分割します。4秒以内に区切られた音声は、音量の正規化を行った後wavファイルを`/logs/実験名/0_gt_wavs`に、そこから16kのサンプリングレートに変換して`/logs/実験名/1_16k_wavs`にwavファイルで保存します。
|
30 |
+
|
31 |
+
## step2b
|
32 |
+
### ピッチの抽出
|
33 |
+
wavファイルからピッチ(音の高低)の情報を抽出します。parselmouthやpyworldに内蔵されている手法でピッチ情報(=f0)を抽出し、`/logs/実験名/2a_f0`に保存します。その後、ピッチ情報を対数で変換して1~255の整数に変換し、`/logs/実験名/2b-f0nsf`に保存します。
|
34 |
+
|
35 |
+
### feature_printの抽出
|
36 |
+
HuBERTを用いてwavファイルを事前にembeddingに変換します。`/logs/実験名/1_16k_wavs`に保存したwavファイルを読み込み、HuBERTでwavファイルを256次元の特徴量に変換し、npy形式で`/logs/実験名/3_feature256`に保存します。
|
37 |
+
|
38 |
+
## step3
|
39 |
+
モデルのトレーニングを行います。
|
40 |
+
### 初心者向け用語解説
|
41 |
+
深層学習ではデータセットを分割し、少しずつ学習を進めていきます。一回のモデルの更新(step)では、batch_size個のデータを取り出し予測と誤差の修正を行います。これをデータセットに対して一通り行うと一epochと数えます。
|
42 |
+
|
43 |
+
そのため、学習時間は 1step当たりの学習時間 x (データセット内のデータ数 ÷ バッチサイズ) x epoch数 かかります。一般にバッチサイズを大きくするほど学習は安定し、(1step当たりの学習時間÷バッチサイズ)は小さくなりますが、その分GPUのメモリを多く使用します。GPUのRAMはnvidia-smiコマンド等で確認できます。実行環境のマシンに合わせてバッチサイズをできるだけ大きくするとより短時間で学習が可能です。
|
44 |
+
|
45 |
+
### pretrained modelの指定
|
46 |
+
RVCではモデルの訓練を0からではなく、事前学習済みの重みから開始するため、少ないデータセットで学習を行えます。
|
47 |
+
|
48 |
+
デフォルトでは
|
49 |
+
|
50 |
+
- 音高ガイドを考慮する場合、`RVCのある場所/pretrained/f0G40k.pth`と`RVCのある場所/pretrained/f0D40k.pth`を読み込みます。
|
51 |
+
- 音高ガイドを考慮しない場合、`RVCのある場所/pretrained/G40k.pth`と`RVCのある場所/pretrained/D40k.pth`を読み込みます。
|
52 |
+
|
53 |
+
学習時はsave_every_epochごとにモデルのパラメータが`logs/実験名/G_{}.pth`と`logs/実験名/D_{}.pth`に保存されますが、このパスを指定することで学習を再開したり、もしくは違う実験で学習したモデルの重みから学習を開始できます。
|
54 |
+
|
55 |
+
### indexの学習
|
56 |
+
RVCでは学習時に使われたHuBERTの特徴量を保存し、推論時は学習時の特徴量から近い特徴量を探してきて推論を行います。この検索を高速に行うために事前にindexの学習を行います。
|
57 |
+
indexの学習には近似近傍探索ライブラリのfaissを用います。`/logs/実験名/3_feature256`の特徴量を読み込み、それを用いて学習したindexを`/logs/実験名/add_XXX.index`として保存します。
|
58 |
+
(20230428updateよりtotal_fea.npyはindexから読み込むので不要になりました。)
|
59 |
+
|
60 |
+
### ボタンの説明
|
61 |
+
- モデルのトレーニング: step2bまでを実行した後、このボタンを押すとモデルの学習を行います。
|
62 |
+
- 特徴インデックスのトレーニング: モデルのトレーニング後、indexの学習を行います。
|
63 |
+
- ワンクリックトレーニング: step2bまでとモデルのトレーニング、特徴インデックスのトレーニングを一括で行います。
|
64 |
+
|
docs/kr/Changelog_KO.md
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### 2023년 10월 6일 업데이트
|
2 |
+
|
3 |
+
실시간 음성 변환을 위한 인터페이스인 go-realtime-gui.bat/gui_v1.py를 제작했습니다(사실 이는 이미 존재했었습니다). 이번 업데이트는 주로 실시간 음성 변환 성능을 최적화하는 데 중점을 두었습니다. 0813 버전과 비교하여:
|
4 |
+
|
5 |
+
- 1. 인터페이스 조작 최적화: 매개변수 핫 업데이트(매개변수 조정 시 중단 후 재시작 필요 없음), 모델 지연 로딩(이미 로드된 모델은 재로드 필요 없음), 음량 인자 매개변수 추가(음량을 입력 오디오에 가깝게 조정)
|
6 |
+
- 2. 내장된 노이즈 감소 효과 및 속도 최적화
|
7 |
+
- 3. 추론 속도 크게 향상
|
8 |
+
|
9 |
+
입력 및 출력 장치는 동일한 유형을 선택해야 합니다. 예를 들어, 모두 MME 유형을 선택해야 합니다.
|
10 |
+
|
11 |
+
1006 버전의 전체 업데이트는 다음과 같습니다:
|
12 |
+
|
13 |
+
- 1. rmvpe 음성 피치 추출 알고리즘의 효과를 계속해서 향상, 특히 남성 저음역에 대한 개선이 큼
|
14 |
+
- 2. 추론 인터페이스 레이아웃 최적화
|
15 |
+
|
16 |
+
### 2023년 08월 13일 업데이트
|
17 |
+
|
18 |
+
1-정기적인 버그 수정
|
19 |
+
|
20 |
+
- 최소 총 에포크 수를 1로 변경하고, 최소 총 에포크 수를 2로 변경합니다.
|
21 |
+
- 사전 훈련(pre-train) 모델을 사용하지 않는 훈련 오류 수정
|
22 |
+
- 반주 보컬 분리 후 그래픽 메모리 지우기
|
23 |
+
- 페이즈 저장 경로 절대 경로를 상대 경로로 변경
|
24 |
+
- 공백이 포함된 경로 지원(훈련 세트 경로와 실험 이름 모두 지원되며 더 이상 오류가 보고되지 않음)
|
25 |
+
- 파일 목록에서 필수 utf8 인코딩 취소
|
26 |
+
- 실시간 음성 변경 중 faiss 검색으로 인한 CPU 소모 문제 해결
|
27 |
+
|
28 |
+
2-키 업데이트
|
29 |
+
|
30 |
+
- 현재 가장 강력한 오픈 소스 보컬 피치 추출 모델 RMVPE를 훈련하고, 이를 RVC 훈련, 오프라인/실시간 추론에 사용하며, PyTorch/Onx/DirectML을 지원합니다.
|
31 |
+
- 파이토치\_DML을 통한 AMD 및 인텔 그래픽 카드 지원
|
32 |
+
(1) 실시간 음성 변화 (2) 추론 (3) 보컬 반주 분리 (4) 현재 지원되지 않는 훈련은 CPU 훈련으로 전환, Onnx_Dml을 통한 gpu의 RMVPE 추론 지원
|
33 |
+
|
34 |
+
### 2023년 6월 18일 업데이트
|
35 |
+
|
36 |
+
- v2 버전에서 새로운 32k와 48k 사전 학습 모델을 추가.
|
37 |
+
- non-f0 모델들의 추론 오류 수정.
|
38 |
+
- 학습 세트가 1시간을 넘어가는 경우, 인덱스 생성 단계에서 minibatch-kmeans을 사용해, 학습속도 가속화.
|
39 |
+
- [huggingface](https://huggingface.co/spaces/lj1995/vocal2guitar)에서 vocal2guitar 제공.
|
40 |
+
- 데이터 처리 단계에서 이상 값 자동으로 제거.
|
41 |
+
- ONNX로 내보내는(export) 옵션 탭 추가.
|
42 |
+
|
43 |
+
업데이트에 적용되지 않았지만 시도한 것들 :
|
44 |
+
|
45 |
+
- ~~시계열 차원을 추가하여 특징 검색을 진행했지만, 유의미한 효과는 없었습니다.~~
|
46 |
+
- ~~PCA 차원 축소를 추가하여 특징 검색을 진행했지만, 유의미한 효과는 없었습니다.~~
|
47 |
+
- ~~ONNX 추론을 지원하는 것에 실패했습니다. nsf 생성시, Pytorch가 필요하기 때문입니다.~~
|
48 |
+
- ~~훈련 중에 입력에 대한 음고, 성별, 이퀄라이저, 노이즈 등 무작위로 강화하는 것에, 유의미한 효과는 없었습니다.~~
|
49 |
+
|
50 |
+
추후 업데이트 목록:
|
51 |
+
|
52 |
+
- ~~Vocos-RVC (소형 보코더) 통합 예정.~~
|
53 |
+
- ~~학습 단계에 음고 인식을 위한 Crepe 지원 예정.~~
|
54 |
+
- ~~Crepe의 정밀도를 REC-config와 동기화하여 지원 예정.~~
|
55 |
+
- FO 에디터 지원 예정.
|
56 |
+
|
57 |
+
### 2023년 5월 28일 업데이트
|
58 |
+
|
59 |
+
- v2 jupyter notebook 추가, 한국어 업데이트 로그 추가, 의존성 모듈 일부 수정.
|
60 |
+
- 무성음 및 숨소리 보호 모드 추가.
|
61 |
+
- crepe-full pitch 감지 지원.
|
62 |
+
- UVR5 보컬 분리: 디버브 및 디-에코 모델 지원.
|
63 |
+
- index 이름에 experiment 이름과 버전 추가.
|
64 |
+
- 배치 음성 변환 처리 및 UVR5 보컬 분리 시, 사용자가 수동으로 출력 오디오의 내보내기(export) 형식을 선택할 수 있도록 지원.
|
65 |
+
- 32k 훈련 모델 지원 종료.
|
66 |
+
|
67 |
+
### 2023년 5월 13일 업데이트
|
68 |
+
|
69 |
+
- 원클릭 패키지의 이전 버전 런타임 내, 불필요한 코드(lib.infer_pack 및 uvr5_pack) 제거.
|
70 |
+
- 훈련 세트 전처리의 유사 다중 처리 버그 수정.
|
71 |
+
- Harvest 피치 인식 알고리즘에 대한 중위수 필터링 반경 조정 추가.
|
72 |
+
- 오디오 내보낼 때, 후처리 리샘플링 지원.
|
73 |
+
- 훈련에 대한 다중 처리 "n_cpu" 설정이 "f0 추출"에서 "데이터 전처리 및 f0 추출"로 변경.
|
74 |
+
- logs 폴더 하의 인덱스 경로를 자동으로 감지 및 드롭다운 목록 기능 제공.
|
75 |
+
- 탭 페이지에 "자주 묻는 질문과 답변" 추가. (github RVC wiki 참조 가능)
|
76 |
+
- 동일한 입력 오디오 경로를 사용할 때 추론, Harvest 피치를 캐시.
|
77 |
+
(주의: Harvest 피치 추출을 사용하면 전체 파이프라인은 길고 반복적인 피치 추출 과정을 거치게됩니다. 캐싱을 하지 않는다면, 첫 inference 이후의 단계에서 timbre, 인덱스, 피치 중위수 필터링 반경 설정 등 대기시간이 엄청나게 길어집니다!)
|
78 |
+
|
79 |
+
### 2023년 5월 14일 업데이트
|
80 |
+
|
81 |
+
- 입력의 볼륨 캡슐을 사용하여 출력의 볼륨 캡슐을 혼합하거나 대체. (입력이 무음이거나 출력의 노이즈 문제를 최소화 할 수 있습니다. 입력 오디오의 배경 노이즈(소음)가 큰 경우 해당 기능을 사용하지 않는 것이 좋습니다. 기본적으로 비활성화 되어있는 옵션입니다. (1: 비활성화 상태))
|
82 |
+
- 추출된 소형 모델을 지정된 빈도로 저장하는 기능을 지원. (다양한 에폭 하에서의 성능을 보려고 하지만 모든 대형 체크포인트를 저장하고 매번 ckpt 처리를 통해 소형 모델을 수동으로 추출하고 싶지 않은 경우 이 기능은 매우 유용합니다)
|
83 |
+
- 환경 변수를 설정하여 서버의 전역 프록시로 인한 "연결 오류" 문제 해결.
|
84 |
+
- 사전 훈련된 v2 모델 지원. (현재 40k 버전만 테스트를 위해 공개적으로 사용 가능하며, 다른 두 개의 샘플링 비율은 아직 완전히 훈련되지 않아 보류되었습니다.)
|
85 |
+
- 추론 전, 1을 초과하는 과도한 볼륨 제한.
|
86 |
+
- 데이터 전처리 매개변수 미세 조정.
|
87 |
+
|
88 |
+
### 2023년 4월 9일 업데이트
|
89 |
+
|
90 |
+
- GPU 이용률 향상을 위해 훈련 파라미터 수정: A100은 25%에서 약 90%로 증가, V100: 50%에서 약 90%로 증가, 2060S: 60%에서 약 85%로 증가, P40: 25%에서 약 95%로 증가.
|
91 |
+
훈련 속도가 크게 향상.
|
92 |
+
- 매개변수 기준 변경: total batch_size는 GPU당 batch_size를 의미.
|
93 |
+
- total_epoch 변경: 최대 한도가 100에서 1000으로 증가. 기본값이 10에서 20으로 증가.
|
94 |
+
- ckpt 추출이 피치를 잘못 인식하여 비정상적인 추론을 유발하는 문제 수정.
|
95 |
+
- 분산 훈련 과정에서 각 랭크마다 ckpt를 저장하는 문제 수정.
|
96 |
+
- 특성 추출 과정에 나노 특성 필터링 적용.
|
97 |
+
- 무음 입력/출력이 랜덤하게 소음을 생성하는 문제 수정. (이전 모델은 새 데이터셋으로 다시 훈련해야 합니다)
|
98 |
+
|
99 |
+
### 2023년 4월 16일 업데이트
|
100 |
+
|
101 |
+
- 로컬 실시간 음성 변경 미니-GUI 추가, go-realtime-gui.bat를 더블 클릭하여 시작.
|
102 |
+
- 훈련 및 추론 중 50Hz 이하의 주파수 대역에 대해 필터링 적용.
|
103 |
+
- 훈련 및 추론의 pyworld 최소 피치 추출을 기본 80에서 50으로 낮춤. 이로 인해, 50-80Hz 사이의 남성 저음이 무음화되지 않습니다.
|
104 |
+
- 시스템 지역에 따른 WebUI 언어 변경 지원. (현재 en_US, ja_JP, zh_CN, zh_HK, zh_SG, zh_TW를 지원하며, 지원되지 않는 경우 기본값은 en_US)
|
105 |
+
- 일부 GPU의 인식 수정. (예: V100-16G 인식 실패, P4 인식 실패)
|
106 |
+
|
107 |
+
### 2023년 4월 28일 업데이트
|
108 |
+
|
109 |
+
- Faiss 인덱스 설정 업그레이드로 속도가 더 빨라지고 품질이 향상.
|
110 |
+
- total_npy에 대한 의존성 제거. 추후의 모델 공유는 total_npy 입력을 필요로 하지 않습니다.
|
111 |
+
- 16 시리즈 GPU에 대한 제한 해제, 4GB VRAM GPU에 대한 4GB 추론 설정 제공.
|
112 |
+
- 일부 오디오 형식에 대한 UVR5 보컬 동반 분리에서의 버그 수정.
|
113 |
+
- 실시간 음성 변경 미니-GUI는 이제 non-40k 및 non-lazy 피치 모델을 지원합니다.
|
114 |
+
|
115 |
+
### 추후 계획
|
116 |
+
|
117 |
+
Features:
|
118 |
+
|
119 |
+
- 다중 사용자 훈련 탭 지원.(최대 4명)
|
120 |
+
|
121 |
+
Base model:
|
122 |
+
|
123 |
+
- 훈련 데이터셋에 숨소리 wav 파일을 추가하여, 보컬의 호흡이 노이즈로 변환되는 문제 수정.
|
124 |
+
- 보컬 훈련 세트의 기본 모델을 추가하기 위한 작업을 진행중이며, 이는 향후에 발표될 예정.
|
docs/kr/README.ko.han.md
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
<h1>Retrieval-based-Voice-Conversion-WebUI</h1>
|
4 |
+
VITS基盤의 簡單하고使用하기 쉬운音聲變換틀<br><br>
|
5 |
+
|
6 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange
|
7 |
+
)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)
|
8 |
+
|
9 |
+
<img src="https://counter.seku.su/cmoe?name=rvc&theme=r34" /><br>
|
10 |
+
|
11 |
+
[![RVC v1](https://img.shields.io/badge/RVCv1-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v1.ipynb)
|
12 |
+
[![RVC v2](https://img.shields.io/badge/RVCv2-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v2.ipynb)
|
13 |
+
[![Licence](https://img.shields.io/github/license/RVC-Project/Retrieval-based-Voice-Conversion-WebUI?style=for-the-badge)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
14 |
+
[![Huggingface](https://img.shields.io/badge/🤗%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
15 |
+
|
16 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
17 |
+
|
18 |
+
</div>
|
19 |
+
|
20 |
+
------
|
21 |
+
[**更新日誌**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/docs/Changelog_KO.md)
|
22 |
+
|
23 |
+
[**English**](../en/README.en.md) | [**中文简体**](../../README.md) | [**日本語**](../jp/README.ja.md) | [**한국어**](../kr/README.ko.md) ([**韓國語**](../kr/README.ko.han.md)) | [**Français**](../fr/README.fr.md) | [**Türkçe**](../tr/README.tr.md) | [**Português**](../pt/README.pt.md)
|
24 |
+
|
25 |
+
> [示範映像](https://www.bilibili.com/video/BV1pm4y1z7Gm/)을 確認해 보세요!
|
26 |
+
|
27 |
+
> RVC를活用한實時間音聲變換: [w-okada/voice-changer](https://github.com/w-okada/voice-changer)
|
28 |
+
|
29 |
+
> 基本모델은 50時間假量의 高品質 오픈 소스 VCTK 데이터셋을 使用하였으므로, 著作權上의 念慮가 없으니 安心하고 使用하시기 바랍니다.
|
30 |
+
|
31 |
+
> 著作權問題가 없는 高品質의 노래를 以後에도 繼續해서 訓練할 豫定입니다.
|
32 |
+
|
33 |
+
## 紹介
|
34 |
+
本Repo는 다음과 같은 特徵을 가지고 있습니다:
|
35 |
+
+ top1檢索을利用하여 入力音色特徵을 訓練세트音色特徵으로 代替하여 音色의漏出을 防止;
|
36 |
+
+ 相對的으로 낮은性能의 GPU에서도 빠른訓練可能;
|
37 |
+
+ 적은量의 데이터로 訓練해도 좋은 結果를 얻을 수 있음 (最小10分以上의 低雜음音聲데이터를 使用하는 것을 勸獎);
|
38 |
+
+ 모델融合을通한 音色의 變調可能 (ckpt處理탭->ckpt混合選擇);
|
39 |
+
+ 使用하기 쉬운 WebUI (웹 使用者인터페이스);
|
40 |
+
+ UVR5 모델을 利用하여 목소리와 背景音樂의 빠른 分離;
|
41 |
+
|
42 |
+
## 環境의準備
|
43 |
+
poetry를通해 依存를設置하는 것을 勸獎합니다.
|
44 |
+
|
45 |
+
다음命令은 Python 버전3.8以上의環境에서 實行되어야 합니다:
|
46 |
+
```bash
|
47 |
+
# PyTorch 關聯主要依存設置, 이미設置되어 있는 境遇 건너뛰기 可能
|
48 |
+
# 參照: https://pytorch.org/get-started/locally/
|
49 |
+
pip install torch torchvision torchaudio
|
50 |
+
|
51 |
+
# Windows + Nvidia Ampere Architecture(RTX30xx)를 使用하고 있다面, #21 에서 명시된 것과 같이 PyTorch에 맞는 CUDA 버전을 指定해야 합니다.
|
52 |
+
#pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
53 |
+
|
54 |
+
# Poetry 設置, 이미設置되어 있는 境遇 건너뛰기 可能
|
55 |
+
# Reference: https://python-poetry.org/docs/#installation
|
56 |
+
curl -sSL https://install.python-poetry.org | python3 -
|
57 |
+
|
58 |
+
# 依存設置
|
59 |
+
poetry install
|
60 |
+
```
|
61 |
+
pip를 活用하여依存를 設置하여도 無妨합니다.
|
62 |
+
|
63 |
+
```bash
|
64 |
+
pip install -r requirements.txt
|
65 |
+
```
|
66 |
+
|
67 |
+
## 其他預備모델準備
|
68 |
+
RVC 모델은 推論과訓練을 依하여 다른 預備모델이 必要합니다.
|
69 |
+
|
70 |
+
[Huggingface space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)를 通해서 다운로드 할 수 있습니다.
|
71 |
+
|
72 |
+
다음은 RVC에 必要한 預備모델 및 其他 파일 目錄입니다:
|
73 |
+
```bash
|
74 |
+
./assets/hubert/hubert_base.pt
|
75 |
+
|
76 |
+
./assets/pretrained
|
77 |
+
|
78 |
+
./assets/uvr5_weights
|
79 |
+
|
80 |
+
V2 버전 모델을 테스트하려면 추가 다운로드가 필요합니다.
|
81 |
+
|
82 |
+
./assets/pretrained_v2
|
83 |
+
|
84 |
+
# Windows를 使用하는境遇 이 사전도 必要할 수 있습니다. FFmpeg가 設置되어 있으면 건너뛰어도 됩니다.
|
85 |
+
ffmpeg.exe
|
86 |
+
```
|
87 |
+
그後 以下의 命令을 使用하여 WebUI를 始作할 수 있습니다:
|
88 |
+
```bash
|
89 |
+
python infer-web.py
|
90 |
+
```
|
91 |
+
Windows를 使用하는境遇 `RVC-beta.7z`를 다운로드 및 壓縮解除하여 RVC를 直接使用하거나 `go-web.bat`을 使用하여 WebUi를 直接할 수 있습니다.
|
92 |
+
|
93 |
+
## 參考
|
94 |
+
+ [ContentVec](https://github.com/auspicious3000/contentvec/)
|
95 |
+
+ [VITS](https://github.com/jaywalnut310/vits)
|
96 |
+
+ [HIFIGAN](https://github.com/jik876/hifi-gan)
|
97 |
+
+ [Gradio](https://github.com/gradio-app/gradio)
|
98 |
+
+ [FFmpeg](https://github.com/FFmpeg/FFmpeg)
|
99 |
+
+ [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
100 |
+
+ [audio-slicer](https://github.com/openvpi/audio-slicer)
|
101 |
+
## 모든寄與者분들의勞力에感謝드립니다
|
102 |
+
|
103 |
+
<a href="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors" target="_blank">
|
104 |
+
<img src="https://contrib.rocks/image?repo=RVC-Project/Retrieval-based-Voice-Conversion-WebUI" />
|
105 |
+
</a>
|
106 |
+
|
docs/kr/README.ko.md
ADDED
@@ -0,0 +1,259 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
<h1>Retrieval-based-Voice-Conversion-WebUI</h1>
|
4 |
+
VITS 기반의 간단하고 사용하기 쉬운 음성 변환 프레임워크.<br><br>
|
5 |
+
|
6 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)
|
7 |
+
|
8 |
+
<img src="https://counter.seku.su/cmoe?name=rvc&theme=r34" /><br>
|
9 |
+
|
10 |
+
[![RVC v1](https://img.shields.io/badge/RVCv1-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v1.ipynb)
|
11 |
+
[![RVC v2](https://img.shields.io/badge/RVCv2-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v2.ipynb)
|
12 |
+
[![Licence](https://img.shields.io/badge/LICENSE-MIT-green.svg?style=for-the-badge)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
13 |
+
[![Huggingface](https://img.shields.io/badge/🤗%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
14 |
+
|
15 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
16 |
+
|
17 |
+
[**업데이트 로그**](./Changelog_KO.md) | [**자주 묻는 질문**](./faq_ko.md) | [**AutoDL·5원으로 AI 가수 훈련**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/wiki/Autodl%E8%AE%AD%E7%BB%83RVC%C2%B7AI%E6%AD%8C%E6%89%8B%E6%95%99%E7%A8%8B) | [**대조 실험 기록**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%AF%B9%E7%85%A7%E5%AE%9E%E9%AA%8C%C2%B7%E5%AE%9E%E9%AA%8C%E8%AE%B0%E5%BD%95) | [**온라인 데모**](https://modelscope.cn/studios/FlowerCry/RVCv2demo)
|
18 |
+
|
19 |
+
[**English**](../en/README.en.md) | [**中文简体**](../../README.md) | [**日本語**](../jp/README.ja.md) | [**한국어**](../kr/README.ko.md) ([**韓國語**](../kr/README.ko.han.md)) | [**Français**](../fr/README.fr.md) | [**Türkçe**](../tr/README.tr.md) | [**Português**](../pt/README.pt.md)
|
20 |
+
|
21 |
+
</div>
|
22 |
+
|
23 |
+
> [데모 영상](https://www.bilibili.com/video/BV1pm4y1z7Gm/)을 확인해 보세요!
|
24 |
+
|
25 |
+
> RVC를 활용한 실시간 음성변환: [w-okada/voice-changer](https://github.com/w-okada/voice-changer)
|
26 |
+
|
27 |
+
> 기본 모델은 50시간 가량의 고퀄리티 오픈 소스 VCTK 데이터셋을 사용하였으므로, 저작권상의 염려가 없으니 안심하고 사용하시기 바랍니다.
|
28 |
+
|
29 |
+
> 더 큰 매개변수, 더 큰 데이터, 더 나은 효과, 기본적으로 동일한 추론 속도, 더 적은 양의 훈련 데이터가 필요한 RVCv3의 기본 모델을 기대해 주십시오.
|
30 |
+
|
31 |
+
<table>
|
32 |
+
<tr>
|
33 |
+
<td align="center">훈련 및 추론 인터페이스</td>
|
34 |
+
<td align="center">실시간 음성 변환 인터페이스</td>
|
35 |
+
</tr>
|
36 |
+
<tr>
|
37 |
+
<td align="center"><img src="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/assets/129054828/092e5c12-0d49-4168-a590-0b0ef6a4f630"></td>
|
38 |
+
<td align="center"><img src="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/assets/129054828/730b4114-8805-44a1-ab1a-04668f3c30a6"></td>
|
39 |
+
</tr>
|
40 |
+
<tr>
|
41 |
+
<td align="center">go-web.bat</td>
|
42 |
+
<td align="center">go-realtime-gui.bat</td>
|
43 |
+
</tr>
|
44 |
+
<tr>
|
45 |
+
<td align="center">원하는 작업을 자유롭게 선택할 수 있습니다.</td>
|
46 |
+
<td align="center">우리는 이미 끝에서 끝까지 170ms의 지연을 실현했습니다. ASIO 입력 및 출력 장치를 사용하면 끝에서 끝까지 90ms의 지연을 달성할 수 있지만, 이는 하드웨어 드라이버 지원에 매우 의존적입니다.</td>
|
47 |
+
</tr>
|
48 |
+
</table>
|
49 |
+
|
50 |
+
## 소개
|
51 |
+
|
52 |
+
본 Repo는 다음과 같은 특징을 가지고 있습니다:
|
53 |
+
|
54 |
+
- top1 검색을 이용하여 입력 음색 특징을 훈련 세트 음색 특징으로 대체하여 음색의 누출을 방지
|
55 |
+
- 상대적으로 낮은 성능의 GPU에서도 빠른 훈련 가능
|
56 |
+
- 적은 양의 데이터로 훈련해도 좋은 결과를 얻을 수 있음 (최소 10분 이상의 저잡음 음성 데이터를 사용하는 것을 권장)
|
57 |
+
- 모델 융합을 통한 음색의 변조 가능 (ckpt 처리 탭->ckpt 병합 선택)
|
58 |
+
- 사용하기 쉬운 WebUI (웹 인터페이스)
|
59 |
+
- UVR5 모델을 이용하여 목소리와 배경음악의 빠른 분리;
|
60 |
+
- 최첨단 [음성 피치 추출 알고리즘 InterSpeech2023-RMVPE](#参考项目)을 사용하여 무성음 문제를 해결합니다. 효과는 최고(압도적)이며 crepe_full보다 더 빠르고 리소스 사용이 적음
|
61 |
+
- A카드와 I카드 가속을 지원
|
62 |
+
|
63 |
+
해당 프로젝트의 [데모 비디오](https://www.bilibili.com/video/BV1pm4y1z7Gm/)를 확인해보세요!
|
64 |
+
|
65 |
+
## 환경 설정
|
66 |
+
|
67 |
+
다음 명령은 Python 버전이 3.8 이상인 환경에서 실행해야 합니다.
|
68 |
+
|
69 |
+
### Windows/Linux/MacOS 등 플랫폼 공통 방법
|
70 |
+
|
71 |
+
아래 방법 중 하나를 선택하세요.
|
72 |
+
|
73 |
+
#### 1. pip를 통한 의존성 설치
|
74 |
+
|
75 |
+
1. Pytorch 및 의존성 모듈 설치, 이미 설치되어 있으면 생략. 참조: https://pytorch.org/get-started/locally/
|
76 |
+
|
77 |
+
```bash
|
78 |
+
pip install torch torchvision torchaudio
|
79 |
+
```
|
80 |
+
|
81 |
+
2. win 시스템 + Nvidia Ampere 아키텍처(RTX30xx) 사용 시, #21의 사례에 따라 pytorch에 해당하는 cuda 버전을 지정
|
82 |
+
|
83 |
+
```bash
|
84 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
85 |
+
```
|
86 |
+
|
87 |
+
3. 자신의 그래픽 카드에 맞는 의존성 설치
|
88 |
+
|
89 |
+
- N카드
|
90 |
+
|
91 |
+
```bash
|
92 |
+
pip install -r requirements.txt
|
93 |
+
```
|
94 |
+
|
95 |
+
- A카드/I카드
|
96 |
+
|
97 |
+
```bash
|
98 |
+
pip install -r requirements-dml.txt
|
99 |
+
```
|
100 |
+
|
101 |
+
- A카드ROCM(Linux)
|
102 |
+
|
103 |
+
```bash
|
104 |
+
pip install -r requirements-amd.txt
|
105 |
+
```
|
106 |
+
|
107 |
+
- I카드IPEX(Linux)
|
108 |
+
|
109 |
+
```bash
|
110 |
+
pip install -r requirements-ipex.txt
|
111 |
+
```
|
112 |
+
|
113 |
+
#### 2. poetry를 통한 의존성 설치
|
114 |
+
|
115 |
+
Poetry 의존성 관리 도구 설치, 이미 설치된 경우 생략. 참조: https://python-poetry.org/docs/#installation
|
116 |
+
|
117 |
+
```bash
|
118 |
+
curl -sSL https://install.python-poetry.org | python3 -
|
119 |
+
```
|
120 |
+
|
121 |
+
poetry를 통한 의존성 설치
|
122 |
+
|
123 |
+
```bash
|
124 |
+
poetry install
|
125 |
+
```
|
126 |
+
|
127 |
+
### MacOS
|
128 |
+
|
129 |
+
`run.sh`를 통해 의존성 설치 가능
|
130 |
+
|
131 |
+
```bash
|
132 |
+
sh ./run.sh
|
133 |
+
```
|
134 |
+
|
135 |
+
## 기타 사전 훈련된 모델 준비
|
136 |
+
|
137 |
+
RVC는 추론과 훈련을 위해 다른 일부 사전 훈련된 모델이 필요합니다.
|
138 |
+
|
139 |
+
이러한 모델은 저희의 [Hugging Face space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)에서 다운로드할 수 있습니다.
|
140 |
+
|
141 |
+
### 1. assets 다운로드
|
142 |
+
|
143 |
+
다음은 RVC에 필요한 모든 사전 훈련된 모델과 기타 파일의 목록입니다. `tools` 폴더에서 이들을 다운로드하는 스크립트를 찾을 수 있습니다.
|
144 |
+
|
145 |
+
- ./assets/hubert/hubert_base.pt
|
146 |
+
|
147 |
+
- ./assets/pretrained
|
148 |
+
|
149 |
+
- ./assets/uvr5_weights
|
150 |
+
|
151 |
+
v2 버전 모델을 사용하려면 추가로 다음을 다운로드해야 합니다.
|
152 |
+
|
153 |
+
- ./assets/pretrained_v2
|
154 |
+
|
155 |
+
### 2. ffmpeg 설치
|
156 |
+
|
157 |
+
ffmpeg와 ffprobe가 이미 설치되어 있다면 건너뜁니다.
|
158 |
+
|
159 |
+
#### Ubuntu/Debian 사용자
|
160 |
+
|
161 |
+
```bash
|
162 |
+
sudo apt install ffmpeg
|
163 |
+
```
|
164 |
+
|
165 |
+
#### MacOS 사용자
|
166 |
+
|
167 |
+
```bash
|
168 |
+
brew install ffmpeg
|
169 |
+
```
|
170 |
+
|
171 |
+
#### Windows 사용자
|
172 |
+
|
173 |
+
다운로드 후 루트 디렉토리에 배치.
|
174 |
+
|
175 |
+
- [ffmpeg.exe 다운로드](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffmpeg.exe)
|
176 |
+
|
177 |
+
- [ffprobe.exe 다운로드](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffprobe.exe)
|
178 |
+
|
179 |
+
### 3. RMVPE 인간 음성 피치 추출 알고리즘에 필요한 파일 다운로드
|
180 |
+
|
181 |
+
최신 RMVPE 인간 음성 피치 추출 알고리즘을 사용하려면 음피치 추출 모델 매개변수를 다운로드하고 RVC 루트 디렉토리에 배치해야 합니다.
|
182 |
+
|
183 |
+
- [rmvpe.pt 다운로드](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt)
|
184 |
+
|
185 |
+
#### dml 환경의 RMVPE 다운로드(선택사항, A카드/I카드 사용자)
|
186 |
+
|
187 |
+
- [rmvpe.onnx 다운로드](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx)
|
188 |
+
|
189 |
+
### 4. AMD 그래픽 카드 Rocm(선택사항, Linux만 해당)
|
190 |
+
|
191 |
+
Linux 시스템에서 AMD의 Rocm 기술을 기반으로 RVC를 실행하려면 [여기](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html)에서 필요한 드라이버를 먼저 설치하세요.
|
192 |
+
|
193 |
+
Arch Linux를 사용하는 경우 pacman을 사용하여 필요한 드라이버를 설치할 수 있습니다.
|
194 |
+
|
195 |
+
```
|
196 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
197 |
+
```
|
198 |
+
|
199 |
+
일부 모델의 그래픽 카드(예: RX6700XT)의 경우, 다음과 같은 환경 변수를 추가로 설정해야 할 수 있습니다.
|
200 |
+
|
201 |
+
```
|
202 |
+
export ROCM_PATH=/opt/rocm
|
203 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
204 |
+
```
|
205 |
+
|
206 |
+
동시에 현재 사용자가 `render` 및 `video` 사용자 그룹에 속해 있는지 확인하세요.
|
207 |
+
|
208 |
+
```
|
209 |
+
sudo usermod -aG render $USERNAME
|
210 |
+
sudo usermod -aG video $USERNAME
|
211 |
+
```
|
212 |
+
|
213 |
+
## 시작하기
|
214 |
+
|
215 |
+
### 직접 시작
|
216 |
+
|
217 |
+
다음 명령어로 WebUI를 시작하세요
|
218 |
+
|
219 |
+
```bash
|
220 |
+
python infer-web.py
|
221 |
+
```
|
222 |
+
|
223 |
+
### 통합 패키지 사용
|
224 |
+
|
225 |
+
`RVC-beta.7z`를 다운로드하고 압축 해제
|
226 |
+
|
227 |
+
#### Windows 사용자
|
228 |
+
|
229 |
+
`go-web.bat` 더블 클릭
|
230 |
+
|
231 |
+
#### MacOS 사용자
|
232 |
+
|
233 |
+
```bash
|
234 |
+
sh ./run.sh
|
235 |
+
```
|
236 |
+
|
237 |
+
### IPEX 기술이 필요한 I카드 사용자를 위한 지침(Linux만 해당)
|
238 |
+
|
239 |
+
```bash
|
240 |
+
source /opt/intel/oneapi/setvars.sh
|
241 |
+
```
|
242 |
+
|
243 |
+
## 참조 프로젝트
|
244 |
+
|
245 |
+
- [ContentVec](https://github.com/auspicious3000/contentvec/)
|
246 |
+
- [VITS](https://github.com/jaywalnut310/vits)
|
247 |
+
- [HIFIGAN](https://github.com/jik876/hifi-gan)
|
248 |
+
- [Gradio](https://github.com/gradio-app/gradio)
|
249 |
+
- [FFmpeg](https://github.com/FFmpeg/FFmpeg)
|
250 |
+
- [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
251 |
+
- [audio-slicer](https://github.com/openvpi/audio-slicer)
|
252 |
+
- [Vocal pitch extraction:RMVPE](https://github.com/Dream-High/RMVPE)
|
253 |
+
- 사전 훈련된 모델은 [yxlllc](https://github.com/yxlllc/RMVPE)와 [RVC-Boss](https://github.com/RVC-Boss)에 의해 훈련되고 테스트되었습니다.
|
254 |
+
|
255 |
+
## 모든 기여자들의 노력에 감사드립니다
|
256 |
+
|
257 |
+
<a href="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors" target="_blank">
|
258 |
+
<img src="https://contrib.rocks/image?repo=RVC-Project/Retrieval-based-Voice-Conversion-WebUI" />
|
259 |
+
</a>
|
docs/kr/faiss_tips_ko.md
ADDED
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Facebook AI Similarity Search (Faiss) 팁
|
2 |
+
==================
|
3 |
+
# Faiss에 대하여
|
4 |
+
Faiss 는 Facebook Research가 개발하는, 고밀도 벡터 이웃 검색 라이브러리입니다. 근사 근접 탐색법 (Approximate Neigbor Search)은 약간의 정확성을 희생하여 유사 벡터를 고속으로 찾습니다.
|
5 |
+
|
6 |
+
## RVC에 있어서 Faiss
|
7 |
+
RVC에서는 HuBERT로 변환한 feature의 embedding을 위해 훈련 데이터에서 생성된 embedding과 유사한 embadding을 검색하고 혼합하여 원래의 음성에 더욱 가까운 변환을 달성합니다. 그러나, 이 탐색법은 단순히 수행하면 시간이 다소 소모되므로, 근사 근접 탐색법을 통해 고속 변환을 가능케 하고 있습니다.
|
8 |
+
|
9 |
+
# 구현 개요
|
10 |
+
모델이 위치한 `/logs/your-experiment/3_feature256`에는 각 음성 데이터에서 HuBERT가 추출한 feature들이 있습니다. 여기에서 파일 이름별로 정렬된 npy 파일을 읽고, 벡터를 연결하여 big_npy ([N, 256] 모양의 벡터) 를 만듭니다. big_npy를 `/logs/your-experiment/total_fea.npy`로 저장한 후, Faiss로 학습시킵니다.
|
11 |
+
|
12 |
+
2023/04/18 기준으로, Faiss의 Index Factory 기능을 이용해, L2 거리에 근거하는 IVF를 이용하고 있습니다. IVF의 분할수(n_ivf)는 N//39로, n_probe는 int(np.power(n_ivf, 0.3))가 사용되고 있습니다. (infer-web.py의 train_index 주위를 찾으십시오.)
|
13 |
+
|
14 |
+
이 팁에서는 먼저 이러한 매개 변수의 의미를 설명하고, 개발자가 추후 더 나은 index를 작성할 수 있도록 하는 조언을 작성합니다.
|
15 |
+
|
16 |
+
# 방법의 설명
|
17 |
+
## Index factory
|
18 |
+
index factory는 여러 근사 근접 탐색법을 문자열로 연결하는 pipeline을 문자열로 표기하는 Faiss만의 독자적인 기법입니다. 이를 통해 index factory의 문자열을 변경하는 것만으로 다양한 근사 근접 탐색을 시도해 볼 수 있습니다. RVC에서는 다음과 같이 사용됩니다:
|
19 |
+
|
20 |
+
```python
|
21 |
+
index = Faiss.index_factory(256, "IVF%s,Flat" % n_ivf)
|
22 |
+
```
|
23 |
+
`index_factory`의 인수들 중 첫 번째는 벡터의 차원 수이고, 두번째는 index factory 문자열이며, 세번째에는 사용할 거리를 지정할 수 있습니다.
|
24 |
+
|
25 |
+
기법의 보다 자세한 설명은 https://github.com/facebookresearch/Faiss/wiki/The-index-factory 를 확인해 주십시오.
|
26 |
+
|
27 |
+
## 거리에 대한 index
|
28 |
+
embedding의 유사도로서 사용되는 대표적인 지표로서 이하의 2개가 있습니다.
|
29 |
+
|
30 |
+
- 유클리드 거리 (METRIC_L2)
|
31 |
+
- 내적(内積) (METRIC_INNER_PRODUCT)
|
32 |
+
|
33 |
+
유클리드 거리에서는 각 차원에서 제곱의 차를 구하고, 각 차원에서 구한 차를 모두 더한 후 제곱근을 취합니다. 이것은 일상적으로 사용되는 2차원, 3차원에서의 거리의 연산법과 같습니다. 내적은 그 값을 그대로 유사도 지표로 사용하지 않고, L2 정규화를 한 이후 내적을 취하는 코사인 유사도를 사용합니다.
|
34 |
+
|
35 |
+
어느 쪽이 더 좋은지는 경우에 따라 다르지만, word2vec에서 얻은 embedding 및 ArcFace를 활용한 이미지 검색 모델은 코사인 유사성이 이용되는 경우가 많습니다. numpy를 사용하여 벡터 X에 대해 L2 정규화를 하고자 하는 경우, 0 division을 피하기 위해 충분히 작은 값을 eps로 한 뒤 이하에 코드를 활용하면 됩니다.
|
36 |
+
|
37 |
+
```python
|
38 |
+
X_normed = X / np.maximum(eps, np.linalg.norm(X, ord=2, axis=-1, keepdims=True))
|
39 |
+
```
|
40 |
+
|
41 |
+
또한, `index factory`의 3번째 인수에 건네주는 값을 선택하는 것을 통해 계산에 사용하는 거리 index를 변경할 수 있습니다.
|
42 |
+
|
43 |
+
```python
|
44 |
+
index = Faiss.index_factory(dimention, text, Faiss.METRIC_INNER_PRODUCT)
|
45 |
+
```
|
46 |
+
|
47 |
+
## IVF
|
48 |
+
IVF (Inverted file indexes)는 역색인 탐색법과 유사한 알고리즘입니다. 학습시에는 검색 대상에 대해 k-평균 군집법을 실시하고 클러스터 중심을 이용해 보로노이 분할을 실시합니다. 각 데이터 포인트에는 클러스터가 할당되므로, 클러스터에서 데이터 포인트를 조회하는 dictionary를 만듭니다.
|
49 |
+
|
50 |
+
예를 들어, 클러스터가 다음과 같이 할당된 경우
|
51 |
+
|index|Cluster|
|
52 |
+
|-----|-------|
|
53 |
+
|1|A|
|
54 |
+
|2|B|
|
55 |
+
|3|A|
|
56 |
+
|4|C|
|
57 |
+
|5|B|
|
58 |
+
|
59 |
+
IVF 이후의 결과는 다음과 같습니다:
|
60 |
+
|
61 |
+
|cluster|index|
|
62 |
+
|-------|-----|
|
63 |
+
|A|1, 3|
|
64 |
+
|B|2, 5|
|
65 |
+
|C|4|
|
66 |
+
|
67 |
+
탐색 시, 우선 클러스터에서 `n_probe`개의 클러스터를 탐색한 다음, 각 클러스터에 속한 데이터 포인트의 거리를 계산합니다.
|
68 |
+
|
69 |
+
# 권장 매개변수
|
70 |
+
index의 선택 방법에 대해서는 공식적으로 가이드 라인이 있으므로, 거기에 준해 설명합니다.
|
71 |
+
https://github.com/facebookresearch/Faiss/wiki/Guidelines-to-choose-an-index
|
72 |
+
|
73 |
+
1M 이하의 데이터 세트에 있어서는 4bit-PQ가 2023년 4월 시점에서는 Faiss로 이용할 수 있는 가장 효율적인 수법입니다. 이것을 IVF와 조합해, 4bit-PQ로 후보를 추려내고, 마지막으로 이하의 index factory를 이용하여 정확한 지표로 거리��� 재계산하면 됩니다.
|
74 |
+
|
75 |
+
```python
|
76 |
+
index = Faiss.index_factory(256, "IVF1024,PQ128x4fs,RFlat")
|
77 |
+
```
|
78 |
+
|
79 |
+
## IVF 권장 매개변수
|
80 |
+
IVF의 수가 너무 많으면, 가령 데이터 수의 수만큼 IVF로 양자화(Quantization)를 수행하면, 이것은 완전탐색과 같아져 효율이 나빠지게 됩니다. 1M 이하의 경우 IVF 값은 데이터 포인트 수 N에 대해 4sqrt(N) ~ 16sqrt(N)를 사용하는 것을 권장합니다.
|
81 |
+
|
82 |
+
n_probe는 n_probe의 수에 비례하여 계산 시간이 늘어나므로 정확도와 시간을 적절히 균형을 맞추어 주십시오. 개인적으로 RVC에 있어서 그렇게까지 정확도는 필요 없다고 생각하기 때문에 n_probe = 1이면 된다고 생각합니다.
|
83 |
+
|
84 |
+
## FastScan
|
85 |
+
FastScan은 직적 양자화를 레지스터에서 수행함으로써 거리의 고속 근사를 가능하게 하는 방법입니다.직적 양자화는 학습시에 d차원마다(보통 d=2)에 독립적으로 클러스터링을 실시해, 클러스터끼리의 거리를 사전 계산해 lookup table를 작성합니다. 예측시는 lookup table을 보면 각 차원의 거리를 O(1)로 계산할 수 있습니다. 따라서 PQ 다음에 지정하는 숫자는 일반적으로 벡터의 절반 차원을 지정합니다.
|
86 |
+
|
87 |
+
FastScan에 대한 자세한 설명은 공식 문서를 참조하십시오.
|
88 |
+
https://github.com/facebookresearch/Faiss/wiki/Fast-accumulation-of-PQ-and-AQ-codes-(FastScan)
|
89 |
+
|
90 |
+
## RFlat
|
91 |
+
RFlat은 FastScan이 계산한 대략적인 거리를 index factory의 3번째 인수로 지정한 정확한 거리로 다시 계산하라는 인스트럭션입니다. k개의 근접 변수를 가져올 때 k*k_factor개의 점에 대해 재계산이 이루어집니다.
|
92 |
+
|
93 |
+
# Embedding 테크닉
|
94 |
+
## Alpha 쿼리 확장
|
95 |
+
퀴리 확장이란 탐색에서 사용되는 기술로, 예를 들어 전문 탐색 시, 입력된 검색문에 단어를 몇 개를 추가함으로써 검색 정확도를 올리는 방법입니다. 백터 탐색을 위해서도 몇가지 방법이 제안되었는데, 그 중 α-쿼리 확장은 추가 학습이 필요 없는 매우 효과적인 방법으로 알려져 있습니다. [Attention-Based Query Expansion Learning](https://arxiv.org/abs/2007.08019)와 [2nd place solution of kaggle shopee competition](https://www.kaggle.com/code/lyakaap/2nd-place-solution/notebook) 논문에서 소개된 바 있습니다..
|
96 |
+
|
97 |
+
α-쿼리 확장은 한 벡터에 인접한 벡터를 유사도의 α곱한 가중치로 더해주면 됩니다. 코드로 예시를 들어 보겠습니다. big_npy를 α query expansion로 대체합니다.
|
98 |
+
|
99 |
+
```python
|
100 |
+
alpha = 3.
|
101 |
+
index = Faiss.index_factory(256, "IVF512,PQ128x4fs,RFlat")
|
102 |
+
original_norm = np.maximum(np.linalg.norm(big_npy, ord=2, axis=1, keepdims=True), 1e-9)
|
103 |
+
big_npy /= original_norm
|
104 |
+
index.train(big_npy)
|
105 |
+
index.add(big_npy)
|
106 |
+
dist, neighbor = index.search(big_npy, num_expand)
|
107 |
+
|
108 |
+
expand_arrays = []
|
109 |
+
ixs = np.arange(big_npy.shape[0])
|
110 |
+
for i in range(-(-big_npy.shape[0]//batch_size)):
|
111 |
+
ix = ixs[i*batch_size:(i+1)*batch_size]
|
112 |
+
weight = np.power(np.einsum("nd,nmd->nm", big_npy[ix], big_npy[neighbor[ix]]), alpha)
|
113 |
+
expand_arrays.append(np.sum(big_npy[neighbor[ix]] * np.expand_dims(weight, axis=2),axis=1))
|
114 |
+
big_npy = np.concatenate(expand_arrays, axis=0)
|
115 |
+
|
116 |
+
# index version 정규화
|
117 |
+
big_npy = big_npy / np.maximum(np.linalg.norm(big_npy, ord=2, axis=1, keepdims=True), 1e-9)
|
118 |
+
```
|
119 |
+
|
120 |
+
위 테크닉은 탐색을 수행하는 쿼리에도, 탐색 대상 DB에도 적응 가능한 테크닉입니다.
|
121 |
+
|
122 |
+
## MiniBatch KMeans에 의한 embedding 압축
|
123 |
+
|
124 |
+
total_fea.npy가 너무 클 경우 K-means를 이용하여 벡터를 작게 만드는 것이 가능합니다. 이하 코드로 embedding의 압축이 가능합니다. n_clusters에 압축하고자 하는 크기를 지정하고 batch_size에 256 * CPU의 코어 수를 지정함으로써 CPU 병렬화의 혜택을 충분히 얻을 수 있습니다.
|
125 |
+
|
126 |
+
```python
|
127 |
+
import multiprocessing
|
128 |
+
from sklearn.cluster import MiniBatchKMeans
|
129 |
+
kmeans = MiniBatchKMeans(n_clusters=10000, batch_size=256 * multiprocessing.cpu_count(), init="random")
|
130 |
+
kmeans.fit(big_npy)
|
131 |
+
sample_npy = kmeans.cluster_centers_
|
132 |
+
```
|
docs/kr/faq_ko.md
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Q1:ffmpeg 오류/utf8 오류
|
2 |
+
|
3 |
+
대부분의 경우 ffmpeg 문제가 아니라 오디오 경로 문제입니다. <br>
|
4 |
+
ffmpeg가 공백, () 등의 특수 문자가 포함된 경로를 읽을 때 ffmpeg 오류가 발생할 수 있습니다. 트레이닝 세트 오디오가 중문 경로일 때 filelist.txt에 쓸 때 utf8 오류가 발생할 수 있습니다. <br>
|
5 |
+
|
6 |
+
## Q2:일괄 트레이닝이 끝나고 인덱스가 없음
|
7 |
+
|
8 |
+
"Training is done. The program is closed."라고 표시되면 모델 트레이닝이 성공한 것이며, 이어지는 오류는 가짜입니다. <br>
|
9 |
+
|
10 |
+
일괄 트레이닝이 끝나고 'added'로 시작하는 인덱스 파일이 없으면 트레이닝 세트가 너무 커서 인덱스 추가 단계에서 멈췄을 수 있습니다. 메모리에 대한 인덱스 추가 요구 사항이 너무 큰 문제를 배치 처리 add 인덱스로 해결했습니다. 임시로 "트레이닝 인덱스" 버튼을 다시 클릭해 보세요. <br>
|
11 |
+
|
12 |
+
## Q3:트레이닝이 끝나고 트레이닝 세트의 음색을 추론에서 보지 못함
|
13 |
+
|
14 |
+
'음색 새로고침'을 클릭해 보세요. 여전히 없다면 트레이닝에 오류가 있는지, 콘솔 및 webui의 스크린샷, logs/실험명 아래의 로그를 개발자에게 보내 확인해 보세요. <br>
|
15 |
+
|
16 |
+
## Q4:모델 공유 방법
|
17 |
+
|
18 |
+
rvc_root/logs/실험명 아래에 저장된 pth는 추론에 사용하기 위한 것이 아니라 실험 상태를 저장하고 복원하며, 트레이닝을 계속하기 위한 것입니다. 공유에 사용되는 모델은 weights 폴더 아래 60MB 이상인 pth 파일입니다. <br>
|
19 |
+
<br/>
|
20 |
+
향후에는 weights/exp_name.pth와 logs/exp_name/added_xxx.index를 결합하여 weights/exp_name.zip으로 만들어 index 입력 단계를 생략할 예정입니다. 그러면 zip 파일을 공유하고 pth 파일은 공유하지 마세요. 단지 다른 기계에서 트레이닝을 계속하려는 경우에만 공유하세요. <br>
|
21 |
+
<br/>
|
22 |
+
logs 폴더 아래 수백 MB의 pth 파일을 weights 폴더에 복사/공유하여 강제로 추론에 사용하면 f0, tgt_sr 등의 키가 없다는 오류가 발생할 수 있습니다. ckpt 탭 아래에서 수동 또는 자동(로컬 logs에서 관련 정보를 찾을 수 있는 경우 자동)으로 음성, 대상 오디오 샘플링률 옵션을 선택한 후 ckpt 소형 모델을 추출해야 합니다(입력 경로에 G로 시작하는 경로를 입력). 추출 후 weights 폴더에 60MB 이상의 pth 파일이 생성되며, 음색 새로고침 후 사용할 수 있습니다. <br>
|
23 |
+
|
24 |
+
## Q5:연결 오류
|
25 |
+
|
26 |
+
아마도 컨트롤 콘솔(검은 창)을 닫았을 것입니다. <br>
|
27 |
+
|
28 |
+
## Q6:WebUI에서 "Expecting value: line 1 column 1 (char 0)" 오류가 발생함
|
29 |
+
|
30 |
+
시스템 로컬 네트워크 프록시/글로벌 프록시를 닫으세요. <br>
|
31 |
+
|
32 |
+
이는 클라이언트의 프록시뿐만 아니라 서버 측의 프록시도 포함합니다(예: autodl로 http_proxy 및 https_proxy를 설정한 경우 사용 시 unset으로 끄세요). <br>
|
33 |
+
|
34 |
+
## Q7:WebUI 없이 명령으로 트레이닝 및 추론하는 방법
|
35 |
+
|
36 |
+
트레이닝 스크립트: <br>
|
37 |
+
먼저 WebUI를 실행하여 데이터 세트 처리 및 트레이닝에 사용되는 명령줄을 메시지 창에서 확인할 수 있습니다. <br>
|
38 |
+
|
39 |
+
추론 스크립트: <br>
|
40 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py <br>
|
41 |
+
|
42 |
+
예제: <br>
|
43 |
+
|
44 |
+
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" harvest "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True <br>
|
45 |
+
|
46 |
+
f0up_key=sys.argv[1] <br>
|
47 |
+
input_path=sys.argv[2] <br>
|
48 |
+
index_path=sys.argv[3] <br>
|
49 |
+
f0method=sys.argv[4]#harvest 또는 pm <br>
|
50 |
+
opt_path=sys.argv[5] <br>
|
51 |
+
model_path=sys.argv[6] <br>
|
52 |
+
index_rate=float(sys.argv[7]) <br>
|
53 |
+
device=sys.argv[8] <br>
|
54 |
+
is_half=bool(sys.argv[9]) <br>
|
55 |
+
|
56 |
+
## Q8:Cuda 오류/Cuda 메모리 부족
|
57 |
+
|
58 |
+
아마도 cuda 설정 문제이거나 장치가 지원되지 않을 수 있습니다. 대부분의 경우 메모리가 부족합니다(out of memory). <br>
|
59 |
+
|
60 |
+
트레이닝의 경우 batch size를 줄이세요(1로 줄여도 부족하다면 다른 그래픽 카드로 트레이닝을 해야 합니다). 추론의 경우 config.py 파일 끝에 있는 x_pad, x_query, x_center, x_max를 적절히 줄이세요. 4GB 미만의 메모리(예: 1060(3GB) 및 여러 2GB 그래픽 카드)를 가진 경우는 포기하세요. 4GB 메모리 그래픽 카드는 아직 구할 수 있습니다. <br>
|
61 |
+
|
62 |
+
## Q9:total_epoch를 몇으로 설정하는 것이 좋을까요
|
63 |
+
|
64 |
+
트레이닝 세트의 오디오 품질이 낮고 배경 소음이 많으면 20~30이면 충분합니다. 너무 높게 설정하면 바닥 모델의 오디오 품질이 낮은 트레이닝 세트를 높일 수 없습니다. <br>
|
65 |
+
트레이닝 세트의 오디오 품질이 높고 배경 소음이 적고 길이가 길 경우 높게 설정할 수 있습니다. 200도 괜찮습니다(트레이닝 속도가 빠르므로, 고품질 트레이닝 세트를 준비할 수 있는 조건이 있다면, 그래픽 카드도 좋을 것이므로, 조금 더 긴 트레이닝 시간에 대해 걱정하지 않을 것입니다). <br>
|
66 |
+
|
67 |
+
## Q10: 트레이닝 세트는 얼마나 길어야 하나요
|
68 |
+
|
69 |
+
10분에서 50분을 추천합니다.
|
70 |
+
<br/>
|
71 |
+
음질이 좋고 백그라운드 노이즈가 낮은 상태에서, 개인적인 특색 있는 음색이라면 더 많으면 더 좋습니다.
|
72 |
+
<br/>
|
73 |
+
고품질의 트레이닝 세트(정교하게 준비된 + 특색 있는 음색)라면, 5분에서 10분도 괜찮습니다. 저장소의 저자도 종종 이렇게 합니다.
|
74 |
+
<br/>
|
75 |
+
1분에서 2분의 데이터로 트레이닝에 성공한 사람도 있지만, 그러한 성공 사례는 다른 사람이 재현하기 어려우며 참고 가치가 크지 않습니다. 이는 트레이닝 세트의 음색이 매우 뚜렷해야 하며(예: 높은 주파수의 명확한 목소리나 소녀음) 음질이 좋아야 합니다.
|
76 |
+
<br/>
|
77 |
+
1분 미만의 데이터로 트레이닝을 시도(성공)한 사례는 아직 보지 못했습니다. 이런 시도는 권장하지 않습니다.
|
78 |
+
|
79 |
+
## Q11: index rate는 무엇이며, 어떻게 조정하나요? (과학적 설명)
|
80 |
+
|
81 |
+
만약 베이스 모델과 추론 소스의 음질이 트레이닝 세트보다 높다면, 그들은 추론 결과의 음질을 높일 수 있지만, 음색이 베이스 모델/추론 소스의 음색으로 기울어질 수 있습니다. 이 현상을 "음색 유출"이라고 합니다.
|
82 |
+
<br/>
|
83 |
+
index rate는 음색 유출 문제를 줄이거나 해결하는 데 사용됩니다. 1로 조정하면 이론적으로 추론 소스의 음색 유출 문제가 없지만, 음질은 트레이닝 세트에 더 가깝게 됩니다. 만약 트레이닝 세트의 음질이 추론 소스보다 낮다면, index rate를 높이면 음질이 낮아질 수 있습니다. 0으로 조정하면 검색 혼합을 이용하여 트레이닝 세트의 음색을 보호하는 효과가 없습니다.
|
84 |
+
<br/>
|
85 |
+
트레이닝 세트가 고품질이고 길이가 길 경우, total_epoch를 높일 수 있으며, 이 경우 모델 자체가 추론 소스와 베이스 모델의 음색을 거의 참조하지 않아 "음색 유출" 문제가 거의 발생하지 않습니다. 이때 index rate는 중요하지 않으며, 심지어 index 색인 파일을 생성하거나 공유하지 않아도 됩니다.
|
86 |
+
|
87 |
+
## Q11: 추론시 GPU를 어떻게 선택하나요?
|
88 |
+
|
89 |
+
config.py 파일에서 device cuda: 다음에 카드 번호를 선택합니다.
|
90 |
+
카드 번호와 그래픽 카드의 매핑 관계는 트레이닝 탭의 그래픽 카드 정보란에서 볼 수 있습니다.
|
91 |
+
|
92 |
+
## Q12: 트레이닝 중간에 저장된 pth를 어떻게 추론하나요?
|
93 |
+
|
94 |
+
ckpt 탭 하단에서 소형 모델을 추출합니다.
|
95 |
+
|
96 |
+
## Q13: 트레이닝을 어떻게 중단하고 계속할 수 있나요?
|
97 |
+
|
98 |
+
현재 단계에서는 WebUI 콘솔을 닫고 go-web.bat을 더블 클릭하여 프로그램을 다시 시작해야 합니다. 웹 페이지 매개변수도 새로 고쳐서 다시 입력해야 합니다.
|
99 |
+
트레이닝을 계속하려면: 같은 웹 페이지 매개변수로 트레이닝 모델을 클릭하면 이전 체크포인트에서 트레이닝을 계속합니다.
|
100 |
+
|
101 |
+
## Q14: 트레이닝 중 파일 페이지/메모리 오류가 발생하면 어떻게 해야 하나요?
|
102 |
+
|
103 |
+
프로세스가 너무 많이 열려 메모리가 폭발했습니다. 다음과 같은 방법으로 해결할 수 있습니다.
|
104 |
+
|
105 |
+
1. "음높이 추출 및 데이터 처리에 사용되는 CPU 프로세스 수"를 적당히 낮춥니다.
|
106 |
+
2. 트레이닝 세트 오디오를 수동으로 잘라 너무 길지 않게 합니다.
|
107 |
+
|
108 |
+
## Q15: 트레이닝 도중 데이터를 어떻게 추가하나요?
|
109 |
+
|
110 |
+
1. 모든 데이터에 새로운 실험 이름을 만듭니다.
|
111 |
+
2. 이전에 가장 최신의 G와 D 파일(또는 어떤 중간 ckpt를 기반으로 트레이닝하고 싶다면 중간 것을 복사할 수도 있음)을 새 실험 이름으로 복사합니다.
|
112 |
+
3. 새 실험 이름으로 원클릭 트레이닝을 시작하면 이전의 최신 진행 상황에서 계속 트레이닝합니다.
|
113 |
+
|
114 |
+
## Q16: llvmlite.dll에 관한 오류
|
115 |
+
|
116 |
+
```bash
|
117 |
+
OSError: Could not load shared object file: llvmlite.dll
|
118 |
+
|
119 |
+
FileNotFoundError: Could not find module lib\site-packages\llvmlite\binding\llvmlite.dll (or one of its dependencies). Try using the full path with constructor syntax.
|
120 |
+
```
|
121 |
+
|
122 |
+
Windows 플랫폼에서 이 오류가 발생하면 https://aka.ms/vs/17/release/vc_redist.x64.exe를 설치하고 WebUI를 다시 시작하면 해결됩니다.
|
123 |
+
|
124 |
+
## Q17: RuntimeError: 텐서의 확장된 크기(17280)는 비 단일 항목 차원 1에서 기존 크기(0)와 일치해야 합니다. 대상 크기: [1, 17280]. 텐서 크기: [0]
|
125 |
+
|
126 |
+
wavs16k 폴더 아래에서 다른 파일들보다 크기가 현저히 작은 일부 오디오 파일을 찾아 삭제하고, 트레이닝 모델을 클릭하면 오류가 발생하지 않습니다. 하지만 원클릭 프로세스가 중단되었기 때문에 모델 트레이닝이 완료된 후에는 인덱스 트레이닝을 클릭해야 합니다.
|
127 |
+
|
128 |
+
## Q18: RuntimeError: 텐�� a의 크기(24)가 비 단일 항목 차원 2에서 텐서 b(16)의 크기와 일치해야 합니다.
|
129 |
+
|
130 |
+
트레이닝 도중에 샘플링 레이트를 변경해서는 안 됩니다. 변경해야 한다면 실험 이름을 변경하고 처음부터 트레이닝해야 합니다. 물론, 이전에 추출한 음높이와 특징(0/1/2/2b 폴더)을 복사하여 트레이닝 프로세스를 가속화할 수도 있습니다.
|
docs/kr/training_tips_ko.md
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
RVC 훈련에 대한 설명과 팁들
|
2 |
+
======================================
|
3 |
+
본 팁에서는 어떻게 데이터 훈련이 이루어지고 있는지 설명합니다.
|
4 |
+
|
5 |
+
# 훈련의 흐름
|
6 |
+
GUI의 훈련 탭의 단계를 따라 설명합니다.
|
7 |
+
|
8 |
+
## step1
|
9 |
+
실험 이름을 지정합니다. 또한, 모델이 피치(소리의 높낮이)를 고려해야 하는지 여부를 여기에서 설정할 수도 있습니다..
|
10 |
+
각 실험을 위한 데이터는 `/logs/experiment name/`에 배치됩니다..
|
11 |
+
|
12 |
+
## step2a
|
13 |
+
음성 파일을 불러오고 전처리합니다.
|
14 |
+
|
15 |
+
### 음성 파일 불러오기
|
16 |
+
음성 파일이 있는 폴더를 지정하면 해당 폴더에 있는 음성 파일이 자동으로 가져와집니다.
|
17 |
+
예를 들어 `C:Users\hoge\voices`를 지정하면 `C:Users\hoge\voices\voice.mp3`가 읽히지만 `C:Users\hoge\voices\dir\voice.mp3`는 읽히지 않습니다.
|
18 |
+
|
19 |
+
음성 로드에는 내부적으로 ffmpeg를 이용하고 있으므로, ffmpeg로 대응하고 있는 확장자라면 자동적으로 읽힙니다.
|
20 |
+
ffmpeg에서 int16으로 변환한 후 float32로 변환하고 -1과 1 사이에 정규화됩니다.
|
21 |
+
|
22 |
+
### 잡음 제거
|
23 |
+
음성 파일에 대해 scipy의 filtfilt를 이용하여 잡음을 처리합니다.
|
24 |
+
|
25 |
+
### 음성 분할
|
26 |
+
입력한 음성 파일은 먼저 일정 기간(max_sil_kept=5초?)보다 길게 무음이 지속되는 부분을 감지하여 음성을 분할합니다.무음으로 음성을 분할한 후에는 0.3초의 overlap을 포함하여 4초마다 음성을 분할합니다.4초 이내에 구분된 음성은 음량의 정규화를 실시한 후 wav 파일을 `/logs/실험명/0_gt_wavs`로, 거기에서 16k의 샘플링 레이트로 변환해 `/logs/실험명/1_16k_wavs`에 wav 파일로 저장합니다.
|
27 |
+
|
28 |
+
## step2b
|
29 |
+
### 피치 추출
|
30 |
+
wav 파일에서 피치(소리의 높낮이) 정보를 추출합니다. parselmouth나 pyworld에 내장되어 있는 메서드으로 피치 정보(=f0)를 추출해, `/logs/실험명/2a_f0`에 저장합니다. 그 후 피치 정보를 로그로 변환하여 1~255 정수로 변환하고 `/logs/실험명/2b-f0nsf`에 저장합니다.
|
31 |
+
|
32 |
+
### feature_print 추출
|
33 |
+
HuBERT를 이용하여 wav 파일을 미리 embedding으로 변환합니다. `/logs/실험명/1_16k_wavs`에 저장한 wav 파일을 읽고 HuBERT에서 wav 파일을 256차원 feature들로 변환한 후 npy 형식으로 `/logs/실험명/3_feature256`에 저장합니다.
|
34 |
+
|
35 |
+
## step3
|
36 |
+
모델의 훈련을 진행합니다.
|
37 |
+
|
38 |
+
### 초보자용 용어 해설
|
39 |
+
심층학습(딥러닝)에서는 데이터셋을 분할하여 조금씩 학습을 진행합니다.한 번의 모델 업데이트(step) 단계 당 batch_size개의 데이터를 탐색하여 예측과 오차를 수정합니다. 데이터셋 전부에 대해 이 작업을 한 번 수행하는 이를 하나의 epoch라고 계산합니다.
|
40 |
+
|
41 |
+
따라서 학습 시간은 단계당 학습 시간 x (데이터셋 내 데이터의 수 / batch size) x epoch 수가 소요됩니다. 일반적으로 batch size가 클수록 학습이 안정적이게 됩니다. (step당 학습 시간 ÷ batch size)는 작아지지만 GPU 메모리를 더 많이 사용합니다. GPU RAM은 nvidia-smi 명령어를 통해 확인할 수 있습니다. 실행 환경에 따라 배치 크기를 최대한 늘리면 짧은 시간 내에 학습이 가능합니다.
|
42 |
+
|
43 |
+
### 사전 학습된 모델 지정
|
44 |
+
RVC는 적은 데이터셋으로도 훈련이 가능하도록 사전 훈련된 가중치에서 모델 훈련을 시작합니다. 기본적으로 `rvc-location/pretrained/f0G40k.pth` 및 `rvc-location/pretrained/f0D40k.pth`를 불러옵니다. 학습을 할 시에, 모델 파라미터는 각 save_every_epoch별로 `logs/experiment name/G_{}.pth` 와 `logs/experiment name/D_{}.pth`로 저장이 되는데, 이 경로를 지정함으로써 학습을 재개하거나, 다른 실험에서 학습한 모델의 가중치에서 학습을 시작할 수 있습니다.
|
45 |
+
|
46 |
+
### index의 학습
|
47 |
+
RVC에서는 학습시에 사용된 HuBERT의 feature값을 저장하고, 추론 시에는 학습 시 사용한 feature값과 유사한 feature 값을 탐색해 추론을 진행합니다. 이 탐색을 고속으로 수행하기 위해 사전에 index을 학습하게 됩니다.
|
48 |
+
Index 학습에는 근사 근접 탐색법 라이브러리인 Faiss를 사용하게 됩니다. `/logs/실험명/3_feature256`의 feature값을 불러와, 이를 모두 결합시킨 feature값을 `/logs/실험명/total_fea.npy`로서 저장, 그것을 사용해 학습한 index를`/logs/실험명/add_XXX.index`로 저장합니다.
|
49 |
+
|
50 |
+
### 버튼 설명
|
51 |
+
- モデルのトレーニング (모델 학습): step2b까지 실행한 후, 이 버튼을 눌러 모델을 학습합니다.
|
52 |
+
- 特徴インデックスのトレーニング (특징 지수 훈련): 모델의 훈련 후, index를 학습합니다.
|
53 |
+
- ワンクリックトレーニング (원클릭 트레이닝): step2b까지의 모델 훈련, feature index 훈련을 일괄로 실시합니다.
|
docs/pt/Changelog_pt.md
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
### 2023-10-06
|
2 |
+
- Criamos uma GUI para alteração de voz em tempo real: go-realtime-gui.bat/gui_v1.py (observe que você deve escolher o mesmo tipo de dispositivo de entrada e saída, por exemplo, MME e MME).
|
3 |
+
- Treinamos um modelo RMVPE de extração de pitch melhor.
|
4 |
+
- Otimizar o layout da GUI de inferência.
|
5 |
+
|
6 |
+
### 2023-08-13
|
7 |
+
1-Correção de bug regular
|
8 |
+
- Alterar o número total mínimo de épocas para 1 e alterar o número total mínimo de epoch para 2
|
9 |
+
- Correção de erros de treinamento por não usar modelos de pré-treinamento
|
10 |
+
- Após a separação dos vocais de acompanhamento, limpe a memória dos gráficos
|
11 |
+
- Alterar o caminho absoluto do faiss save para o caminho relativo
|
12 |
+
- Suporte a caminhos com espaços (tanto o caminho do conjunto de treinamento quanto o nome do experimento são suportados, e os erros não serão mais relatados)
|
13 |
+
- A lista de arquivos cancela a codificação utf8 obrigatória
|
14 |
+
- Resolver o problema de consumo de CPU causado pela busca do faiss durante alterações de voz em tempo real
|
15 |
+
|
16 |
+
Atualizações do 2-Key
|
17 |
+
- Treine o modelo de extração de pitch vocal de código aberto mais forte do momento, o RMVPE, e use-o para treinamento de RVC, inferência off-line/em tempo real, com suporte a PyTorch/Onnx/DirectML
|
18 |
+
- Suporte para placas gráficas AMD e Intel por meio do Pytorch_DML
|
19 |
+
|
20 |
+
(1) Mudança de voz em tempo real (2) Inferência (3) Separação do acompanhamento vocal (4) Não há suporte para treinamento no momento, mudaremos para treinamento de CPU; há suporte para inferência RMVPE de gpu por Onnx_Dml
|
21 |
+
|
22 |
+
|
23 |
+
### 2023-06-18
|
24 |
+
- Novos modelos v2 pré-treinados: 32k e 48k
|
25 |
+
- Correção de erros de inferência de modelo não-f0
|
26 |
+
- Para conjuntos de treinamento que excedam 1 hora, faça minibatch-kmeans automáticos para reduzir a forma dos recursos, de modo que o treinamento, a adição e a pesquisa do Index sejam muito mais rápidos.
|
27 |
+
- Fornecer um espaço de brinquedo vocal2guitar huggingface
|
28 |
+
- Exclusão automática de áudios de conjunto de treinamento de atalhos discrepantes
|
29 |
+
- Guia de exportação Onnx
|
30 |
+
|
31 |
+
Experimentos com falha:
|
32 |
+
- ~~Recuperação de recurso: adicionar recuperação de recurso temporal: não eficaz~~
|
33 |
+
- ~~Recuperação de recursos: adicionar redução de dimensionalidade PCAR: a busca é ainda mais lenta~~
|
34 |
+
- ~~Aumento de dados aleatórios durante o treinamento: não é eficaz~~
|
35 |
+
|
36 |
+
Lista de tarefas:
|
37 |
+
- ~~Vocos-RVC (vocoder minúsculo): não é eficaz~~
|
38 |
+
- ~~Suporte de crepe para treinamento: substituído pelo RMVPE~~
|
39 |
+
- ~~Inferência de crepe de meia precisão:substituída pelo RMVPE. E difícil de conseguir.~~
|
40 |
+
- Suporte ao editor de F0
|
41 |
+
|
42 |
+
### 2023-05-28
|
43 |
+
- Adicionar notebook jupyter v2, changelog em coreano, corrigir alguns requisitos de ambiente
|
44 |
+
- Adicionar consoante sem voz e modo de proteção de respiração
|
45 |
+
- Suporte à detecção de pitch crepe-full
|
46 |
+
- Separação vocal UVR5: suporte a modelos dereverb e modelos de-echo
|
47 |
+
- Adicionar nome e versão do experimento no nome do Index
|
48 |
+
- Suporte aos usuários para selecionar manualmente o formato de exportação dos áudios de saída durante o processamento de conversão de voz em lote e a separação vocal UVR5
|
49 |
+
- Não há mais suporte para o treinamento do modelo v1 32k
|
50 |
+
|
51 |
+
### 2023-05-13
|
52 |
+
- Limpar os códigos redundantes na versão antiga do tempo de execução no pacote de um clique: lib.infer_pack e uvr5_pack
|
53 |
+
- Correção do bug de pseudo multiprocessamento no pré-processamento do conjunto de treinamento
|
54 |
+
- Adição do ajuste do raio de filtragem mediana para o algoritmo de reconhecimento de inclinação da extração
|
55 |
+
- Suporte à reamostragem de pós-processamento para exportação de áudio
|
56 |
+
- A configuração "n_cpu" de multiprocessamento para treinamento foi alterada de "extração de f0" para "pré-processamento de dados e extração de f0"
|
57 |
+
- Detectar automaticamente os caminhos de Index na pasta de registros e fornecer uma função de lista suspensa
|
58 |
+
- Adicionar "Perguntas e respostas frequentes" na página da guia (você também pode consultar o wiki do RVC no github)
|
59 |
+
- Durante a inferência, o pitch da colheita é armazenado em cache quando se usa o mesmo caminho de áudio de entrada (finalidade: usando a extração do pitch da colheita, todo o pipeline passará por um processo longo e repetitivo de extração do pitch. Se o armazenamento em cache não for usado, os usuários que experimentarem diferentes configurações de raio de filtragem de timbre, Index e mediana de pitch terão um processo de espera muito doloroso após a primeira inferência)
|
60 |
+
|
61 |
+
### 2023-05-14
|
62 |
+
- Use o envelope de volume da entrada para misturar ou substituir o envelope de volume da saída (pode aliviar o problema de "muting de entrada e ruído de pequena amplitude de saída"). Se o ruído de fundo do áudio de entrada for alto, não é recomendável ativá-lo, e ele não é ativado por padrão (1 pode ser considerado como não ativado)
|
63 |
+
- Suporte ao salvamento de modelos pequenos extraídos em uma frequência especificada (se você quiser ver o desempenho em épocas diferentes, mas não quiser salvar todos os pontos de verificação grandes e extrair manualmente modelos pequenos pelo processamento ckpt todas as vezes, esse recurso será muito prático)
|
64 |
+
- Resolver o problema de "erros de conexão" causados pelo proxy global do servidor, definindo variáveis de ambiente
|
65 |
+
- Oferece suporte a modelos v2 pré-treinados (atualmente, apenas as versões 40k estão disponíveis publicamente para teste e as outras duas taxas de amostragem ainda não foram totalmente treinadas)
|
66 |
+
- Limita o volume excessivo que excede 1 antes da inferência
|
67 |
+
- Ajustou ligeiramente as configurações do pré-processamento do conjunto de treinamento
|
68 |
+
|
69 |
+
|
70 |
+
#######################
|
71 |
+
|
72 |
+
Histórico de registros de alterações:
|
73 |
+
|
74 |
+
### 2023-04-09
|
75 |
+
- Parâmetros de treinamento corrigidos para melhorar a taxa de utilização da GPU: A100 aumentou de 25% para cerca de 90%, V100: 50% para cerca de 90%, 2060S: 60% para cerca de 85%, P40: 25% para cerca de 95%; melhorou significativamente a velocidade de treinamento
|
76 |
+
- Parâmetro alterado: total batch_size agora é por GPU batch_size
|
77 |
+
- Total_epoch alterado: limite máximo aumentado de 100 para 1000; padrão aumentado de 10 para 20
|
78 |
+
- Corrigido o problema da extração de ckpt que reconhecia o pitch incorretamente, causando inferência anormal
|
79 |
+
- Corrigido o problema do treinamento distribuído que salvava o ckpt para cada classificação
|
80 |
+
- Aplicada a filtragem de recursos nan para extração de recursos
|
81 |
+
- Corrigido o problema com a entrada/saída silenciosa que produzia consoantes aleatórias ou ruído (os modelos antigos precisavam ser treinados novamente com um novo conjunto de dados)
|
82 |
+
|
83 |
+
### Atualização 2023-04-16
|
84 |
+
- Adicionada uma mini-GUI de alteração de voz local em tempo real, iniciada com um clique duplo em go-realtime-gui.bat
|
85 |
+
- Filtragem aplicada para bandas de frequência abaixo de 50 Hz durante o treinamento e a inferência
|
86 |
+
- Diminuição da extração mínima de tom do pyworld do padrão 80 para 50 para treinamento e inferência, permitindo que vozes masculinas de tom baixo entre 50-80 Hz não sejam silenciadas
|
87 |
+
- A WebUI suporta a alteração de idiomas de acordo com a localidade do sistema (atualmente suporta en_US, ja_JP, zh_CN, zh_HK, zh_SG, zh_TW; o padrão é en_US se não for suportado)
|
88 |
+
- Correção do reconhecimento de algumas GPUs (por exemplo, falha no reconhecimento da V100-16G, falha no reconhecimento da P4)
|
89 |
+
|
90 |
+
### Atualização de 2023-04-28
|
91 |
+
- Atualizadas as configurações do Index faiss para maior velocidade e qualidade
|
92 |
+
- Removida a dependência do total_npy; o futuro compartilhamento de modelos não exigirá a entrada do total_npy
|
93 |
+
- Restrições desbloqueadas para as GPUs da série 16, fornecendo configurações de inferência de 4 GB para GPUs com VRAM de 4 GB
|
94 |
+
- Corrigido o erro na separação do acompanhamento vocal do UVR5 para determinados formatos de áudio
|
95 |
+
- A mini-GUI de alteração de voz em tempo real agora suporta modelos de pitch não 40k e que não são lentos
|
96 |
+
|
97 |
+
### Planos futuros:
|
98 |
+
Recursos:
|
99 |
+
- Opção de adição: extrair modelos pequenos para cada epoch salvo
|
100 |
+
- Adicionar opção: exportar mp3 adicional para o caminho especificado durante a inferência
|
101 |
+
- Suporte à guia de treinamento para várias pessoas (até 4 pessoas)
|
102 |
+
|
103 |
+
Modelo básico:
|
104 |
+
- Coletar arquivos wav de respiração para adicionar ao conjunto de dados de treinamento para corrigir o problema de sons de respiração distorcidos
|
105 |
+
- No momento, estamos treinando um modelo básico com um conjunto de dados de canto estendido, que será lançado no futuro
|
docs/pt/README.pt.md
ADDED
@@ -0,0 +1,194 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
<h1>Retrieval-based-Voice-Conversion-WebUI</h1>
|
4 |
+
Uma estrutura de conversão de voz fácil de usar baseada em VITS.<br><br>
|
5 |
+
|
6 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange
|
7 |
+
)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI)
|
8 |
+
|
9 |
+
<img src="https://counter.seku.su/cmoe?name=rvc&theme=r34" /><br>
|
10 |
+
|
11 |
+
[![RVC v1](https://img.shields.io/badge/RVCv1-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v1.ipynb)
|
12 |
+
[![RVC v2](https://img.shields.io/badge/RVCv2-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/ipynb/v2.ipynb)
|
13 |
+
[![Licence](https://img.shields.io/github/license/RVC-Project/Retrieval-based-Voice-Conversion-WebUI?style=for-the-badge)](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
14 |
+
[![Huggingface](https://img.shields.io/badge/🤗%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
15 |
+
|
16 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
17 |
+
|
18 |
+
</div>
|
19 |
+
|
20 |
+
------
|
21 |
+
[**Changelog**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/docs/Changelog_EN.md) | [**FAQ (Frequently Asked Questions)**](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/wiki/FAQ-(Frequently-Asked-Questions))
|
22 |
+
|
23 |
+
[**English**](../en/README.en.md) | [**中文简体**](../../README.md) | [**日本語**](../jp/README.ja.md) | [**한국어**](../kr/README.ko.md) ([**韓國語**](../kr/README.ko.han.md)) | [**Türkçe**](../tr/README.tr.md) | [**Português**](../pt/README.pt.md)
|
24 |
+
|
25 |
+
|
26 |
+
Confira nosso [Vídeo de demonstração](https://www.bilibili.com/video/BV1pm4y1z7Gm/) aqui!
|
27 |
+
|
28 |
+
Treinamento/Inferência WebUI:go-web.bat
|
29 |
+
![Traduzido](https://github.com/RafaelGodoyEbert/Retrieval-based-Voice-Conversion-WebUI/assets/78083427/0b894d87-565a-432c-8b5b-45e4a65d5d17)
|
30 |
+
|
31 |
+
GUI de conversão de voz em tempo real:go-realtime-gui.bat
|
32 |
+
![image](https://github.com/RafaelGodoyEbert/Retrieval-based-Voice-Conversion-WebUI/assets/78083427/d172e3e5-35f4-4876-9530-c28246919e9e)
|
33 |
+
|
34 |
+
|
35 |
+
> O dataset para o modelo de pré-treinamento usa quase 50 horas de conjunto de dados de código aberto VCTK de alta qualidade.
|
36 |
+
|
37 |
+
> Dataset de músicas licenciadas de alta qualidade serão adicionados ao conjunto de treinamento, um após o outro, para seu uso, sem se preocupar com violação de direitos autorais.
|
38 |
+
|
39 |
+
> Aguarde o modelo básico pré-treinado do RVCv3, que possui parâmetros maiores, mais dados de treinamento, melhores resultados, velocidade de inferência inalterada e requer menos dados de treinamento para treinamento.
|
40 |
+
|
41 |
+
## Resumo
|
42 |
+
Este repositório possui os seguintes recursos:
|
43 |
+
+ Reduza o vazamento de tom substituindo o recurso de origem pelo recurso de conjunto de treinamento usando a recuperação top1;
|
44 |
+
+ Treinamento fácil e rápido, mesmo em placas gráficas relativamente ruins;
|
45 |
+
+ Treinar com uma pequena quantidade de dados também obtém resultados relativamente bons (>=10min de áudio com baixo ruído recomendado);
|
46 |
+
+ Suporta fusão de modelos para alterar timbres (usando guia de processamento ckpt-> mesclagem ckpt);
|
47 |
+
+ Interface Webui fácil de usar;
|
48 |
+
+ Use o modelo UVR5 para separar rapidamente vocais e instrumentos.
|
49 |
+
+ Use o mais poderoso algoritmo de extração de voz de alta frequência [InterSpeech2023-RMVPE](#Credits) para evitar o problema de som mudo. Fornece os melhores resultados (significativamente) e é mais rápido, com consumo de recursos ainda menor que o Crepe_full.
|
50 |
+
+ Suporta aceleração de placas gráficas AMD/Intel.
|
51 |
+
+ Aceleração de placas gráficas Intel ARC com suporte para IPEX.
|
52 |
+
|
53 |
+
## Preparando o ambiente
|
54 |
+
Os comandos a seguir precisam ser executados no ambiente Python versão 3.8 ou superior.
|
55 |
+
|
56 |
+
(Windows/Linux)
|
57 |
+
Primeiro instale as dependências principais através do pip:
|
58 |
+
```bash
|
59 |
+
# Instale as dependências principais relacionadas ao PyTorch, pule se instaladas
|
60 |
+
# Referência: https://pytorch.org/get-started/locally/
|
61 |
+
pip install torch torchvision torchaudio
|
62 |
+
|
63 |
+
#Para arquitetura Windows + Nvidia Ampere (RTX30xx), você precisa especificar a versão cuda correspondente ao pytorch de acordo com a experiência de https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/issues/ 21
|
64 |
+
#pip instalar tocha torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
65 |
+
|
66 |
+
#Para placas Linux + AMD, você precisa usar as seguintes versões do pytorch:
|
67 |
+
#pip instalar tocha torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2
|
68 |
+
```
|
69 |
+
|
70 |
+
Então pode usar poesia para instalar as outras dependências:
|
71 |
+
```bash
|
72 |
+
# Instale a ferramenta de gerenciamento de dependências Poetry, pule se instalada
|
73 |
+
# Referência: https://python-poetry.org/docs/#installation
|
74 |
+
curl -sSL https://install.python-poetry.org | python3 -
|
75 |
+
|
76 |
+
#Instale as dependências do projeto
|
77 |
+
poetry install
|
78 |
+
```
|
79 |
+
|
80 |
+
Você também pode usar pip para instalá-los:
|
81 |
+
```bash
|
82 |
+
|
83 |
+
for Nvidia graphics cards
|
84 |
+
pip install -r requirements.txt
|
85 |
+
|
86 |
+
for AMD/Intel graphics cards on Windows (DirectML):
|
87 |
+
pip install -r requirements-dml.txt
|
88 |
+
|
89 |
+
for Intel ARC graphics cards on Linux / WSL using Python 3.10:
|
90 |
+
pip install -r requirements-ipex.txt
|
91 |
+
|
92 |
+
for AMD graphics cards on Linux (ROCm):
|
93 |
+
pip install -r requirements-amd.txt
|
94 |
+
```
|
95 |
+
|
96 |
+
------
|
97 |
+
Usuários de Mac podem instalar dependências via `run.sh`:
|
98 |
+
```bash
|
99 |
+
sh ./run.sh
|
100 |
+
```
|
101 |
+
|
102 |
+
## Preparação de outros Pré-modelos
|
103 |
+
RVC requer outros pré-modelos para inferir e treinar.
|
104 |
+
|
105 |
+
```bash
|
106 |
+
#Baixe todos os modelos necessários em https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/
|
107 |
+
python tools/download_models.py
|
108 |
+
```
|
109 |
+
|
110 |
+
Ou apenas baixe-os você mesmo em nosso [Huggingface space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/).
|
111 |
+
|
112 |
+
Aqui está uma lista de pré-modelos e outros arquivos que o RVC precisa:
|
113 |
+
```bash
|
114 |
+
./assets/hubert/hubert_base.pt
|
115 |
+
|
116 |
+
./assets/pretrained
|
117 |
+
|
118 |
+
./assets/uvr5_weights
|
119 |
+
|
120 |
+
Downloads adicionais são necessários se você quiser testar a versão v2 do modelo.
|
121 |
+
|
122 |
+
./assets/pretrained_v2
|
123 |
+
|
124 |
+
Se você deseja testar o modelo da versão v2 (o modelo da versão v2 alterou a entrada do recurso dimensional 256 do Hubert + final_proj de 9 camadas para o recurso dimensional 768 do Hubert de 12 camadas e adicionou 3 discriminadores de período), você precisará baixar recursos adicionais
|
125 |
+
|
126 |
+
./assets/pretrained_v2
|
127 |
+
|
128 |
+
#Se você estiver usando Windows, também pode precisar desses dois arquivos, pule se FFmpeg e FFprobe estiverem instalados
|
129 |
+
ffmpeg.exe
|
130 |
+
|
131 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffmpeg.exe
|
132 |
+
|
133 |
+
ffprobe.exe
|
134 |
+
|
135 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffprobe.exe
|
136 |
+
|
137 |
+
Se quiser usar o algoritmo de extração de tom vocal SOTA RMVPE mais recente, você precisa baixar os pesos RMVPE e colocá-los no diretório raiz RVC
|
138 |
+
|
139 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt
|
140 |
+
|
141 |
+
Para usuários de placas gráficas AMD/Intel, você precisa baixar:
|
142 |
+
|
143 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx
|
144 |
+
|
145 |
+
```
|
146 |
+
|
147 |
+
Os usuários de placas gráficas Intel ARC precisam executar o comando `source /opt/intel/oneapi/setvars.sh` antes de iniciar o Webui.
|
148 |
+
|
149 |
+
Em seguida, use este comando para iniciar o Webui:
|
150 |
+
```bash
|
151 |
+
python infer-web.py
|
152 |
+
```
|
153 |
+
|
154 |
+
Se estiver usando Windows ou macOS, você pode baixar e extrair `RVC-beta.7z` para usar RVC diretamente usando `go-web.bat` no Windows ou `sh ./run.sh` no macOS para iniciar o Webui.
|
155 |
+
|
156 |
+
## Suporte ROCm para placas gráficas AMD (somente Linux)
|
157 |
+
Para usar o ROCm no Linux, instale todos os drivers necessários conforme descrito [aqui](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html).
|
158 |
+
|
159 |
+
No Arch use pacman para instalar o driver:
|
160 |
+
````
|
161 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
162 |
+
````
|
163 |
+
|
164 |
+
Talvez você também precise definir estas variáveis de ambiente (por exemplo, em um RX6700XT):
|
165 |
+
````
|
166 |
+
export ROCM_PATH=/opt/rocm
|
167 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
168 |
+
````
|
169 |
+
Verifique também se seu usuário faz parte do grupo `render` e `video`:
|
170 |
+
````
|
171 |
+
sudo usermod -aG render $USERNAME
|
172 |
+
sudo usermod -aG video $USERNAME
|
173 |
+
````
|
174 |
+
Depois disso, você pode executar o WebUI:
|
175 |
+
```bash
|
176 |
+
python infer-web.py
|
177 |
+
```
|
178 |
+
|
179 |
+
## Credits
|
180 |
+
+ [ContentVec](https://github.com/auspicious3000/contentvec/)
|
181 |
+
+ [VITS](https://github.com/jaywalnut310/vits)
|
182 |
+
+ [HIFIGAN](https://github.com/jik876/hifi-gan)
|
183 |
+
+ [Gradio](https://github.com/gradio-app/gradio)
|
184 |
+
+ [FFmpeg](https://github.com/FFmpeg/FFmpeg)
|
185 |
+
+ [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
186 |
+
+ [audio-slicer](https://github.com/openvpi/audio-slicer)
|
187 |
+
+ [Vocal pitch extraction:RMVPE](https://github.com/Dream-High/RMVPE)
|
188 |
+
+ The pretrained model is trained and tested by [yxlllc](https://github.com/yxlllc/RMVPE) and [RVC-Boss](https://github.com/RVC-Boss).
|
189 |
+
|
190 |
+
## Thanks to all contributors for their efforts
|
191 |
+
<a href="https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors" target="_blank">
|
192 |
+
<img src="https://contrib.rocks/image?repo=RVC-Project/Retrieval-based-Voice-Conversion-WebUI" />
|
193 |
+
</a>
|
194 |
+
|