Índice
No post anterior , experimentei um pouco do TTS Generation WebUI e achei interessante. Então, decidi treinar um modelo utilizável com minha própria voz.
Este projeto de clonagem de voz explora SVC para mudança de voz e VITS para conversão de texto em fala. Não existe uma ferramenta que faça todas as tarefas.
Testei várias ferramentas para este projeto. Muitos dos bons guias, como este , este e este , estão em chinês. Então, pensei que seria útil postar minhas anotações em inglês.
Embora so-vits-svc esteja arquivado há alguns meses, provavelmente devido à opressão, ainda é a ferramenta para obter o melhor resultado.
Outras ferramentas relacionadas, como so-vits-svc-fork , so-vits-svc-5.0 , DDSP-SVC e RVC fornecem otimização mais rápida/litro, mais recursos ou interfaces melhores.
Mas com tempo e recursos suficientes, nenhuma dessas alternativas pode competir com o resultado superior gerado pelo so-vits-svc original.
Para o TTS, uma nova ferramenta chamada Bert-VITS2 funciona de maneira fantástica e já amadureceu com seu lançamento final no mês passado. Possui alguns casos de uso muito diferentes, por exemplo, criação de conteúdo de áudio.
Os arquivos de áudio do conjunto de dados devem estar no formato WAV, 44100 Hz, 16 bits, mono, idealmente de 1 a 2 horas.
Ultimate Vocal Remover é a ferramenta mais fácil para este trabalho. Existe um tópico que explica tudo detalhadamente.
Modelo: VR - UVR (4_HP-Vocal-UVR)
Configurações: 512 - 10 - GPU
Saída instrumental e vocal impuro
Modelo: VR - UVR (5_HP-Karaokê-UVR)
Configurações: 512 - 10 - GPU
Saída de vocal de fundo e vocal principal impuro
Modelo: VR - UVR-DeEcho-DeReverb e UVR-DeNoise
Configurações: 512 - 10 - GPU - Nenhum outro somente
Saída vocal principal limpo
É melhor gravar em uma sala tratada com microfone condensador; caso contrário, use um microfone direcional ou dinâmico para reduzir o ruído.
A primeira vez que me interessei pela música foi no ensino médio, com o Sennheiser MX500 azul e o Koss Porta Pro. Ainda me lembro da primeira vez que gravei uma música em um Sony VAIO com Cool Edit Pro.
Hoje em dia, ainda resisto a gastar muito dinheiro em hardware de áudio como amador, porque é literalmente um buraco negro sugador de dinheiro.
No entanto, aprecio muito a fiabilidade desses equipamentos de produção baratos.
A parte principal da minha configuração é um Behringer UCA202 e é perfeito para meus casos de uso. Comprei por US $ 10 durante uma queda de preço.
É a chamada “Interface de Áudio”, mas basicamente apenas uma placa de som com múltiplas portas. Usei cabos RCA para TRS de 3,5 mm para meus fones de ouvido, um K240s semiaberto para saída regular e um HD669/MDR7506 fechado para saída de monitor.
Todos os três fones de ouvido mencionados custam menos de US$ 100 pelo preço normal. E existem clones de Samson, Tascam, Knox Gear e outros por menos de US$ 50.
Para o dispositivo de entrada, estou usando um microfone dinâmico para evitar ruídos ambientais. É uma cópia SM58 (Pyle) + um gravador Tascam DR-05 (como amplificador). Outros clones como SL84c ou wm58 também fariam isso.
Eu uso um cabo XLR para TRS de 3,5 mm para conectar o microfone à entrada MIC/Externa do gravador e, em seguida, uso um cabo AUX para conectar entre a saída de linha do gravador e a entrada do UCA202.
Não é recomendado comprar uma “interface de áudio” e um amplificador dedicado para replicar minha configuração. Uma placa de som USB c-media de US$ 10 deve ser boa o suficiente. O modelo Syba que possuo é capaz de “pré-amplificar” microfones dinâmicos diretamente e até mesmo alguns microfones com alimentação fantasma de baixo custo.
A configuração pode ser extremamente barata (US$ 40~60), mas com UCA202 e DR-05, o som é muito mais limpo. E eu realmente gosto dos controles físicos, versatilidade e portabilidade do meu velho e bom gravador digital.
Embora quando eu era pago como designer, fiquei muito feliz com o Audition. Mas para uso pessoal em um projeto divertido, o Audacity é a maneira de evitar o mal caótico da Adobe.
Use audio-slicer ou audio-slicer (gui) para cortar o arquivo de áudio em pequenos pedaços para uso posterior.
A configuração padrão funciona muito bem.
Remova os muito curtos e corte novamente os que ainda duram mais de 10 segundos.
No caso de um conjunto de dados grande, remova todos os que tenham menos de 4 segundos. No caso de um conjunto de dados pequeno, remova-os apenas em menos de 2 segundos.
Se necessário, realize uma inspeção manual para cada arquivo.
Use o Audacity novamente com Loudness Normalization ; 0db deve fazer isso.
O ambiente virtual é essencial para executar várias ferramentas Python dentro de um sistema. Eu costumava usar VMs e Docker, mas agora descobri que o anaconda é muito mais rápido e prático que os outros.
Crie um novo ambiente para so-vits-svc e ative-o.
conda create -n so-vits-svc python=3.8 conda activate so-vits-svc
Em seguida, instale os 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
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
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
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
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
Coloque todos os arquivos audio.wav preparados em 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
O arquivo está localizado em configs/config.json
log interval
: a frequência de impressão eval interval
do log: a frequência de salvamento de pontos de verificação epochs
: total de etapas keep ckpts
: número de pontos de verificação salvos, 0 para ilimitado. half_type
: fp32 No meu caso, batch_size
: quanto menor, mais rápido (mais áspero), quanto maior, mais lento (melhor).
Tamanho de lote recomendado por VRAM: 4 = 6G;6 = 8G;10 = 12G;14 = 16G;20 = 24G
Mantenha o padrão para configs/diffusion.yaml
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
Nas etapas de treinamento:
Use train.py
para treinar o modelo principal; normalmente, 20k-30k seriam utilizáveis, e 50k ou mais seriam bons o suficiente. Isso pode levar alguns dias dependendo da velocidade da GPU.
Sinta-se à vontade para interrompê-lo com ctrl+c
e o treinamento continuará executando novamente python train.py -c configs/config.json -m 44k
a qualquer momento.
Use train_diff.py
para treinar o modelo de difusão; as etapas de treinamento são recomendadas em 1/3 do modelo principal.
Esteja ciente do excesso de treinamento. Use tensorboard --logdir=./logs/44k
para monitorar os gráficos e ver se eles ficam planos.
Altere a learning rate
de 0,0001 para 0,00005, se necessário.
Quando terminar, compartilhe/transporte esses arquivos para inferência.
config.json
difusão.yaml
É hora de experimentar o modelo treinado. Eu preferiria o Webui pela conveniência de ajustar os parâmetros.
Mas antes de iniciá-lo, edite as seguintes linhas em webUI.py
para acesso LAN:
os.system("start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860)
Execute python webUI.py
; em seguida, acesse seu ipaddress:7860
em um navegador da web.
O webui não tem localização em inglês, mas a Tradução Imersiva seria útil.
A maioria dos parâmetros funcionaria bem com o valor padrão. Consulte this e this para fazer alterações.
Faça upload destes 5 arquivos:
main model.pt
e seu config.json
diffusion model.pt
e seu diffusion.yaml
Modelo de cluster kmeans_10000.pt
para falar ou recuperação de recursos feature_and_index.pkl
para cantar.
F0 predictor
serve apenas para falar, não para cantar. Recomende RMVPE
ao usar.
Pitch change
é útil ao cantar uma música feminina usando um modelo com voz masculina ou vice-versa.
Clustering model/feature retrieval mixing ratio
é a forma de controlar o tom. Use 0.1
para obter a fala mais clara e use 0.9
para obter o tom mais próximo do modelo.
shallow diffusion steps
devem ser definidas em torno de 50
, o que melhora o resultado em 30-100
etapas.
Este procedimento é opcional. Apenas para a produção de uma música melhor.
Não entrarei em detalhes sobre isso, pois o software de edição de áudio, ou o chamado DAW (estação de trabalho de áudio digital), que estou usando não é gratuito. Não tenho intenção de defender software proprietário, embora toda a indústria tenha acesso pago e código fechado.
O Audacity oferece suporte a multitrack, efeitos e muito mais. Ele também carrega alguns plug-ins VST avançados.
Não é difícil encontrar tutoriais sobre como masterizar músicas com o Audacity.
Normalmente, o processo de masterização deve ser mixagem/balanceamento, equalização/compressão, reverberação e imagem. Quanto mais avançada for a ferramenta, mais fácil será o processo.
Definitivamente gastarei mais tempo adotando o Audacity para meu processo de masterização no futuro e recomendo a todos que façam isso.
Este é um fork so-vits-svc com suporte em tempo real e os modelos são compatíveis. Mais fácil de usar, mas não suporta o modelo Diffusion. Para mudança de voz dedicada em tempo real, é recomendado um trocador de voz .
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
Coloque os arquivos .wav do conjunto de dados em so-vits-svc-fork/dataset_raw
svc pre-resample svc pre-config
Edite um batch_size
em configs/44k/config.json
. Este garfo é um tamanho maior que o original.
svc pre-hubert svc train -t svc train-cluster
Use GUI com svcg
. Isso requer um ambiente de área de trabalho local.
Ou use CLI com svc vc
para tempo real e svc infer -m "logs/44k/xxxxx.pth" -c "configs/config.json" raw/xxx.wav
para geração.
O DDSP-SVC requer menos recursos de hardware e é executado mais rapidamente que o so-vits-svc. Ele suporta modelos em tempo real e de difusão (Diff-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 a seção Inicialização para os dois arquivos:
pretrain/rmvpe/model.pt pretrain/contentvec/checkpoint_best_legacy_500.pt
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
conda activate DDSP-SVC python train.py -c configs/combsub.yaml python train_diff.py -c configs/diffusion-new.yaml tensorboard --logdir=exp
É recomendado usar main_diff.py
, pois inclui DDSP e modelo de difusão.
python main_diff.py -i "input.wav" -diff "model_xxxxxx.pt" -o "output.wav"
GUI em tempo real para clonagem de voz:
python gui_diff.py
Esta é uma ferramenta TTS completamente diferente de tudo acima. Com ele, já criei vários audiolivros com minha voz para meus pais, e eles gostaram muito.
Em vez de usar o original , usei o fork da v3u para uma configuração mais fácil.
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
Baixe modelos pré-treinados (inclui chinês, 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
Crie uma pasta de modelo de personagem mkdir -p Data/xxx/models/
Baixe modelos básicos:
!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 train_ms.py
substituindo todos bfloat16
por float16
Edite webui.py
para acesso LAN:
webbrowser.open(f"start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860)
Edite Data/xxx/config.json
para batch_size
e spk2id
Fluxo de trabalho semelhante ao da seção anterior .
Remova o ruído e o silêncio, a normalização e, em seguida, coloque o arquivo WAV não fatiado em Data/xxx/raw
.
Edite config.yml
para dataset_path
, num_workers
e keep_ckpts
.
Execute python3 audio_slicer.py
para fatiar o arquivo WAV.
Limpe o conjunto de dados ( Data/xxx/raw
) removendo arquivos pequenos com menos de 2 segundos.
Instale o sussurro pip install git+https://github.com/openai/whisper.git
Para desativar a detecção automática de idioma, configure-a apenas para inglês e use um modelo large
; edite short_audio_transcribe.py
conforme abaixo:
# 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)
Execute python3 short_audio_transcribe.py
para iniciar a transcrição.
Faça uma nova amostra do conjunto de dados fatiado: python3 resample.py --sr 44100 --in_dir ./Data/zizek/raw/ --out_dir ./Data/zizek/wavs/
Transcrição de pré-processamento: python3 preprocess_text.py --transcription-path ./Data/zizek/esd.list
Gere a configuração do recurso BERT: python3 bert_gen.py --config-path ./Data/zizek/configs/config.json
Execute python3 train_ms.py
para iniciar o treinamento
Edite config.yml
para o caminho do modelo:
model: "models/G_20900.pth"
Execute python3 webui.py
para iniciar o webui para inferência
vits-simple-api é uma interface web para usar modelos treinados. Eu uso isso principalmente pelo suporte a textos longos que o projeto original não possui.
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 os arquivos de modelo pré-treinados de Bert-vits2-V2.3/
para vits-simple-api/bert_vits2/
Copie Bert-vits2-V2.3/Data/xxx/models/G_xxxxx.pth
e Bert-vits2-V2.3/Data/xxx/config.json
para vits-simple-api/Model/xxx/
Edite config.py
para MODEL_LIST
e Default parameter
conforme preferido
Edite Model/xxx/config.json
conforme abaixo:
"data": { "training_files": "Data/train.list", "validation_files": "Data/val.list", "version": "2.3"
Verifique/edite model_list
em config.yml
como [xxx/G_xxxxx.pth, xxx/config.json]
Execute python app.py
SDP Ratio
para tom, Noise
para aleatoriedade, Noise_W
para pronúncia e Length
para velocidade. emotion
e style
são autoexplicativos
Em seu repositório Hugging Face , há muitos modelos VITS compartilhados por outras pessoas. Você pode experimentá-lo primeiro e depois baixar os modelos desejados em Arquivos .
O modelo Genshin é amplamente utilizado em algumas comunidades de criação de conteúdo devido à sua alta qualidade. Ele contém centenas de caracteres, embora apenas chinês e japonês sejam suportados.
Em outro repositório , existem muitos modelos Bert-vits2 feitos de streamers e VTubers chineses populares.
Já existem projetos fazendo AI Vtubers como este e este . Estou ansioso para ver como essa tecnologia pode mudar a indústria em um futuro próximo.
https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/