Inhaltsverzeichnis
Im vorherigen Beitrag habe ich ein wenig WebUI der TTS-Generation ausprobiert und fand es interessant. Also beschloss ich, ein brauchbares Modell mit meiner eigenen Stimme zu trainieren.
Dieses Projekt zum Klonen von Stimmen untersucht sowohl SVC für Sprachänderung als auch VITS für Text-to-Speech. Es gibt kein einziges Tool, das alle Aufgaben erledigt.
Ich habe mehrere Tools für dieses Projekt getestet. Viele der guten Leitfäden wie dieser , dieser und dieser sind auf Chinesisch. Deshalb dachte ich, es wäre nützlich, meine Notizen auf Englisch zu veröffentlichen.
Obwohl so-vits-svc wahrscheinlich aufgrund von Unterdrückung einige Monate lang archiviert wurde, ist es immer noch das Werkzeug für das beste Ergebnis.
Andere verwandte Tools wie so-vits-svc-fork , so-vits-svc-5.0 , DDSP-SVC und RVC bieten entweder eine schnellere/Liter-Optimierung, mehr Funktionen oder bessere Schnittstellen.
Aber mit genügend Zeit und Ressourcen kann keine dieser Alternativen mit dem überlegenen Ergebnis des ursprünglichen so-vits-svc mithalten.
Für TTS funktioniert ein neues Tool namens Bert-VITS2 hervorragend und ist mit seiner endgültigen Veröffentlichung im letzten Monat bereits ausgereift. Es gibt einige sehr unterschiedliche Anwendungsfälle, beispielsweise die Erstellung von Audioinhalten.
Die Audiodateien des Datensatzes sollten im WAV-Format, 44100 Hz, 16 Bit, Mono, idealerweise 1–2 Stunden lang sein.
Ultimate Vocal Remover ist das einfachste Werkzeug für diesen Job. Es gibt einen Thread , der alles ausführlich erklärt.
Modell: VR - UVR(4_HP-Vocal-UVR)
Einstellungen: 512 – 10 – GPU
Output Instrumental und unsauberer Gesang
Modell: VR - UVR(5_HP-Karaoke-UVR)
Einstellungen: 512 – 10 – GPU
Hintergrundgesang und unsauberer Hauptgesang werden ausgegeben
Modell: VR – UVR-DeEcho-DeReverb und UVR-DeNoise
Einstellungen: 512 – 10 – GPU – Nein, nur andere
Gibt den Hauptgesang sauber aus
Es ist besser, in einem behandelten Raum mit einem Kondensatormikrofon aufzunehmen, andernfalls verwenden Sie ein Richtmikrofon oder ein dynamisches Mikrofon, um Geräusche zu reduzieren.
Das erste Mal, dass ich mich mit Musik beschäftigte, war während der High School, mit dem blauen Sennheiser MX500 und dem Koss Porta Pro. Ich erinnere mich noch an das erste Mal, als ich mit Cool Edit Pro einen Song auf einem Sony VAIO aufgenommen habe.
Heutzutage weigere ich mich immer noch, als Amateur viel Geld für Audio-Hardware auszugeben, weil es sich im wahrsten Sinne des Wortes um ein schwarzes Loch handelt, das Geld saugt.
Dennoch schätze ich die Zuverlässigkeit dieser billigen Produktionsgeräte sehr.
Das Herzstück meines Setups ist ein Behringer UCA202, und er ist perfekt für meine Anwendungsfälle. Ich habe es während eines Preisverfalls für 10 $ gekauft.
Es handelt sich um ein sogenanntes „Audio Interface“, aber im Grunde nur um eine Soundkarte mit mehreren Anschlüssen. Ich habe für meine Kopfhörer Cinch-zu-3,5-mm-TRS-Kabel verwendet, für die normale Ausgabe ein halboffenes K240s und für die Monitorausgabe ein geschlossenes HD669/MDR7506.
Alle drei genannten Kopfhörer liegen zum Normalpreis unter 100 US-Dollar. Und es gibt Klone von Samson, Tascam, Knox Gear und mehr für weniger als 50 US-Dollar.
Als Eingabegerät nutze ich aus Gründen der Umgebungsgeräusche ein dynamisches Mikrofon. Es handelt sich um eine SM58-Kopie (Pyle) + einen Tascam DR-05-Recorder (als Verstärker). Andere Klone wie SL84c oder wm58 würden es auch tun.
Ich verwende ein XLR-auf-3,5-mm-TRS-Kabel, um das Mikrofon an den MIC/External-Eingang des Rekorders anzuschließen, und verwende dann ein AUX-Kabel, um den Line-Ausgang des Rekorders mit dem Eingang des UCA202 zu verbinden.
Es wird nicht empfohlen, ein „Audio-Interface“ und einen speziellen Verstärker zu kaufen, um mein Setup zu reproduzieren. Eine c-media USB-Soundkarte für 10 US-Dollar sollte ausreichen. Das Syba-Modell, das ich besaß, ist in der Lage, dynamische Mikrofone direkt „vorzuverstärken“ und sogar einige Mikrofone mit Phantomspeisung der unteren Preisklasse.
Das Setup kann extrem günstig sein (40–60 $), aber mit UCA202 und DR-05 ist der Klang viel sauberer. Und ich mag die physischen Bedienelemente, die Vielseitigkeit und die Tragbarkeit meines alten guten Digitalrekorders wirklich.
Obwohl ich als Designer bezahlt wurde, war ich mit Audition ziemlich zufrieden. Aber für den persönlichen Gebrauch an einem unterhaltsamen Projekt ist Audacity die Möglichkeit, das chaotische Übel von Adobe zu vermeiden.
Verwenden Sie Audio-Slicer oder Audio-Slicer (GUI) , um die Audiodatei für die spätere Verwendung in kleine Stücke zu schneiden.
Die Standardeinstellung funktioniert super.
Entfernen Sie die sehr kurzen Stücke und schneiden Sie die Stücke, die noch länger als 10 Sekunden sind, erneut in Scheiben.
Entfernen Sie bei einem großen Datensatz alle Daten, die kürzer als 4 Sekunden sind. Entfernen Sie bei kleinen Datensätzen diese erst nach weniger als 2 Sekunden.
Führen Sie bei Bedarf eine manuelle Prüfung für jede einzelne Datei durch.
Verwenden Sie Audacity erneut mit Loudness Normalization . 0db sollte es tun.
Eine virtuelle Umgebung ist unerlässlich, um mehrere Python-Tools in einem System auszuführen. Früher habe ich VMs und Docker verwendet, aber jetzt habe ich festgestellt, dass Anaconda viel schneller und praktischer ist als die anderen.
Erstellen Sie eine neue Umgebung für so-vits-svc und aktivieren Sie sie.
conda create -n so-vits-svc python=3.8 conda activate so-vits-svc
Installieren Sie dann die Anforderungen.
git clone https://github.com/svc-develop-team/so-vits-svc cd so-vits-svc pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 #for linux pip install -r requirements.txt #for windows pip install -r requirements_win.txt pip install --upgrade fastapi==0.84.0 pip install --upgrade gradio==3.41.2 pip install --upgrade pydantic==1.10.12 pip install fastapi uvicorn
wget https://huggingface.co/WitchHuntTV/checkpoint_best_legacy_500.pt/resolve/main/checkpoint_best_legacy_500.pt
wget https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/rmvpe.pt
wget https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_D_320000.pth
wget https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_G_320000.pth
wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/resolve/main/fix_pitch_add_vctk_600k/model_0.pt
(Alternative) wget https://huggingface.co/datasets/ms903/DDSP-SVC-4.0/resolve/main/pre-trained-model/model_0.pt
(Alternative) wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/blob/main/hubertsoft_fix_pitch_add_vctk_500k/model_0.pt
wget -P pretrain/ https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-v1/nsf_hifigan_20221211.zip
unzip -od pretrain/nsf_hifigan pretrain/nsf_hifigan_20221211.zip
Legen Sie alle vorbereiteten audio.wav-Dateien in dataset_raw/character
cd so-vits-svc python resample.py --skip_loudnorm python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug python preprocess_hubert_f0.py --use_diff
Die Datei befindet sich unter configs/config.json
log interval
: Die Häufigkeit des Druckens des eval interval
: Die Häufigkeit des Speicherns von Prüfpunkten. epochs
: Gesamtschritte. keep ckpts
: Anzahl der gespeicherten Prüfpunkte, 0 für unbegrenzt. half_type
: fp32 In meinem Fall, batch_size
: je kleiner, desto schneller (rauer), je größer, desto langsamer (besser).
Empfohlene Batchgröße pro VRAM: 4=6G;6=8G;10=12G;14=16G;20=24G
Behalten Sie die Standardeinstellung für configs/diffusion.yaml
bei
python cluster/train_cluster.py --gpu python train_index.py -c configs/config.json python train.py -c configs/config.json -m 44k python train_diff.py -c configs/diffusion.yaml
Zu den Trainingsschritten:
Verwenden Sie train.py
um das Hauptmodell zu trainieren. Normalerweise wären 20.000 bis 30.000 nutzbar, und 50.000 und mehr wären gut genug. Dies kann je nach GPU-Geschwindigkeit einige Tage dauern.
Sie können es jederzeit mit ctrl+c
stoppen und das Training fortsetzen, indem python train.py -c configs/config.json -m 44k
jederzeit erneut ausführen.
Verwenden Sie train_diff.py
, um das Diffusionsmodell zu trainieren. Trainingsschritte werden bei 1/3 des Hauptmodells empfohlen.
Achten Sie auf Übertraining. Verwenden Sie tensorboard --logdir=./logs/44k
, um die Diagramme zu überwachen und festzustellen, ob sie flach werden.
Ändern Sie die learning rate
bei Bedarf von 0,0001 auf 0,00005.
Wenn Sie fertig sind, teilen/transportieren Sie diese Dateien für Rückschlüsse.
config.json
diffusion.yaml
Es ist Zeit, das trainierte Modell auszuprobieren. Ich würde Webui bevorzugen, weil ich die Parameter bequem anpassen kann.
Bearbeiten Sie jedoch vor dem Starten die folgenden Zeilen in webUI.py
für den LAN-Zugriff:
os.system("start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860)
Führen Sie python webUI.py
aus. Greifen Sie dann über einen Webbrowser auf die ipaddress:7860
zu.
Das Webui verfügt über keine englische Lokalisierung, aber Immersive Translate wäre hilfreich.
Die meisten Parameter würden mit dem Standardwert gut funktionieren. Lesen Sie hier und hier, um Änderungen vorzunehmen.
Laden Sie diese 5 Dateien hoch:
main model.pt
und seine config.json
diffusion model.pt
und seine diffusion.yaml
Entweder Clustermodell kmeans_10000.pt
zum Sprechen oder Feature-Retrieval feature_and_index.pkl
zum Singen.
F0 predictor
dient nur zum Sprechen, nicht zum Singen. Empfehlen Sie RMVPE
bei der Verwendung.
Pitch change
ist nützlich, wenn Sie ein weibliches Lied mit einem Model mit männlicher Stimme singen oder umgekehrt.
Clustering model/feature retrieval mixing ratio
ist die Möglichkeit, den Ton zu steuern. Verwenden Sie 0.1
um die klarste Sprache zu erhalten, und 0.9
um den dem Modell am nächsten kommenden Ton zu erhalten.
shallow diffusion steps
sollten auf etwa 50
eingestellt werden, das Ergebnis wird bei 30-100
Schritten verbessert.
Dieses Verfahren ist optional. Nur um einen besseren Song zu produzieren.
Ich werde nicht näher darauf eingehen, da die von mir verwendete Audiobearbeitungssoftware bzw. die sogenannte DAW (Digital Audio Workstation) nicht kostenlos ist. Ich habe nicht die Absicht, proprietäre Software zu befürworten, auch wenn die gesamte Branche kostenpflichtig ist und Closed-Source-Software verwendet.
Audacity unterstützt Multitrack, Effekte und vieles mehr. Es lädt auch einige erweiterte VST-Plugins.
Es ist nicht schwer, Tutorials zum Mastern von Songs mit Audacity zu finden.
Typischerweise sollte der Mastering-Prozess Mischung/Balancing, EQ/Komprimierung, Hall und Bildbearbeitung umfassen. Je fortschrittlicher das Tool ist, desto einfacher wird der Prozess sein.
Ich werde in Zukunft definitiv mehr Zeit damit verbringen, Audacity für meinen Mastering-Prozess einzusetzen, und ich empfehle jedem, dies zu tun.
Dies ist ein So-Vits-SVC- Fork mit Echtzeitunterstützung und die Modelle sind kompatibel. Einfacher zu verwenden, unterstützt jedoch nicht das Diffusionsmodell. Für dedizierte Sprachänderungen in Echtzeit wird ein Sprachwechsler empfohlen.
conda create -n so-vits-svc-fork python=3.10 pip conda activate so-vits-svc-fork git clone https://github.com/voicepaw/so-vits-svc-fork cd so-vits-svc-fork python -m pip install -U pip setuptools wheel pip install -U torch torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install -U so-vits-svc-fork pip install click sudo apt-get install libportaudio2
Legen Sie die WAV-Datensatzdateien in so-vits-svc-fork/dataset_raw
svc pre-resample svc pre-config
Bearbeiten Sie eine batch_size
in configs/44k/config.json
. Diese Gabel ist größer als das Original.
svc pre-hubert svc train -t svc train-cluster
Verwenden Sie die GUI mit svcg
. Dies erfordert eine lokale Desktop-Umgebung.
Oder verwenden Sie CLI mit svc vc
für Echtzeit und svc infer -m "logs/44k/xxxxx.pth" -c "configs/config.json" raw/xxx.wav
zum Generieren.
DDSP-SVC benötigt weniger Hardwareressourcen und läuft schneller als so-vits-svc. Es unterstützt sowohl Echtzeit- als auch Diffusionsmodelle (Diff-SVC).
conda create -n DDSP-SVC python=3.8 conda activate DDSP-SVC git clone https://github.com/yxlllc/DDSP-SVC cd DDSP-SVC pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt
Weitere Informationen zu den beiden Dateien finden Sie im Abschnitt „Initialisierung“ :
pretrain/rmvpe/model.pt pretrain/contentvec/checkpoint_best_legacy_500.pt
python draw.py python preprocess.py -c configs/combsub.yaml python preprocess.py -c configs/diffusion-new.yaml
configs/
batch_size: 32 (16 for diffusion) cache_all_data: false cache_device: 'cuda' cache_fp16: false
conda activate DDSP-SVC python train.py -c configs/combsub.yaml python train_diff.py -c configs/diffusion-new.yaml tensorboard --logdir=exp
Es wird empfohlen, main_diff.py
zu verwenden, da es sowohl DDSP als auch das Diffusionsmodell enthält.
python main_diff.py -i "input.wav" -diff "model_xxxxxx.pt" -o "output.wav"
Echtzeit-GUI für das Klonen von Stimmen:
python gui_diff.py
Dies ist ein TTS-Tool, das sich von allem oben genannten völlig unterscheidet. Ich habe damit bereits mehrere Hörbücher mit meiner Stimme für meine Eltern erstellt und sie haben großen Spaß daran.
Anstatt das Original zu verwenden, habe ich zur einfacheren Einrichtung den Fork von v3u verwendet.
conda create -n bert-vits2 python=3.9 conda activate bert-vits2 git clone https://github.com/v3ucn/Bert-vits2-V2.3.git cd Bert-vits2-V2.3 pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118 --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt
Laden Sie vorab trainierte Modelle herunter (einschließlich Chinesisch, Japanisch und Englisch):
wget -P slm/wavlm-base-plus/ https://huggingface.co/microsoft/wavlm-base-plus/resolve/main/pytorch_model.bin wget -P emotional/clap-htsat-fused/ https://huggingface.co/laion/clap-htsat-fused/resolve/main/pytorch_model.bin wget -P emotional/wav2vec2-large-robust-12-ft-emotion-msp-dim/ https://huggingface.co/audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim/resolve/main/pytorch_model.bin wget -P bert/chinese-roberta-wwm-ext-large/ https://huggingface.co/hfl/chinese-roberta-wwm-ext-large/resolve/main/pytorch_model.bin wget -P bert/bert-base-japanese-v3/ https://huggingface.co/cl-tohoku/bert-base-japanese-v3/resolve/main/pytorch_model.bin wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.bin wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.generator.bin wget -P bert/deberta-v2-large-japanese/ https://huggingface.co/ku-nlp/deberta-v2-large-japanese/resolve/main/pytorch_model.bin
Erstellen Sie einen Charaktermodellordner mkdir -p Data/xxx/models/
Basismodelle herunterladen:
!wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/DUR_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/D_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/G_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/WD_0.pth #More options https://openi.pcl.ac.cn/Stardust_minus/Bert-VITS2/modelmanage/model_filelist_tmpl?name=Bert-VITS2_2.3%E5%BA%95%E6%A8%A1 https://huggingface.co/Erythrocyte/bert-vits2_base_model/tree/main https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/tree/main
Bearbeiten Sie train_ms.py
, indem Sie alle bfloat16
durch float16
ersetzen
Bearbeiten Sie webui.py
für den LAN-Zugriff:
webbrowser.open(f"start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860)
Bearbeiten Sie Data/xxx/config.json
für batch_size
und spk2id
Ähnlicher Arbeitsablauf wie im vorherigen Abschnitt .
Entfernen Sie Rauschen und Stille, normalisieren Sie sie und legen Sie dann die ungeschnittene WAV-Datei in Data/xxx/raw
ab.
Bearbeiten Sie config.yml
für dataset_path
, num_workers
und keep_ckpts
.
Führen Sie python3 audio_slicer.py
aus, um die WAV-Datei zu segmentieren.
Bereinigen Sie den Datensatz ( Data/xxx/raw
), indem Sie kleine Dateien entfernen, die weniger als 2 Sekunden dauern.
Installieren Sie Whisper pip install git+https://github.com/openai/whisper.git
Um die automatische Spracherkennung zu deaktivieren, stellen Sie sie auf „Nur Englisch“ ein und verwenden Sie large
Modell. Bearbeiten Sie short_audio_transcribe.py
wie folgt:
# set the spoken language to english print('language: en') lang = 'en' options = whisper.DecodingOptions(language='en') result = whisper.decode(model, mel, options) # set to use large model parser.add_argument("--whisper_size", default="large") #Solve error "Given groups=1, weight of size [1280, 128, 3], expected input[1, 80, 3000] to have 128 channels, but got 80 channels instead" while using large model mel = whisper.log_mel_spectrogram(audio,n_mels = 128).to(model.device)
Führen Sie python3 short_audio_transcribe.py
aus, um die Transkription zu starten.
Erneutes Abtasten des segmentierten Datensatzes: python3 resample.py --sr 44100 --in_dir ./Data/zizek/raw/ --out_dir ./Data/zizek/wavs/
Transkription vorverarbeiten: python3 preprocess_text.py --transcription-path ./Data/zizek/esd.list
Generieren Sie die BERT-Funktionskonfiguration: python3 bert_gen.py --config-path ./Data/zizek/configs/config.json
Führen Sie python3 train_ms.py
aus, um mit dem Training zu beginnen
Bearbeiten Sie config.yml
für den Modellpfad:
model: "models/G_20900.pth"
Führen Sie python3 webui.py
aus, um Webui für Rückschlüsse zu starten
vits-simple-api ist ein Web-Frontend zur Verwendung trainierter Modelle. Ich verwende dies hauptsächlich wegen der Langtextunterstützung, die das ursprüngliche Projekt nicht hat.
git clone https://github.com/Artrajz/vits-simple-api git pull https://github.com/Artrajz/vits-simple-api cd vits-simple-api conda create -n vits-simple-api python=3.10 pip conda activate vits-simple-api && pip install -r requirements.txt
(Optional) Kopieren Sie vorab trainierte Modelldateien von Bert-vits2-V2.3/
nach vits-simple-api/bert_vits2/
Kopieren Sie Bert-vits2-V2.3/Data/xxx/models/G_xxxxx.pth
und Bert-vits2-V2.3/Data/xxx/config.json
nach vits-simple-api/Model/xxx/
Bearbeiten Sie config.py
für MODEL_LIST
und Default parameter
nach Ihren Wünschen
Bearbeiten Sie Model/xxx/config.json
wie folgt:
"data": { "training_files": "Data/train.list", "validation_files": "Data/val.list", "version": "2.3"
Überprüfen/bearbeiten Sie model_list
in config.yml
als [xxx/G_xxxxx.pth, xxx/config.json]
Führen Sie python app.py
aus
SDP Ratio
für Ton, Noise
für Zufälligkeit, Noise_W
für Aussprache und Length
für Geschwindigkeit. emotion
und style
sind selbsterklärend
Im Hugging Face-Repo gibt es viele VITS-Modelle, die von anderen geteilt werden. Sie können es zunächst ausprobieren und dann die gewünschten Modelle unter Dateien herunterladen.
Das Genshin-Modell wird aufgrund seiner hohen Qualität in einigen Communities zur Erstellung von Inhalten häufig verwendet. Es enthält Hunderte von Zeichen, obwohl nur Chinesisch und Japanisch unterstützt werden.
In einem anderen Repo gibt es viele Bert-vits2-Modelle, die aus beliebten chinesischen Streamern und VTubern stammen.
Es gibt bereits Projekte, die KI-Vtuber wie dieses und dieses herstellen. Ich freue mich darauf, wie diese Technologie die Branche in naher Zukunft verändern kann.
https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/