Home Ciencia y Tecnología Cómo construí una tubería de clonación de voz de audiolibro de bricolaje...

Cómo construí una tubería de clonación de voz de audiolibro de bricolaje usando gpt-sovits y peces-discurso

46
0

Prendas

Mi último artículo sobre clonación de voz es hace más de un año, y aquí estamos nuevamente por adoptar algunos últimos avances. Al consultar alguna fuente china, como este weblog y este video, intentaba adoptar nuevas herramientas para mi servicio de audiolibros, como Cosyvoice, F5-TTS, GPT-Sovits y Fish-discurso.

Pero antes de comenzar, recomiendo:

Instale Miniconda para la cordura de la dependencia

wget  && sudo chmod +x Miniconda3-latest-Linux-x86_64.sh && bash Miniconda3-latest-Linux-x86_64.sh

Configurar el entorno Pytorch según sea necesario y confirmar con python -m torch.utils.collect_env

Instalar nvtop Si se prefiere sudo apt set up nvtop

Gpt-sovits

Este proyecto está hecho por el mismo grupo de personas de SO-VITS-SVC. La calidad del modelo mejoró mucho de V2 a V4. Aunque al hacer

TTS de texto largo, los errores son inevitables, es lo suficientemente bueno para mi caso de uso.

En el momento de escribir este articil, lanzaron una nueva versión 20250606v2pro que puede tener algunas diferencias desde que estaba usando la versión 20250422v4.

Pero, siempre puede usar su “paquete de Home windows” que llena con todos los modelos y funciona en los servidores de Linux a pesar de sus

Nombre, por lo que está destinado a proporcionar una experiencia más fácil de usar “un solo clic”.

Instalar en Linux

git clone  && cd GPT-SoVITS
conda create -n GPTSoVits python=3.10
conda activate GPTSoVits
#auto set up script
bash set up.sh --source HF --download-uvr5
#(non-obligatory) handbook set up
pip set up -r extra-req.txt --no-deps
pip set up -r necessities.txt

Instalar FFMPEG y otros DEPS

sudo apt set up ffmpeg
sudo apt set up libsox-dev

#(non-obligatory for troubleshooting)
conda set up -c conda-forge 'ffmpeg<7'
pip set up -U gradio
python -m nltk.downloader averaged_perceptron_tagger_eng

(Opcional) Descargue modelos ASR previos al detenido para chino

git lfs set up
cd instruments/asr/fashions/
git clone  instruments/asr/fashions/speech_fsmn_vad_zh-cn-16k-common-pytorch
git clone  instruments/asr/fashions/punc_ct-transformer_zh-cn-common-vocab272727-pytorch
git clone  instruments/asr/fashions/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch

Después de todo hecho, corre GRADIO_SHARE=0 GRADIO_ANALYTICS_ENABLED=0 DISABLE_TELEMETRY=1 DO_NOT_TRACK=1 python -m webui.py Para iniciar el servidor y luego acceder a través de http://ip:9874/

Conjunto de datos de 0 fetch

preparación para grabación

Usé Audacity en lugar de UVR5 porque la grabación es limpia y clara.

Use la cortadora de audio incorporada de WebUI para cortar el nuevo registro.wav y colocar grabaciones antiguas (si las hay) todos juntos debajo output/slicer_opt

Use la herramienta ASR de lotes incorporada con Whisper más rápido, ya que esta vez estoy haciendo un modelo multilingüe.

Estos problemas están relacionados exclusivamente con la arquitectura antigua de GPU. No se preocupe por los nuevos usuarios de GPU (30×0/40×0).

Solución de problemas 1 RuntimeError: parallel_for failed: cudaErrorNoKernelImageForDevice: no kernel picture is offered for execution on the gadget.

pip uninstall -y ctranslate2
pip set up ctranslate2==3.24.0

Solución de problemas 2 'iwrk': array([], dfitpack_int), 'u': array([], float),

pip uninstall numpy scipy
pip set up numba==0.60.0 numpy==1.26.4 scipy

Después de terminar la transcripción, use la herramienta de etiquetado incorporada (Subfix) para eliminar muestras malas. Si la página net no aparece, use ip:9871 a mano. Elija Audio y elimine el audio, guarde el archivo cuando esté terminado.

1-GPT-SOVITS-TTS

Formato 1A-Dataset

Full los campos vacíos y haga clic Set One-Click on Formatting:

#Textual content labelling file
/house/username/GPT-SoVITS/output/asr_opt/slicer_opt.record

