Início Tecnologia Como eu construí um pipeline de clonagem de voz de audiolivro DIY...

Como eu construí um pipeline de clonagem de voz de audiolivro DIY usando-as-devidas GPT e falsificação de peixes

11
0

 

Prefácio

Meu último artigo sobre clonagem de voz é há mais de um ano, e aqui estamos novamente para adotar alguns últimos avanços. Referindo-se a alguma fonte chinesa, como este blog e este vídeo, eu estava tentando adotar novas ferramentas para o meu serviço de livros de áudio, como Cosyvoice, F5-TTS, GPT-Sovits e Fish-fala.

Mas antes de começarmos, recomendo:

Instale o Miniconda para a sanidade de dependência

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

Configurar o ambiente pytorch conforme necessário e confirmar com python -m torch.utils.collect_env

Instalar nvtop se preferir por sudo apt install nvtop

GPT-Sovits

Este projeto é feito pelo mesmo grupo de pessoas da SO-VITS-SVC. A qualidade do modelo melhorou bastante de V2 para V4. Embora quando fizesse

TTS de texto longo, erros são inevitáveis, é bom o suficiente para o meu caso de uso.

No momento em que escrevem este artílico, eles lançaram uma nova versão 20250606v2pro o que pode ter algumas diferenças, pois eu estava usando a versão 20250422v4.

Porém, você sempre pode usar o “pacote do Windows”, que embalava todos os modelos e funciona em servidores Linux, apesar de seus

Nome, então isso se destina a fornecer uma experiência mais fácil de usar “com um clique”.

Instale no Linux

git clone  && cd GPT-SoVITS
conda create -n GPTSoVits python=3.10
conda activate GPTSoVits
#auto install script
bash install.sh --source HF --download-uvr5
#(optional) manual install
pip install -r extra-req.txt --no-deps
pip install -r requirements.txt

Instale o FFMPEG e outros DEPS

sudo apt install ffmpeg
sudo apt install libsox-dev

#(optional for troubleshooting)
conda install -c conda-forge 'ffmpeg<7'
pip install -U gradio
python -m nltk.downloader averaged_perceptron_tagger_eng

(Opcional) Download de modelos ASR pré -traidos para chinês

git lfs install
cd tools/asr/models/
git clone  tools/asr/models/speech_fsmn_vad_zh-cn-16k-common-pytorch
git clone  tools/asr/models/punc_ct-transformer_zh-cn-common-vocab272727-pytorch
git clone  tools/asr/models/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch

Depois de tudo, corra GRADIO_SHARE=0 GRADIO_ANALYTICS_ENABLED=0 DISABLE_TELEMETRY=1 DO_NOT_TRACK=1 python -m webui.py Para iniciar o servidor e depois acessar via http://ip:9874/

0-Fetch DataSet

Preparação para gravação-vocal

Usei o Audacity em vez do UVR5 porque a gravação é limpa e clara.

Use o slicer de áudio embutido da Webui para cortar a nova gravação.wav e coloque gravações antigas (se houver) todos juntos em output/slicer_opt

Use a ferramenta ASR em lote embutida com sussurro mais rápido, pois estou fazendo um modelo multilíngue desta vez.

Essas questões estão relacionadas exclusivamente com a arquitetura antiga da GPU. Não se preocupe com os novos usuários de GPU (30×0/40×0).

Solução de problemas 1 RuntimeError: parallel_for failed: cudaErrorNoKernelImageForDevice: no kernel image is available for execution on the device.

pip uninstall -y ctranslate2
pip install ctranslate2==3.24.0

Solução de problemas 2 'iwrk': array([], dfitpack_int), 'u': array([], float),

pip uninstall numpy scipy
pip install numba==0.60.0 numpy==1.26.4 scipy

Após o término da transcrição, use a ferramenta de rotulagem embutida (subfixo) para remover amostras ruins. Se a página da web não aparecer, use ip:9871 manualmente. Escolha áudio e exclua áudio, salve o arquivo quando terminar.

1-GPT-SOVITS-TTS

Formatação 1A-DataSet

Preencha os campos vazios e clique Set One-Click Formatting:

#Text labelling file
/home/username/GPT-SoVITS/output/asr_opt/slicer_opt.list

