Table des matières
Dans le post précédent , j'ai essayé un peu TTS Generation WebUI et je l'ai trouvé intéressant. J'ai donc décidé de former un modèle utilisable avec ma propre voix.
Ce projet de clonage vocal explore à la fois SVC pour le changement de voix et VITS pour la synthèse vocale. Il n’existe pas d’outil unique qui fasse toutes les tâches.
J'ai testé plusieurs outils pour ce projet. La plupart des bons guides, comme ceci , ceci et ceci , sont en chinois. J'ai donc pensé qu'il serait utile de publier mes notes en anglais.
Bien que so-vits-svc soit archivé depuis quelques mois, probablement à cause de l'oppression, il reste l'outil permettant d'obtenir le meilleur résultat.
D'autres outils associés tels que so-vits-svc-fork , so-vits-svc-5.0 , DDSP-SVC et RVC offrent soit une optimisation plus rapide/litre, plus de fonctionnalités ou de meilleures interfaces.
Mais avec suffisamment de temps et de ressources, aucune de ces alternatives ne peut rivaliser avec le résultat supérieur généré par le so-vits-svc original.
Pour TTS, un nouvel outil appelé Bert-VITS2 fonctionne à merveille et a déjà mûri avec sa version finale le mois dernier. Il existe des cas d’utilisation très différents, par exemple la création de contenu audio.
Les fichiers audio de l'ensemble de données doivent être au format WAV, 44 100 Hz, 16 bits, mono, idéalement 1 à 2 heures.
Ultimate Vocal Remover est l'outil le plus simple pour ce travail. Il y a un fil qui explique tout en détail.
Modèle : VR-UVR (4_HP-Vocal-UVR)
Paramètres : 512 - 10 - GPU
Sortie Voix instrumentale et impure
Modèle : VR - UVR (5_HP-Karaoke-UVR)
Paramètres : 512 - 10 - GPU
Sortie vocale de fond et voix principale impure
Modèle : VR - UVR-DeEcho-DeReverb & UVR-DeNoise
Paramètres : 512 - 10 - GPU - Aucun autre uniquement
Sortie vocale principale claire
Il est préférable d'enregistrer dans une pièce traitée avec un microphone à condensateur, sinon, utilisez un microphone directionnel ou dynamique pour réduire le bruit.
La toute première fois que je me suis lancé dans la musique, c'était au lycée, avec le Sennheiser MX500 bleu et le Koss Porta Pro. Je me souviens encore de la première fois que j'enregistrais une chanson sur un Sony VAIO avec Cool Edit Pro.
De nos jours, je résiste encore à dépenser beaucoup d’argent en matériel audio en tant qu’amateur car c’est littéralement un trou noir qui aspire de l’argent.
Néanmoins, j’apprécie vraiment la fiabilité de ces équipements de production bon marché.
La partie centrale de ma configuration est un Behringer UCA202, et il est parfait pour mes cas d'utilisation. Je l'ai acheté 10$ lors d'une baisse de prix.
Il s'agit d'une soi-disant « interface audio », mais essentiellement d'une simple carte son dotée de plusieurs ports. J'ai utilisé des câbles RCA vers TRS 3,5 mm pour mes écouteurs, un K240 semi-ouvert pour une sortie régulière et un HD669/MDR7506 fermé pour la sortie moniteur.
Les trois écouteurs mentionnés coûtent moins de 100 $ pour le prix normal. Et il existe des clones de Samson, Tascam, Knox Gear et bien d'autres pour moins de 50 $.
Pour le périphérique d'entrée, j'utilise un microphone dynamique pour le bien de mes bruits environnementaux. Il s'agit d'une copie SM58 (Pyle) + un enregistreur Tascam DR-05 (en guise d'amplificateur). D'autres clones comme SL84c ou wm58 le feraient aussi.
J'utilise un câble XLR vers TRS 3,5 mm pour connecter le microphone à l'entrée MIC/externe de l'enregistreur, puis j'utilise un câble AUX pour connecter entre la sortie ligne de l'enregistreur et l'entrée de l'UCA202.
Il n'est pas recommandé d'acheter une « interface audio » et un amplificateur dédié pour reproduire ma configuration. Une carte son USB c-media à 10 $ devrait suffire. Le modèle Syba que je possédais est capable de « pré-amplifier » directement des microphones dynamiques et même certains microphones à alimentation fantôme bas de gamme.
La configuration peut être extrêmement bon marché (40 à 60 $), mais avec l'UCA202 et le DR-05, le son est beaucoup plus propre. Et j’aime vraiment les commandes physiques, la polyvalence et la portabilité de mon bon vieux enregistreur numérique.
Même si lorsque j'étais payé en tant que designer, j'étais plutôt satisfait d'Audition. Mais pour un usage personnel sur un projet amusant, Audacity est le moyen d'éviter le mal chaotique d'Adobe.
Utilisez audio-slicer ou audio-slicer (gui) pour découper le fichier audio en petits morceaux pour une utilisation ultérieure.
Le paramètre par défaut fonctionne très bien.
Supprimez ceux qui sont très courts et retranchez ceux qui durent encore plus de 10 secondes.
Dans le cas d'un ensemble de données volumineux, supprimez tout ce qui dure moins de 4 secondes. Dans le cas d'un petit ensemble de données, supprimez-les seulement en moins de 2 secondes.
Si nécessaire, effectuez une inspection manuelle pour chaque fichier.
Utilisez à nouveau Audacity avec la normalisation du volume ; 0 dB devrait le faire.
L'environnement virtuel est essentiel pour exécuter plusieurs outils Python dans un seul système. J'avais l'habitude d'utiliser des machines virtuelles et Docker, mais maintenant, j'ai découvert qu'anaconda est bien plus rapide et plus pratique que les autres.
Créez un nouvel environnement pour so-vits-svc et activez-le.
conda create -n so-vits-svc python=3.8 conda activate so-vits-svc
Ensuite, installez les exigences.
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
Mettez tous les fichiers audio.wav préparés dans 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
Le fichier se trouve dans configs/config.json
log interval
: la fréquence d'impression du journal eval interval
: la fréquence de sauvegarde des points de contrôle epochs
: le nombre total d'étapes keep ckpts
: nombre de points de contrôle enregistrés, 0 pour illimité. half_type
: fp32 Dans mon cas, batch_size
: plus petit est rapide (plus rugueux), plus grand est lent (mieux).
Taille_de lot recommandée par VRAM : 4=6G;6=8G;10=12G;14=16G;20=24G
Conserver la valeur par défaut pour configs/diffusion.yaml
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
Sur les étapes de formation :
Utilisez train.py
pour entraîner le modèle principal ; généralement, 20 000 à 30 000 seraient utilisables, et 50 000 et plus seraient suffisants. Cela peut prendre quelques jours en fonction de la vitesse du GPU.
N'hésitez pas à l'arrêter par ctrl+c
, et l'entraînement se poursuivra en réexécutant python train.py -c configs/config.json -m 44k
à tout moment.
Utilisez train_diff.py
pour entraîner le modèle de diffusion ; Les étapes de formation sont recommandées à 1/3 du modèle principal.
Soyez conscient du surentraînement. Utilisez tensorboard --logdir=./logs/44k
pour surveiller les tracés et voir s'ils deviennent plats.
Modifiez le learning rate
de 0,0001 à 0,00005 si nécessaire.
Une fois terminé, partagez/transportez ces fichiers pour inférence.
config.json
diffusion.yaml
Il est temps d'essayer le modèle entraîné. Je préférerais Webui pour la commodité de modifier les paramètres.
Mais avant de le lancer, modifiez les lignes suivantes dans webUI.py
pour l'accès au réseau local :
os.system("start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860)
Exécutez python webUI.py
; puis accédez à son ipaddress:7860
depuis un navigateur Web.
Le webui n'a pas de localisation en anglais, mais une traduction immersive serait utile.
La plupart des paramètres fonctionneraient bien avec la valeur par défaut. Référez-vous à ceci et ceci pour apporter des modifications.
Téléchargez ces 5 fichiers :
main model.pt
et son config.json
diffusion model.pt
et sa diffusion.yaml
Soit le modèle de cluster kmeans_10000.pt
pour parler, soit la récupération de fonctionnalités feature_and_index.pkl
pour le chant.
F0 predictor
sert uniquement à parler, pas à chanter. Recommander RMVPE
lors de l'utilisation.
Pitch change
est utile lorsque vous chantez une chanson féminine en utilisant un modèle avec une voix masculine, ou vice versa.
Clustering model/feature retrieval mixing ratio
est le moyen de contrôler la tonalité. Utilisez 0.1
pour obtenir le discours le plus clair et utilisez 0.9
pour obtenir le ton le plus proche du modèle.
shallow diffusion steps
doivent être réglées autour de 50
, cela améliore le résultat entre 30-100
étapes.
Cette procédure est facultative. Juste pour produire une meilleure chanson.
Je n'entrerai pas dans les détails à ce sujet puisque le logiciel d'édition audio, ou ce qu'on appelle DAW (digital audio workstation), que j'utilise n'est pas libre. Je n’ai pas l’intention de prôner les logiciels propriétaires, même si l’ensemble du secteur est payant et fermé.
Audacity prend en charge le multipiste, les effets et bien plus encore. Il charge également certains plugins VST avancés.
Il n'est pas difficile de trouver des tutoriels sur la maîtrise de chansons avec Audacity.
En règle générale, le processus de mastering doit comprendre le mixage/équilibrage, l'égalisation/compression, la réverbération et l'imagerie. Plus l’outil est avancé, plus le processus sera simple.
Je consacrerai certainement plus de temps à l'adoption d'Audacity pour mon processus de mastering à l'avenir, et je recommande à tout le monde de le faire.
Il s'agit d'un fork so-vits-svc avec support en temps réel, et les modèles sont compatibles. Plus facile à utiliser mais ne prend pas en charge le modèle de diffusion. Pour un changement de voix dédié en temps réel, un changeur de voix est recommandé.
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
Placez les fichiers .wav de l'ensemble de données dans so-vits-svc-fork/dataset_raw
svc pre-resample svc pre-config
Modifiez un batch_size
dans configs/44k/config.json
. Cette fourchette est d'une taille plus grande que l'originale.
svc pre-hubert svc train -t svc train-cluster
Utilisez l'interface graphique avec svcg
. Cela nécessite un environnement de bureau local.
Ou utilisez CLI avec svc vc
pour le temps réel et svc infer -m "logs/44k/xxxxx.pth" -c "configs/config.json" raw/xxx.wav
pour la génération.
DDSP-SVC nécessite moins de ressources matérielles et s'exécute plus rapidement que so-vits-svc. Il prend en charge les modèles en temps réel et en diffusion (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
Reportez-vous à la section Initialisation pour les deux fichiers :
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
Modifier 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
Il est recommandé d'utiliser main_diff.py
car il inclut à la fois le DDSP et le modèle de diffusion.
python main_diff.py -i "input.wav" -diff "model_xxxxxx.pt" -o "output.wav"
Interface graphique en temps réel pour le clonage vocal :
python gui_diff.py
Il s'agit d'un outil TTS complètement différent de tout ce qui précède. En l'utilisant, j'ai déjà créé plusieurs livres audio avec ma voix pour mes parents, et ils l'apprécient vraiment.
Au lieu d'utiliser l' original , j'ai utilisé le fork de v3u pour une configuration plus facile.
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
Téléchargez des modèles pré-entraînés (comprend le chinois, le japonais et l'anglais) :
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
Créez un dossier de modèles de personnages mkdir -p Data/xxx/models/
Téléchargez les modèles de base :
!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
Modifiez train_ms.py
en remplaçant tous bfloat16
par float16
Modifiez webui.py
pour l'accès au réseau local :
webbrowser.open(f"start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860)
Modifiez Data/xxx/config.json
pour batch_size
et spk2id
Flux de travail similaire à celui de la section précédente .
Supprimez le bruit et le silence, normalisez, puis placez le fichier WAV non découpé dans Data/xxx/raw
.
Modifiez config.yml
pour dataset_path
, num_workers
et keep_ckpts
.
Exécutez python3 audio_slicer.py
pour découper le fichier WAV.
Nettoyez l'ensemble de données ( Data/xxx/raw
) en supprimant les petits fichiers de moins de 2 secondes.
Installez Whisper pip install git+https://github.com/openai/whisper.git
Pour désactiver la détection automatique de la langue, réglez-la sur l'anglais uniquement et utilisez large
modèle ; modifiez short_audio_transcribe.py
comme ci-dessous :
# 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)
Exécutez python3 short_audio_transcribe.py
pour démarrer la transcription.
Ré-échantillonnez l'ensemble de données découpé : python3 resample.py --sr 44100 --in_dir ./Data/zizek/raw/ --out_dir ./Data/zizek/wavs/
Transcription de prétraitement : python3 preprocess_text.py --transcription-path ./Data/zizek/esd.list
Générer la configuration des fonctionnalités BERT : python3 bert_gen.py --config-path ./Data/zizek/configs/config.json
Exécutez python3 train_ms.py
pour démarrer la formation
Modifiez config.yml
pour le chemin du modèle :
model: "models/G_20900.pth"
Exécutez python3 webui.py
pour démarrer webui pour l'inférence
vits-simple-api est une interface Web permettant d'utiliser des modèles entraînés. Je l'utilise principalement pour son support de texte long que le projet original n'a pas.
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
(Facultatif) Copiez les fichiers de modèle pré-entraînés de Bert-vits2-V2.3/
vers vits-simple-api/bert_vits2/
Copiez Bert-vits2-V2.3/Data/xxx/models/G_xxxxx.pth
et Bert-vits2-V2.3/Data/xxx/config.json
dans vits-simple-api/Model/xxx/
Modifiez config.py
pour MODEL_LIST
et Default parameter
selon vos préférences
Modifiez Model/xxx/config.json
comme ci-dessous :
"data": { "training_files": "Data/train.list", "validation_files": "Data/val.list", "version": "2.3"
Vérifiez/modifiez model_list
dans config.yml
comme [xxx/G_xxxxx.pth, xxx/config.json]
Exécutez python app.py
SDP Ratio
pour la tonalité, Noise
pour le caractère aléatoire, Noise_W
pour la prononciation et Length
pour la vitesse. emotion
et style
s'expliquent d'eux-mêmes
Dans son dépôt Hugging Face , il existe de nombreux modèles VITS partagés par d'autres. Vous pouvez d'abord l'essayer, puis télécharger les modèles souhaités à partir de Fichiers .
Le modèle Genshin est largement utilisé dans certaines communautés de création de contenu en raison de sa haute qualité. Il contient des centaines de caractères, bien que seuls le chinois et le japonais soient pris en charge.
Dans un autre dépôt , il existe de nombreux modèles Bert-vits2 fabriqués à partir de streamers et de VTubers chinois populaires.
Il existe déjà des projets créant des Vtubers IA comme celui-ci et celui-ci . J'ai hâte de voir comment cette technologie peut changer l'industrie dans un avenir proche.
https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/