Tabla de contenido Una inmersión profunda en la clonación de voz con SoftVC VITS y Bert-VITS2 Preparar conjunto de datos Extracto de una canción Flujos de trabajo de UVR Preparación para la grabación vocal. Equipo de audio de tacaño Flujos de trabajo de audacia cortadora de audio Conjunto de datos de limpieza Emparejar el volumen so-vits-svc Configurar el entorno Inicialización Descargar modelos previamente entrenados Preparación del conjunto de datos Editar configuraciones Capacitación Inferencia Edición de audio so-vits-svc-tenedor Instalación Preparación Capacitación Inferencia DDSP-SVC Preparación Capacitación Inferencia Bert-vits2-V2.3 Inicialización Preparación Transcripción Entrenamiento e inferencia vits-simple-api Ajustes Compartir modelos En la , probé un poco de y lo encontré interesante. Entonces decidí entrenar un modelo utilizable con mi propia voz. publicación anterior TTS Generation WebUI Este proyecto de clonación de voz explora tanto SVC para cambio de voz como para texto a voz. No existe una única herramienta que haga todos los trabajos. VITS He probado varias herramientas para este proyecto. Muchas de las buenas guías, como , y , están en chino. Entonces pensé que sería útil publicar mis notas en inglés. ésta ésta ésta Aunque lleva unos meses archivado, probablemente debido a la opresión, sigue siendo la herramienta para obtener el mejor resultado. so-vits-svc Otras herramientas relacionadas, como , , y , proporcionan una optimización más rápida por litro, más funciones o mejores interfaces. so-vits-svc-fork so-vits-svc-5.0 DDSP-SVC RVC Pero con suficiente tiempo y recursos, ninguna de estas alternativas puede competir con el resultado superior generado por el so-vits-svc original. Para TTS, una nueva herramienta llamada funciona fantásticamente y ya ha madurado con su lanzamiento final el mes pasado. Tiene algunos casos de uso muy diferentes, por ejemplo, la creación de contenido de audio. Bert-VITS2 Preparar conjunto de datos Los archivos de audio del conjunto de datos deben estar en formato WAV, 44100 Hz, 16 bits, mono, idealmente entre 1 y 2 horas. Extracto de una canción es la herramienta más sencilla para este trabajo. Hay un que explica todo detalladamente. Ultimate Vocal Remover hilo Flujos de trabajo de UVR Quitar y extraer instrumental Modelo: VR - UVR(4_HP-Vocal-UVR) Configuraciones: 512 - 10 - GPU Salida y vocal sucia. instrumental Elimina y extrae voces de fondo. Modelo: VR - UVR(5_HP-Karaoke-UVR) Configuraciones: 512 - 10 - GPU Salida y voz principal sucia. de voz de fondo Elimina la reverberación y el ruido. Modelo: VR - UVR-DeEcho-DeReverb y UVR-DeNoise Configuraciones: 512 - 10 - GPU - No solo otros Salida de voz principal limpia (Opcional) Uso de RipX (no gratuito) para realizar una limpieza fina manual. Preparación para la grabación vocal Es mejor grabar en una habitación tratada con un micrófono de condensador; de lo contrario, utilice un micrófono direccional o dinámico para reducir el ruido. Equipo de audio de tacaño La primera vez que me metí en la música fue durante la escuela secundaria, con el Sennheiser MX500 azul y el Koss Porta Pro. Todavía recuerdo la primera vez que estaba grabando una canción en un Sony VAIO con Cool Edit Pro. Hoy en día, todavía me resisto a gastar mucho dinero en hardware de audio como aficionado porque es literalmente un agujero negro que chupa dinero. No obstante, realmente aprecio la confiabilidad de esos equipos de producción baratos. La parte principal de mi configuración es un Behringer UCA202 y es perfecto para mis casos de uso. Lo compré por $10 durante una bajada de precio. Se trata de la llamada "Interfaz de audio", pero básicamente es sólo una tarjeta de sonido con múltiples puertos. Utilicé cables RCA a TRS de 3,5 mm para mis auriculares, un K240 semiabierto para salida normal y un HD669/MDR7506 cerrado para salida de monitor. Los tres auriculares mencionados cuestan menos de $100 por el precio normal. Y hay clones de Samson, Tascam, Knox Gear y más por menos de $50. Para el dispositivo de entrada, estoy usando un micrófono dinámico por el bien de mis ruidos ambientales. Es una copia SM58 (Pyle) + una grabadora Tascam DR-05 (a modo de amplificador). Otros clones como SL84c o wm58 también lo harían. Utilizo un cable XLR a TRS de 3,5 mm para conectar el micrófono a la entrada MIC/externa de la grabadora, y luego uso un cable AUX para conectar entre la salida de línea de la grabadora y la entrada del UCA202. No se recomienda comprar una “interfaz de audio” y un amplificador dedicado para replicar mi configuración. Una tarjeta de sonido USB c-media de 10 dólares debería ser suficiente. El modelo Syba que tenía es capaz de “preamplificar” micrófonos dinámicos directamente e incluso algunos micrófonos con alimentación fantasma de gama baja. La configuración puede ser extremadamente económica ($40~60), pero con UCA202 y DR-05, el sonido es mucho más limpio. Y realmente me gustan los controles físicos, la versatilidad y la portabilidad de mi vieja y buena grabadora digital. Flujos de trabajo de audacia Aunque cuando me pagaban como diseñador, estaba bastante contento con Audition. Pero para uso personal en un proyecto divertido, Audacity es la forma de evitar el mal caótico de Adobe. Reducción de ruido dereverberación Truncar silencio Normalizar cortadora de audio Utilice o para dividir el archivo de audio en trozos pequeños para su uso posterior. audio-slicer audio-slicer (gui) La configuración predeterminada funciona muy bien. Conjunto de datos de limpieza Retire los muy cortos y vuelva a cortar los que aún tengan más de 10 segundos. En el caso de un conjunto de datos grande, elimine todos los que tengan menos de 4 segundos. En el caso de un conjunto de datos pequeño, elimínelos solo en menos de 2 segundos. Si es necesario, realice una inspección manual de cada archivo. Combinar sonoridad Utilice Audacity nuevamente con ; 0db debería hacerlo. Normalización de sonoridad so-vits-svc Configurar el entorno El entorno virtual es esencial para ejecutar múltiples herramientas Python dentro de un sistema. Solía usar máquinas virtuales y Docker, pero ahora descubrí que es mucho más rápida y práctica que las demás. anaconda Cree un nuevo entorno para so-vits-svc y actívelo. conda create -n so-vits-svc python=3.8 conda activate so-vits-svc Luego, instale los requisitos. 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 Inicialización Descargar modelos previamente entrenados pre-entrenamiento 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 registros/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 registros/44k/difusión wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/resolve/main/fix_pitch_add_vctk_600k/model_0.pt (Alternativa) wget https://huggingface.co/datasets/ms903/DDSP-SVC-4.0/resolve/main/pre-trained-model/model_0.pt (Alternativa) wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/blob/main/hubertsoft_fix_pitch_add_vctk_500k/model_0.pt pre-entrenamiento/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 Preparación del conjunto de datos Coloque todos los archivos audio.wav preparados en 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 Editar configuraciones El archivo se encuentra en configs/config.json : la frecuencia de impresión del registro: la frecuencia de guardar los puntos de control : pasos totales : números de puntos de control guardados, 0 para ilimitado. : fp32 En mi caso, : cuanto más pequeño, más rápido (más tosco), más grande, más lento (mejor). log interval eval interval epochs keep ckpts half_type batch_size Tamaño de lote recomendado por VRAM: 4=6G;6=8G;10=12G;14=16G;20=24G Mantener el valor predeterminado para configs/diffusion.yaml Capacitación 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 Sobre los pasos del entrenamiento: Utilice para entrenar el modelo principal; Por lo general, se podrían utilizar entre 20.000 y 30.000, y 50.000 y más serían suficientes. Esto puede tardar unos días dependiendo de la velocidad de la GPU. train.py Siéntase libre de detenerlo presionando y continuará entrenando volviendo a ejecutar en cualquier momento. ctrl+c python train.py -c configs/config.json -m 44k Utilice para entrenar el modelo de difusión; Se recomiendan pasos de entrenamiento a 1/3 del modelo principal. train_diff.py Tenga cuidado con el sobreentrenamiento. Utilice para monitorear los gráficos y ver si se aplana. tensorboard --logdir=./logs/44k Cambie la de 0,0001 a 0,00005 si es necesario. learning rate Cuando termine, comparta/transporte estos archivos para realizar inferencias. configuración/ configuración.json difusión.yaml registros/44k feature_and_index.pkl kmeans_10000.pt modelo_0.pt G_xxxxxx.pt Inferencia Es hora de probar el modelo entrenado. Preferiría Webui por la conveniencia de modificar los parámetros. Pero antes de activarlo, edite las siguientes líneas en para acceder a LAN: webUI.py os.system("start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860) Ejecute ; luego acceda a su desde un navegador web. python webUI.py ipaddress:7860 La webui no tiene localización en inglés, pero sería útil. Immersive Translate La mayoría de los parámetros funcionarían bien con el valor predeterminado. Consulte y para realizar cambios. this this Sube estos 5 archivos: y su main model.pt config.json y su diffusion model.pt diffusion.yaml Ya sea el modelo de clúster para hablar o la recuperación de funciones para cantar. kmeans_10000.pt feature_and_index.pkl es sólo para hablar, no para cantar. Recomiende cuando lo use. F0 predictor RMVPE es útil cuando se canta una canción femenina usando un modelo con voz masculina, o viceversa. Pitch change es la forma de controlar el tono. Utilice para obtener el discurso más claro y utilice para obtener el tono más cercano al modelo. Clustering model/feature retrieval mixing ratio 0.1 0.9 deben establecerse alrededor de , mejora el resultado en pasos. shallow diffusion steps 50 30-100 Edición de audio Este procedimiento es opcional. Sólo para la producción de una mejor canción. No entraré en detalles sobre esto ya que el software de edición de audio, o el llamado DAW (estación de trabajo de audio digital), que estoy usando no es gratuito. No tengo intención de defender el software propietario a pesar de que toda la industria tiene muros de pago y de código cerrado. Audacity admite multipista, efectos y mucho más. También carga algunos complementos VST avanzados. No es difícil encontrar tutoriales sobre cómo masterizar canciones con Audacity. Normalmente, el proceso de masterización debe consistir en mezclar/equilibrar, ecualizar/comprimir, reverberación e imágenes. Cuanto más avanzada sea la herramienta, más sencillo será el proceso. Definitivamente dedicaré más tiempo a adoptar Audacity para mi proceso de masterización en el futuro, y recomiendo a todos que lo hagan. so-vits-svc-tenedor Esta es una de so-vits-svc con soporte en tiempo real y los modelos son compatibles. Más fácil de usar pero no es compatible con el modelo Diffusion. Para un cambio de voz dedicado en tiempo real, se recomienda un . bifurcación cambiador de voz Instalación 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 Preparación Coloque los archivos .wav del conjunto de datos en so-vits-svc-fork/dataset_raw svc pre-resample svc pre-config Edite un en . Este tenedor es de un tamaño mayor que el original. batch_size configs/44k/config.json Capacitación svc pre-hubert svc train -t svc train-cluster Inferencia Utilice la GUI con . Esto requiere un entorno de escritorio local. svcg O use CLI con en tiempo real y para generar. svc vc svc infer -m "logs/44k/xxxxx.pth" -c "configs/config.json" raw/xxx.wav DDSP-SVC requiere menos recursos de hardware y se ejecuta más rápido que so-vits-svc. Admite modelos de difusión y en tiempo real (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 Consulte la para los dos archivos: sección Inicialización pretrain/rmvpe/model.pt pretrain/contentvec/checkpoint_best_legacy_500.pt Preparación python draw.py python preprocess.py -c configs/combsub.yaml python preprocess.py -c configs/diffusion-new.yaml Editar configs/ batch_size: 32 (16 for diffusion) cache_all_data: false cache_device: 'cuda' cache_fp16: false Capacitación conda activate DDSP-SVC python train.py -c configs/combsub.yaml python train_diff.py -c configs/diffusion-new.yaml tensorboard --logdir=exp Inferencia Se recomienda utilizar ya que incluye DDSP y modelo de difusión. main_diff.py python main_diff.py -i "input.wav" -diff "model_xxxxxx.pt" -o "output.wav" GUI en tiempo real para clonación de voz: python gui_diff.py Bert-vits2-V2.3 Esta es una herramienta TTS que es completamente diferente a todo lo anterior. Al usarlo, ya he creado varios audiolibros con mi voz para mis padres y ellos realmente lo disfrutan. En lugar de usar el , utilicé la bifurcación de para una configuración más sencilla. original v3u Inicialización 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 Descargue modelos previamente entrenados (incluye chino, japonés e inglés): 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 Crear una carpeta de modelo de personaje mkdir -p Data/xxx/models/ Descargar modelos 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 Edite reemplazando todo por train_ms.py bfloat16 float16 Edite para acceso LAN: webui.py webbrowser.open(f"start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860) Edite para y Data/xxx/config.json batch_size spk2id Preparación Flujo de trabajo similar al de la . sección anterior Elimine el ruido y el silencio, normalice y luego coloque el archivo WAV sin cortar en . Data/xxx/raw Edite para , y . config.yml dataset_path num_workers keep_ckpts Ejecute para dividir el archivo WAV. python3 audio_slicer.py Limpie el conjunto de datos ( ) eliminando archivos pequeños que tengan menos de 2 segundos. Data/xxx/raw Transcripción Instalar susurro pip install git+https://github.com/openai/whisper.git Para desactivar la detección automática de idioma, configúrelo solo en inglés y use un modelo ; edite como se muestra a continuación: 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) Ejecute para iniciar la transcripción. python3 short_audio_transcribe.py Vuelva a muestrear el conjunto de datos cortado: python3 resample.py --sr 44100 --in_dir ./Data/zizek/raw/ --out_dir ./Data/zizek/wavs/ Transcripción previa al proceso: python3 preprocess_text.py --transcription-path ./Data/zizek/esd.list Generar configuración de función BERT: python3 bert_gen.py --config-path ./Data/zizek/configs/config.json Entrenamiento e inferencia Ejecute para comenzar a entrenar python3 train_ms.py Edite para la ruta del modelo: config.yml model: "models/G_20900.pth" Ejecute para iniciar webui para realizar inferencias python3 webui.py vits-simple-api es una interfaz web para utilizar modelos entrenados. Lo uso principalmente por su compatibilidad con textos largos que el proyecto original no tiene. 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 (Opcional) Copie archivos de modelo previamente entrenados de a Bert-vits2-V2.3/ vits-simple-api/bert_vits2/ Copie y Bert-vits2-V2.3/Data/xxx/models/G_xxxxx.pth Bert-vits2-V2.3/Data/xxx/config.json vits-simple-api/Model/xxx/ Edite para y como prefiera config.py MODEL_LIST Default parameter Edite como se muestra a continuación: Model/xxx/config.json "data": { "training_files": "Data/train.list", "validation_files": "Data/val.list", "version": "2.3" Verifique/Edite en como model_list config.yml [xxx/G_xxxxx.pth, xxx/config.json] Ejecute python app.py Ajustes para tono, para aleatoriedad, para pronunciación y para velocidad. y se explican por sí solos. SDP Ratio Noise Noise_W Length emotion style Compartir modelos En su , hay muchos modelos VITS compartidos por otros. Puede probarlo primero y luego descargar los modelos deseados desde . repositorio Hugging Face Archivos El es muy utilizado en algunas comunidades de creación de contenidos debido a su alta calidad. Contiene cientos de caracteres, aunque sólo se admiten chino y japonés. modelo Genshin En , hay muchos modelos de Bert-vits2 creados por streamers y VTubers chinos populares. otro repositorio Ya hay proyectos que crean AI Vtubers como y . Estoy deseando ver cómo esta tecnología puede cambiar la industria en un futuro próximo. este este https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/