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 1
Assim, 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.py
adicione uma nova linha depois from multiprocessing import cpu_count
com is_half = False
FIX2: Editar GPT_SoVITS/s2_train.py
adicionar 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 WebUI
isso 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
ebatch_size
precisa ser reduzido de acordo com os núcleos da CPU e VRAM. - Para a primeira corrida, eu defini
max_steps: 10000
eval_check_interval: 1000
ter 5 modelos que tenham etapas mais baixas com alguma diversidade. - Coisas como
lr
Assim,weight_decay
enum_warmup_steps
pode ser mais ajustado acumulado neste artigo. Minha configuração élr: 1e-5
Assim,weight_decay: 1e-6
Assim,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 acessolocalhost: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
emfish_speech/configs/text2semantic_finetune.yaml
eresult
+= (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.py
preencha 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.