Table des matières Une plongée approfondie dans le clonage vocal avec SoftVC VITS et Bert-VITS2 Préparer l'ensemble de données Extrait d'une chanson Flux de travail UVR Préparation à l'enregistrement vocal Équipement audio de Cheapskate Flux de travail Audacity trancheur audio Ensemble de données de nettoyage Faire correspondre le volume so-vits-svc Configurer l'environnement Initialisation Télécharger des modèles pré-entraînés Préparation de l'ensemble de données Modifier les configurations Entraînement Inférence Édition audio so-vits-svc-fork Installation Préparation Entraînement Inférence DDSP-SVC Préparation Entraînement Inférence Bert-vits2-V2.3 Initialisation Préparation Transcription Formation et inférence vits-simple-api Ajustements Partager des modèles Dans le , j'ai essayé un peu et je l'ai trouvé intéressant. J'ai donc décidé de former un modèle utilisable avec ma propre voix. post précédent TTS Generation WebUI Ce projet de clonage vocal explore à la fois SVC pour le changement de voix et pour la synthèse vocale. Il n’existe pas d’outil unique qui fasse toutes les tâches. VITS J'ai testé plusieurs outils pour ce projet. La plupart des bons guides, comme , et , sont en chinois. J'ai donc pensé qu'il serait utile de publier mes notes en anglais. ceci ceci ceci Bien que soit archivé depuis quelques mois, probablement à cause de l'oppression, il reste l'outil permettant d'obtenir le meilleur résultat. so-vits-svc D'autres outils associés tels que , , et offrent soit une optimisation plus rapide/litre, plus de fonctionnalités ou de meilleures interfaces. so-vits-svc-fork so-vits-svc-5.0 DDSP-SVC RVC 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é 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. Bert-VITS2 Préparer l'ensemble de données 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. Extrait d'une chanson est l'outil le plus simple pour ce travail. Il y a un qui explique tout en détail. Ultimate Vocal Remover fil Flux de travail UVR Supprimer et extraire Instrumental Modèle : VR-UVR (4_HP-Vocal-UVR) Paramètres : 512 - 10 - GPU Sortie Voix et impure instrumentale Supprimez et extrayez les voix de fond. Modèle : VR - UVR (5_HP-Karaoke-UVR) Paramètres : 512 - 10 - GPU Sortie et voix principale impure vocale de fond Supprimez la réverbération et le bruit. Modèle : VR - UVR-DeEcho-DeReverb & UVR-DeNoise Paramètres : 512 - 10 - GPU - Aucun autre uniquement Sortie vocale principale claire (Facultatif) Utilisation de RipX (non gratuit) pour effectuer un nettoyage fin manuel. Préparation à l'enregistrement vocal 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. Équipement audio de Cheapskate 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. Flux de travail Audacity 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. Réduction de bruit Déréverbe Tronquer le silence Normaliser trancheur audio Utilisez ou pour découper le fichier audio en petits morceaux pour une utilisation ultérieure. audio-slicer audio-slicer (gui) Le paramètre par défaut fonctionne très bien. Ensemble de données de nettoyage 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. Faire correspondre le volume Utilisez à nouveau Audacity avec ; 0 dB devrait le faire. la normalisation du volume so-vits-svc Configurer l'environnement 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 est bien plus rapide et plus pratique que les autres. qu'anaconda 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 Initialisation Télécharger des modèles pré-entraînés pré-entraînement 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 journaux/44k 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 journaux/44k/diffusion 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 pré-train/nsf_hifigan 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 Préparation de l'ensemble de données 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 Modifier les configurations Le fichier se trouve dans configs/config.json : la fréquence d'impression du journal : la fréquence de sauvegarde des points de contrôle : le nombre total d'étapes : nombre de points de contrôle enregistrés, 0 pour illimité. : fp32 Dans mon cas, : plus petit est rapide (plus rugueux), plus grand est lent (mieux). log interval eval interval epochs keep ckpts half_type batch_size 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 Entraînement 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 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. train.py N'hésitez pas à l'arrêter par , et l'entraînement se poursuivra en réexécutant à tout moment. ctrl+c python train.py -c configs/config.json -m 44k Utilisez pour entraîner le modèle de diffusion ; Les étapes de formation sont recommandées à 1/3 du modèle principal. train_diff.py Soyez conscient du surentraînement. Utilisez pour surveiller les tracés et voir s'ils deviennent plats. tensorboard --logdir=./logs/44k Modifiez le de 0,0001 à 0,00005 si nécessaire. learning rate Une fois terminé, partagez/transportez ces fichiers pour inférence. configuration/ config.json diffusion.yaml journaux/44k feature_and_index.pkl kmeans_10000.pt modèle_0.pt G_xxxxx.pt Inférence 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 pour l'accès au réseau local : webUI.py os.system("start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860) Exécutez ; puis accédez à son depuis un navigateur Web. python webUI.py ipaddress:7860 Le webui n'a pas de localisation en anglais, mais serait utile. une traduction immersive La plupart des paramètres fonctionneraient bien avec la valeur par défaut. Référez-vous à et pour apporter des modifications. ceci ceci Téléchargez ces 5 fichiers : et son main model.pt config.json et sa diffusion model.pt diffusion.yaml Soit le modèle de cluster pour parler, soit la récupération de fonctionnalités pour le chant. kmeans_10000.pt feature_and_index.pkl sert uniquement à parler, pas à chanter. Recommander lors de l'utilisation. F0 predictor RMVPE est utile lorsque vous chantez une chanson féminine en utilisant un modèle avec une voix masculine, ou vice versa. Pitch change est le moyen de contrôler la tonalité. Utilisez pour obtenir le discours le plus clair et utilisez pour obtenir le ton le plus proche du modèle. Clustering model/feature retrieval mixing ratio 0.1 0.9 doivent être réglées autour de , cela améliore le résultat entre étapes. shallow diffusion steps 50 30-100 Édition audio 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. so-vits-svc-fork Il s'agit d'un 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 est recommandé. fork changeur de voix Installation 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 Préparation 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 dans . Cette fourchette est d'une taille plus grande que l'originale. batch_size configs/44k/config.json Entraînement svc pre-hubert svc train -t svc train-cluster Inférence Utilisez l'interface graphique avec . Cela nécessite un environnement de bureau local. svcg Ou utilisez CLI avec pour le temps réel et pour la génération. svc vc svc infer -m "logs/44k/xxxxx.pth" -c "configs/config.json" raw/xxx.wav 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). DDSP-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 pour les deux fichiers : section Initialisation pretrain/rmvpe/model.pt pretrain/contentvec/checkpoint_best_legacy_500.pt Préparation 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 Entraînement conda activate DDSP-SVC python train.py -c configs/combsub.yaml python train_diff.py -c configs/diffusion-new.yaml tensorboard --logdir=exp Inférence Il est recommandé d'utiliser car il inclut à la fois le DDSP et le modèle de diffusion. main_diff.py 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 Bert-vits2-V2.3 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' , j'ai utilisé le fork de pour une configuration plus facile. original v3u Initialisation 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 en remplaçant tous par train_ms.py bfloat16 float16 Modifiez pour l'accès au réseau local : webui.py webbrowser.open(f"start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860) Modifiez pour et Data/xxx/config.json batch_size spk2id Préparation 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 pour , et . config.yml dataset_path num_workers keep_ckpts Exécutez pour découper le fichier WAV. python3 audio_slicer.py Nettoyez l'ensemble de données ( ) en supprimant les petits fichiers de moins de 2 secondes. Data/xxx/raw Transcription 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 modèle ; modifiez comme ci-dessous : large short_audio_transcribe.py # 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 pour démarrer la transcription. python3 short_audio_transcribe.py 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 Formation et inférence Exécutez pour démarrer la formation python3 train_ms.py Modifiez pour le chemin du modèle : config.yml model: "models/G_20900.pth" Exécutez pour démarrer webui pour l'inférence python3 webui.py 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. vits-simple-api 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 vers Bert-vits2-V2.3/ vits-simple-api/bert_vits2/ Copiez et dans Bert-vits2-V2.3/Data/xxx/models/G_xxxxx.pth Bert-vits2-V2.3/Data/xxx/config.json vits-simple-api/Model/xxx/ Modifiez pour et selon vos préférences config.py MODEL_LIST Default parameter Modifiez comme ci-dessous : Model/xxx/config.json "data": { "training_files": "Data/train.list", "validation_files": "Data/val.list", "version": "2.3" Vérifiez/modifiez dans comme model_list config.yml [xxx/G_xxxxx.pth, xxx/config.json] Exécutez python app.py Ajustements pour la tonalité, pour le caractère aléatoire, pour la prononciation et pour la vitesse. et s'expliquent d'eux-mêmes SDP Ratio Noise Noise_W Length emotion style Partager des modèles Dans son , 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 . dépôt Hugging Face Fichiers Le 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. modèle Genshin Dans , il existe de nombreux modèles Bert-vits2 fabriqués à partir de streamers et de VTubers chinois populaires. un autre dépôt Il existe déjà des projets créant des Vtubers IA comme et . J'ai hâte de voir comment cette technologie peut changer l'industrie dans un avenir proche. celui-ci celui-ci https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/