#Audio dataset folder
output/slicer_opt
Entrenamiento de 1B-Wonderful sintonizado

Entrenamiento de 1BA-SOVITS

Usar batch measurement en 1, complete epoch en 5 y save_every_epoch en 1.

Entrenamiento de 1BB-GPT

Para esta parte, mi batch measurement es 6 con DPO enabled. Las épocas de transmisión complete deben ser de alrededor de 5-15, ajustar la frecuencia de guardar según las necesidades.

Solución de problemas para las antiguas GPU

Error: cuFFT would not assist indicators of half kind with compute

functionality lower than SM_53, however the gadget containing enter half tensor

solely has SM_52.

Fix1: Eidt webui.pyagregue una nueva línea después from multiprocessing import cpu_count con is_half = False

Fix2: editar GPT_SoVITS/s2_train.pyagregar hps.practice.fp16_run = False al comienzo (entre con torch.backends.cudnn.benchmark = False)

1c-inferencia

hacer clic refreshing mannequin paths y seleccionar modelo en ambas listas

Controlar Allow Parallel Inference Model entonces open TTS Inference WebUIesto necesita un tiempo para cargar, acceder manualmente ip:9872 si es necesario.

Resolución de problemas para ValueError: As a result of a critical vulnerability concern in torch.load arreglar pip set up transformers==4.43

Configuración de inferencia:

  • E3.CKPT
  • E15.pth
  • Audio de referencia principal con texto y audio de referencia múltiple
  • Cortar por cada punzón
  • top_k 5
  • TOP_P 1
  • Temperatura 0.9
  • Penalización de repetición 2
  • Speed_factor 1.3

Mantenga todo lo demás predeterminado.

Para encontrar el mejor peso GPT, parámetros y semillas aleatorias, la primera inferencia en un gran bloque de texto y recoger algunas oraciones problemáticas para la próxima inferencia. Luego, ajuste el peso y los parámetros de GPT para que el problema desaparezca mientras está en un número de semilla fija. Una vez el mejor

Se encuentran el peso y los parámetros de GPT, corríjalos y luego jueguen con el número de semilla de diferencia para refinar el resultado closing. Tome nota sobre los parámetros cuando

La inferencia se vuelve perfecta para el uso futuro.

Discurso de pescado

El discurso de pescado es contribuido por las mismas personas de Bert-VITS2 que usé durante mucho tiempo.

Siguiendo sus documentos oficiales para instalar la versión 1.4 (desafortunadamente, V1.5 tiene un problema de calidad de sonido mientras se hace finos)

git clone --branch v1.4.3  && cd fish-speech

conda create -n fish-speech python=3.10
conda activate fish-speech

pip3 set up torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1

apt set up libsox-dev ffmpeg 

apt set up build-essential 
    cmake 
    libasound-dev 
    portaudio19-dev 
    libportaudio2 
    libportaudiocpp0

pip3 set up -e .

Descargue los modelos requeridos

huggingface-cli obtain fishaudio/fish-speech-1.4 --local-dir checkpoints/fish-speech-1.4

Preparar el conjunto de datos

mkdir knowledge
cp -r /house/username/GPT-SoVITS/output/slicer_opt knowledge/
python instruments/whisper_asr.py --audio-dir knowledge/slicer_opt --save-dir knowledge/slicer_opt --compute-type float32

python instruments/vqgan/extract_vq.py knowledge 
    --num-workers 1 --batch-size 16 
    --config-name "firefly_gan_vq" 
    --checkpoint-path "checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth"
	
python instruments/llama/build_dataset.py 
    --input "knowledge" 
    --output "knowledge/protos" 
    --text-extension .lab 
    --num-workers 16

Editar parámetros por nano fish_speech/configs/text2semantic_finetune.yaml y empieza a entrenar

python fish_speech/practice.py --config-name text2semantic_finetune 
    mission=$mission 
    [email protected]_config=r_8_alpha_16