#Audio dataset folder
output/slicer_opt
Treinamento ajustado por 1B-FiN

1BA-SOVITS TREINAMENTO

Usar batch size no 1Assim, total epoch no 5 e save_every_epoch no 1.

Treinamento 1BB-GPT

Para esta parte, meu batch size é 6 com DPO enabled. As épocas totais de transing devem estar em torno de 5-15, ajustar a frequência de economia com base nas necessidades.

Solução de problemas para GPUs antigas

Erro: cuFFT doesn't support signals of half type with compute

capability less than SM_53, but the device containing input half tensor

only has SM_52.

FIX1: Eidt webui.pyadicione uma nova linha depois from multiprocessing import cpu_count com is_half = False

FIX2: Editar GPT_SoVITS/s2_train.pyadicionar hps.train.fp16_run = False no começo (entre torch.backends.cudnn.benchmark = False)

Inferência de 1C

clique refreshing model paths e selecione Modelo em ambas as listas

Verificar Enable Parallel Inference Version então open TTS Inference WebUIisso precisa de um tempo para carregar, acesse manualmente ip:9872 se necessário.

Solução de problemas para ValueError: Due to a serious vulnerability issue in torch.load consertar por pip install transformers==4.43

Configurações de inferência:

  • e3.ckpt
  • E15.PTH
  • Áudio de referência primária com texto e múltiplo áudio de referência
  • Fatia por cada ponta
  • top_k 5
  • top_p 1
  • temperatura 0,9
  • Pena de repetição 2
  • Speed_Factor 1.3

Mantenha todo o resto padrão.

Para encontrar o melhor peso GPT, parâmetros e sementes aleatórias, primeiro inferindo em um grande bloco de texto e capta algumas frases problemáticas para a próxima inferência. Em seguida, ajuste o peso e os parâmetros do GPT para fazer o problema desaparecer enquanto estiver em um número de semente fixo. Uma vez o melhor

São encontrados peso e parâmetros GPT, corrija -os e brinque com o número de sementes de diferença para refinar o resultado final. Tome nota nos parâmetros quando

A inferência fica perfeita para uso futuro.

Fala de peixe

A fala de peixes é contribuída pelas mesmas pessoas do Bert-Vits2 que eu usei por um longo tempo.

Seguindo seus documentos oficiais para instalar a versão 1.4 (infelizmente, a v1.5 tem um problema de qualidade de som durante a Finetuning)

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

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

pip3 install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1

apt install libsox-dev ffmpeg 

apt install build-essential \
    cmake \
    libasound-dev \
    portaudio19-dev \
    libportaudio2 \
    libportaudiocpp0

pip3 install -e .

Baixar modelos necessários

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

Prepare o conjunto de dados

mkdir data
cp -r /home/username/GPT-SoVITS/output/slicer_opt data/
python tools/whisper_asr.py --audio-dir data/slicer_opt --save-dir data/slicer_opt --compute-type float32

python tools/vqgan/extract_vq.py data \
    --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 tools/llama/build_dataset.py \
    --input "data" \
    --output "data/protos" \
    --text-extension .lab \
    --num-workers 16

Editar parâmetros por nano fish_speech/configs/text2semantic_finetune.yaml e comece a treinar

python fish_speech/train.py --config-name text2semantic_finetune \
    project=$project \
    [email protected]_config=r_8_alpha_16

Observação:

  • Os números padrão são muito altos para minha configuração, então ambos num_workers e batch_size precisa ser reduzido de acordo com os núcleos da CPU e VRAM.
  • Para a primeira corrida, eu defini max_steps: 10000 e val_check_interval: 1000 ter 5 modelos que tenham etapas mais baixas com alguma diversidade.
  • Coisas como lrAssim, weight_decay e num_warmup_steps pode ser mais ajustado acumulado neste artigo. Minha configuração é lr: 1e-5Assim, weight_decay: 1e-6Assim, num_warmup_steps: 500.
  • Para verificar as métricas de treinamento, como a curva de perda, execute tensorboard --logdir fish-speech/results/tensorboard/version_xx/ e acesso localhost:6006 via navegador. Determine o excesso de ajuste com o gráfico e o atualmente ouça o resultado da inferência para cada ponto de verificação.
  • No começo, descobri que o excesso de ajustes começa em torno de 5000 etapas. Em seguida, um segundo treinamento para 5000 etapas e encontre o melhor resultado é step_000004000.ckpt.
  • O treinamento requer uma GPU mais recente com o BF16 e nenhuma solução alternativa até agora.
  • Ao treinar um modelo para inferir em uma GPU mais antiga, use precision: 32-true em fish_speech/configs/text2semantic_finetune.yaml e result
  • += (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) em/home/username/miniconda3/envs/fish-speech/lib/python3.10/site-packages/loralib/layers.py.