Nota:

  • Los números predeterminados son demasiado altos para mi configuración, por lo que ambos num_workers y batch_size debe bajar de acuerdo con los núcleos de CPU y VRAM.
  • Para la primera carrera, me puse max_steps: 10000 y val_check_interval: 1000 tener 5 modelos que tienen pasos más bajos con cierta diversidad.
  • Cosas como lr, weight_decay y num_warmup_steps Se puede ajustar aún más a este artículo. Mi entorno es lr: 1e-5, weight_decay: 1e-6, num_warmup_steps: 500.
  • Para verificar las métricas de capacitación como la curva de pérdida, ejecutar tensorboard --logdir fish-speech/outcomes/tensorboard/version_xx/ y acceso localhost:6006 Vía navegador. Decide el sobreajuste con el gráfico y actúe con el resultado de la inferencia para cada punto de management.
  • Al principio descubrí que el sobreajuste comienza alrededor de 5000 pasos. Entonces AA Second Coaching para 5000 pasos y encontrar el mejor resultado es step_000004000.ckpt.
  • La capacitación requiere una GPU más nueva con BF16 y sin solución hasta ahora.
  • Al entrenar un modelo para inferencias en una GPU más antigua, use precision: 32-true en fish_speech/configs/text2semantic_finetune.yaml y consequence
  • += (self.lora_dropout(x).to(torch.float32) @
  • self.lora_A.to(torch.float32).transpose(0, 1) @
  • self.lora_B.to(torch.float32).transpose(0, 1)) *
  • self.scaling.to(torch.float32) en/house/username/miniconda3/envs/fish-speech/lib/python3.10/site-packages/loralib/layers.py.

El entrenamiento tomaría muchas horas en GPU débil. Después de terminar, convierta los pesos de Lora

python instruments/llama/merge_lora.py 
    --lora-config r_8_alpha_16 
    --base-weight checkpoints/fish-speech-1.4 
    --lora-weight outcomes/$mission/checkpoints/step_000005000.ckpt 
    --output checkpoints/fish-speech-1.4-yth-lora/

Generar fichas rápidas y semánticas

python instruments/vqgan/inference.py 
    -i "1.wav" 
    --checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth"

Solución de problemas para la antigua GPU 1 Unable to load any of {libcudnn_ops.so.9.1.0, libcudnn_ops.so.9.1, libcudnn_ops.so.9, libcudnn_ops.so}

pip uninstall -y ctranslate2
pip set up ctranslate2==3.24.0

Solución de problemas para la antigua GPU 2 ImportError: can't import title 'is_callable_allowed' from partially initialized module 'torch._dynamo.trace_rules'

conda set up pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1  pytorch-cuda=11.8 -c pytorch -c nvidia

Hazlo accesible desde LAN nano instruments/run_webui.py

app.launch(server_name="0.0.0.0", server_port=7860, show_api=True)

Cambiar el --llama-checkpoint-path al recién entrenado Lora y comenzar webui (agregado --half para que mi antigua GPU evite el error BF16)

GRADIO_SHARE=0 GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 GRADIO_ANALYTICS_ENABLED=0 DISABLE_TELEMETRY=1 DO_NOT_TRACK=1 python -m instruments.webui 
    --llama-checkpoint-path "checkpoints/fish-speech-1.4-yth-lora" 
    --decoder-checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth" 
    --decoder-config-name firefly_gan_vq 
    --half

Parámetros para inferencia

  • Habilitar audio de referencia
  • Verifique la normalización del texto
  • Interativo rápido Lenth 200
  • Prime-P 0.8
  • Temperatura 0.7
  • Penalización de repetición 1.5
  • Sembrar

Nota:

  • Número más alto para compensar el modelo sobrefiitado, número más bajo para el modelo subestimado.
  • Cierto espacio de puntuación o pestaña puede activar la generación de ruido. Texto
  • Normalización Suponga abordar este problema, pero a veces todavía necesito
  • para encontrar y reemplazar.

Sin embargo, un error Unfavourable code discovered ocurre bastante frecuente al inferir sin solución por ahora. Abandonar.

Cosivaza

Cosyvoice es uno de los kits de herramientas de Funaudiollm, que se desarrolló por el mismo equipo del Qwen de Alibaba, uso mucho.

Instalar

git clone --recursive  && cd CosyVoice
git submodule replace --init --recursive
conda create -n cosyvoice -y python=3.10
conda activate cosyvoice
conda set up -y -c conda-forge pynini==2.1.5
sudo apt-get set up sox libsox-dev -y
pip set up -r necessities.txt

Descargar modelos previos a la aparición

git lfs set up
mkdir -p pretrained_models
git clone  pretrained_models/CosyVoice2-0.5B
git clone  pretrained_models/CosyVoice-300M
git clone -SFT pretrained_models/CosyVoice-300M-SFT
git clone -Instruct pretrained_models/CosyVoice-300M-Instruct

Correr con