O treinamento levaria muitas horas na GPU fraca. Depois de terminar, converta os pesos da Lora

python tools/llama/merge_lora.py \
    --lora-config r_8_alpha_16 \
    --base-weight checkpoints/fish-speech-1.4 \
    --lora-weight results/$project/checkpoints/step_000005000.ckpt \
    --output checkpoints/fish-speech-1.4-yth-lora/

Gerar tokens rápidos e semânticos

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

Solução de problemas para a antiga 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 install ctranslate2==3.24.0

Solução de problemas para a antiga GPU 2 ImportError: cannot import name 'is_callable_allowed' from partially initialized module 'torch._dynamo.trace_rules'

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

Torne -o acessível a partir da LAN nano tools/run_webui.py

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

Mude o --llama-checkpoint-path ao recém -treinado Lora e iniciar o webui (adicionado --half Para minha antiga GPU, evite o erro 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 tools.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 inferir

  • Ativar áudio de referência
  • Verifique a normalização do texto
  • Prompt interativo lenth 200
  • Top-P 0,8
  • Temperatura 0,7
  • Pena de repetição 1.5
  • Defina a semente

Observação:

  • Número mais alto para compensar o modelo excessivo, número mais baixo para o modelo subjacido.
  • Certos espaço de pontuação ou guia podem desencadear a geração de ruído. Texto
  • normalização supõe abordar esse problema, mas às vezes eu ainda preciso
  • Para encontrar e substituir.

No entanto, um bug Negative code found Ocorre bastante frequente ao inferir sem solução até agora. Desistir.

Cosyvoice

O COSYVOICE é um dos kits de ferramentas Funudiollm, que se desenvolveram pela mesma equipe do Qwen do Alibaba que eu uso muito.

Instalar

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

Baixe modelos pré -tenhados

git lfs install
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 com

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

Solucionar problemas “glibcxx_3.4.29 ‘não encontrado” com isso

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

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

Ele acaba funcionando bem, mas não tão bom quanto o GPT-Sovits. Espero que a versão 3.0 possa bombear.

Conversão de voz

Tanto o RVC quanto o SEED-VC destinam-se a substituir minha boa e velha instância SO-VITS-SVC.

Conversão de voz baseada em recuperação

Instalar

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

Correr com python infer-web.pypreencha a seguir, clique em Botões passo a passo com configurações padrão:

Enter the experiment name:/path/to/raw/

Solução de problemas “Enabled = hps.Train.fp16_run”

Semente-vc

Instalar

git clone  && cd Retrieval-based-Voice-Conversion-WebUI
conda create -n seedvc -y python=3.10
conda activate seedvc
pip install -r requirements.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

Configurações

#V2
Diffusion Steps: 100
Length Adjust: 1
Intelligibility CFG Rate: 0
Similarity CFG Rate: 1
Top-p: 1
Temperature: 1
Repetition Penalty: 2
convert style/emotion/accent: check

#V1
Diffusion Steps: 100
Length Adjust: 1
Inference CFG Rate: 1
Use F0 conditioned model: check
Auto F0 adjust: check
Pitch shift: 0

Treinamento

python train.py --config /home/username/seed-vc/configs/presets/config_dit_mel_seed_uvit_whisper_base_f0_44k.yml --dataset-dir /home/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

accelerate launch train_v2.py --dataset-dir /home/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 pontos de verificação

#Voice Conversion Web 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 Web 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 model Web 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

Aconteceu o modelo V1 com a interface de usuário de conversão de voz cantada app_svc.py executa o melhor.

fonte