GRADIO_SHARE=0 GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 GRADIO_ANALYTICS_ENABLED=0 DISABLE_TELEMETRY=1 DO_NOT_TRACK=1 python -m  webui.py --port 50000 --model_dir pretrained_models/CosyVoice-300M

Solución de problemas “Glibcxx_3.4.29 ‘no encontrado” con esto

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
strings $CONDA_PREFIX/lib/libstdc++.so.6 | grep GLIBCXX

nano ~/.bashrc
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH

discover / -name "libstdc++.so*"
rm /house/username/anaconda3/lib/python3.11/site-packages/../../libstdc++.so.6
ln -s /house/username/text-generation-webui/installer_files/env/lib/libstdc++.so.6.0.29 /house/username/anaconda3/lib/python3.11/site-packages/../../libstdc++.so.6

Termina funcionando bien pero no tan bien como GPT-Sovits. Espero que su versión 3.0 pueda bombearlo.

Conversión de voz

Tanto RVC como SEED-VC están destinados a reemplazar mi vieja instancia SO-VITS-SVC.

Devolución de recuperación-conversión

Instalar

git clone  && cd Retrieval-based-Voice-Conversion-WebUI
conda create -n rvc -y python=3.8
conda activate rvc
pip set up torch torchvision torchaudio
pip set up pip==24.0
pip set up -r necessities.txt
python instruments/download_models.py
sudo apt set up ffmpeg
wget 

Correr con python infer-web.pyrellene a continuación y luego haga clic en botones paso a paso con la configuración predeterminada:

Enter the experiment title:/path/to/uncooked/

Solución de problemas “habilitado = hps.practice.fp16_run”

VC de semillas

Instalar

git clone  && cd Retrieval-based-Voice-Conversion-WebUI
conda create -n seedvc -y python=3.10
conda activate seedvc
pip set up -r necessities.txt
GRADIO_SHARE=0 GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 GRADIO_ANALYTICS_ENABLED=0 DISABLE_TELEMETRY=1 DO_NOT_TRACK=1 python app.py --enable-v1 --enable-v2

Ajustes

#V2
Diffusion Steps: 100
Size Regulate: 1
Intelligibility CFG Fee: 0
Similarity CFG Fee: 1
Prime-p: 1
Temperature: 1
Repetition Penalty: 2
convert type/emotion/accent: test

#V1
Diffusion Steps: 100
Size Regulate: 1
Inference CFG Fee: 1
Use F0 conditioned mannequin: test
Auto F0 modify: test
Pitch shift: 0

Capacitación

python practice.py --config /house/username/seed-vc/configs/presets/config_dit_mel_seed_uvit_whisper_base_f0_44k.yml --dataset-dir /house/username/GPT-SoVITS-v4/output/slicer_opt --run-name username --batch-size 6 --max-steps 10000 --max-epochs 10000 --save-every 1000 --num-workers 1

speed up launch train_v2.py --dataset-dir /house/username/GPT-SoVITS-v4/output/slicer_opt --run-name username-v2 --batch-size 6 --max-steps 2000 --max-epochs 2000 --save-every 200 --num-workers 0 --train-cfm

Usando puntos de management

#Voice Conversion Net UI
GRADIO_SHARE=0 GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 GRADIO_ANALYTICS_ENABLED=0 DISABLE_TELEMETRY=1 DO_NOT_TRACK=1 python app_vc.py --checkpoint ./runs/test01/ft_model.pth --config ./configs/presets/config_dit_mel_seed_uvit_whisper_base_f0_44k.yml --fp16 False

#Singing Voice Conversion Net UI
GRADIO_SHARE=0 GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 GRADIO_ANALYTICS_ENABLED=0 DISABLE_TELEMETRY=1 DO_NOT_TRACK=1 python app_svc.py --checkpoint ./runs/username/DiT_epoch_00029_step_08000.pth --config ./configs/presets/config_dit_mel_seed_uvit_whisper_base_f0_44k.yml --fp16 False

#V2 mannequin Net UI
GRADIO_SHARE=0 GRADIO_SERVER_NAME=0.0.0.0 GRADIO_SERVER_PORT=7860 GRADIO_ANALYTICS_ENABLED=0 DISABLE_TELEMETRY=1 DO_NOT_TRACK=1 python app_vc_v2.py --cfm-checkpoint-path runs/Satine-V2/CFM_epoch_00000_step_00600.pth

Resultó el modelo V1 con la interfaz de conversión de voz de canto ui app_svc.py realiza lo mejor.

fuente